diff --git a/src/grammar/flinksql/FlinkSqlLexer.g4 b/src/grammar/flinksql/FlinkSqlLexer.g4 index cde0ed3..320e5b5 100644 --- a/src/grammar/flinksql/FlinkSqlLexer.g4 +++ b/src/grammar/flinksql/FlinkSqlLexer.g4 @@ -9,320 +9,379 @@ LINE_COMMENT: ( | '--' ('\r'? '\n' | EOF) ) -> channel(HIDDEN); +// List of keywords that are not reserved. +// Please keep the keyword in alphabetical order if new keyword is added. +// Please add it to the nonReservedKeywords rule if new keyword is added. +// Reference link https://github.com/apache/flink/blob/release-1.16/flink-table/flink-sql-parser/src/main/codegen/data/Parser.tdd -// Common Keywords +KW_ADD: 'ADD'; +KW_ADMIN: 'ADMIN'; +KW_AFTER: 'AFTER'; +KW_ANALYZE: 'ANALYZE'; +KW_ASC: 'ASC'; +KW_BEFORE: 'BEFORE'; +KW_BYTES: 'BYTES'; +KW_CASCADE: 'CASCADE'; +KW_CATALOG: 'CATALOG'; +KW_CATALOGS: 'CATALOGS'; +KW_CENTURY: 'CENTURY'; +KW_CHAIN: 'CHAIN'; +KW_CHANGELOG_MODE: 'CHANGELOG_MODE'; +KW_CHARACTERS: 'CHARACTERS'; +KW_COMMENT: 'COMMENT'; +KW_COMPACT: 'COMPACT'; +KW_COLUMNS: 'COLUMNS'; +KW_CONSTRAINTS: 'CONSTRAINTS'; +KW_CONSTRUCTOR: 'CONSTRUCTOR'; +KW_CUMULATE: 'CUMULATE'; +KW_DATA: 'DATA'; +KW_DATABASE: 'DATABASE'; +KW_DATABASES: 'DATABASES'; +KW_DAYS: 'DAYS'; +KW_DECADE: 'DECADE'; +KW_DEFINED: 'DEFINED'; +KW_DESC: 'DESC'; +KW_DESCRIPTOR: 'DESCRIPTOR'; +KW_DIV: 'DIV'; +KW_ENCODING: 'ENCODING'; +KW_ENFORCED: 'ENFORCED'; +KW_ENGINE: 'ENGINE'; +KW_ERROR: 'ERROR'; +KW_ESTIMATED_COST: 'ESTIMATED_COST'; +KW_EXCEPTION: 'EXCEPTION'; +KW_EXCLUDE: 'EXCLUDE'; +KW_EXCLUDING: 'EXCLUDING'; +KW_EXTENDED: 'EXTENDED'; +KW_FILE: 'FILE'; +KW_FINAL: 'FINAL'; +KW_FIRST: 'FIRST'; +KW_FOLLOWING: 'FOLLOWING'; +KW_FORMAT: 'FORMAT'; +KW_FORTRAN: 'FORTRAN'; +KW_FOUND: 'FOUND'; +KW_FRAC_SECOND: 'FRAC_SECOND'; +KW_FUNCTIONS: 'FUNCTIONS'; +KW_GENERAL: 'GENERAL'; +KW_GENERATED: 'GENERATED'; +KW_GO: 'GO'; +KW_GOTO: 'GOTO'; +KW_GRANTED: 'GRANTED'; +KW_HOP: 'HOP'; +KW_HOURS: 'HOURS'; +KW_IF: 'IF'; +KW_IGNORE: 'IGNORE'; +KW_INCREMENT: 'INCREMENT'; +KW_INPUT: 'INPUT'; +KW_INVOKER: 'INVOKER'; +KW_JAR: 'JAR'; +KW_JARS: 'JARS'; +KW_JAVA: 'JAVA'; +KW_JSON: 'JSON'; +KW_JSON_EXECUTION_PLAN: 'JSON_EXECUTION_PLAN'; +KW_KEY: 'KEY'; +KW_KEY_MEMBER: 'KEY_MEMBER'; +KW_KEY_TYPE: 'KEY_TYPE'; +KW_LABEL: 'LABEL'; +KW_LAST: 'LAST'; +KW_LENGTH: 'LENGTH'; +KW_LEVEL: 'LEVEL'; +KW_LOAD: 'LOAD'; +KW_MAP: 'MAP'; +KW_MICROSECOND: 'MICROSECOND'; +KW_MILLENNIUM: 'MILLENNIUM'; +KW_MILLISECOND: 'MILLISECOND'; +KW_MINUTES: 'MINUTES'; +KW_MINVALUE: 'MINVALUE'; +KW_MODIFY: 'MODIFY'; +KW_MODULES: 'MODULES'; +KW_MONTHS: 'MONTHS'; +KW_NANOSECOND: 'NANOSECOND'; +KW_NULLS: 'NULLS'; +KW_NUMBER: 'NUMBER'; +KW_OPTION: 'OPTION'; +KW_OPTIONS: 'OPTIONS'; +KW_ORDERING: 'ORDERING'; +KW_OUTPUT: 'OUTPUT'; +KW_OVERWRITE: 'OVERWRITE'; +KW_OVERWRITING: 'OVERWRITING'; +KW_PARTITIONED: 'PARTITIONED'; +KW_PARTITIONS: 'PARTITIONS'; +KW_PASSING: 'PASSING'; +KW_PAST: 'PAST'; +KW_PATH: 'PATH'; +KW_PLACING: 'PLACING'; +KW_PLAN: 'PLAN'; +KW_PRECEDING: 'PRECEDING'; +KW_PRESERVE: 'PRESERVE'; +KW_PRIOR: 'PRIOR'; +KW_PRIVILEGES: 'PRIVILEGES'; +KW_PUBLIC: 'PUBLIC'; +KW_PYTHON: 'PYTHON'; +KW_PYTHON_FILES: 'PYTHON_FILES'; +KW_PYTHON_REQUIREMENTS: 'PYTHON_REQUIREMENTS'; +KW_PYTHON_DEPENDENCIES: 'PYTHON_DEPENDENCIES'; +KW_PYTHON_JAR: 'PYTHON_JAR'; +KW_PYTHON_ARCHIVES: 'PYTHON_ARCHIVES'; +KW_PYTHON_PARAMETER: 'PYTHON_PARAMETER'; +KW_QUARTER: 'QUARTER'; +KW_RAW: 'RAW'; +KW_READ: 'READ'; +KW_RELATIVE: 'RELATIVE'; +KW_REMOVE: 'REMOVE'; +KW_RENAME: 'RENAME'; +KW_REPLACE: 'REPLACE'; +KW_RESPECT: 'RESPECT'; +KW_RESTART: 'RESTART'; +KW_RESTRICT: 'RESTRICT'; +KW_ROLE: 'ROLE'; +KW_ROW_COUNT: 'ROW_COUNT'; +KW_SCALA: 'SCALA'; +KW_SCALAR: 'SCALAR'; +KW_SCALE: 'SCALE'; +KW_SCHEMA: 'SCHEMA'; +KW_SECONDS: 'SECONDS'; +KW_SECTION: 'SECTION'; +KW_SECURITY: 'SECURITY'; +KW_SELF: 'SELF'; +KW_SERVER: 'SERVER'; +KW_SERVER_NAME: 'SERVER_NAME'; +KW_SESSION: 'SESSION'; +KW_SETS: 'SETS'; +KW_SIMPLE: 'SIMPLE'; +KW_SIZE: 'SIZE'; +KW_SLIDE: 'SLIDE'; +KW_SOURCE: 'SOURCE'; +KW_SPACE: 'SPACE'; +KW_STATE: 'STATE'; +KW_STATEMENT: 'STATEMENT'; +KW_STEP: 'STEP'; +KW_STRING: 'STRING'; +KW_STRUCTURE: 'STRUCTURE'; +KW_STYLE: 'STYLE'; +KW_TABLES: 'TABLES'; +KW_TEMPORARY: 'TEMPORARY'; +KW_TIMECOL: 'TIMECOL'; +KW_TIMESTAMP_LTZ: 'TIMESTAMP_LTZ'; +KW_TIMESTAMPADD: 'TIMESTAMPADD'; +KW_TIMESTAMPDIFF: 'TIMESTAMPDIFF'; +KW_TRANSFORM: 'TRANSFORM'; +KW_TUMBLE: 'TUMBLE'; +KW_TYPE: 'TYPE'; +KW_UNDER: 'UNDER'; +KW_UNLOAD: 'UNLOAD'; +KW_USAGE: 'USAGE'; +KW_USE: 'USE'; +KW_UTF16: 'UTF16'; +KW_UTF32: 'UTF32'; +KW_UTF8: 'UTF8'; +KW_VERSION: 'VERSION'; +KW_VIEW: 'VIEW'; +KW_VIEWS: 'VIEWS'; +KW_VIRTUAL: 'VIRTUAL'; +KW_WATERMARK: 'WATERMARK'; +KW_WATERMARKS: 'WATERMARKS'; +KW_WEEK: 'WEEK'; +KW_WORK: 'WORK'; +KW_WRAPPER: 'WRAPPER'; +KW_YEARS: 'YEARS'; +KW_ZONE: 'ZONE'; -SELECT: 'SELECT'; -FROM: 'FROM'; -ADD: 'ADD'; -AS: 'AS'; -ALL: 'ALL'; -ANY: 'ANY'; -DISTINCT: 'DISTINCT'; -WHERE: 'WHERE'; -GROUP: 'GROUP'; -BY: 'BY'; -GROUPING: 'GROUPING'; -SETS: 'SETS'; -CUBE: 'CUBE'; -ROLLUP: 'ROLLUP'; -ORDER: 'ORDER'; -HAVING: 'HAVING'; -LIMIT: 'LIMIT'; -AT: 'AT'; -OR: 'OR'; -AND: 'AND'; -IN: 'IN'; -NOT: 'NOT'; -NO: 'NO'; -EXISTS: 'EXISTS'; -BETWEEN: 'BETWEEN'; -LIKE: 'LIKE'; -RLIKE: 'RLIKE'; -IS: 'IS'; -TRUE: 'TRUE'; -FALSE: 'FALSE'; -NULLS: 'NULLS'; -ASC: 'ASC'; -DESC: 'DESC'; -FOR: 'FOR'; -INTERVAL: 'INTERVAL'; -CASE: 'CASE'; -WHEN: 'WHEN'; -THEN: 'THEN'; -ELSE: 'ELSE'; -BEGIN: 'BEGIN'; -END: 'END'; -JOIN: 'JOIN'; -CROSS: 'CROSS'; -OUTER: 'OUTER'; -INNER: 'INNER'; -LEFT: 'LEFT'; -SEMI: 'SEMI'; -RIGHT: 'RIGHT'; -FULL: 'FULL'; -USER: 'USER'; -NATURAL: 'NATURAL'; -ON: 'ON'; -PIVOT: 'PIVOT'; -LATERAL: 'LATERAL'; -WINDOW: 'WINDOW'; -OVER: 'OVER'; -PARTITION: 'PARTITION'; -RANGE: 'RANGE'; -ROWS: 'ROWS'; -UNBOUNDED: 'UNBOUNDED'; -PRECEDING: 'PRECEDING'; -FOLLOWING: 'FOLLOWING'; -CURRENT: 'CURRENT'; -FIRST: 'FIRST'; -AFTER: 'AFTER'; -LAST: 'LAST'; -WITH: 'WITH'; -WITHOUT: 'WITHOUT'; -VALUES: 'VALUES'; -CREATE: 'CREATE'; -TABLE: 'TABLE'; -DIRECTORY: 'DIRECTORY'; -VIEW: 'VIEW'; -REPLACE: 'REPLACE'; -EXECUTE: 'EXECUTE'; -STATEMENT: 'STATEMENT'; -INSERT: 'INSERT'; -DELETE: 'DELETE'; -REMOVE: 'REMOVE'; -INTO: 'INTO'; -DESCRIBE: 'DESCRIBE'; -EXPLAIN: 'EXPLAIN'; -PLAN: 'PLAN'; -CHANGELOG_MODE: 'CHANGELOG_MODE'; -JSON_EXECUTION_PLAN: 'JSON_EXECUTION_PLAN'; -ESTIMATED_COST: 'ESTIMATED_COST'; -FORMAT: 'FORMAT'; -LOGICAL: 'LOGICAL'; -CODEGEN: 'CODEGEN'; -COST: 'COST'; -CAST: 'CAST'; -SHOW: 'SHOW'; -TABLES: 'TABLES'; -COLUMNS: 'COLUMNS'; -COLUMN: 'COLUMN'; -USE: 'USE'; -MODULE: 'MODULE'; -MODULES: 'MODULES'; -PARTITIONS: 'PARTITIONS'; -FUNCTIONS: 'FUNCTIONS'; -DROP: 'DROP'; -UNION: 'UNION'; -EXCEPT: 'EXCEPT'; -SETMINUS: 'SETMINUS'; -INTERSECT: 'INTERSECT'; -TO: 'TO'; -TABLESAMPLE: 'TABLESAMPLE'; -STRATIFY: 'STRATIFY'; -ALTER: 'ALTER'; -RENAME: 'RENAME'; -STRUCT: 'STRUCT'; -COMMENT: 'COMMENT'; -SET: 'SET'; -RESET: 'RESET'; -DATA: 'DATA'; -START: 'START'; -TRANSACTION: 'TRANSACTION'; -COMMIT: 'COMMIT'; -ROLLBACK: 'ROLLBACK'; -MACRO: 'MACRO'; -IGNORE: 'IGNORE'; -BOTH: 'BOTH'; -LEADING: 'LEADING'; -TRAILING: 'TRAILING'; -IF: 'IF'; -POSITION: 'POSITION'; -EXTRACT: 'EXTRACT'; -MINUS: 'MINUS'; -DIV: 'DIV'; -PERCENTLIT: 'PERCENTLIT'; -BUCKET: 'BUCKET'; -OUT: 'OUT'; -OF: 'OF'; -SORT: 'SORT'; -CLUSTER: 'CLUSTER'; -DISTRIBUTE: 'DISTRIBUTE'; -OVERWRITE: 'OVERWRITE'; -TRANSFORM: 'TRANSFORM'; -REDUCE: 'REDUCE'; -USING: 'USING'; -SERDE: 'SERDE'; -SERDEPROPERTIES: 'SERDEPROPERTIES'; -RECORDREADER: 'RECORDREADER'; -RECORDWRITER: 'RECORDWRITER'; -DELIMITED: 'DELIMITED'; -FIELDS: 'FIELDS'; -TERMINATED: 'TERMINATED'; -COLLECTION: 'COLLECTION'; -ITEMS: 'ITEMS'; -KEYS: 'KEYS'; -ESCAPED: 'ESCAPED'; -LINES: 'LINES'; -SEPARATED: 'SEPARATED'; -FUNCTION: 'FUNCTION'; -EXTENDED: 'EXTENDED'; -REFRESH: 'REFRESH'; -CLEAR: 'CLEAR'; -CACHE: 'CACHE'; -UNCACHE: 'UNCACHE'; -LAZY: 'LAZY'; -FORMATTED: 'FORMATTED'; -GLOBAL: 'GLOBAL'; -TEMPORARY: 'TEMPORARY'; -OPTIONS: 'OPTIONS'; -UNSET: 'UNSET'; -TBLPROPERTIES: 'TBLPROPERTIES'; -DBPROPERTIES: 'DBPROPERTIES'; -BUCKETS: 'BUCKETS'; -SKEWED: 'SKEWED'; -STORED: 'STORED'; -DIRECTORIES: 'DIRECTORIES'; -LOCATION: 'LOCATION'; -EXCHANGE: 'EXCHANGE'; -ARCHIVE: 'ARCHIVE'; -UNARCHIVE: 'UNARCHIVE'; -FILEFORMAT: 'FILEFORMAT'; -TOUCH: 'TOUCH'; -COMPACT: 'COMPACT'; -CONCATENATE: 'CONCATENATE'; -CHANGE: 'CHANGE'; -CASCADE: 'CASCADE'; -CONSTRAINT: 'CONSTRAINT'; -RESTRICT: 'RESTRICT'; -CLUSTERED: 'CLUSTERED'; -SORTED: 'SORTED'; -PURGE: 'PURGE'; -INPUTFORMAT: 'INPUTFORMAT'; -OUTPUTFORMAT: 'OUTPUTFORMAT'; -DATABASE: 'DATABASE'; -DATABASES: 'DATABASES'; -DFS: 'DFS'; -TRUNCATE: 'TRUNCATE'; -ANALYZE: 'ANALYZE'; -COMPUTE: 'COMPUTE'; -LIST: 'LIST'; -STATISTICS: 'STATISTICS'; -PARTITIONED: 'PARTITIONED'; -EXTERNAL: 'EXTERNAL'; -DEFINED: 'DEFINED'; -REVOKE: 'REVOKE'; -GRANT: 'GRANT'; -LOCK: 'LOCK'; -UNLOCK: 'UNLOCK'; -MSCK: 'MSCK'; -REPAIR: 'REPAIR'; -RECOVER: 'RECOVER'; -EXPORT: 'EXPORT'; -IMPORT: 'IMPORT'; -LOAD: 'LOAD'; -UNLOAD: 'UNLOAD'; -ROLE: 'ROLE'; -ROLES: 'ROLES'; -COMPACTIONS: 'COMPACTIONS'; -PRINCIPALS: 'PRINCIPALS'; -TRANSACTIONS: 'TRANSACTIONS'; -INDEX: 'INDEX'; -INDEXES: 'INDEXES'; -LOCKS: 'LOCKS'; -OPTION: 'OPTION'; -ANTI: 'ANTI'; -LOCAL: 'LOCAL'; -INPATH: 'INPATH'; -WATERMARK: 'WATERMARK'; -UNNEST: 'UNNEST'; -MATCH: 'MATCH'; -NEXT: 'NEXT'; -WITHIN: 'WITHIN'; -WS: 'WS'; -SYSTEM: 'SYSTEM'; -INCLUDING: 'INCLUDING'; -EXCLUDING: 'EXCLUDING'; -OVERWRITING: 'OVERWRITING'; -CONSTRAINTS: 'CONSTRAINTS'; -GENERATED: 'GENERATED'; -WATERMARKS: 'WATERMARKS'; -CATALOG: 'CATALOG'; -LANGUAGE: 'LANGUAGE'; -JAVA: 'JAVA'; -SCALA: 'SCALA'; -PYTHON: 'PYTHON'; -JAR: 'JAR'; -FILE: 'FILE'; -PYTHON_FILES: 'PYTHON_FILES'; -PYTHON_REQUIREMENTS: 'PYTHON_REQUIREMENTS'; -PYTHON_DEPENDENCIES: 'PYTHON_DEPENDENCIES'; -PYTHON_JAR: 'PYTHON_JAR'; -PYTHON_ARCHIVES: 'PYTHON_ARCHIVES'; -PYTHON_PARAMETER: 'PYTHON_PARAMETER'; -ENGINE: 'ENGINE'; -CATALOGS: 'CATALOGS'; -VIEWS: 'VIEWS'; -JARS: 'JARS'; -PRIMARY: 'PRIMARY'; -UNIQUE: 'UNIQUE'; -KEY: 'KEY'; -PERIOD: 'PERIOD'; -SYSTEM_TIME: 'SYSTEM_TIME'; -ENFORCED: 'ENFORCED'; -METADATA: 'METADATA'; -VIRTUAL: 'VIRTUAL'; -ZONE: 'ZONE'; -TUMBLE: 'TUMBLE'; -HOP: 'HOP'; -CUMULATE: 'CUMULATE'; -DESCRIPTOR: 'DESCRIPTOR'; -TIMECOL: 'TIMECOL'; -SIZE: 'SIZE'; -OFFSET: 'OFFSET'; -STEP: 'STEP'; -SLIDE: 'SLIDE'; -SESSION: 'SESSION'; -MATCH_RECOGNIZE: 'MATCH_RECOGNIZE'; -MEASURES: 'MEASURES'; -PATTERN: 'PATTERN'; -ONE: 'ONE'; -PER: 'PER'; -KW_SKIP: 'SKIP'; -PAST: 'PAST'; -DEFINE: 'DEFINE'; -// DATA TYPE Keywords - -STRING: 'STRING'; -ARRAY: 'ARRAY'; -MAP: 'MAP'; -CHAR: 'CHAR'; -VARCHAR: 'VARCHAR'; -BINARY: 'BINARY'; -VARBINARY: 'VARBINARY'; -BYTES: 'BYTES'; -DECIMAL: 'DECIMAL'; -DEC: 'DEC'; -NUMERIC: 'NUMERIC'; -TINYINT: 'TINYINT'; -SMALLINT: 'SMALLINT'; -INT: 'INT'; -INTEGER: 'INTEGER'; -BIGINT: 'BIGINT'; -FLOAT: 'FLOAT'; -DOUBLE: 'DOUBLE'; -DATE: 'DATE'; -TIME: 'TIME'; -TIMESTAMP: 'TIMESTAMP'; -TIMESTAMP_LTZ: 'TIMESTAMP_LTZ'; -MULTISET: 'MULTISET'; -BOOLEAN: 'BOOLEAN'; -RAW: 'RAW'; -ROW: 'ROW'; -NULL: 'NULL'; -DATETIME: 'DATETIME'; // 数栈自定义类型 +// Reserved Keywords +// Please keep the keyword in alphabetical order if new keyword is added. +// Please add it to the reservedKeywords rule if new keyword is added. +// Reference link https://calcite.apache.org/docs/reference.html +KW_ABS: 'ABS'; +KW_ALL: 'ALL'; +ALLOW: 'ALLOW'; +KW_ALTER : 'ALTER'; +KW_AND: 'AND'; +KW_ANY: 'ANY'; +KW_ARE: 'ARE'; +KW_ARRAY: 'ARRAY'; +KW_AS: 'AS'; +KW_AT: 'AT'; +KW_AVG: 'AVG'; +KW_BEGIN: 'BEGIN'; +KW_BETWEEN: 'BETWEEN'; +KW_BIGINT: 'BIGINT'; +KW_BINARY: 'BINARY'; +KW_BIT: 'BIT'; +KW_BLOB: 'BLOB'; +KW_BOOLEAN: 'BOOLEAN'; +KW_BOTH: 'BOTH'; +KW_BY: 'BY'; +KW_CALL: 'CALL'; +KW_CALLED: 'CALLED'; +KW_CASCADED: 'CASCADED'; +KW_CASE: 'CASE'; +KW_CAST: 'CAST'; +KW_CEIL: 'CEIL'; +KW_CHAR: 'CHAR'; +KW_CHARACTER: 'CHARACTER'; +KW_CHECK: 'CHECK'; +KW_CLOB: 'CLOB'; +KW_CLOSE: 'CLOSE'; +KW_COALESCE: 'COALESCE'; +KW_COLLATE: 'COLLATE'; +KW_COLLECT: 'COLLECT'; +KW_COLUMN: 'COLUMN'; +KW_COMMIT: 'COMMIT'; +KW_CONNECT: 'CONNECT'; +KW_CONSTRAINT: 'CONSTRAINT'; +KW_CONTAINS: 'CONTAINS'; +KW_CONVERT: 'CONVERT'; +KW_COUNT: 'COUNT'; +KW_CREATE: 'CREATE'; +KW_CROSS: 'CROSS'; +KW_CUBE: 'CUBE'; +KW_CURRENT: 'CURRENT'; +KW_CURSOR: 'CURSOR'; +KW_CYCLE: 'CYCLE'; +KW_DATE: 'DATE'; +KW_DATETIME: 'DATETIME'; +KW_DAY: 'DAY'; +KW_DEC: 'DEC'; +KW_DECIMAL: 'DECIMAL'; +KW_DECLARE: 'DECLARE'; +KW_DEFAULT: 'DEFAULT'; +KW_DEFINE: 'DEFINE'; +KW_DELETE: 'DELETE'; +KW_DESCRIBE: 'DESCRIBE'; +KW_DISTINCT: 'DISTINCT'; +KW_DOUBLE: 'DOUBLE'; +KW_DROP: 'DROP'; +KW_EACH: 'EACH'; +KW_ELSE: 'ELSE'; +KW_END: 'END'; +KW_EQUALS: 'EQUALS'; +KW_EXCEPT: 'EXCEPT'; +KW_EXECUTE: 'EXECUTE'; +KW_EXISTS: 'EXISTS'; +KW_EXPLAIN: 'EXPLAIN'; +KW_EXTERNAL: 'EXTERNAL'; +KW_EXTRACT: 'EXTRACT'; +KW_FALSE: 'FALSE'; +KW_FLOAT: 'FLOAT'; +KW_FOR: 'FOR'; +KW_FROM: 'FROM'; +KW_FULL: 'FULL'; +KW_FUNCTION: 'FUNCTION'; +KW_GLOBAL: 'GLOBAL'; +KW_GRANT: 'GRANT'; +KW_GROUP: 'GROUP'; +KW_GROUPING: 'GROUPING'; +KW_GROUPS: 'GROUPS'; +KW_HAVING: 'HAVING'; +KW_HOUR: 'HOUR'; +KW_IMPORT: 'IMPORT'; +KW_IN: 'IN'; +KW_INCLUDING: 'INCLUDING'; +KW_INNER: 'INNER'; +KW_INOUT: 'INOUT'; +KW_INSERT: 'INSERT'; +KW_INT: 'INT'; +KW_INTEGER: 'INTEGER'; +KW_INTERSECT: 'INTERSECT'; +KW_INTERVAL: 'INTERVAL'; +KW_INTO: 'INTO'; +KW_IS: 'IS'; +KW_JOIN: 'JOIN'; +KW_LAG: 'LAG'; +KW_LANGUAGE: 'LANGUAGE'; +KW_LATERAL: 'LATERAL'; +KW_LEADING: 'LEADING'; +KW_LEFT: 'LEFT'; +KW_LIKE: 'LIKE'; +KW_LIMIT: 'LIMIT'; +KW_LOCAL: 'LOCAL'; +KW_MATCH: 'MATCH'; +KW_MATCH_RECOGNIZE: 'MATCH_RECOGNIZE'; +KW_MEASURES: 'MEASURES'; +KW_MERGE: 'MERGE'; +KW_METADATA: 'METADATA'; +KW_MINUS: 'MINUS'; +KW_MINUTE: 'MINUTE'; +KW_MODIFIES: 'MODIFIES'; +KW_MODULE: 'MODULE'; +KW_MONTH: 'MONTH'; +KW_MULTISET: 'MULTISET'; +KW_NATURAL: 'NATURAL'; +KW_NEXT: 'NEXT'; +KW_NO: 'NO'; +KW_NONE: 'NONE'; +KW_NOT: 'NOT'; +KW_NULL: 'NULL'; +KW_NUMERIC: 'NUMERIC'; +KW_OF: 'OF'; +KW_OFFSET: 'OFFSET'; +KW_ON: 'ON'; +KW_ONE: 'ONE'; +KW_OR: 'OR'; +KW_ORDER: 'ORDER'; +KW_OUT: 'OUT'; +KW_OUTER: 'OUTER'; +KW_OVER: 'OVER'; +KW_OVERLAY: 'OVERLAY'; +KW_PARTITION: 'PARTITION'; +KW_PATTERN: 'PATTERN'; +KW_PER: 'PER'; +KW_PERCENT: 'PERCENT'; +KW_PERIOD: 'PERIOD'; +KW_POSITION: 'POSITION'; +KW_PRIMARY: 'PRIMARY'; +KW_RANGE: 'RANGE'; +KW_RANK: 'RANK'; +KW_RESET: 'RESET'; +KW_REVOKE: 'REVOKE'; +KW_RIGHT: 'RIGHT'; +KW_RLIKE: 'RLIKE'; +KW_ROLLBACK: 'ROLLBACK'; +KW_ROLLUP: 'ROLLUP'; +KW_ROW: 'ROW'; +KW_ROWS: 'ROWS'; +KW_SECOND: 'SECOND'; +KW_SELECT: 'SELECT'; +KW_SET: 'SET'; +KW_SHOW: 'SHOW'; +KW_SKIP: 'SKIP'; +KW_SMALLINT: 'SMALLINT'; +KW_START: 'START'; +KW_STATIC: 'STATIC'; +KW_SUBSTRING: 'SUBSTRING'; +KW_SUM: 'SUM'; +KW_SYSTEM: 'SYSTEM'; +KW_SYSTEM_TIME: 'SYSTEM_TIME'; +KW_SYSTEM_USER: 'SYSTEM_USER'; +KW_TABLE: 'TABLE'; +KW_TABLESAMPLE: 'TABLESAMPLE'; +KW_THEN: 'THEN'; +KW_TIME: 'TIME'; +KW_TIMESTAMP: 'TIMESTAMP'; +KW_TINYINT: 'TINYINT'; +KW_TO: 'TO'; +KW_TRUE: 'TRUE'; +KW_TRUNCATE: 'TRUNCATE'; +KW_UNION: 'UNION'; +KW_UNIQUE: 'UNIQUE'; +KW_UNKNOWN: 'UNKNOWN'; +KW_UNNEST: 'UNNEST'; +KW_UPPER: 'UPPER'; +KW_UPSERT: 'UPSERT'; +KW_USER: 'USER'; +KW_USING: 'USING'; +KW_VALUE: 'VALUE'; +KW_VALUES: 'VALUES'; +KW_VARBINARY: 'VARBINARY'; +KW_VARCHAR: 'VARCHAR'; +KW_WHEN: 'WHEN'; +KW_WHERE: 'WHERE'; +KW_WINDOW: 'WINDOW'; +KW_WITH: 'WITH'; +KW_WITHIN: 'WITHIN'; +KW_WITHOUT: 'WITHOUT'; +KW_YEAR: 'YEAR'; // Operators. Comparation @@ -366,7 +425,7 @@ DOUBLE_VERTICAL_SIGN: '||'; DOUBLE_HYPNEN_SIGN: '--'; SLASH_SIGN: '/'; QUESTION_MARK_SIGN: '?'; -DOT_ID: '.' ID_LITERAL_FRAG; +DOUBLE_RIGHT_ARROW: '=>'; STRING_LITERAL: DQUOTA_STRING | SQUOTA_STRING | BQUOTA_STRING; DIG_LITERAL: DEC_DIGIT+; REAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+ @@ -376,7 +435,6 @@ REAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+ BIT_STRING: BIT_STRING_L; ID_LITERAL: ID_LITERAL_FRAG; FILE_PATH: FILE_PATH_STRING; -DOUBLE_ARROW: '=>'; fragment FILE_PATH_STRING: ([/\\] (~([/\\ ]))*)+; fragment JAR_FILE_PARTTARN: '`' ( '\\'. | '``' | ~('`'|'\\'))* '`'; diff --git a/src/grammar/flinksql/FlinkSqlParser.g4 b/src/grammar/flinksql/FlinkSqlParser.g4 index 142e334..01ed32b 100644 --- a/src/grammar/flinksql/FlinkSqlParser.g4 +++ b/src/grammar/flinksql/FlinkSqlParser.g4 @@ -33,11 +33,11 @@ dmlStatement // some statemen describeStatement - : (DESCRIBE | DESC) uid + : (KW_DESCRIBE | KW_DESC) uid ; explainStatement - : EXPLAIN (explainDetails | PLAN FOR)? (dmlStatement | insertSimpleStatement | insertMulStatement) + : KW_EXPLAIN (explainDetails | KW_PLAN KW_FOR)? (dmlStatement | insertSimpleStatement | insertMulStatement) ; explainDetails @@ -45,54 +45,54 @@ explainDetails ; explainDetail - : CHANGELOG_MODE | JSON_EXECUTION_PLAN | ESTIMATED_COST + : KW_CHANGELOG_MODE | KW_JSON_EXECUTION_PLAN | KW_ESTIMATED_COST ; useStatement - : USE CATALOG? uid | useModuleStatement + : KW_USE KW_CATALOG? uid | useModuleStatement ; useModuleStatement - : USE MODULES uid (COMMA uid)* + : KW_USE KW_MODULES uid (COMMA uid)* ; showStatememt - : SHOW (CATALOGS | DATABASES | VIEWS | JARS) - | SHOW CURRENT (CATALOG | DATABASE) - | SHOW TABLES (( FROM | IN ) uid)? likePredicate? - | SHOW COLUMNS ( FROM | IN ) uid likePredicate? - | SHOW CREATE (TABLE | VIEW) uid - | SHOW USER? FUNCTIONS - | SHOW FULL? MODULES + : KW_SHOW (KW_CATALOGS | KW_DATABASES | KW_VIEWS | KW_JARS) + | KW_SHOW KW_CURRENT (KW_CATALOG | KW_DATABASE) + | KW_SHOW KW_TABLES (( KW_FROM | KW_IN ) uid)? likePredicate? + | KW_SHOW KW_COLUMNS ( KW_FROM | KW_IN ) uid likePredicate? + | KW_SHOW KW_CREATE (KW_TABLE | KW_VIEW) uid + | KW_SHOW KW_USER? KW_FUNCTIONS + | KW_SHOW KW_FULL? KW_MODULES ; loadStatement - : LOAD MODULE uid (WITH tablePropertyList)? + : KW_LOAD KW_MODULE uid (KW_WITH tablePropertyList)? ; unloadStatememt - : UNLOAD MODULE uid + : KW_UNLOAD KW_MODULE uid ; setStatememt - : SET (tableProperty)? + : KW_SET (tableProperty)? ; resetStatememt - : RESET tablePropertyKey? + : KW_RESET tablePropertyKey? ; jarStatememt - : (ADD | REMOVE) JAR jarFileName + : (KW_ADD | KW_REMOVE) KW_JAR jarFileName ; // 数栈平台自研的添加文件语法 dtAddStatement - : ADD JAR WITH FILE_PATH (AS uid)? - | ADD FILE WITH FILE_PATH (AS uid)? (RENAME uid)? - | ADD (PYTHON_FILES | PYTHON_REQUIREMENTS | PYTHON_DEPENDENCIES | PYTHON_JAR | PYTHON_ARCHIVES) WITH FILE_PATH RENAME uid - | ADD PYTHON_PARAMETER FILE_PATH - | ADD ENGINE FILE WITH FILE_PATH RENAME uid KEY uid + : KW_ADD KW_JAR KW_WITH FILE_PATH (KW_AS uid)? + | KW_ADD KW_FILE KW_WITH FILE_PATH (KW_AS uid)? (KW_RENAME uid)? + | KW_ADD (KW_PYTHON_FILES | KW_PYTHON_REQUIREMENTS | KW_PYTHON_DEPENDENCIES | KW_PYTHON_JAR | KW_PYTHON_ARCHIVES) KW_WITH FILE_PATH KW_RENAME uid + | KW_ADD KW_PYTHON_PARAMETER FILE_PATH + | KW_ADD KW_ENGINE KW_FILE KW_WITH FILE_PATH KW_RENAME uid KW_KEY uid ; // Create statements @@ -102,7 +102,7 @@ createTable ; simpleCreateTable - : CREATE TEMPORARY? TABLE ifNotExists? sourceTable + : KW_CREATE KW_TEMPORARY? KW_TABLE ifNotExists? sourceTable LR_BRACKET columnOptionDefinition (COMMA columnOptionDefinition)* (COMMA watermarkDefinition)? @@ -120,7 +120,7 @@ simpleCreateTable * CTAS 不支持指定显示指定列,不支持创建分区表,临时表 */ createTableAsSelect - : CREATE TABLE ifNotExists? sourceTable withOption (AS queryStatement)? + : KW_CREATE KW_TABLE ifNotExists? sourceTable withOption (KW_AS queryStatement)? ; columnOptionDefinition @@ -142,17 +142,17 @@ columnNameList ; columnType - : typeName=(DATE | BOOLEAN | NULL) - | typeName=(CHAR | VARCHAR | STRING | BINARY | VARBINARY | BYTES - | TINYINT | SMALLINT | INT | INTEGER | BIGINT - | TIME | TIMESTAMP_LTZ | DATETIME + : typeName=(KW_DATE | KW_BOOLEAN | KW_NULL) + | typeName=(KW_CHAR | KW_VARCHAR | KW_STRING | KW_BINARY | KW_VARBINARY | KW_BYTES + | KW_TINYINT | KW_SMALLINT |KW_INT | KW_INTEGER | KW_BIGINT + | KW_TIME | KW_TIMESTAMP_LTZ | KW_DATETIME ) lengthOneDimension? - | typeName=TIMESTAMP lengthOneDimension? ((WITHOUT | WITH) LOCAL? TIME ZONE)? - | typeName=(DECIMAL | DEC | NUMERIC | FLOAT | DOUBLE) lengthTwoOptionalDimension? - | type=(ARRAY | MULTISET) lengthOneTypeDimension? - | type=MAP mapTypeDimension? - | type=ROW rowTypeDimension? - | type=RAW lengthTwoStringDimension? + | typeName=KW_TIMESTAMP lengthOneDimension? ((KW_WITHOUT | KW_WITH) KW_LOCAL? KW_TIME KW_ZONE)? + | typeName=(KW_DECIMAL | KW_DEC | KW_NUMERIC | KW_FLOAT | KW_DOUBLE) lengthTwoOptionalDimension? + | type=(KW_ARRAY | KW_MULTISET) lengthOneTypeDimension? + | type=KW_MAP mapTypeDimension? + | type=KW_ROW rowTypeDimension? + | type=KW_RAW lengthTwoStringDimension? ; lengthOneDimension @@ -180,15 +180,15 @@ rowTypeDimension ; columnConstraint - :(CONSTRAINT constraintName)? PRIMARY KEY NOT ENFORCED + :(KW_CONSTRAINT constraintName)? KW_PRIMARY KW_KEY KW_NOT KW_ENFORCED ; commentSpec - : COMMENT STRING_LITERAL + : KW_COMMENT STRING_LITERAL ; metadataColumnDefinition - : columnName columnType METADATA (FROM metadataKey)? VIRTUAL? + : columnName columnType KW_METADATA (KW_FROM metadataKey)? KW_VIRTUAL? ; metadataKey @@ -196,7 +196,7 @@ metadataKey ; computedColumnDefinition - : columnName AS computedColumnExpression commentSpec? + : columnName KW_AS computedColumnExpression commentSpec? ; // 计算表达式 @@ -205,23 +205,23 @@ computedColumnExpression ; watermarkDefinition - : WATERMARK FOR expression AS expression + : KW_WATERMARK KW_FOR expression KW_AS expression ; tableConstraint - : (CONSTRAINT constraintName)? PRIMARY KEY columnNameList NOT ENFORCED + : (KW_CONSTRAINT constraintName)? KW_PRIMARY KW_KEY columnNameList KW_NOT KW_ENFORCED ; constraintName : identifier ; -selfDefinitionClause // 数栈自定义语句 ‘PERIOD FOR SYSTEM_TIME’ - : PERIOD FOR SYSTEM_TIME +selfDefinitionClause // 数栈自定义语句 ‘PERIOD KW_FOR SYSTEM_TIME’ + : KW_PERIOD KW_FOR KW_SYSTEM_TIME ; partitionDefinition - : PARTITIONED BY transformList + : KW_PARTITIONED KW_BY transformList ; transformList @@ -240,7 +240,7 @@ transformArgument ; likeDefinition - : LIKE sourceTable (LR_BRACKET likeOption* RR_BRACKET)? + : KW_LIKE sourceTable (LR_BRACKET likeOption* RR_BRACKET)? ; sourceTable @@ -248,28 +248,28 @@ sourceTable ; likeOption - : ((INCLUDING | EXCLUDING) (ALL | CONSTRAINTS | PARTITIONS)) - | ((INCLUDING | EXCLUDING | OVERWRITING) (GENERATED | OPTIONS | WATERMARKS)) + : ((KW_INCLUDING | KW_EXCLUDING) (KW_ALL | KW_CONSTRAINTS | KW_PARTITIONS)) + | ((KW_INCLUDING | KW_EXCLUDING | KW_OVERWRITING) (KW_GENERATED | KW_OPTIONS | KW_WATERMARKS)) ; createCatalog - : CREATE CATALOG uid withOption + : KW_CREATE KW_CATALOG uid withOption ; createDatabase - : CREATE DATABASE ifNotExists? uid commentSpec? withOption + : KW_CREATE KW_DATABASE ifNotExists? uid commentSpec? withOption ; createView - : CREATE TEMPORARY? VIEW ifNotExists? uid columnNameList? commentSpec? AS queryStatement + : KW_CREATE KW_TEMPORARY? KW_VIEW ifNotExists? uid columnNameList? commentSpec? KW_AS queryStatement ; createFunction - : CREATE (TEMPORARY|TEMPORARY SYSTEM)? FUNCTION ifNotExists? uid AS identifier (LANGUAGE (JAVA|SCALA|PYTHON))? usingClause? + : KW_CREATE (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifNotExists? uid KW_AS identifier (KW_LANGUAGE (KW_JAVA|KW_SCALA|KW_PYTHON))? usingClause? ; usingClause - : USING JAR jarFileName (COMMA JAR jarFileName)* + : KW_USING KW_JAR jarFileName (COMMA KW_JAR jarFileName)* ; jarFileName @@ -281,77 +281,77 @@ jarFileName // it only includes rename, set key, add constraint, drop constraint, add unique alterTable - : ALTER TABLE ifExists? uid (renameDefinition | setKeyValueDefinition | addConstraint | dropConstraint | addUnique) + : KW_ALTER KW_TABLE ifExists? uid (renameDefinition | setKeyValueDefinition | addConstraint | dropConstraint | addUnique) ; renameDefinition - : RENAME uid? TO uid + : KW_RENAME uid? KW_TO uid ; setKeyValueDefinition - : SET tablePropertyList + : KW_SET tablePropertyList ; addConstraint - : ADD CONSTRAINT constraintName PRIMARY KEY columnNameList notForced? + : KW_ADD KW_CONSTRAINT constraintName KW_PRIMARY KW_KEY columnNameList notForced? ; dropConstraint - : DROP CONSTRAINT constraintName + : KW_DROP KW_CONSTRAINT constraintName ; addUnique - : ADD UNIQUE columnNameList + : KW_ADD KW_UNIQUE columnNameList ; notForced - : NOT ENFORCED + : KW_NOT KW_ENFORCED ; alertView - : ALTER VIEW uid (renameDefinition | AS queryStatement) + : KW_ALTER KW_VIEW uid (renameDefinition | KW_AS queryStatement) ; alterDatabase - : ALTER DATABASE uid setKeyValueDefinition + : KW_ALTER KW_DATABASE uid setKeyValueDefinition ; alterFunction - : ALTER (TEMPORARY|TEMPORARY SYSTEM)? FUNCTION ifExists? uid AS identifier (LANGUAGE (JAVA|SCALA|PYTHON))? + : KW_ALTER (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifExists? uid KW_AS identifier (KW_LANGUAGE (KW_JAVA|KW_SCALA|KW_PYTHON))? ; // Drop statements dropCatalog - : DROP CATALOG ifExists? uid + : KW_DROP KW_CATALOG ifExists? uid ; dropTable - : DROP TEMPORARY? TABLE ifExists? uid + : KW_DROP KW_TEMPORARY? KW_TABLE ifExists? uid ; dropDatabase - : DROP DATABASE ifExists? uid dropType=(RESTRICT | CASCADE)? + : KW_DROP KW_DATABASE ifExists? uid dropType=(KW_RESTRICT | KW_CASCADE)? ; dropView - : DROP TEMPORARY? VIEW ifExists? uid + : KW_DROP KW_TEMPORARY? KW_VIEW ifExists? uid ; dropFunction - : DROP (TEMPORARY|TEMPORARY SYSTEM)? FUNCTION ifExists? uid + : KW_DROP (KW_TEMPORARY|KW_TEMPORARY KW_SYSTEM)? KW_FUNCTION ifExists? uid ; // Insert statements insertStatement - : (EXECUTE? insertSimpleStatement) | (EXECUTE insertMulStatement) + : (KW_EXECUTE? insertSimpleStatement) | (KW_EXECUTE insertMulStatement) ; insertSimpleStatement - : INSERT (INTO | OVERWRITE) uid + : KW_INSERT (KW_INTO | KW_OVERWRITE) uid ( insertPartitionDefinition? columnNameList? queryStatement | valuesDefinition @@ -359,11 +359,11 @@ insertSimpleStatement ; insertPartitionDefinition - : PARTITION tablePropertyList + : KW_PARTITION tablePropertyList ; valuesDefinition - : VALUES valuesRowDefinition (COMMA valuesRowDefinition)* + : KW_VALUES valuesRowDefinition (COMMA valuesRowDefinition)* ; valuesRowDefinition @@ -373,7 +373,7 @@ valuesRowDefinition ; insertMulStatement - : STATEMENT SET BEGIN (insertSimpleStatement SEMICOLON)+ END + : KW_STATEMENT KW_SET KW_BEGIN (insertSimpleStatement SEMICOLON)+ KW_END ; // Select statements @@ -382,21 +382,21 @@ queryStatement : valuesCaluse | withClause queryStatement | '(' queryStatement ')' - | left=queryStatement operator=(INTERSECT | UNION | EXCEPT) ALL? right=queryStatement orderByCaluse? limitClause? + | left=queryStatement operator=(KW_INTERSECT | KW_UNION | KW_EXCEPT) KW_ALL? right=queryStatement orderByCaluse? limitClause? | selectClause orderByCaluse? limitClause? | selectStatement orderByCaluse? limitClause? ; valuesCaluse - : VALUES expression (COMMA expression )* + : KW_VALUES expression (COMMA expression )* ; withClause - : WITH withItem (COMMA withItem)* + : KW_WITH withItem (COMMA withItem)* ; withItem - : withItemName (LR_BRACKET columnName (COMMA columnName)* RR_BRACKET)? AS LR_BRACKET queryStatement RR_BRACKET + : withItemName (LR_BRACKET columnName (COMMA columnName)* RR_BRACKET)? KW_AS LR_BRACKET queryStatement RR_BRACKET ; withItemName @@ -409,27 +409,27 @@ selectStatement ; selectClause - : SELECT setQuantifier? (ASTERISK_SIGN | projectItemDefinition (COMMA projectItemDefinition)*) + : KW_SELECT setQuantifier? (ASTERISK_SIGN | projectItemDefinition (COMMA projectItemDefinition)*) ; projectItemDefinition : overWindowItem - | expression (AS? expression)? + | expression (KW_AS? expression)? ; overWindowItem - : primaryExpression OVER windowSpec AS strictIdentifier - | primaryExpression OVER errorCapturingIdentifier AS strictIdentifier + : primaryExpression KW_OVER windowSpec KW_AS identifier + | primaryExpression KW_OVER errorCapturingIdentifier KW_AS identifier ; fromClause - : FROM tableExpression + : KW_FROM tableExpression ; tableExpression : tableReference (COMMA tableReference)* - | tableExpression NATURAL? (LEFT | RIGHT | FULL | INNER)? OUTER? JOIN tableExpression joinCondition? - | tableExpression CROSS JOIN tableExpression + | tableExpression KW_NATURAL? (KW_LEFT | KW_RIGHT | KW_FULL | KW_INNER)? KW_OUTER? KW_JOIN tableExpression joinCondition? + | tableExpression KW_CROSS KW_JOIN tableExpression | inlineDataValueClause | windoTVFClause ; @@ -439,10 +439,10 @@ tableReference ; tablePrimary - : TABLE? tablePath systemTimePeriod? (AS? correlationName)? - | LATERAL TABLE LR_BRACKET functionName LR_BRACKET expression (COMMA expression)* RR_BRACKET RR_BRACKET - | LATERAL? LR_BRACKET queryStatement RR_BRACKET - | UNNEST LR_BRACKET expression RR_BRACKET + : KW_TABLE? tablePath systemTimePeriod? (KW_AS? correlationName)? + | KW_LATERAL KW_TABLE LR_BRACKET functionName LR_BRACKET expression (COMMA expression)* RR_BRACKET RR_BRACKET + | KW_LATERAL? LR_BRACKET queryStatement RR_BRACKET + | KW_UNNEST LR_BRACKET expression RR_BRACKET ; tablePath @@ -450,7 +450,7 @@ tablePath ; systemTimePeriod - : FOR SYSTEM_TIME AS OF dateTimeExpression + : KW_FOR KW_SYSTEM_TIME KW_AS KW_OF dateTimeExpression ; dateTimeExpression @@ -462,7 +462,7 @@ inlineDataValueClause ; windoTVFClause - : TABLE LR_BRACKET windowTVFExression RR_BRACKET + : KW_TABLE LR_BRACKET windowTVFExression RR_BRACKET ; windowTVFExression @@ -470,44 +470,44 @@ windowTVFExression ; windoTVFName - : TUMBLE - | HOP - | CUMULATE + : KW_TUMBLE + | KW_HOP + | KW_CUMULATE ; windowTVFParam - : TABLE timeAttrColumn + : KW_TABLE timeAttrColumn | columnDescriptor | timeIntervalExpression - | DATA DOUBLE_ARROW TABLE timeAttrColumn - | TIMECOL DOUBLE_ARROW columnDescriptor - | timeIntervalParamName DOUBLE_ARROW timeIntervalExpression + | KW_DATA DOUBLE_RIGHT_ARROW KW_TABLE timeAttrColumn + | KW_TIMECOL DOUBLE_RIGHT_ARROW columnDescriptor + | timeIntervalParamName DOUBLE_RIGHT_ARROW timeIntervalExpression ; timeIntervalParamName - : DATA - | TIMECOL - | SIZE - | OFFSET - | STEP - | SLIDE + : KW_DATA + | KW_TIMECOL + | KW_SIZE + | KW_OFFSET + | KW_STEP + | KW_SLIDE ; columnDescriptor - : DESCRIPTOR LR_BRACKET uid RR_BRACKET + : KW_DESCRIPTOR LR_BRACKET uid RR_BRACKET ; joinCondition - : ON booleanExpression - | USING LR_BRACKET uid (COMMA uid)* RR_BRACKET + : KW_ON booleanExpression + | KW_USING LR_BRACKET uid (COMMA uid)* RR_BRACKET ; whereClause - : WHERE booleanExpression + : KW_WHERE booleanExpression ; groupByClause - : GROUP BY groupItemDefinition (COMMA groupItemDefinition)* + : KW_GROUP KW_BY groupItemDefinition (COMMA groupItemDefinition)* ; groupItemDefinition @@ -520,12 +520,12 @@ groupItemDefinition ; groupingSets - : GROUPING SETS + : KW_GROUPING KW_SETS ; groupingSetsNotaionName - : CUBE - | ROLLUP + : KW_CUBE + | KW_ROLLUP ; groupWindowFunction @@ -533,9 +533,9 @@ groupWindowFunction ; groupWindowFunctionName - : TUMBLE - | HOP - | SESSION + : KW_TUMBLE + | KW_HOP + | KW_SESSION ; timeAttrColumn @@ -543,15 +543,15 @@ timeAttrColumn ; havingClause - : HAVING booleanExpression + : KW_HAVING booleanExpression ; windowClause - : WINDOW namedWindow (',' namedWindow)* + : KW_WINDOW namedWindow (',' namedWindow)* ; namedWindow - : name=errorCapturingIdentifier AS windowSpec + : name=errorCapturingIdentifier KW_AS windowSpec ; windowSpec @@ -564,7 +564,7 @@ windowSpec ; matchRecognizeClause - : MATCH_RECOGNIZE + : KW_MATCH_RECOGNIZE LR_BRACKET partitionByClause? orderByCaluse? @@ -573,23 +573,23 @@ matchRecognizeClause afterMatchStrategy? patternDefination? patternVariablesDefination - RR_BRACKET ( AS? strictIdentifier )? + RR_BRACKET ( KW_AS? identifier )? ; orderByCaluse - : ORDER BY orderItemDefition (COMMA orderItemDefition)* + : KW_ORDER KW_BY orderItemDefition (COMMA orderItemDefition)* ; orderItemDefition - : expression ordering=(ASC | DESC)? (NULLS nullOrder=(LAST | FIRST))? + : expression ordering=(KW_ASC | KW_DESC)? (KW_NULLS nullOrder=(KW_LAST | KW_FIRST))? ; limitClause - : LIMIT (ALL | limit=expression) + : KW_LIMIT (KW_ALL | limit=expression) ; partitionByClause - : PARTITION BY expression (COMMA expression)* + : KW_PARTITION KW_BY expression (COMMA expression)* ; quantifiers @@ -602,11 +602,11 @@ quantifiers ; measuresClause - : MEASURES projectItemDefinition (COMMA projectItemDefinition)* + : KW_MEASURES projectItemDefinition (COMMA projectItemDefinition)* ; patternDefination - : PATTERN + : KW_PATTERN LR_BRACKET patternVariable+ RR_BRACKET @@ -618,37 +618,34 @@ patternVariable ; outputMode - : ALL ROWS PER MATCH - | ONE ROW PER MATCH + : KW_ALL KW_ROWS KW_PER KW_MATCH + | KW_ONE KW_ROW KW_PER KW_MATCH ; afterMatchStrategy - : AFTER MATCH KW_SKIP PAST LAST ROW - | AFTER MATCH KW_SKIP TO NEXT ROW - | AFTER MATCH KW_SKIP TO LAST unquotedIdentifier - | AFTER MATCH KW_SKIP TO FIRST unquotedIdentifier + : KW_AFTER KW_MATCH KW_SKIP KW_PAST KW_LAST KW_ROW + | KW_AFTER KW_MATCH KW_SKIP KW_TO KW_NEXT KW_ROW + | KW_AFTER KW_MATCH KW_SKIP KW_TO KW_LAST unquotedIdentifier + | KW_AFTER KW_MATCH KW_SKIP KW_TO KW_FIRST unquotedIdentifier ; patternVariablesDefination - : DEFINE projectItemDefinition (COMMA projectItemDefinition)* + : KW_DEFINE projectItemDefinition (COMMA projectItemDefinition)* ; windowFrame - : RANGE BETWEEN timeIntervalExpression frameBound - | ROWS BETWEEN DIG_LITERAL frameBound + : KW_RANGE KW_BETWEEN timeIntervalExpression frameBound + | KW_ROWS KW_BETWEEN DIG_LITERAL frameBound ; frameBound - : PRECEDING AND CURRENT ROW + : KW_PRECEDING KW_AND KW_CURRENT KW_ROW ; withinClause - : WITHIN timeIntervalExpression + : KW_WITHIN timeIntervalExpression ; -timeIntervalExpression - : INTERVAL STRING_LITERAL ID_LITERAL - ; // expression @@ -657,35 +654,35 @@ expression ; booleanExpression - : NOT booleanExpression #logicalNot - | EXISTS '(' queryStatement ')' #exists + : KW_NOT booleanExpression #logicalNot + | KW_EXISTS '(' queryStatement ')' #exists | valueExpression predicate? #predicated - | left=booleanExpression operator=AND right=booleanExpression #logicalBinary - | left=booleanExpression operator=OR right=booleanExpression #logicalBinary + | left=booleanExpression operator=KW_AND right=booleanExpression #logicalBinary + | left=booleanExpression operator=KW_OR right=booleanExpression #logicalBinary ; predicate - : NOT? kind=BETWEEN lower=valueExpression AND upper=valueExpression - | NOT? kind=IN '(' expression (',' expression)* ')' - | NOT? kind=IN '(' queryStatement ')' - | kind=EXISTS '(' queryStatement ')' - | NOT? kind=RLIKE pattern=valueExpression - | NOT? kind=LIKE quantifier=(ANY | ALL) ('('')' | '(' expression (',' expression)* ')') - | NOT? kind=LIKE pattern=valueExpression - | IS NOT? kind=NULL - | IS NOT? kind=(TRUE | FALSE) - | IS NOT? kind=DISTINCT FROM right=valueExpression + : KW_NOT? kind=KW_BETWEEN lower=valueExpression KW_AND upper=valueExpression + | KW_NOT? kind=KW_IN '(' expression (',' expression)* ')' + | KW_NOT? kind=KW_IN '(' queryStatement ')' + | kind=KW_EXISTS '(' queryStatement ')' + | KW_NOT? kind=KW_RLIKE pattern=valueExpression + | KW_NOT? kind=KW_LIKE quantifier=(KW_ANY | KW_ALL) ('('')' | '(' expression (',' expression)* ')') + | KW_NOT? kind=KW_LIKE pattern=valueExpression + | KW_IS KW_NOT? kind=KW_NULL + | KW_IS KW_NOT? kind=(KW_TRUE | KW_FALSE) + | KW_IS KW_NOT? kind=KW_DISTINCT KW_FROM right=valueExpression ; likePredicate - : NOT? kind=LIKE quantifier=(ANY | ALL) ('('')' | '(' expression (',' expression)* ')') - | NOT? kind=LIKE pattern=valueExpression + : KW_NOT? kind=KW_LIKE quantifier=(KW_ANY | KW_ALL) ('('')' | '(' expression (',' expression)* ')') + | KW_NOT? kind=KW_LIKE pattern=valueExpression ; valueExpression : primaryExpression #valueExpressionDefault | operator=('-' | '+' | '~') valueExpression #arithmeticUnary - | left=valueExpression operator=('*' | '/' | '%' | DIV) right=valueExpression #arithmeticBinary + | left=valueExpression operator=('*' | '/' | '%' | KW_DIV) right=valueExpression #arithmeticBinary | left=valueExpression operator=('+' | '-' | DOUBLE_VERTICAL_SIGN) right=valueExpression #arithmeticBinary | left=valueExpression operator='&' right=valueExpression #arithmeticBinary | left=valueExpression operator='^' right=valueExpression #arithmeticBinary @@ -694,13 +691,13 @@ valueExpression ; primaryExpression - : CASE whenClause+ (ELSE elseExpression=expression)? END #searchedCase - | CASE value=expression whenClause+ (ELSE elseExpression=expression)? END #simpleCase - | CAST '(' expression AS columnType ')' #cast + : KW_CASE whenClause+ (KW_ELSE elseExpression=expression)? KW_END #searchedCase + | KW_CASE value=expression whenClause+ (KW_ELSE elseExpression=expression)? KW_END #simpleCase + | KW_CAST '(' expression KW_AS columnType ')' #cast // | STRUCT '(' (argument+=namedExpression (',' argument+=namedExpression)*)? ')' #struct - | FIRST '(' expression (IGNORE NULLS)? ')' #first - | LAST '(' expression (IGNORE NULLS)? ')' #last - | POSITION '(' substr=valueExpression IN str=valueExpression ')' #position + | KW_FIRST '(' expression (KW_IGNORE KW_NULLS)? ')' #first + | KW_LAST '(' expression (KW_IGNORE KW_NULLS)? ')' #last + | KW_POSITION '(' substr=valueExpression KW_IN str=valueExpression ')' #position | constant #constantDefault | '*' #star | uid '.' '*' #star @@ -713,17 +710,19 @@ primaryExpression | identifier #columnReference | dereferenceDefinition #dereference | '(' expression ')' #parenthesizedExpression - // | EXTRACT '(' field=identifier FROM source=valueExpression ')' #extract - // | (SUBSTR | SUBSTRING) '(' str=valueExpression (FROM | ',') pos=valueExpression - // ((FOR | ',') len=valueExpression)? ')' #substring + // | EXTRACT '(' field=identifier KW_FROM source=valueExpression ')' #extract + // | (SUBSTR | SUBSTRING) '(' str=valueExpression (KW_FROM | ',') pos=valueExpression + // ((KW_FOR | ',') len=valueExpression)? ')' #substring // | TRIM '(' trimOption=(BOTH | LEADING | TRAILING)? (trimStr=valueExpression)? - // FROM srcStr=valueExpression ')' #trim + // KW_FROM srcStr=valueExpression ')' #trim // | OVERLAY '(' input=valueExpression PLACING replace=valueExpression - // FROM position=valueExpression (FOR length=valueExpression)? ')' #overlay + // KW_FROM position=valueExpression (KW_FOR length=valueExpression)? ')' #overlay ; functionName - : uid + : reservedKeywords + | nonReservedKeywords + | uid ; dereferenceDefinition @@ -741,8 +740,8 @@ qualifiedName : identifier | dereferenceDefinition ; -interval - : INTERVAL (errorCapturingMultiUnitsInterval | errorCapturingUnitToUnitInterval)? +timeIntervalExpression + : KW_INTERVAL (errorCapturingMultiUnitsInterval | errorCapturingUnitToUnitInterval)? ; errorCapturingMultiUnitsInterval @@ -750,7 +749,7 @@ errorCapturingMultiUnitsInterval ; multiUnitsInterval - : (intervalValue identifier)+ + : (intervalValue intervalTimeUnit)+ ; errorCapturingUnitToUnitInterval @@ -758,7 +757,7 @@ errorCapturingUnitToUnitInterval ; unitToUnitInterval - : value=intervalValue from=identifier TO to=identifier + : value=intervalValue from=intervalTimeUnit KW_TO to=intervalTimeUnit ; intervalValue @@ -766,12 +765,17 @@ intervalValue | STRING_LITERAL ; +intervalTimeUnit // TODO: 需要整理 interval 时间粒度比如 SECOND、DAY + : identifier + | reservedKeywords + ; + columnAlias - : AS? strictIdentifier identifierList? + : KW_AS? identifier identifierList? ; tableAlias - : AS? strictIdentifier identifierList? + : KW_AS? identifier identifierList? ; errorCapturingIdentifier @@ -779,7 +783,7 @@ errorCapturingIdentifier ; errorCapturingIdentifierExtra - : (MINUS identifier)+ #errorIdent + : (KW_MINUS identifier)+ #errorIdent | #realIdent ; @@ -792,15 +796,9 @@ identifierSeq ; identifier - : strictIdentifier - | strictNonReserved - ; - -strictIdentifier - : unquotedIdentifier #unquotedIdentifierAlternative - | quotedIdentifier #quotedIdentifierAlternative - | ansiNonReserved #ansiNonReservedKeywords - | nonReserved #nonReservedKeywords + : unquotedIdentifier #unquotedIdentifierAlternative + | quotedIdentifier #quotedIdentifierAlternative + | nonReservedKeywords #nonReservedKeywordsAlternative ; unquotedIdentifier @@ -812,26 +810,22 @@ quotedIdentifier ; whenClause - : WHEN condition=expression THEN result=expression - ; - -uidList - : uid (',' uid)* + : KW_WHEN condition=expression KW_THEN result=expression ; uid - : ID_LITERAL DOT_ID*? + : identifier (DOT identifier)*? ; withOption - : WITH tablePropertyList + : KW_WITH tablePropertyList ; ifNotExists - : IF NOT EXISTS; + : KW_IF KW_NOT KW_EXISTS; ifExists - : IF EXISTS; + : KW_IF KW_EXISTS; tablePropertyList : '(' tableProperty (',' tableProperty)* ')' @@ -854,7 +848,7 @@ tablePropertyValue ; logicalOperator - : AND | '&' '&' | OR | '|' '|' + : KW_AND | '&' '&' | KW_OR | '|' '|' ; comparisonOperator @@ -866,26 +860,22 @@ bitOperator ; mathOperator - : '*' | SLASH_SIGN | PENCENT_SIGN | DIV | '+' | '-' | DOUBLE_HYPNEN_SIGN + : '*' | SLASH_SIGN | PENCENT_SIGN | KW_DIV | '+' | '-' | DOUBLE_HYPNEN_SIGN ; unaryOperator - : '!' | '~' | ADD_SIGN | '-' | NOT - ; - -fullColumnName - : uid + : '!' | '~' | ADD_SIGN | '-' | KW_NOT ; constant : stringLiteral // 引号包含的字符串 | decimalLiteral // 整数 - | interval // INTERVAL keywords + | timeIntervalExpression // KW_INTERVAL keywords | HYPNEN_SIGN decimalLiteral // 负整数 | booleanLiteral // 布尔值 | REAL_LITERAL // 小数 | BIT_STRING - | NOT? NULL // 空 | 非空 + | KW_NOT? KW_NULL // 空 | 非空 ; stringLiteral @@ -897,475 +887,376 @@ decimalLiteral ; booleanLiteral - : TRUE | FALSE; + : KW_TRUE | KW_FALSE; setQuantifier - : DISTINCT - | ALL + : KW_DISTINCT + | KW_ALL ; -ansiNonReserved - : ADD - | AFTER - | ALTER - | ANALYZE - | ANTI - | ARCHIVE - | ARRAY - | ASC - | AT - | BETWEEN - | BIGINT - | BINARY - | BOOLEAN - | BUCKET - | BUCKETS - | BY - | BYTES - | CACHE - | CASCADE - | CATALOG - | CATALOGS - | CHANGE - | CHAR - | CLEAR - | CLUSTER - | CLUSTERED - | CODEGEN - | COLLECTION - | COLUMNS - | COMMENT - | COMMIT - | COMPACT - | COMPACTIONS - | COMPUTE - | CONCATENATE - | CONSTRAINTS - | COST - | CUBE - | CURRENT - | DATA - | DATABASE - | DATABASES - | DATE - | DATETIME - | DBPROPERTIES - | DECIMAL - | DEFINED - | DELETE - | DELIMITED - | DESC - | DESCRIBE - | DFS - | DIRECTORIES - | DIRECTORY - | DISTRIBUTE - | DIV - | DOUBLE - | DROP - | ESCAPED - | EXCHANGE - | EXCLUDING - | EXISTS - | EXPLAIN - | EXPORT - | EXTENDED - | EXTERNAL - | EXTRACT - | FIELDS - | FILEFORMAT - | FIRST - | FLOAT - | FOLLOWING - | FORMAT - | FORMATTED - | FUNCTION - | FUNCTIONS - | GENERATED - | GLOBAL - | GROUPING - | IF - | IGNORE - | IMPORT - | INCLUDING - | INDEX - | INDEXES - | INPATH - | INPUTFORMAT - | INSERT - | INT - | INTERVAL - | ITEMS - | KEY - | KEYS - | LANGUAGE - | LAST - | LATERAL - | LAZY - | LIKE - | LIMIT - | LINES - | LIST - | LOAD - | LOCAL - | LOCATION - | LOCK - | LOCKS - | LOGICAL - | MACRO - | MAP - | MATCH - | MINUS - | MSCK - | MULTISET - | NEXT - | NO - | NULL - | NULLS - | OF - | OPTION - | OPTIONS - | OUT - | OUTPUTFORMAT - | OVER - | OVERWRITE - | PARTITION - | PARTITIONED - | PARTITIONS - | PERCENTLIT - | PERIOD - | PIVOT - | POSITION - | PRECEDING - | PRINCIPALS - | PURGE - | RANGE - | RAW - | RECORDREADER - | RECORDWRITER - | RECOVER - | REDUCE - | REFRESH - | RENAME - | REPAIR - | REPLACE - | RESET - | RESTRICT - | REVOKE - | RLIKE - | ROLE - | ROLES - | ROLLBACK - | ROLLUP - | ROW - | ROWS - | SEMI - | SEPARATED - | SERDE - | SERDEPROPERTIES - | SET - | SETMINUS - | SETS - | SHOW - | SKEWED - | SMALLINT - | SORT - | SORTED - | START - | STATISTICS - | STORED - | STRATIFY - | STRING - | STRUCT - | SYSTEM - | SYSTEM_TIME - | TABLES - | TABLESAMPLE - | TBLPROPERTIES - | TEMPORARY - | TERMINATED - | TIME - | TIMESTAMP - | TINYINT - | TOUCH - | TRANSACTION - | TRANSACTIONS - | TRANSFORM - | TRUE - | TRUNCATE - | UNARCHIVE - | UNBOUNDED - | UNCACHE - | UNLOCK - | UNSET - | UNNEST - | USE - | VALUES - | VARBINARY - | VARCHAR - | VIEW - | VIEWS - | WATERMARK - | WINDOW - | WITHIN - | WS +reservedKeywords + : KW_ABS + | KW_ALL + | ALLOW + | KW_ALTER + | KW_AND + | KW_ANY + | KW_ARE + | KW_ARRAY + | KW_AS + | KW_AT + | KW_AVG + | KW_BEGIN + | KW_BETWEEN + | KW_BIGINT + | KW_BINARY + | KW_BIT + | KW_BLOB + | KW_BOOLEAN + | KW_BOTH + | KW_BY + | KW_CALL + | KW_CALLED + | KW_CASCADED + | KW_CASE + | KW_CAST + | KW_CEIL + | KW_CHAR + | KW_CHARACTER + | KW_CHECK + | KW_CLOB + | KW_CLOSE + | KW_COALESCE + | KW_COLLATE + | KW_COLLECT + | KW_COLUMN + | KW_COMMIT + | KW_CONNECT + | KW_CONSTRAINT + | KW_CONTAINS + | KW_CONVERT + | KW_COUNT + | KW_CREATE + | KW_CROSS + | KW_CUBE + | KW_CURRENT + | KW_CURSOR + | KW_CYCLE + | KW_DATE + | KW_DATETIME + | KW_DAY + | KW_DEC + | KW_DECIMAL + | KW_DECLARE + | KW_DEFAULT + | KW_DEFINE + | KW_DELETE + | KW_DESCRIBE + | KW_DISTINCT + | KW_DOUBLE + | KW_DROP + | KW_EACH + | KW_ELSE + | KW_END + | KW_EQUALS + | KW_EXCEPT + | KW_EXECUTE + | KW_EXISTS + | KW_EXPLAIN + | KW_EXTERNAL + | KW_EXTRACT + | KW_FALSE + | KW_FLOAT + | KW_FOR + | KW_FROM + | KW_FULL + | KW_FUNCTION + | KW_GLOBAL + | KW_GRANT + | KW_GROUP + | KW_GROUPING + | KW_GROUPS + | KW_HAVING + | KW_HOUR + | KW_IMPORT + | KW_IN + | KW_INCLUDING + | KW_INNER + | KW_INOUT + | KW_INSERT + | KW_INT + | KW_INTEGER + | KW_INTERSECT + | KW_INTERVAL + | KW_INTO + | KW_IS + | KW_JOIN + | KW_LAG + | KW_LANGUAGE + | KW_LATERAL + | KW_LEADING + | KW_LEFT + | KW_LIKE + | KW_LIMIT + | KW_LOCAL + | KW_MATCH + | KW_MATCH_RECOGNIZE + | KW_MEASURES + | KW_MERGE + | KW_METADATA + | KW_MINUS + | KW_MINUTE + | KW_MODIFIES + | KW_MODULE + | KW_MONTH + | KW_MULTISET + | KW_NATURAL + | KW_NEXT + | KW_NO + | KW_NONE + | KW_NOT + | KW_NULL + | KW_NUMERIC + | KW_OF + | KW_OFFSET + | KW_ON + | KW_ONE + | KW_OR + | KW_ORDER + | KW_OUT + | KW_OUTER + | KW_OVER + | KW_OVERLAY + | KW_PARTITION + | KW_PATTERN + | KW_PER + | KW_PERCENT + | KW_PERIOD + | KW_POSITION + | KW_PRIMARY + | KW_RANGE + | KW_RANK + | KW_RESET + | KW_REVOKE + | KW_RIGHT + | KW_RLIKE + | KW_ROLLBACK + | KW_ROLLUP + | KW_ROW + | KW_ROWS + | KW_SECOND + | KW_SELECT + | KW_SET + | KW_SHOW + | KW_SKIP + | KW_SMALLINT + | KW_START + | KW_STATIC + | KW_SUBSTRING + | KW_SUM + | KW_SYSTEM + | KW_SYSTEM_TIME + | KW_SYSTEM_USER + | KW_TABLE + | KW_TABLESAMPLE + | KW_THEN + | KW_TIME + | KW_TIMESTAMP + | KW_TINYINT + | KW_TO + | KW_TRUE + | KW_TRUNCATE + | KW_UNION + | KW_UNIQUE + | KW_UNKNOWN + | KW_UNNEST + | KW_UPPER + | KW_UPSERT + | KW_USER + | KW_USING + | KW_VALUE + | KW_VALUES + | KW_VARBINARY + | KW_VARCHAR + | KW_WHEN + | KW_WHERE + | KW_WINDOW + | KW_WITH + | KW_WITHIN + | KW_WITHOUT + | KW_YEAR ; -strictNonReserved - : ANTI - | CROSS - | EXCEPT - | FULL - | INNER - | INTERSECT - | JOIN - | LEFT - | NATURAL - | ON - | RIGHT - | SEMI - | SETMINUS - | UNION - | USING - ; - -nonReserved - : ADD - | AFTER - | ALL - | ALTER - | ANALYZE - | AND - | ANY - | COLUMNS - | ARRAY - | AS - | ASC - | AT - | BETWEEN - | BIGINT - | BINARY - | BOOLEAN - | BOTH - | BUCKET - | BUCKETS - | BY - | BYTES - | CACHE - | CASCADE - | CASE - | CAST - | CATALOG - | CATALOGS - | CHANGE - | CHAR - | CLEAR - | CLUSTER - | CLUSTERED - | CODEGEN - | COLLECTION - | COLUMN - | COLUMNS - | COMMENT - | COMMIT - | COMPACT - | COMPACTIONS - | COMPUTE - | CONCATENATE - | CONSTRAINT - | CONSTRAINTS - | COST - | CREATE - | CUBE - | CURRENT - | DATA - | DATABASE - | DATABASES - | DATE - | DATETIME - | DBPROPERTIES - | DECIMAL - | DEFINED - | DELETE - | DELIMITED - | DESC - | DESCRIBE - | DFS - | DIRECTORIES - | DIRECTORY - | DISTINCT - | DISTRIBUTE - | DIV - | DOUBLE - | DROP - | ELSE - | END - | ESCAPED - | EXCHANGE - | EXCLUDING - | EXISTS - | EXPLAIN - | EXPORT - | EXTENDED - | EXTERNAL - | EXTRACT - | FALSE - | FIELDS - | FILEFORMAT - | FIRST - | FLOAT - | FOLLOWING - | FOR - | FORMAT - | FORMATTED - | FROM - | FUNCTION - | FUNCTIONS - | GENERATED - | GLOBAL - | GRANT - | GROUP - | GROUPING - | HAVING - | IF - | IGNORE - | IMPORT - | IN - | INCLUDING - | INDEX - | INDEXES - | INPATH - | INPUTFORMAT - | INSERT - | INT - | INTERVAL - | INTO - | IS - | ITEMS - | KEY - | KEYS - | LANGUAGE - | LAST - | LATERAL - | LAZY - | LEADING - | LIKE - | LIMIT - | LINES - | LIST - | LOAD - | LOCAL - | LOCATION - | LOCK - | LOCKS - | LOGICAL - | MACRO - | MAP - | MATCH - | MINUS - | MSCK - | MULTISET - | NEXT - | NO - | NOT - | NULL - | NULLS - | OF - | OPTION - | OPTIONS - | OR - | ORDER - | OUT - | OUTER - | OUTPUTFORMAT - | OVER - | OVERWRITE - | PARTITION - | PARTITIONED - | PARTITIONS - | PERCENTLIT - | PERIOD - | PIVOT - | POSITION - | PRECEDING - | PRIMARY - | PRINCIPALS - | PURGE - | RANGE - | RAW - | RECORDREADER - | RECORDWRITER - | RECOVER - | REDUCE - | REFRESH - | RENAME - | REPAIR - | REPLACE - | RESET - | RESTRICT - | REVOKE - | RLIKE - | ROLE - | ROLES - | ROLLBACK - | ROLLUP - | ROW - | ROWS - | SELECT - | SEPARATED - | SERDE - | SERDEPROPERTIES - | SET - | SETS - | SHOW - | SKEWED - | SMALLINT - | SORT - | SORTED - | START - | STATISTICS - | STORED - | STRATIFY - | STRING - | STRUCT - | SYSTEM - | SYSTEM_TIME - | TABLE - | TABLES - | TABLESAMPLE - | TBLPROPERTIES - | TEMPORARY - | TERMINATED - | THEN - | TIME - | TIMESTAMP - | TINYINT - | TO - | TOUCH - | TRAILING - | TRANSACTION - | TRANSACTIONS - | TRANSFORM - | TRUE - | TRUNCATE - | UNARCHIVE - | UNBOUNDED - | UNCACHE - | UNLOCK - | UNSET - | UNNEST - | USE - | USER - | VALUES - | VARBINARY - | VARCHAR - | VIEW - | VIEWS - | WATERMARK - | WHEN - | WHERE - | WINDOW - | WITH - | WITHIN - | WS - ; +nonReservedKeywords + :KW_ADD + |KW_ADMIN + |KW_AFTER + |KW_ANALYZE + |KW_ASC + |KW_BEFORE + |KW_BYTES + |KW_CASCADE + |KW_CATALOG + |KW_CATALOGS + |KW_CENTURY + |KW_CHAIN + |KW_CHANGELOG_MODE + |KW_CHARACTERS + |KW_COMMENT + |KW_COMPACT + |KW_COLUMNS + |KW_CONSTRAINTS + |KW_CONSTRUCTOR + |KW_CUMULATE + |KW_DATA + |KW_DATABASE + |KW_DATABASES + |KW_DAYS + |KW_DECADE + |KW_DEFINED + |KW_DESC + |KW_DESCRIPTOR + |KW_DIV + |KW_ENCODING + |KW_ENFORCED + |KW_ENGINE + |KW_ERROR + |KW_ESTIMATED_COST + |KW_EXCEPTION + |KW_EXCLUDE + |KW_EXCLUDING + |KW_EXTENDED + |KW_FILE + |KW_FINAL + |KW_FIRST + |KW_FOLLOWING + |KW_FORMAT + |KW_FORTRAN + |KW_FOUND + |KW_FRAC_SECOND + |KW_FUNCTIONS + |KW_GENERAL + |KW_GENERATED + |KW_GO + |KW_GOTO + |KW_GRANTED + |KW_HOP + |KW_HOURS + |KW_IF + |KW_IGNORE + |KW_INCREMENT + |KW_INPUT + |KW_INVOKER + |KW_JAR + |KW_JARS + |KW_JAVA + |KW_JSON + |KW_JSON_EXECUTION_PLAN + |KW_KEY + |KW_KEY_MEMBER + |KW_KEY_TYPE + |KW_LABEL + |KW_LAST + |KW_LENGTH + |KW_LEVEL + |KW_LOAD + |KW_MAP + |KW_MICROSECOND + |KW_MILLENNIUM + |KW_MILLISECOND + |KW_MINUTES + |KW_MINVALUE + |KW_MODIFY + |KW_MODULES + |KW_MONTHS + |KW_NANOSECOND + |KW_NULLS + |KW_NUMBER + |KW_OPTION + |KW_OPTIONS + |KW_ORDERING + |KW_OUTPUT + |KW_OVERWRITE + |KW_OVERWRITING + |KW_PARTITIONED + |KW_PARTITIONS + |KW_PASSING + |KW_PAST + |KW_PATH + |KW_PLACING + |KW_PLAN + |KW_PRECEDING + |KW_PRESERVE + |KW_PRIOR + |KW_PRIVILEGES + |KW_PUBLIC + |KW_PYTHON + |KW_PYTHON_FILES + |KW_PYTHON_REQUIREMENTS + |KW_PYTHON_DEPENDENCIES + |KW_PYTHON_JAR + |KW_PYTHON_ARCHIVES + |KW_PYTHON_PARAMETER + |KW_QUARTER + |KW_RAW + |KW_READ + |KW_RELATIVE + |KW_REMOVE + |KW_RENAME + |KW_REPLACE + |KW_RESPECT + |KW_RESTART + |KW_RESTRICT + |KW_ROLE + |KW_ROW_COUNT + |KW_SCALA + |KW_SCALAR + |KW_SCALE + |KW_SCHEMA + |KW_SECONDS + |KW_SECTION + |KW_SECURITY + |KW_SELF + |KW_SERVER + |KW_SERVER_NAME + |KW_SESSION + |KW_SETS + |KW_SIMPLE + |KW_SIZE + |KW_SLIDE + |KW_SOURCE + |KW_SPACE + |KW_STATE + |KW_STATEMENT + |KW_STEP + |KW_STRING + |KW_STRUCTURE + |KW_STYLE + |KW_TABLES + |KW_TEMPORARY + |KW_TIMECOL + |KW_TIMESTAMP_LTZ + |KW_TIMESTAMPADD + |KW_TIMESTAMPDIFF + |KW_TRANSFORM + |KW_TUMBLE + |KW_TYPE + |KW_UNDER + |KW_UNLOAD + |KW_USAGE + |KW_USE + |KW_UTF16 + |KW_UTF32 + |KW_UTF8 + |KW_VERSION + |KW_VIEW + |KW_VIEWS + |KW_VIRTUAL + |KW_WATERMARK + |KW_WATERMARKS + |KW_WEEK + |KW_WORK + |KW_WRAPPER + |KW_YEARS + |KW_ZONE + ; \ No newline at end of file diff --git a/src/lib/flinksql/FlinkSqlLexer.interp b/src/lib/flinksql/FlinkSqlLexer.interp index b4b3446..101340d 100644 --- a/src/lib/flinksql/FlinkSqlLexer.interp +++ b/src/lib/flinksql/FlinkSqlLexer.interp @@ -3,313 +3,367 @@ null null null null -'SELECT' -'FROM' 'ADD' -'AS' -'ALL' -'ANY' -'DISTINCT' -'WHERE' -'GROUP' -'BY' -'GROUPING' -'SETS' -'CUBE' -'ROLLUP' -'ORDER' -'HAVING' -'LIMIT' -'AT' -'OR' -'AND' -'IN' -'NOT' -'NO' -'EXISTS' -'BETWEEN' -'LIKE' -'RLIKE' -'IS' -'TRUE' -'FALSE' -'NULLS' -'ASC' -'DESC' -'FOR' -'INTERVAL' -'CASE' -'WHEN' -'THEN' -'ELSE' -'BEGIN' -'END' -'JOIN' -'CROSS' -'OUTER' -'INNER' -'LEFT' -'SEMI' -'RIGHT' -'FULL' -'USER' -'NATURAL' -'ON' -'PIVOT' -'LATERAL' -'WINDOW' -'OVER' -'PARTITION' -'RANGE' -'ROWS' -'UNBOUNDED' -'PRECEDING' -'FOLLOWING' -'CURRENT' -'FIRST' +'ADMIN' 'AFTER' -'LAST' -'WITH' -'WITHOUT' -'VALUES' -'CREATE' -'TABLE' -'DIRECTORY' -'VIEW' -'REPLACE' -'EXECUTE' -'STATEMENT' -'INSERT' -'DELETE' -'REMOVE' -'INTO' -'DESCRIBE' -'EXPLAIN' -'PLAN' -'CHANGELOG_MODE' -'JSON_EXECUTION_PLAN' -'ESTIMATED_COST' -'FORMAT' -'LOGICAL' -'CODEGEN' -'COST' -'CAST' -'SHOW' -'TABLES' -'COLUMNS' -'COLUMN' -'USE' -'MODULE' -'MODULES' -'PARTITIONS' -'FUNCTIONS' -'DROP' -'UNION' -'EXCEPT' -'SETMINUS' -'INTERSECT' -'TO' -'TABLESAMPLE' -'STRATIFY' -'ALTER' -'RENAME' -'STRUCT' -'COMMENT' -'SET' -'RESET' -'DATA' -'START' -'TRANSACTION' -'COMMIT' -'ROLLBACK' -'MACRO' -'IGNORE' -'BOTH' -'LEADING' -'TRAILING' -'IF' -'POSITION' -'EXTRACT' -'MINUS' -'DIV' -'PERCENTLIT' -'BUCKET' -'OUT' -'OF' -'SORT' -'CLUSTER' -'DISTRIBUTE' -'OVERWRITE' -'TRANSFORM' -'REDUCE' -'USING' -'SERDE' -'SERDEPROPERTIES' -'RECORDREADER' -'RECORDWRITER' -'DELIMITED' -'FIELDS' -'TERMINATED' -'COLLECTION' -'ITEMS' -'KEYS' -'ESCAPED' -'LINES' -'SEPARATED' -'FUNCTION' -'EXTENDED' -'REFRESH' -'CLEAR' -'CACHE' -'UNCACHE' -'LAZY' -'FORMATTED' -'GLOBAL' -'TEMPORARY' -'OPTIONS' -'UNSET' -'TBLPROPERTIES' -'DBPROPERTIES' -'BUCKETS' -'SKEWED' -'STORED' -'DIRECTORIES' -'LOCATION' -'EXCHANGE' -'ARCHIVE' -'UNARCHIVE' -'FILEFORMAT' -'TOUCH' -'COMPACT' -'CONCATENATE' -'CHANGE' +'ANALYZE' +'ASC' +'BEFORE' +'BYTES' 'CASCADE' -'CONSTRAINT' -'RESTRICT' -'CLUSTERED' -'SORTED' -'PURGE' -'INPUTFORMAT' -'OUTPUTFORMAT' +'CATALOG' +'CATALOGS' +'CENTURY' +'CHAIN' +'CHANGELOG_MODE' +'CHARACTERS' +'COMMENT' +'COMPACT' +'COLUMNS' +'CONSTRAINTS' +'CONSTRUCTOR' +'CUMULATE' +'DATA' 'DATABASE' 'DATABASES' -'DFS' -'TRUNCATE' -'ANALYZE' -'COMPUTE' -'LIST' -'STATISTICS' -'PARTITIONED' -'EXTERNAL' +'DAYS' +'DECADE' 'DEFINED' -'REVOKE' -'GRANT' -'LOCK' -'UNLOCK' -'MSCK' -'REPAIR' -'RECOVER' -'EXPORT' -'IMPORT' -'LOAD' -'UNLOAD' -'ROLE' -'ROLES' -'COMPACTIONS' -'PRINCIPALS' -'TRANSACTIONS' -'INDEX' -'INDEXES' -'LOCKS' -'OPTION' -'ANTI' -'LOCAL' -'INPATH' -'WATERMARK' -'UNNEST' -'MATCH' -'NEXT' -'WITHIN' -'WS' -'SYSTEM' -'INCLUDING' +'DESC' +'DESCRIPTOR' +'DIV' +'ENCODING' +'ENFORCED' +'ENGINE' +'ERROR' +'ESTIMATED_COST' +'EXCEPTION' +'EXCLUDE' 'EXCLUDING' -'OVERWRITING' -'CONSTRAINTS' -'GENERATED' -'WATERMARKS' -'CATALOG' -'LANGUAGE' -'JAVA' -'SCALA' -'PYTHON' -'JAR' +'EXTENDED' 'FILE' +'FINAL' +'FIRST' +'FOLLOWING' +'FORMAT' +'FORTRAN' +'FOUND' +'FRAC_SECOND' +'FUNCTIONS' +'GENERAL' +'GENERATED' +'GO' +'GOTO' +'GRANTED' +'HOP' +'HOURS' +'IF' +'IGNORE' +'INCREMENT' +'INPUT' +'INVOKER' +'JAR' +'JARS' +'JAVA' +'JSON' +'JSON_EXECUTION_PLAN' +'KEY' +'KEY_MEMBER' +'KEY_TYPE' +'LABEL' +'LAST' +'LENGTH' +'LEVEL' +'LOAD' +'MAP' +'MICROSECOND' +'MILLENNIUM' +'MILLISECOND' +'MINUTES' +'MINVALUE' +'MODIFY' +'MODULES' +'MONTHS' +'NANOSECOND' +'NULLS' +'NUMBER' +'OPTION' +'OPTIONS' +'ORDERING' +'OUTPUT' +'OVERWRITE' +'OVERWRITING' +'PARTITIONED' +'PARTITIONS' +'PASSING' +'PAST' +'PATH' +'PLACING' +'PLAN' +'PRECEDING' +'PRESERVE' +'PRIOR' +'PRIVILEGES' +'PUBLIC' +'PYTHON' 'PYTHON_FILES' 'PYTHON_REQUIREMENTS' 'PYTHON_DEPENDENCIES' 'PYTHON_JAR' 'PYTHON_ARCHIVES' 'PYTHON_PARAMETER' -'ENGINE' -'CATALOGS' -'VIEWS' -'JARS' -'PRIMARY' -'UNIQUE' -'KEY' -'PERIOD' -'SYSTEM_TIME' -'ENFORCED' -'METADATA' -'VIRTUAL' -'ZONE' -'TUMBLE' -'HOP' -'CUMULATE' -'DESCRIPTOR' -'TIMECOL' -'SIZE' -'OFFSET' -'STEP' -'SLIDE' +'QUARTER' +'RAW' +'READ' +'RELATIVE' +'REMOVE' +'RENAME' +'REPLACE' +'RESPECT' +'RESTART' +'RESTRICT' +'ROLE' +'ROW_COUNT' +'SCALA' +'SCALAR' +'SCALE' +'SCHEMA' +'SECONDS' +'SECTION' +'SECURITY' +'SELF' +'SERVER' +'SERVER_NAME' 'SESSION' -'MATCH_RECOGNIZE' -'MEASURES' -'PATTERN' -'ONE' -'PER' -'SKIP' -'PAST' -'DEFINE' +'SETS' +'SIMPLE' +'SIZE' +'SLIDE' +'SOURCE' +'SPACE' +'STATE' +'STATEMENT' +'STEP' 'STRING' +'STRUCTURE' +'STYLE' +'TABLES' +'TEMPORARY' +'TIMECOL' +'TIMESTAMP_LTZ' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TRANSFORM' +'TUMBLE' +'TYPE' +'UNDER' +'UNLOAD' +'USAGE' +'USE' +'UTF16' +'UTF32' +'UTF8' +'VERSION' +'VIEW' +'VIEWS' +'VIRTUAL' +'WATERMARK' +'WATERMARKS' +'WEEK' +'WORK' +'WRAPPER' +'YEARS' +'ZONE' +'ABS' +'ALL' +'ALLOW' +'ALTER' +'AND' +'ANY' +'ARE' 'ARRAY' -'MAP' -'CHAR' -'VARCHAR' +'AS' +'AT' +'AVG' +'BEGIN' +'BETWEEN' +'BIGINT' 'BINARY' -'VARBINARY' -'BYTES' -'DECIMAL' +'BIT' +'BLOB' +'BOOLEAN' +'BOTH' +'BY' +'CALL' +'CALLED' +'CASCADED' +'CASE' +'CAST' +'CEIL' +'CHAR' +'CHARACTER' +'CHECK' +'CLOB' +'CLOSE' +'COALESCE' +'COLLATE' +'COLLECT' +'COLUMN' +'COMMIT' +'CONNECT' +'CONSTRAINT' +'CONTAINS' +'CONVERT' +'COUNT' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURSOR' +'CYCLE' +'DATE' +'DATETIME' +'DAY' 'DEC' -'NUMERIC' -'TINYINT' -'SMALLINT' +'DECIMAL' +'DECLARE' +'DEFAULT' +'DEFINE' +'DELETE' +'DESCRIBE' +'DISTINCT' +'DOUBLE' +'DROP' +'EACH' +'ELSE' +'END' +'EQUALS' +'EXCEPT' +'EXECUTE' +'EXISTS' +'EXPLAIN' +'EXTERNAL' +'EXTRACT' +'FALSE' +'FLOAT' +'FOR' +'FROM' +'FULL' +'FUNCTION' +'GLOBAL' +'GRANT' +'GROUP' +'GROUPING' +'GROUPS' +'HAVING' +'HOUR' +'IMPORT' +'IN' +'INCLUDING' +'INNER' +'INOUT' +'INSERT' 'INT' 'INTEGER' -'BIGINT' -'FLOAT' -'DOUBLE' -'DATE' +'INTERSECT' +'INTERVAL' +'INTO' +'IS' +'JOIN' +'LAG' +'LANGUAGE' +'LATERAL' +'LEADING' +'LEFT' +'LIKE' +'LIMIT' +'LOCAL' +'MATCH' +'MATCH_RECOGNIZE' +'MEASURES' +'MERGE' +'METADATA' +'MINUS' +'MINUTE' +'MODIFIES' +'MODULE' +'MONTH' +'MULTISET' +'NATURAL' +'NEXT' +'NO' +'NONE' +'NOT' +'NULL' +'NUMERIC' +'OF' +'OFFSET' +'ON' +'ONE' +'OR' +'ORDER' +'OUT' +'OUTER' +'OVER' +'OVERLAY' +'PARTITION' +'PATTERN' +'PER' +'PERCENT' +'PERIOD' +'POSITION' +'PRIMARY' +'RANGE' +'RANK' +'RESET' +'REVOKE' +'RIGHT' +'RLIKE' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'SECOND' +'SELECT' +'SET' +'SHOW' +'SKIP' +'SMALLINT' +'START' +'STATIC' +'SUBSTRING' +'SUM' +'SYSTEM' +'SYSTEM_TIME' +'SYSTEM_USER' +'TABLE' +'TABLESAMPLE' +'THEN' 'TIME' 'TIMESTAMP' -'TIMESTAMP_LTZ' -'MULTISET' -'BOOLEAN' -'RAW' -'ROW' -'NULL' -'DATETIME' +'TINYINT' +'TO' +'TRUE' +'TRUNCATE' +'UNION' +'UNIQUE' +'UNKNOWN' +'UNNEST' +'UPPER' +'UPSERT' +'USER' +'USING' +'VALUE' +'VALUES' +'VARBINARY' +'VARCHAR' +'WHEN' +'WHERE' +'WINDOW' +'WITH' +'WITHIN' +'WITHOUT' +'YEAR' '=' '>' '<' @@ -341,327 +395,380 @@ null '--' '/' '?' -null -null -null -null -null -null -null '=>' +null +null +null +null +null +null token symbolic names: null SPACE COMMENT_INPUT LINE_COMMENT -SELECT -FROM -ADD -AS -ALL -ANY -DISTINCT -WHERE -GROUP -BY -GROUPING -SETS -CUBE -ROLLUP -ORDER -HAVING -LIMIT -AT -OR -AND -IN -NOT -NO -EXISTS -BETWEEN -LIKE -RLIKE -IS -TRUE -FALSE -NULLS -ASC -DESC -FOR -INTERVAL -CASE -WHEN -THEN -ELSE -BEGIN -END -JOIN -CROSS -OUTER -INNER -LEFT -SEMI -RIGHT -FULL -USER -NATURAL -ON -PIVOT -LATERAL -WINDOW -OVER -PARTITION -RANGE -ROWS -UNBOUNDED -PRECEDING -FOLLOWING -CURRENT -FIRST -AFTER -LAST -WITH -WITHOUT -VALUES -CREATE -TABLE -DIRECTORY -VIEW -REPLACE -EXECUTE -STATEMENT -INSERT -DELETE -REMOVE -INTO -DESCRIBE -EXPLAIN -PLAN -CHANGELOG_MODE -JSON_EXECUTION_PLAN -ESTIMATED_COST -FORMAT -LOGICAL -CODEGEN -COST -CAST -SHOW -TABLES -COLUMNS -COLUMN -USE -MODULE -MODULES -PARTITIONS -FUNCTIONS -DROP -UNION -EXCEPT -SETMINUS -INTERSECT -TO -TABLESAMPLE -STRATIFY -ALTER -RENAME -STRUCT -COMMENT -SET -RESET -DATA -START -TRANSACTION -COMMIT -ROLLBACK -MACRO -IGNORE -BOTH -LEADING -TRAILING -IF -POSITION -EXTRACT -MINUS -DIV -PERCENTLIT -BUCKET -OUT -OF -SORT -CLUSTER -DISTRIBUTE -OVERWRITE -TRANSFORM -REDUCE -USING -SERDE -SERDEPROPERTIES -RECORDREADER -RECORDWRITER -DELIMITED -FIELDS -TERMINATED -COLLECTION -ITEMS -KEYS -ESCAPED -LINES -SEPARATED -FUNCTION -EXTENDED -REFRESH -CLEAR -CACHE -UNCACHE -LAZY -FORMATTED -GLOBAL -TEMPORARY -OPTIONS -UNSET -TBLPROPERTIES -DBPROPERTIES -BUCKETS -SKEWED -STORED -DIRECTORIES -LOCATION -EXCHANGE -ARCHIVE -UNARCHIVE -FILEFORMAT -TOUCH -COMPACT -CONCATENATE -CHANGE -CASCADE -CONSTRAINT -RESTRICT -CLUSTERED -SORTED -PURGE -INPUTFORMAT -OUTPUTFORMAT -DATABASE -DATABASES -DFS -TRUNCATE -ANALYZE -COMPUTE -LIST -STATISTICS -PARTITIONED -EXTERNAL -DEFINED -REVOKE -GRANT -LOCK -UNLOCK -MSCK -REPAIR -RECOVER -EXPORT -IMPORT -LOAD -UNLOAD -ROLE -ROLES -COMPACTIONS -PRINCIPALS -TRANSACTIONS -INDEX -INDEXES -LOCKS -OPTION -ANTI -LOCAL -INPATH -WATERMARK -UNNEST -MATCH -NEXT -WITHIN -WS -SYSTEM -INCLUDING -EXCLUDING -OVERWRITING -CONSTRAINTS -GENERATED -WATERMARKS -CATALOG -LANGUAGE -JAVA -SCALA -PYTHON -JAR -FILE -PYTHON_FILES -PYTHON_REQUIREMENTS -PYTHON_DEPENDENCIES -PYTHON_JAR -PYTHON_ARCHIVES -PYTHON_PARAMETER -ENGINE -CATALOGS -VIEWS -JARS -PRIMARY -UNIQUE -KEY -PERIOD -SYSTEM_TIME -ENFORCED -METADATA -VIRTUAL -ZONE -TUMBLE -HOP -CUMULATE -DESCRIPTOR -TIMECOL -SIZE -OFFSET -STEP -SLIDE -SESSION -MATCH_RECOGNIZE -MEASURES -PATTERN -ONE -PER +KW_ADD +KW_ADMIN +KW_AFTER +KW_ANALYZE +KW_ASC +KW_BEFORE +KW_BYTES +KW_CASCADE +KW_CATALOG +KW_CATALOGS +KW_CENTURY +KW_CHAIN +KW_CHANGELOG_MODE +KW_CHARACTERS +KW_COMMENT +KW_COMPACT +KW_COLUMNS +KW_CONSTRAINTS +KW_CONSTRUCTOR +KW_CUMULATE +KW_DATA +KW_DATABASE +KW_DATABASES +KW_DAYS +KW_DECADE +KW_DEFINED +KW_DESC +KW_DESCRIPTOR +KW_DIV +KW_ENCODING +KW_ENFORCED +KW_ENGINE +KW_ERROR +KW_ESTIMATED_COST +KW_EXCEPTION +KW_EXCLUDE +KW_EXCLUDING +KW_EXTENDED +KW_FILE +KW_FINAL +KW_FIRST +KW_FOLLOWING +KW_FORMAT +KW_FORTRAN +KW_FOUND +KW_FRAC_SECOND +KW_FUNCTIONS +KW_GENERAL +KW_GENERATED +KW_GO +KW_GOTO +KW_GRANTED +KW_HOP +KW_HOURS +KW_IF +KW_IGNORE +KW_INCREMENT +KW_INPUT +KW_INVOKER +KW_JAR +KW_JARS +KW_JAVA +KW_JSON +KW_JSON_EXECUTION_PLAN +KW_KEY +KW_KEY_MEMBER +KW_KEY_TYPE +KW_LABEL +KW_LAST +KW_LENGTH +KW_LEVEL +KW_LOAD +KW_MAP +KW_MICROSECOND +KW_MILLENNIUM +KW_MILLISECOND +KW_MINUTES +KW_MINVALUE +KW_MODIFY +KW_MODULES +KW_MONTHS +KW_NANOSECOND +KW_NULLS +KW_NUMBER +KW_OPTION +KW_OPTIONS +KW_ORDERING +KW_OUTPUT +KW_OVERWRITE +KW_OVERWRITING +KW_PARTITIONED +KW_PARTITIONS +KW_PASSING +KW_PAST +KW_PATH +KW_PLACING +KW_PLAN +KW_PRECEDING +KW_PRESERVE +KW_PRIOR +KW_PRIVILEGES +KW_PUBLIC +KW_PYTHON +KW_PYTHON_FILES +KW_PYTHON_REQUIREMENTS +KW_PYTHON_DEPENDENCIES +KW_PYTHON_JAR +KW_PYTHON_ARCHIVES +KW_PYTHON_PARAMETER +KW_QUARTER +KW_RAW +KW_READ +KW_RELATIVE +KW_REMOVE +KW_RENAME +KW_REPLACE +KW_RESPECT +KW_RESTART +KW_RESTRICT +KW_ROLE +KW_ROW_COUNT +KW_SCALA +KW_SCALAR +KW_SCALE +KW_SCHEMA +KW_SECONDS +KW_SECTION +KW_SECURITY +KW_SELF +KW_SERVER +KW_SERVER_NAME +KW_SESSION +KW_SETS +KW_SIMPLE +KW_SIZE +KW_SLIDE +KW_SOURCE +KW_SPACE +KW_STATE +KW_STATEMENT +KW_STEP +KW_STRING +KW_STRUCTURE +KW_STYLE +KW_TABLES +KW_TEMPORARY +KW_TIMECOL +KW_TIMESTAMP_LTZ +KW_TIMESTAMPADD +KW_TIMESTAMPDIFF +KW_TRANSFORM +KW_TUMBLE +KW_TYPE +KW_UNDER +KW_UNLOAD +KW_USAGE +KW_USE +KW_UTF16 +KW_UTF32 +KW_UTF8 +KW_VERSION +KW_VIEW +KW_VIEWS +KW_VIRTUAL +KW_WATERMARK +KW_WATERMARKS +KW_WEEK +KW_WORK +KW_WRAPPER +KW_YEARS +KW_ZONE +KW_ABS +KW_ALL +ALLOW +KW_ALTER +KW_AND +KW_ANY +KW_ARE +KW_ARRAY +KW_AS +KW_AT +KW_AVG +KW_BEGIN +KW_BETWEEN +KW_BIGINT +KW_BINARY +KW_BIT +KW_BLOB +KW_BOOLEAN +KW_BOTH +KW_BY +KW_CALL +KW_CALLED +KW_CASCADED +KW_CASE +KW_CAST +KW_CEIL +KW_CHAR +KW_CHARACTER +KW_CHECK +KW_CLOB +KW_CLOSE +KW_COALESCE +KW_COLLATE +KW_COLLECT +KW_COLUMN +KW_COMMIT +KW_CONNECT +KW_CONSTRAINT +KW_CONTAINS +KW_CONVERT +KW_COUNT +KW_CREATE +KW_CROSS +KW_CUBE +KW_CURRENT +KW_CURSOR +KW_CYCLE +KW_DATE +KW_DATETIME +KW_DAY +KW_DEC +KW_DECIMAL +KW_DECLARE +KW_DEFAULT +KW_DEFINE +KW_DELETE +KW_DESCRIBE +KW_DISTINCT +KW_DOUBLE +KW_DROP +KW_EACH +KW_ELSE +KW_END +KW_EQUALS +KW_EXCEPT +KW_EXECUTE +KW_EXISTS +KW_EXPLAIN +KW_EXTERNAL +KW_EXTRACT +KW_FALSE +KW_FLOAT +KW_FOR +KW_FROM +KW_FULL +KW_FUNCTION +KW_GLOBAL +KW_GRANT +KW_GROUP +KW_GROUPING +KW_GROUPS +KW_HAVING +KW_HOUR +KW_IMPORT +KW_IN +KW_INCLUDING +KW_INNER +KW_INOUT +KW_INSERT +KW_INT +KW_INTEGER +KW_INTERSECT +KW_INTERVAL +KW_INTO +KW_IS +KW_JOIN +KW_LAG +KW_LANGUAGE +KW_LATERAL +KW_LEADING +KW_LEFT +KW_LIKE +KW_LIMIT +KW_LOCAL +KW_MATCH +KW_MATCH_RECOGNIZE +KW_MEASURES +KW_MERGE +KW_METADATA +KW_MINUS +KW_MINUTE +KW_MODIFIES +KW_MODULE +KW_MONTH +KW_MULTISET +KW_NATURAL +KW_NEXT +KW_NO +KW_NONE +KW_NOT +KW_NULL +KW_NUMERIC +KW_OF +KW_OFFSET +KW_ON +KW_ONE +KW_OR +KW_ORDER +KW_OUT +KW_OUTER +KW_OVER +KW_OVERLAY +KW_PARTITION +KW_PATTERN +KW_PER +KW_PERCENT +KW_PERIOD +KW_POSITION +KW_PRIMARY +KW_RANGE +KW_RANK +KW_RESET +KW_REVOKE +KW_RIGHT +KW_RLIKE +KW_ROLLBACK +KW_ROLLUP +KW_ROW +KW_ROWS +KW_SECOND +KW_SELECT +KW_SET +KW_SHOW KW_SKIP -PAST -DEFINE -STRING -ARRAY -MAP -CHAR -VARCHAR -BINARY -VARBINARY -BYTES -DECIMAL -DEC -NUMERIC -TINYINT -SMALLINT -INT -INTEGER -BIGINT -FLOAT -DOUBLE -DATE -TIME -TIMESTAMP -TIMESTAMP_LTZ -MULTISET -BOOLEAN -RAW -ROW -NULL -DATETIME +KW_SMALLINT +KW_START +KW_STATIC +KW_SUBSTRING +KW_SUM +KW_SYSTEM +KW_SYSTEM_TIME +KW_SYSTEM_USER +KW_TABLE +KW_TABLESAMPLE +KW_THEN +KW_TIME +KW_TIMESTAMP +KW_TINYINT +KW_TO +KW_TRUE +KW_TRUNCATE +KW_UNION +KW_UNIQUE +KW_UNKNOWN +KW_UNNEST +KW_UPPER +KW_UPSERT +KW_USER +KW_USING +KW_VALUE +KW_VALUES +KW_VARBINARY +KW_VARCHAR +KW_WHEN +KW_WHERE +KW_WINDOW +KW_WITH +KW_WITHIN +KW_WITHOUT +KW_YEAR EQUAL_SYMBOL GREATER_SYMBOL LESS_SYMBOL @@ -693,326 +800,379 @@ DOUBLE_VERTICAL_SIGN DOUBLE_HYPNEN_SIGN SLASH_SIGN QUESTION_MARK_SIGN -DOT_ID +DOUBLE_RIGHT_ARROW STRING_LITERAL DIG_LITERAL REAL_LITERAL BIT_STRING ID_LITERAL FILE_PATH -DOUBLE_ARROW rule names: SPACE COMMENT_INPUT LINE_COMMENT -SELECT -FROM -ADD -AS -ALL -ANY -DISTINCT -WHERE -GROUP -BY -GROUPING -SETS -CUBE -ROLLUP -ORDER -HAVING -LIMIT -AT -OR -AND -IN -NOT -NO -EXISTS -BETWEEN -LIKE -RLIKE -IS -TRUE -FALSE -NULLS -ASC -DESC -FOR -INTERVAL -CASE -WHEN -THEN -ELSE -BEGIN -END -JOIN -CROSS -OUTER -INNER -LEFT -SEMI -RIGHT -FULL -USER -NATURAL -ON -PIVOT -LATERAL -WINDOW -OVER -PARTITION -RANGE -ROWS -UNBOUNDED -PRECEDING -FOLLOWING -CURRENT -FIRST -AFTER -LAST -WITH -WITHOUT -VALUES -CREATE -TABLE -DIRECTORY -VIEW -REPLACE -EXECUTE -STATEMENT -INSERT -DELETE -REMOVE -INTO -DESCRIBE -EXPLAIN -PLAN -CHANGELOG_MODE -JSON_EXECUTION_PLAN -ESTIMATED_COST -FORMAT -LOGICAL -CODEGEN -COST -CAST -SHOW -TABLES -COLUMNS -COLUMN -USE -MODULE -MODULES -PARTITIONS -FUNCTIONS -DROP -UNION -EXCEPT -SETMINUS -INTERSECT -TO -TABLESAMPLE -STRATIFY -ALTER -RENAME -STRUCT -COMMENT -SET -RESET -DATA -START -TRANSACTION -COMMIT -ROLLBACK -MACRO -IGNORE -BOTH -LEADING -TRAILING -IF -POSITION -EXTRACT -MINUS -DIV -PERCENTLIT -BUCKET -OUT -OF -SORT -CLUSTER -DISTRIBUTE -OVERWRITE -TRANSFORM -REDUCE -USING -SERDE -SERDEPROPERTIES -RECORDREADER -RECORDWRITER -DELIMITED -FIELDS -TERMINATED -COLLECTION -ITEMS -KEYS -ESCAPED -LINES -SEPARATED -FUNCTION -EXTENDED -REFRESH -CLEAR -CACHE -UNCACHE -LAZY -FORMATTED -GLOBAL -TEMPORARY -OPTIONS -UNSET -TBLPROPERTIES -DBPROPERTIES -BUCKETS -SKEWED -STORED -DIRECTORIES -LOCATION -EXCHANGE -ARCHIVE -UNARCHIVE -FILEFORMAT -TOUCH -COMPACT -CONCATENATE -CHANGE -CASCADE -CONSTRAINT -RESTRICT -CLUSTERED -SORTED -PURGE -INPUTFORMAT -OUTPUTFORMAT -DATABASE -DATABASES -DFS -TRUNCATE -ANALYZE -COMPUTE -LIST -STATISTICS -PARTITIONED -EXTERNAL -DEFINED -REVOKE -GRANT -LOCK -UNLOCK -MSCK -REPAIR -RECOVER -EXPORT -IMPORT -LOAD -UNLOAD -ROLE -ROLES -COMPACTIONS -PRINCIPALS -TRANSACTIONS -INDEX -INDEXES -LOCKS -OPTION -ANTI -LOCAL -INPATH -WATERMARK -UNNEST -MATCH -NEXT -WITHIN -WS -SYSTEM -INCLUDING -EXCLUDING -OVERWRITING -CONSTRAINTS -GENERATED -WATERMARKS -CATALOG -LANGUAGE -JAVA -SCALA -PYTHON -JAR -FILE -PYTHON_FILES -PYTHON_REQUIREMENTS -PYTHON_DEPENDENCIES -PYTHON_JAR -PYTHON_ARCHIVES -PYTHON_PARAMETER -ENGINE -CATALOGS -VIEWS -JARS -PRIMARY -UNIQUE -KEY -PERIOD -SYSTEM_TIME -ENFORCED -METADATA -VIRTUAL -ZONE -TUMBLE -HOP -CUMULATE -DESCRIPTOR -TIMECOL -SIZE -OFFSET -STEP -SLIDE -SESSION -MATCH_RECOGNIZE -MEASURES -PATTERN -ONE -PER +KW_ADD +KW_ADMIN +KW_AFTER +KW_ANALYZE +KW_ASC +KW_BEFORE +KW_BYTES +KW_CASCADE +KW_CATALOG +KW_CATALOGS +KW_CENTURY +KW_CHAIN +KW_CHANGELOG_MODE +KW_CHARACTERS +KW_COMMENT +KW_COMPACT +KW_COLUMNS +KW_CONSTRAINTS +KW_CONSTRUCTOR +KW_CUMULATE +KW_DATA +KW_DATABASE +KW_DATABASES +KW_DAYS +KW_DECADE +KW_DEFINED +KW_DESC +KW_DESCRIPTOR +KW_DIV +KW_ENCODING +KW_ENFORCED +KW_ENGINE +KW_ERROR +KW_ESTIMATED_COST +KW_EXCEPTION +KW_EXCLUDE +KW_EXCLUDING +KW_EXTENDED +KW_FILE +KW_FINAL +KW_FIRST +KW_FOLLOWING +KW_FORMAT +KW_FORTRAN +KW_FOUND +KW_FRAC_SECOND +KW_FUNCTIONS +KW_GENERAL +KW_GENERATED +KW_GO +KW_GOTO +KW_GRANTED +KW_HOP +KW_HOURS +KW_IF +KW_IGNORE +KW_INCREMENT +KW_INPUT +KW_INVOKER +KW_JAR +KW_JARS +KW_JAVA +KW_JSON +KW_JSON_EXECUTION_PLAN +KW_KEY +KW_KEY_MEMBER +KW_KEY_TYPE +KW_LABEL +KW_LAST +KW_LENGTH +KW_LEVEL +KW_LOAD +KW_MAP +KW_MICROSECOND +KW_MILLENNIUM +KW_MILLISECOND +KW_MINUTES +KW_MINVALUE +KW_MODIFY +KW_MODULES +KW_MONTHS +KW_NANOSECOND +KW_NULLS +KW_NUMBER +KW_OPTION +KW_OPTIONS +KW_ORDERING +KW_OUTPUT +KW_OVERWRITE +KW_OVERWRITING +KW_PARTITIONED +KW_PARTITIONS +KW_PASSING +KW_PAST +KW_PATH +KW_PLACING +KW_PLAN +KW_PRECEDING +KW_PRESERVE +KW_PRIOR +KW_PRIVILEGES +KW_PUBLIC +KW_PYTHON +KW_PYTHON_FILES +KW_PYTHON_REQUIREMENTS +KW_PYTHON_DEPENDENCIES +KW_PYTHON_JAR +KW_PYTHON_ARCHIVES +KW_PYTHON_PARAMETER +KW_QUARTER +KW_RAW +KW_READ +KW_RELATIVE +KW_REMOVE +KW_RENAME +KW_REPLACE +KW_RESPECT +KW_RESTART +KW_RESTRICT +KW_ROLE +KW_ROW_COUNT +KW_SCALA +KW_SCALAR +KW_SCALE +KW_SCHEMA +KW_SECONDS +KW_SECTION +KW_SECURITY +KW_SELF +KW_SERVER +KW_SERVER_NAME +KW_SESSION +KW_SETS +KW_SIMPLE +KW_SIZE +KW_SLIDE +KW_SOURCE +KW_SPACE +KW_STATE +KW_STATEMENT +KW_STEP +KW_STRING +KW_STRUCTURE +KW_STYLE +KW_TABLES +KW_TEMPORARY +KW_TIMECOL +KW_TIMESTAMP_LTZ +KW_TIMESTAMPADD +KW_TIMESTAMPDIFF +KW_TRANSFORM +KW_TUMBLE +KW_TYPE +KW_UNDER +KW_UNLOAD +KW_USAGE +KW_USE +KW_UTF16 +KW_UTF32 +KW_UTF8 +KW_VERSION +KW_VIEW +KW_VIEWS +KW_VIRTUAL +KW_WATERMARK +KW_WATERMARKS +KW_WEEK +KW_WORK +KW_WRAPPER +KW_YEARS +KW_ZONE +KW_ABS +KW_ALL +ALLOW +KW_ALTER +KW_AND +KW_ANY +KW_ARE +KW_ARRAY +KW_AS +KW_AT +KW_AVG +KW_BEGIN +KW_BETWEEN +KW_BIGINT +KW_BINARY +KW_BIT +KW_BLOB +KW_BOOLEAN +KW_BOTH +KW_BY +KW_CALL +KW_CALLED +KW_CASCADED +KW_CASE +KW_CAST +KW_CEIL +KW_CHAR +KW_CHARACTER +KW_CHECK +KW_CLOB +KW_CLOSE +KW_COALESCE +KW_COLLATE +KW_COLLECT +KW_COLUMN +KW_COMMIT +KW_CONNECT +KW_CONSTRAINT +KW_CONTAINS +KW_CONVERT +KW_COUNT +KW_CREATE +KW_CROSS +KW_CUBE +KW_CURRENT +KW_CURSOR +KW_CYCLE +KW_DATE +KW_DATETIME +KW_DAY +KW_DEC +KW_DECIMAL +KW_DECLARE +KW_DEFAULT +KW_DEFINE +KW_DELETE +KW_DESCRIBE +KW_DISTINCT +KW_DOUBLE +KW_DROP +KW_EACH +KW_ELSE +KW_END +KW_EQUALS +KW_EXCEPT +KW_EXECUTE +KW_EXISTS +KW_EXPLAIN +KW_EXTERNAL +KW_EXTRACT +KW_FALSE +KW_FLOAT +KW_FOR +KW_FROM +KW_FULL +KW_FUNCTION +KW_GLOBAL +KW_GRANT +KW_GROUP +KW_GROUPING +KW_GROUPS +KW_HAVING +KW_HOUR +KW_IMPORT +KW_IN +KW_INCLUDING +KW_INNER +KW_INOUT +KW_INSERT +KW_INT +KW_INTEGER +KW_INTERSECT +KW_INTERVAL +KW_INTO +KW_IS +KW_JOIN +KW_LAG +KW_LANGUAGE +KW_LATERAL +KW_LEADING +KW_LEFT +KW_LIKE +KW_LIMIT +KW_LOCAL +KW_MATCH +KW_MATCH_RECOGNIZE +KW_MEASURES +KW_MERGE +KW_METADATA +KW_MINUS +KW_MINUTE +KW_MODIFIES +KW_MODULE +KW_MONTH +KW_MULTISET +KW_NATURAL +KW_NEXT +KW_NO +KW_NONE +KW_NOT +KW_NULL +KW_NUMERIC +KW_OF +KW_OFFSET +KW_ON +KW_ONE +KW_OR +KW_ORDER +KW_OUT +KW_OUTER +KW_OVER +KW_OVERLAY +KW_PARTITION +KW_PATTERN +KW_PER +KW_PERCENT +KW_PERIOD +KW_POSITION +KW_PRIMARY +KW_RANGE +KW_RANK +KW_RESET +KW_REVOKE +KW_RIGHT +KW_RLIKE +KW_ROLLBACK +KW_ROLLUP +KW_ROW +KW_ROWS +KW_SECOND +KW_SELECT +KW_SET +KW_SHOW KW_SKIP -PAST -DEFINE -STRING -ARRAY -MAP -CHAR -VARCHAR -BINARY -VARBINARY -BYTES -DECIMAL -DEC -NUMERIC -TINYINT -SMALLINT -INT -INTEGER -BIGINT -FLOAT -DOUBLE -DATE -TIME -TIMESTAMP -TIMESTAMP_LTZ -MULTISET -BOOLEAN -RAW -ROW -NULL -DATETIME +KW_SMALLINT +KW_START +KW_STATIC +KW_SUBSTRING +KW_SUM +KW_SYSTEM +KW_SYSTEM_TIME +KW_SYSTEM_USER +KW_TABLE +KW_TABLESAMPLE +KW_THEN +KW_TIME +KW_TIMESTAMP +KW_TINYINT +KW_TO +KW_TRUE +KW_TRUNCATE +KW_UNION +KW_UNIQUE +KW_UNKNOWN +KW_UNNEST +KW_UPPER +KW_UPSERT +KW_USER +KW_USING +KW_VALUE +KW_VALUES +KW_VARBINARY +KW_VARCHAR +KW_WHEN +KW_WHERE +KW_WINDOW +KW_WITH +KW_WITHIN +KW_WITHOUT +KW_YEAR EQUAL_SYMBOL GREATER_SYMBOL LESS_SYMBOL @@ -1044,14 +1204,13 @@ DOUBLE_VERTICAL_SIGN DOUBLE_HYPNEN_SIGN SLASH_SIGN QUESTION_MARK_SIGN -DOT_ID +DOUBLE_RIGHT_ARROW STRING_LITERAL DIG_LITERAL REAL_LITERAL BIT_STRING ID_LITERAL FILE_PATH -DOUBLE_ARROW FILE_PATH_STRING JAR_FILE_PARTTARN EXPONENT_NUM_PART @@ -1071,4 +1230,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 349, 3295, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 1, 0, 4, 0, 721, 8, 0, 11, 0, 12, 0, 722, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 731, 8, 1, 10, 1, 12, 1, 734, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 3, 2, 744, 8, 2, 1, 2, 5, 2, 747, 8, 2, 10, 2, 12, 2, 750, 9, 2, 1, 2, 3, 2, 753, 8, 2, 1, 2, 1, 2, 3, 2, 757, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 763, 8, 2, 1, 2, 1, 2, 3, 2, 767, 8, 2, 3, 2, 769, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 310, 1, 310, 1, 311, 1, 311, 1, 312, 1, 312, 1, 313, 1, 313, 1, 314, 1, 314, 1, 315, 1, 315, 1, 316, 1, 316, 1, 317, 1, 317, 1, 318, 1, 318, 1, 319, 1, 319, 1, 320, 1, 320, 1, 321, 1, 321, 1, 322, 1, 322, 1, 323, 1, 323, 1, 324, 1, 324, 1, 325, 1, 325, 1, 326, 1, 326, 1, 327, 1, 327, 1, 328, 1, 328, 1, 329, 1, 329, 1, 330, 1, 330, 1, 331, 1, 331, 1, 332, 1, 332, 1, 333, 1, 333, 1, 334, 1, 334, 1, 335, 1, 335, 1, 336, 1, 336, 1, 337, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 1, 339, 1, 339, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 1, 342, 1, 342, 1, 342, 3, 342, 3133, 8, 342, 1, 343, 4, 343, 3136, 8, 343, 11, 343, 12, 343, 3137, 1, 344, 4, 344, 3141, 8, 344, 11, 344, 12, 344, 3142, 3, 344, 3145, 8, 344, 1, 344, 1, 344, 4, 344, 3149, 8, 344, 11, 344, 12, 344, 3150, 1, 344, 4, 344, 3154, 8, 344, 11, 344, 12, 344, 3155, 1, 344, 1, 344, 1, 344, 1, 344, 4, 344, 3162, 8, 344, 11, 344, 12, 344, 3163, 3, 344, 3166, 8, 344, 1, 344, 1, 344, 4, 344, 3170, 8, 344, 11, 344, 12, 344, 3171, 1, 344, 1, 344, 1, 344, 4, 344, 3177, 8, 344, 11, 344, 12, 344, 3178, 1, 344, 1, 344, 3, 344, 3183, 8, 344, 1, 345, 1, 345, 1, 346, 1, 346, 1, 347, 1, 347, 1, 348, 1, 348, 1, 348, 1, 349, 1, 349, 5, 349, 3196, 8, 349, 10, 349, 12, 349, 3199, 9, 349, 4, 349, 3201, 8, 349, 11, 349, 12, 349, 3202, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 5, 350, 3211, 8, 350, 10, 350, 12, 350, 3214, 9, 350, 1, 350, 1, 350, 1, 351, 1, 351, 3, 351, 3220, 8, 351, 1, 351, 4, 351, 3223, 8, 351, 11, 351, 12, 351, 3224, 1, 352, 5, 352, 3228, 8, 352, 10, 352, 12, 352, 3231, 9, 352, 1, 352, 4, 352, 3234, 8, 352, 11, 352, 12, 352, 3235, 1, 352, 5, 352, 3239, 8, 352, 10, 352, 12, 352, 3242, 9, 352, 1, 353, 1, 353, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 5, 355, 3254, 8, 355, 10, 355, 12, 355, 3257, 9, 355, 1, 355, 1, 355, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 5, 356, 3267, 8, 356, 10, 356, 12, 356, 3270, 9, 356, 1, 356, 1, 356, 1, 357, 1, 357, 1, 357, 4, 357, 3277, 8, 357, 11, 357, 12, 357, 3278, 1, 357, 1, 357, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 5, 358, 3289, 8, 358, 10, 358, 12, 358, 3292, 9, 358, 1, 358, 1, 358, 3, 732, 3229, 3235, 0, 359, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, 331, 663, 332, 665, 333, 667, 334, 669, 335, 671, 336, 673, 337, 675, 338, 677, 339, 679, 340, 681, 341, 683, 342, 685, 343, 687, 344, 689, 345, 691, 346, 693, 347, 695, 348, 697, 349, 699, 0, 701, 0, 703, 0, 705, 0, 707, 0, 709, 0, 711, 0, 713, 0, 715, 0, 717, 0, 1, 0, 13, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 47, 47, 92, 92, 3, 0, 32, 32, 47, 47, 92, 92, 2, 0, 92, 92, 96, 96, 2, 0, 43, 43, 45, 45, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 1, 0, 48, 49, 3327, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 663, 1, 0, 0, 0, 0, 665, 1, 0, 0, 0, 0, 667, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, 0, 673, 1, 0, 0, 0, 0, 675, 1, 0, 0, 0, 0, 677, 1, 0, 0, 0, 0, 679, 1, 0, 0, 0, 0, 681, 1, 0, 0, 0, 0, 683, 1, 0, 0, 0, 0, 685, 1, 0, 0, 0, 0, 687, 1, 0, 0, 0, 0, 689, 1, 0, 0, 0, 0, 691, 1, 0, 0, 0, 0, 693, 1, 0, 0, 0, 0, 695, 1, 0, 0, 0, 0, 697, 1, 0, 0, 0, 1, 720, 1, 0, 0, 0, 3, 726, 1, 0, 0, 0, 5, 768, 1, 0, 0, 0, 7, 772, 1, 0, 0, 0, 9, 779, 1, 0, 0, 0, 11, 784, 1, 0, 0, 0, 13, 788, 1, 0, 0, 0, 15, 791, 1, 0, 0, 0, 17, 795, 1, 0, 0, 0, 19, 799, 1, 0, 0, 0, 21, 808, 1, 0, 0, 0, 23, 814, 1, 0, 0, 0, 25, 820, 1, 0, 0, 0, 27, 823, 1, 0, 0, 0, 29, 832, 1, 0, 0, 0, 31, 837, 1, 0, 0, 0, 33, 842, 1, 0, 0, 0, 35, 849, 1, 0, 0, 0, 37, 855, 1, 0, 0, 0, 39, 862, 1, 0, 0, 0, 41, 868, 1, 0, 0, 0, 43, 871, 1, 0, 0, 0, 45, 874, 1, 0, 0, 0, 47, 878, 1, 0, 0, 0, 49, 881, 1, 0, 0, 0, 51, 885, 1, 0, 0, 0, 53, 888, 1, 0, 0, 0, 55, 895, 1, 0, 0, 0, 57, 903, 1, 0, 0, 0, 59, 908, 1, 0, 0, 0, 61, 914, 1, 0, 0, 0, 63, 917, 1, 0, 0, 0, 65, 922, 1, 0, 0, 0, 67, 928, 1, 0, 0, 0, 69, 934, 1, 0, 0, 0, 71, 938, 1, 0, 0, 0, 73, 943, 1, 0, 0, 0, 75, 947, 1, 0, 0, 0, 77, 956, 1, 0, 0, 0, 79, 961, 1, 0, 0, 0, 81, 966, 1, 0, 0, 0, 83, 971, 1, 0, 0, 0, 85, 976, 1, 0, 0, 0, 87, 982, 1, 0, 0, 0, 89, 986, 1, 0, 0, 0, 91, 991, 1, 0, 0, 0, 93, 997, 1, 0, 0, 0, 95, 1003, 1, 0, 0, 0, 97, 1009, 1, 0, 0, 0, 99, 1014, 1, 0, 0, 0, 101, 1019, 1, 0, 0, 0, 103, 1025, 1, 0, 0, 0, 105, 1030, 1, 0, 0, 0, 107, 1035, 1, 0, 0, 0, 109, 1043, 1, 0, 0, 0, 111, 1046, 1, 0, 0, 0, 113, 1052, 1, 0, 0, 0, 115, 1060, 1, 0, 0, 0, 117, 1067, 1, 0, 0, 0, 119, 1072, 1, 0, 0, 0, 121, 1082, 1, 0, 0, 0, 123, 1088, 1, 0, 0, 0, 125, 1093, 1, 0, 0, 0, 127, 1103, 1, 0, 0, 0, 129, 1113, 1, 0, 0, 0, 131, 1123, 1, 0, 0, 0, 133, 1131, 1, 0, 0, 0, 135, 1137, 1, 0, 0, 0, 137, 1143, 1, 0, 0, 0, 139, 1148, 1, 0, 0, 0, 141, 1153, 1, 0, 0, 0, 143, 1161, 1, 0, 0, 0, 145, 1168, 1, 0, 0, 0, 147, 1175, 1, 0, 0, 0, 149, 1181, 1, 0, 0, 0, 151, 1191, 1, 0, 0, 0, 153, 1196, 1, 0, 0, 0, 155, 1204, 1, 0, 0, 0, 157, 1212, 1, 0, 0, 0, 159, 1222, 1, 0, 0, 0, 161, 1229, 1, 0, 0, 0, 163, 1236, 1, 0, 0, 0, 165, 1243, 1, 0, 0, 0, 167, 1248, 1, 0, 0, 0, 169, 1257, 1, 0, 0, 0, 171, 1265, 1, 0, 0, 0, 173, 1270, 1, 0, 0, 0, 175, 1285, 1, 0, 0, 0, 177, 1305, 1, 0, 0, 0, 179, 1320, 1, 0, 0, 0, 181, 1327, 1, 0, 0, 0, 183, 1335, 1, 0, 0, 0, 185, 1343, 1, 0, 0, 0, 187, 1348, 1, 0, 0, 0, 189, 1353, 1, 0, 0, 0, 191, 1358, 1, 0, 0, 0, 193, 1365, 1, 0, 0, 0, 195, 1373, 1, 0, 0, 0, 197, 1380, 1, 0, 0, 0, 199, 1384, 1, 0, 0, 0, 201, 1391, 1, 0, 0, 0, 203, 1399, 1, 0, 0, 0, 205, 1410, 1, 0, 0, 0, 207, 1420, 1, 0, 0, 0, 209, 1425, 1, 0, 0, 0, 211, 1431, 1, 0, 0, 0, 213, 1438, 1, 0, 0, 0, 215, 1447, 1, 0, 0, 0, 217, 1457, 1, 0, 0, 0, 219, 1460, 1, 0, 0, 0, 221, 1472, 1, 0, 0, 0, 223, 1481, 1, 0, 0, 0, 225, 1487, 1, 0, 0, 0, 227, 1494, 1, 0, 0, 0, 229, 1501, 1, 0, 0, 0, 231, 1509, 1, 0, 0, 0, 233, 1513, 1, 0, 0, 0, 235, 1519, 1, 0, 0, 0, 237, 1524, 1, 0, 0, 0, 239, 1530, 1, 0, 0, 0, 241, 1542, 1, 0, 0, 0, 243, 1549, 1, 0, 0, 0, 245, 1558, 1, 0, 0, 0, 247, 1564, 1, 0, 0, 0, 249, 1571, 1, 0, 0, 0, 251, 1576, 1, 0, 0, 0, 253, 1584, 1, 0, 0, 0, 255, 1593, 1, 0, 0, 0, 257, 1596, 1, 0, 0, 0, 259, 1605, 1, 0, 0, 0, 261, 1613, 1, 0, 0, 0, 263, 1619, 1, 0, 0, 0, 265, 1623, 1, 0, 0, 0, 267, 1634, 1, 0, 0, 0, 269, 1641, 1, 0, 0, 0, 271, 1645, 1, 0, 0, 0, 273, 1648, 1, 0, 0, 0, 275, 1653, 1, 0, 0, 0, 277, 1661, 1, 0, 0, 0, 279, 1672, 1, 0, 0, 0, 281, 1682, 1, 0, 0, 0, 283, 1692, 1, 0, 0, 0, 285, 1699, 1, 0, 0, 0, 287, 1705, 1, 0, 0, 0, 289, 1711, 1, 0, 0, 0, 291, 1727, 1, 0, 0, 0, 293, 1740, 1, 0, 0, 0, 295, 1753, 1, 0, 0, 0, 297, 1763, 1, 0, 0, 0, 299, 1770, 1, 0, 0, 0, 301, 1781, 1, 0, 0, 0, 303, 1792, 1, 0, 0, 0, 305, 1798, 1, 0, 0, 0, 307, 1803, 1, 0, 0, 0, 309, 1811, 1, 0, 0, 0, 311, 1817, 1, 0, 0, 0, 313, 1827, 1, 0, 0, 0, 315, 1836, 1, 0, 0, 0, 317, 1845, 1, 0, 0, 0, 319, 1853, 1, 0, 0, 0, 321, 1859, 1, 0, 0, 0, 323, 1865, 1, 0, 0, 0, 325, 1873, 1, 0, 0, 0, 327, 1878, 1, 0, 0, 0, 329, 1888, 1, 0, 0, 0, 331, 1895, 1, 0, 0, 0, 333, 1905, 1, 0, 0, 0, 335, 1913, 1, 0, 0, 0, 337, 1919, 1, 0, 0, 0, 339, 1933, 1, 0, 0, 0, 341, 1946, 1, 0, 0, 0, 343, 1954, 1, 0, 0, 0, 345, 1961, 1, 0, 0, 0, 347, 1968, 1, 0, 0, 0, 349, 1980, 1, 0, 0, 0, 351, 1989, 1, 0, 0, 0, 353, 1998, 1, 0, 0, 0, 355, 2006, 1, 0, 0, 0, 357, 2016, 1, 0, 0, 0, 359, 2027, 1, 0, 0, 0, 361, 2033, 1, 0, 0, 0, 363, 2041, 1, 0, 0, 0, 365, 2053, 1, 0, 0, 0, 367, 2060, 1, 0, 0, 0, 369, 2068, 1, 0, 0, 0, 371, 2079, 1, 0, 0, 0, 373, 2088, 1, 0, 0, 0, 375, 2098, 1, 0, 0, 0, 377, 2105, 1, 0, 0, 0, 379, 2111, 1, 0, 0, 0, 381, 2123, 1, 0, 0, 0, 383, 2136, 1, 0, 0, 0, 385, 2145, 1, 0, 0, 0, 387, 2155, 1, 0, 0, 0, 389, 2159, 1, 0, 0, 0, 391, 2168, 1, 0, 0, 0, 393, 2176, 1, 0, 0, 0, 395, 2184, 1, 0, 0, 0, 397, 2189, 1, 0, 0, 0, 399, 2200, 1, 0, 0, 0, 401, 2212, 1, 0, 0, 0, 403, 2221, 1, 0, 0, 0, 405, 2229, 1, 0, 0, 0, 407, 2236, 1, 0, 0, 0, 409, 2242, 1, 0, 0, 0, 411, 2247, 1, 0, 0, 0, 413, 2254, 1, 0, 0, 0, 415, 2259, 1, 0, 0, 0, 417, 2266, 1, 0, 0, 0, 419, 2274, 1, 0, 0, 0, 421, 2281, 1, 0, 0, 0, 423, 2288, 1, 0, 0, 0, 425, 2293, 1, 0, 0, 0, 427, 2300, 1, 0, 0, 0, 429, 2305, 1, 0, 0, 0, 431, 2311, 1, 0, 0, 0, 433, 2323, 1, 0, 0, 0, 435, 2334, 1, 0, 0, 0, 437, 2347, 1, 0, 0, 0, 439, 2353, 1, 0, 0, 0, 441, 2361, 1, 0, 0, 0, 443, 2367, 1, 0, 0, 0, 445, 2374, 1, 0, 0, 0, 447, 2379, 1, 0, 0, 0, 449, 2385, 1, 0, 0, 0, 451, 2392, 1, 0, 0, 0, 453, 2402, 1, 0, 0, 0, 455, 2409, 1, 0, 0, 0, 457, 2415, 1, 0, 0, 0, 459, 2420, 1, 0, 0, 0, 461, 2427, 1, 0, 0, 0, 463, 2430, 1, 0, 0, 0, 465, 2437, 1, 0, 0, 0, 467, 2447, 1, 0, 0, 0, 469, 2457, 1, 0, 0, 0, 471, 2469, 1, 0, 0, 0, 473, 2481, 1, 0, 0, 0, 475, 2491, 1, 0, 0, 0, 477, 2502, 1, 0, 0, 0, 479, 2510, 1, 0, 0, 0, 481, 2519, 1, 0, 0, 0, 483, 2524, 1, 0, 0, 0, 485, 2530, 1, 0, 0, 0, 487, 2537, 1, 0, 0, 0, 489, 2541, 1, 0, 0, 0, 491, 2546, 1, 0, 0, 0, 493, 2559, 1, 0, 0, 0, 495, 2579, 1, 0, 0, 0, 497, 2599, 1, 0, 0, 0, 499, 2610, 1, 0, 0, 0, 501, 2626, 1, 0, 0, 0, 503, 2643, 1, 0, 0, 0, 505, 2650, 1, 0, 0, 0, 507, 2659, 1, 0, 0, 0, 509, 2665, 1, 0, 0, 0, 511, 2670, 1, 0, 0, 0, 513, 2678, 1, 0, 0, 0, 515, 2685, 1, 0, 0, 0, 517, 2689, 1, 0, 0, 0, 519, 2696, 1, 0, 0, 0, 521, 2708, 1, 0, 0, 0, 523, 2717, 1, 0, 0, 0, 525, 2726, 1, 0, 0, 0, 527, 2734, 1, 0, 0, 0, 529, 2739, 1, 0, 0, 0, 531, 2746, 1, 0, 0, 0, 533, 2750, 1, 0, 0, 0, 535, 2759, 1, 0, 0, 0, 537, 2770, 1, 0, 0, 0, 539, 2778, 1, 0, 0, 0, 541, 2783, 1, 0, 0, 0, 543, 2790, 1, 0, 0, 0, 545, 2795, 1, 0, 0, 0, 547, 2801, 1, 0, 0, 0, 549, 2809, 1, 0, 0, 0, 551, 2825, 1, 0, 0, 0, 553, 2834, 1, 0, 0, 0, 555, 2842, 1, 0, 0, 0, 557, 2846, 1, 0, 0, 0, 559, 2850, 1, 0, 0, 0, 561, 2855, 1, 0, 0, 0, 563, 2860, 1, 0, 0, 0, 565, 2867, 1, 0, 0, 0, 567, 2874, 1, 0, 0, 0, 569, 2880, 1, 0, 0, 0, 571, 2884, 1, 0, 0, 0, 573, 2889, 1, 0, 0, 0, 575, 2897, 1, 0, 0, 0, 577, 2904, 1, 0, 0, 0, 579, 2914, 1, 0, 0, 0, 581, 2920, 1, 0, 0, 0, 583, 2928, 1, 0, 0, 0, 585, 2932, 1, 0, 0, 0, 587, 2940, 1, 0, 0, 0, 589, 2948, 1, 0, 0, 0, 591, 2957, 1, 0, 0, 0, 593, 2961, 1, 0, 0, 0, 595, 2969, 1, 0, 0, 0, 597, 2976, 1, 0, 0, 0, 599, 2982, 1, 0, 0, 0, 601, 2989, 1, 0, 0, 0, 603, 2994, 1, 0, 0, 0, 605, 2999, 1, 0, 0, 0, 607, 3009, 1, 0, 0, 0, 609, 3023, 1, 0, 0, 0, 611, 3032, 1, 0, 0, 0, 613, 3040, 1, 0, 0, 0, 615, 3044, 1, 0, 0, 0, 617, 3048, 1, 0, 0, 0, 619, 3053, 1, 0, 0, 0, 621, 3062, 1, 0, 0, 0, 623, 3064, 1, 0, 0, 0, 625, 3066, 1, 0, 0, 0, 627, 3068, 1, 0, 0, 0, 629, 3070, 1, 0, 0, 0, 631, 3072, 1, 0, 0, 0, 633, 3074, 1, 0, 0, 0, 635, 3076, 1, 0, 0, 0, 637, 3078, 1, 0, 0, 0, 639, 3080, 1, 0, 0, 0, 641, 3082, 1, 0, 0, 0, 643, 3084, 1, 0, 0, 0, 645, 3086, 1, 0, 0, 0, 647, 3088, 1, 0, 0, 0, 649, 3090, 1, 0, 0, 0, 651, 3092, 1, 0, 0, 0, 653, 3094, 1, 0, 0, 0, 655, 3096, 1, 0, 0, 0, 657, 3098, 1, 0, 0, 0, 659, 3100, 1, 0, 0, 0, 661, 3102, 1, 0, 0, 0, 663, 3104, 1, 0, 0, 0, 665, 3106, 1, 0, 0, 0, 667, 3108, 1, 0, 0, 0, 669, 3110, 1, 0, 0, 0, 671, 3112, 1, 0, 0, 0, 673, 3114, 1, 0, 0, 0, 675, 3116, 1, 0, 0, 0, 677, 3119, 1, 0, 0, 0, 679, 3122, 1, 0, 0, 0, 681, 3124, 1, 0, 0, 0, 683, 3126, 1, 0, 0, 0, 685, 3132, 1, 0, 0, 0, 687, 3135, 1, 0, 0, 0, 689, 3182, 1, 0, 0, 0, 691, 3184, 1, 0, 0, 0, 693, 3186, 1, 0, 0, 0, 695, 3188, 1, 0, 0, 0, 697, 3190, 1, 0, 0, 0, 699, 3200, 1, 0, 0, 0, 701, 3204, 1, 0, 0, 0, 703, 3217, 1, 0, 0, 0, 705, 3229, 1, 0, 0, 0, 707, 3243, 1, 0, 0, 0, 709, 3245, 1, 0, 0, 0, 711, 3247, 1, 0, 0, 0, 713, 3260, 1, 0, 0, 0, 715, 3273, 1, 0, 0, 0, 717, 3282, 1, 0, 0, 0, 719, 721, 7, 0, 0, 0, 720, 719, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 720, 1, 0, 0, 0, 722, 723, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 725, 6, 0, 0, 0, 725, 2, 1, 0, 0, 0, 726, 727, 5, 47, 0, 0, 727, 728, 5, 42, 0, 0, 728, 732, 1, 0, 0, 0, 729, 731, 9, 0, 0, 0, 730, 729, 1, 0, 0, 0, 731, 734, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 732, 730, 1, 0, 0, 0, 733, 735, 1, 0, 0, 0, 734, 732, 1, 0, 0, 0, 735, 736, 5, 42, 0, 0, 736, 737, 5, 47, 0, 0, 737, 738, 1, 0, 0, 0, 738, 739, 6, 1, 0, 0, 739, 4, 1, 0, 0, 0, 740, 741, 5, 45, 0, 0, 741, 744, 5, 45, 0, 0, 742, 744, 5, 35, 0, 0, 743, 740, 1, 0, 0, 0, 743, 742, 1, 0, 0, 0, 744, 748, 1, 0, 0, 0, 745, 747, 8, 1, 0, 0, 746, 745, 1, 0, 0, 0, 747, 750, 1, 0, 0, 0, 748, 746, 1, 0, 0, 0, 748, 749, 1, 0, 0, 0, 749, 756, 1, 0, 0, 0, 750, 748, 1, 0, 0, 0, 751, 753, 5, 13, 0, 0, 752, 751, 1, 0, 0, 0, 752, 753, 1, 0, 0, 0, 753, 754, 1, 0, 0, 0, 754, 757, 5, 10, 0, 0, 755, 757, 5, 0, 0, 1, 756, 752, 1, 0, 0, 0, 756, 755, 1, 0, 0, 0, 757, 769, 1, 0, 0, 0, 758, 759, 5, 45, 0, 0, 759, 760, 5, 45, 0, 0, 760, 766, 1, 0, 0, 0, 761, 763, 5, 13, 0, 0, 762, 761, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 767, 5, 10, 0, 0, 765, 767, 5, 0, 0, 1, 766, 762, 1, 0, 0, 0, 766, 765, 1, 0, 0, 0, 767, 769, 1, 0, 0, 0, 768, 743, 1, 0, 0, 0, 768, 758, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 771, 6, 2, 0, 0, 771, 6, 1, 0, 0, 0, 772, 773, 5, 83, 0, 0, 773, 774, 5, 69, 0, 0, 774, 775, 5, 76, 0, 0, 775, 776, 5, 69, 0, 0, 776, 777, 5, 67, 0, 0, 777, 778, 5, 84, 0, 0, 778, 8, 1, 0, 0, 0, 779, 780, 5, 70, 0, 0, 780, 781, 5, 82, 0, 0, 781, 782, 5, 79, 0, 0, 782, 783, 5, 77, 0, 0, 783, 10, 1, 0, 0, 0, 784, 785, 5, 65, 0, 0, 785, 786, 5, 68, 0, 0, 786, 787, 5, 68, 0, 0, 787, 12, 1, 0, 0, 0, 788, 789, 5, 65, 0, 0, 789, 790, 5, 83, 0, 0, 790, 14, 1, 0, 0, 0, 791, 792, 5, 65, 0, 0, 792, 793, 5, 76, 0, 0, 793, 794, 5, 76, 0, 0, 794, 16, 1, 0, 0, 0, 795, 796, 5, 65, 0, 0, 796, 797, 5, 78, 0, 0, 797, 798, 5, 89, 0, 0, 798, 18, 1, 0, 0, 0, 799, 800, 5, 68, 0, 0, 800, 801, 5, 73, 0, 0, 801, 802, 5, 83, 0, 0, 802, 803, 5, 84, 0, 0, 803, 804, 5, 73, 0, 0, 804, 805, 5, 78, 0, 0, 805, 806, 5, 67, 0, 0, 806, 807, 5, 84, 0, 0, 807, 20, 1, 0, 0, 0, 808, 809, 5, 87, 0, 0, 809, 810, 5, 72, 0, 0, 810, 811, 5, 69, 0, 0, 811, 812, 5, 82, 0, 0, 812, 813, 5, 69, 0, 0, 813, 22, 1, 0, 0, 0, 814, 815, 5, 71, 0, 0, 815, 816, 5, 82, 0, 0, 816, 817, 5, 79, 0, 0, 817, 818, 5, 85, 0, 0, 818, 819, 5, 80, 0, 0, 819, 24, 1, 0, 0, 0, 820, 821, 5, 66, 0, 0, 821, 822, 5, 89, 0, 0, 822, 26, 1, 0, 0, 0, 823, 824, 5, 71, 0, 0, 824, 825, 5, 82, 0, 0, 825, 826, 5, 79, 0, 0, 826, 827, 5, 85, 0, 0, 827, 828, 5, 80, 0, 0, 828, 829, 5, 73, 0, 0, 829, 830, 5, 78, 0, 0, 830, 831, 5, 71, 0, 0, 831, 28, 1, 0, 0, 0, 832, 833, 5, 83, 0, 0, 833, 834, 5, 69, 0, 0, 834, 835, 5, 84, 0, 0, 835, 836, 5, 83, 0, 0, 836, 30, 1, 0, 0, 0, 837, 838, 5, 67, 0, 0, 838, 839, 5, 85, 0, 0, 839, 840, 5, 66, 0, 0, 840, 841, 5, 69, 0, 0, 841, 32, 1, 0, 0, 0, 842, 843, 5, 82, 0, 0, 843, 844, 5, 79, 0, 0, 844, 845, 5, 76, 0, 0, 845, 846, 5, 76, 0, 0, 846, 847, 5, 85, 0, 0, 847, 848, 5, 80, 0, 0, 848, 34, 1, 0, 0, 0, 849, 850, 5, 79, 0, 0, 850, 851, 5, 82, 0, 0, 851, 852, 5, 68, 0, 0, 852, 853, 5, 69, 0, 0, 853, 854, 5, 82, 0, 0, 854, 36, 1, 0, 0, 0, 855, 856, 5, 72, 0, 0, 856, 857, 5, 65, 0, 0, 857, 858, 5, 86, 0, 0, 858, 859, 5, 73, 0, 0, 859, 860, 5, 78, 0, 0, 860, 861, 5, 71, 0, 0, 861, 38, 1, 0, 0, 0, 862, 863, 5, 76, 0, 0, 863, 864, 5, 73, 0, 0, 864, 865, 5, 77, 0, 0, 865, 866, 5, 73, 0, 0, 866, 867, 5, 84, 0, 0, 867, 40, 1, 0, 0, 0, 868, 869, 5, 65, 0, 0, 869, 870, 5, 84, 0, 0, 870, 42, 1, 0, 0, 0, 871, 872, 5, 79, 0, 0, 872, 873, 5, 82, 0, 0, 873, 44, 1, 0, 0, 0, 874, 875, 5, 65, 0, 0, 875, 876, 5, 78, 0, 0, 876, 877, 5, 68, 0, 0, 877, 46, 1, 0, 0, 0, 878, 879, 5, 73, 0, 0, 879, 880, 5, 78, 0, 0, 880, 48, 1, 0, 0, 0, 881, 882, 5, 78, 0, 0, 882, 883, 5, 79, 0, 0, 883, 884, 5, 84, 0, 0, 884, 50, 1, 0, 0, 0, 885, 886, 5, 78, 0, 0, 886, 887, 5, 79, 0, 0, 887, 52, 1, 0, 0, 0, 888, 889, 5, 69, 0, 0, 889, 890, 5, 88, 0, 0, 890, 891, 5, 73, 0, 0, 891, 892, 5, 83, 0, 0, 892, 893, 5, 84, 0, 0, 893, 894, 5, 83, 0, 0, 894, 54, 1, 0, 0, 0, 895, 896, 5, 66, 0, 0, 896, 897, 5, 69, 0, 0, 897, 898, 5, 84, 0, 0, 898, 899, 5, 87, 0, 0, 899, 900, 5, 69, 0, 0, 900, 901, 5, 69, 0, 0, 901, 902, 5, 78, 0, 0, 902, 56, 1, 0, 0, 0, 903, 904, 5, 76, 0, 0, 904, 905, 5, 73, 0, 0, 905, 906, 5, 75, 0, 0, 906, 907, 5, 69, 0, 0, 907, 58, 1, 0, 0, 0, 908, 909, 5, 82, 0, 0, 909, 910, 5, 76, 0, 0, 910, 911, 5, 73, 0, 0, 911, 912, 5, 75, 0, 0, 912, 913, 5, 69, 0, 0, 913, 60, 1, 0, 0, 0, 914, 915, 5, 73, 0, 0, 915, 916, 5, 83, 0, 0, 916, 62, 1, 0, 0, 0, 917, 918, 5, 84, 0, 0, 918, 919, 5, 82, 0, 0, 919, 920, 5, 85, 0, 0, 920, 921, 5, 69, 0, 0, 921, 64, 1, 0, 0, 0, 922, 923, 5, 70, 0, 0, 923, 924, 5, 65, 0, 0, 924, 925, 5, 76, 0, 0, 925, 926, 5, 83, 0, 0, 926, 927, 5, 69, 0, 0, 927, 66, 1, 0, 0, 0, 928, 929, 5, 78, 0, 0, 929, 930, 5, 85, 0, 0, 930, 931, 5, 76, 0, 0, 931, 932, 5, 76, 0, 0, 932, 933, 5, 83, 0, 0, 933, 68, 1, 0, 0, 0, 934, 935, 5, 65, 0, 0, 935, 936, 5, 83, 0, 0, 936, 937, 5, 67, 0, 0, 937, 70, 1, 0, 0, 0, 938, 939, 5, 68, 0, 0, 939, 940, 5, 69, 0, 0, 940, 941, 5, 83, 0, 0, 941, 942, 5, 67, 0, 0, 942, 72, 1, 0, 0, 0, 943, 944, 5, 70, 0, 0, 944, 945, 5, 79, 0, 0, 945, 946, 5, 82, 0, 0, 946, 74, 1, 0, 0, 0, 947, 948, 5, 73, 0, 0, 948, 949, 5, 78, 0, 0, 949, 950, 5, 84, 0, 0, 950, 951, 5, 69, 0, 0, 951, 952, 5, 82, 0, 0, 952, 953, 5, 86, 0, 0, 953, 954, 5, 65, 0, 0, 954, 955, 5, 76, 0, 0, 955, 76, 1, 0, 0, 0, 956, 957, 5, 67, 0, 0, 957, 958, 5, 65, 0, 0, 958, 959, 5, 83, 0, 0, 959, 960, 5, 69, 0, 0, 960, 78, 1, 0, 0, 0, 961, 962, 5, 87, 0, 0, 962, 963, 5, 72, 0, 0, 963, 964, 5, 69, 0, 0, 964, 965, 5, 78, 0, 0, 965, 80, 1, 0, 0, 0, 966, 967, 5, 84, 0, 0, 967, 968, 5, 72, 0, 0, 968, 969, 5, 69, 0, 0, 969, 970, 5, 78, 0, 0, 970, 82, 1, 0, 0, 0, 971, 972, 5, 69, 0, 0, 972, 973, 5, 76, 0, 0, 973, 974, 5, 83, 0, 0, 974, 975, 5, 69, 0, 0, 975, 84, 1, 0, 0, 0, 976, 977, 5, 66, 0, 0, 977, 978, 5, 69, 0, 0, 978, 979, 5, 71, 0, 0, 979, 980, 5, 73, 0, 0, 980, 981, 5, 78, 0, 0, 981, 86, 1, 0, 0, 0, 982, 983, 5, 69, 0, 0, 983, 984, 5, 78, 0, 0, 984, 985, 5, 68, 0, 0, 985, 88, 1, 0, 0, 0, 986, 987, 5, 74, 0, 0, 987, 988, 5, 79, 0, 0, 988, 989, 5, 73, 0, 0, 989, 990, 5, 78, 0, 0, 990, 90, 1, 0, 0, 0, 991, 992, 5, 67, 0, 0, 992, 993, 5, 82, 0, 0, 993, 994, 5, 79, 0, 0, 994, 995, 5, 83, 0, 0, 995, 996, 5, 83, 0, 0, 996, 92, 1, 0, 0, 0, 997, 998, 5, 79, 0, 0, 998, 999, 5, 85, 0, 0, 999, 1000, 5, 84, 0, 0, 1000, 1001, 5, 69, 0, 0, 1001, 1002, 5, 82, 0, 0, 1002, 94, 1, 0, 0, 0, 1003, 1004, 5, 73, 0, 0, 1004, 1005, 5, 78, 0, 0, 1005, 1006, 5, 78, 0, 0, 1006, 1007, 5, 69, 0, 0, 1007, 1008, 5, 82, 0, 0, 1008, 96, 1, 0, 0, 0, 1009, 1010, 5, 76, 0, 0, 1010, 1011, 5, 69, 0, 0, 1011, 1012, 5, 70, 0, 0, 1012, 1013, 5, 84, 0, 0, 1013, 98, 1, 0, 0, 0, 1014, 1015, 5, 83, 0, 0, 1015, 1016, 5, 69, 0, 0, 1016, 1017, 5, 77, 0, 0, 1017, 1018, 5, 73, 0, 0, 1018, 100, 1, 0, 0, 0, 1019, 1020, 5, 82, 0, 0, 1020, 1021, 5, 73, 0, 0, 1021, 1022, 5, 71, 0, 0, 1022, 1023, 5, 72, 0, 0, 1023, 1024, 5, 84, 0, 0, 1024, 102, 1, 0, 0, 0, 1025, 1026, 5, 70, 0, 0, 1026, 1027, 5, 85, 0, 0, 1027, 1028, 5, 76, 0, 0, 1028, 1029, 5, 76, 0, 0, 1029, 104, 1, 0, 0, 0, 1030, 1031, 5, 85, 0, 0, 1031, 1032, 5, 83, 0, 0, 1032, 1033, 5, 69, 0, 0, 1033, 1034, 5, 82, 0, 0, 1034, 106, 1, 0, 0, 0, 1035, 1036, 5, 78, 0, 0, 1036, 1037, 5, 65, 0, 0, 1037, 1038, 5, 84, 0, 0, 1038, 1039, 5, 85, 0, 0, 1039, 1040, 5, 82, 0, 0, 1040, 1041, 5, 65, 0, 0, 1041, 1042, 5, 76, 0, 0, 1042, 108, 1, 0, 0, 0, 1043, 1044, 5, 79, 0, 0, 1044, 1045, 5, 78, 0, 0, 1045, 110, 1, 0, 0, 0, 1046, 1047, 5, 80, 0, 0, 1047, 1048, 5, 73, 0, 0, 1048, 1049, 5, 86, 0, 0, 1049, 1050, 5, 79, 0, 0, 1050, 1051, 5, 84, 0, 0, 1051, 112, 1, 0, 0, 0, 1052, 1053, 5, 76, 0, 0, 1053, 1054, 5, 65, 0, 0, 1054, 1055, 5, 84, 0, 0, 1055, 1056, 5, 69, 0, 0, 1056, 1057, 5, 82, 0, 0, 1057, 1058, 5, 65, 0, 0, 1058, 1059, 5, 76, 0, 0, 1059, 114, 1, 0, 0, 0, 1060, 1061, 5, 87, 0, 0, 1061, 1062, 5, 73, 0, 0, 1062, 1063, 5, 78, 0, 0, 1063, 1064, 5, 68, 0, 0, 1064, 1065, 5, 79, 0, 0, 1065, 1066, 5, 87, 0, 0, 1066, 116, 1, 0, 0, 0, 1067, 1068, 5, 79, 0, 0, 1068, 1069, 5, 86, 0, 0, 1069, 1070, 5, 69, 0, 0, 1070, 1071, 5, 82, 0, 0, 1071, 118, 1, 0, 0, 0, 1072, 1073, 5, 80, 0, 0, 1073, 1074, 5, 65, 0, 0, 1074, 1075, 5, 82, 0, 0, 1075, 1076, 5, 84, 0, 0, 1076, 1077, 5, 73, 0, 0, 1077, 1078, 5, 84, 0, 0, 1078, 1079, 5, 73, 0, 0, 1079, 1080, 5, 79, 0, 0, 1080, 1081, 5, 78, 0, 0, 1081, 120, 1, 0, 0, 0, 1082, 1083, 5, 82, 0, 0, 1083, 1084, 5, 65, 0, 0, 1084, 1085, 5, 78, 0, 0, 1085, 1086, 5, 71, 0, 0, 1086, 1087, 5, 69, 0, 0, 1087, 122, 1, 0, 0, 0, 1088, 1089, 5, 82, 0, 0, 1089, 1090, 5, 79, 0, 0, 1090, 1091, 5, 87, 0, 0, 1091, 1092, 5, 83, 0, 0, 1092, 124, 1, 0, 0, 0, 1093, 1094, 5, 85, 0, 0, 1094, 1095, 5, 78, 0, 0, 1095, 1096, 5, 66, 0, 0, 1096, 1097, 5, 79, 0, 0, 1097, 1098, 5, 85, 0, 0, 1098, 1099, 5, 78, 0, 0, 1099, 1100, 5, 68, 0, 0, 1100, 1101, 5, 69, 0, 0, 1101, 1102, 5, 68, 0, 0, 1102, 126, 1, 0, 0, 0, 1103, 1104, 5, 80, 0, 0, 1104, 1105, 5, 82, 0, 0, 1105, 1106, 5, 69, 0, 0, 1106, 1107, 5, 67, 0, 0, 1107, 1108, 5, 69, 0, 0, 1108, 1109, 5, 68, 0, 0, 1109, 1110, 5, 73, 0, 0, 1110, 1111, 5, 78, 0, 0, 1111, 1112, 5, 71, 0, 0, 1112, 128, 1, 0, 0, 0, 1113, 1114, 5, 70, 0, 0, 1114, 1115, 5, 79, 0, 0, 1115, 1116, 5, 76, 0, 0, 1116, 1117, 5, 76, 0, 0, 1117, 1118, 5, 79, 0, 0, 1118, 1119, 5, 87, 0, 0, 1119, 1120, 5, 73, 0, 0, 1120, 1121, 5, 78, 0, 0, 1121, 1122, 5, 71, 0, 0, 1122, 130, 1, 0, 0, 0, 1123, 1124, 5, 67, 0, 0, 1124, 1125, 5, 85, 0, 0, 1125, 1126, 5, 82, 0, 0, 1126, 1127, 5, 82, 0, 0, 1127, 1128, 5, 69, 0, 0, 1128, 1129, 5, 78, 0, 0, 1129, 1130, 5, 84, 0, 0, 1130, 132, 1, 0, 0, 0, 1131, 1132, 5, 70, 0, 0, 1132, 1133, 5, 73, 0, 0, 1133, 1134, 5, 82, 0, 0, 1134, 1135, 5, 83, 0, 0, 1135, 1136, 5, 84, 0, 0, 1136, 134, 1, 0, 0, 0, 1137, 1138, 5, 65, 0, 0, 1138, 1139, 5, 70, 0, 0, 1139, 1140, 5, 84, 0, 0, 1140, 1141, 5, 69, 0, 0, 1141, 1142, 5, 82, 0, 0, 1142, 136, 1, 0, 0, 0, 1143, 1144, 5, 76, 0, 0, 1144, 1145, 5, 65, 0, 0, 1145, 1146, 5, 83, 0, 0, 1146, 1147, 5, 84, 0, 0, 1147, 138, 1, 0, 0, 0, 1148, 1149, 5, 87, 0, 0, 1149, 1150, 5, 73, 0, 0, 1150, 1151, 5, 84, 0, 0, 1151, 1152, 5, 72, 0, 0, 1152, 140, 1, 0, 0, 0, 1153, 1154, 5, 87, 0, 0, 1154, 1155, 5, 73, 0, 0, 1155, 1156, 5, 84, 0, 0, 1156, 1157, 5, 72, 0, 0, 1157, 1158, 5, 79, 0, 0, 1158, 1159, 5, 85, 0, 0, 1159, 1160, 5, 84, 0, 0, 1160, 142, 1, 0, 0, 0, 1161, 1162, 5, 86, 0, 0, 1162, 1163, 5, 65, 0, 0, 1163, 1164, 5, 76, 0, 0, 1164, 1165, 5, 85, 0, 0, 1165, 1166, 5, 69, 0, 0, 1166, 1167, 5, 83, 0, 0, 1167, 144, 1, 0, 0, 0, 1168, 1169, 5, 67, 0, 0, 1169, 1170, 5, 82, 0, 0, 1170, 1171, 5, 69, 0, 0, 1171, 1172, 5, 65, 0, 0, 1172, 1173, 5, 84, 0, 0, 1173, 1174, 5, 69, 0, 0, 1174, 146, 1, 0, 0, 0, 1175, 1176, 5, 84, 0, 0, 1176, 1177, 5, 65, 0, 0, 1177, 1178, 5, 66, 0, 0, 1178, 1179, 5, 76, 0, 0, 1179, 1180, 5, 69, 0, 0, 1180, 148, 1, 0, 0, 0, 1181, 1182, 5, 68, 0, 0, 1182, 1183, 5, 73, 0, 0, 1183, 1184, 5, 82, 0, 0, 1184, 1185, 5, 69, 0, 0, 1185, 1186, 5, 67, 0, 0, 1186, 1187, 5, 84, 0, 0, 1187, 1188, 5, 79, 0, 0, 1188, 1189, 5, 82, 0, 0, 1189, 1190, 5, 89, 0, 0, 1190, 150, 1, 0, 0, 0, 1191, 1192, 5, 86, 0, 0, 1192, 1193, 5, 73, 0, 0, 1193, 1194, 5, 69, 0, 0, 1194, 1195, 5, 87, 0, 0, 1195, 152, 1, 0, 0, 0, 1196, 1197, 5, 82, 0, 0, 1197, 1198, 5, 69, 0, 0, 1198, 1199, 5, 80, 0, 0, 1199, 1200, 5, 76, 0, 0, 1200, 1201, 5, 65, 0, 0, 1201, 1202, 5, 67, 0, 0, 1202, 1203, 5, 69, 0, 0, 1203, 154, 1, 0, 0, 0, 1204, 1205, 5, 69, 0, 0, 1205, 1206, 5, 88, 0, 0, 1206, 1207, 5, 69, 0, 0, 1207, 1208, 5, 67, 0, 0, 1208, 1209, 5, 85, 0, 0, 1209, 1210, 5, 84, 0, 0, 1210, 1211, 5, 69, 0, 0, 1211, 156, 1, 0, 0, 0, 1212, 1213, 5, 83, 0, 0, 1213, 1214, 5, 84, 0, 0, 1214, 1215, 5, 65, 0, 0, 1215, 1216, 5, 84, 0, 0, 1216, 1217, 5, 69, 0, 0, 1217, 1218, 5, 77, 0, 0, 1218, 1219, 5, 69, 0, 0, 1219, 1220, 5, 78, 0, 0, 1220, 1221, 5, 84, 0, 0, 1221, 158, 1, 0, 0, 0, 1222, 1223, 5, 73, 0, 0, 1223, 1224, 5, 78, 0, 0, 1224, 1225, 5, 83, 0, 0, 1225, 1226, 5, 69, 0, 0, 1226, 1227, 5, 82, 0, 0, 1227, 1228, 5, 84, 0, 0, 1228, 160, 1, 0, 0, 0, 1229, 1230, 5, 68, 0, 0, 1230, 1231, 5, 69, 0, 0, 1231, 1232, 5, 76, 0, 0, 1232, 1233, 5, 69, 0, 0, 1233, 1234, 5, 84, 0, 0, 1234, 1235, 5, 69, 0, 0, 1235, 162, 1, 0, 0, 0, 1236, 1237, 5, 82, 0, 0, 1237, 1238, 5, 69, 0, 0, 1238, 1239, 5, 77, 0, 0, 1239, 1240, 5, 79, 0, 0, 1240, 1241, 5, 86, 0, 0, 1241, 1242, 5, 69, 0, 0, 1242, 164, 1, 0, 0, 0, 1243, 1244, 5, 73, 0, 0, 1244, 1245, 5, 78, 0, 0, 1245, 1246, 5, 84, 0, 0, 1246, 1247, 5, 79, 0, 0, 1247, 166, 1, 0, 0, 0, 1248, 1249, 5, 68, 0, 0, 1249, 1250, 5, 69, 0, 0, 1250, 1251, 5, 83, 0, 0, 1251, 1252, 5, 67, 0, 0, 1252, 1253, 5, 82, 0, 0, 1253, 1254, 5, 73, 0, 0, 1254, 1255, 5, 66, 0, 0, 1255, 1256, 5, 69, 0, 0, 1256, 168, 1, 0, 0, 0, 1257, 1258, 5, 69, 0, 0, 1258, 1259, 5, 88, 0, 0, 1259, 1260, 5, 80, 0, 0, 1260, 1261, 5, 76, 0, 0, 1261, 1262, 5, 65, 0, 0, 1262, 1263, 5, 73, 0, 0, 1263, 1264, 5, 78, 0, 0, 1264, 170, 1, 0, 0, 0, 1265, 1266, 5, 80, 0, 0, 1266, 1267, 5, 76, 0, 0, 1267, 1268, 5, 65, 0, 0, 1268, 1269, 5, 78, 0, 0, 1269, 172, 1, 0, 0, 0, 1270, 1271, 5, 67, 0, 0, 1271, 1272, 5, 72, 0, 0, 1272, 1273, 5, 65, 0, 0, 1273, 1274, 5, 78, 0, 0, 1274, 1275, 5, 71, 0, 0, 1275, 1276, 5, 69, 0, 0, 1276, 1277, 5, 76, 0, 0, 1277, 1278, 5, 79, 0, 0, 1278, 1279, 5, 71, 0, 0, 1279, 1280, 5, 95, 0, 0, 1280, 1281, 5, 77, 0, 0, 1281, 1282, 5, 79, 0, 0, 1282, 1283, 5, 68, 0, 0, 1283, 1284, 5, 69, 0, 0, 1284, 174, 1, 0, 0, 0, 1285, 1286, 5, 74, 0, 0, 1286, 1287, 5, 83, 0, 0, 1287, 1288, 5, 79, 0, 0, 1288, 1289, 5, 78, 0, 0, 1289, 1290, 5, 95, 0, 0, 1290, 1291, 5, 69, 0, 0, 1291, 1292, 5, 88, 0, 0, 1292, 1293, 5, 69, 0, 0, 1293, 1294, 5, 67, 0, 0, 1294, 1295, 5, 85, 0, 0, 1295, 1296, 5, 84, 0, 0, 1296, 1297, 5, 73, 0, 0, 1297, 1298, 5, 79, 0, 0, 1298, 1299, 5, 78, 0, 0, 1299, 1300, 5, 95, 0, 0, 1300, 1301, 5, 80, 0, 0, 1301, 1302, 5, 76, 0, 0, 1302, 1303, 5, 65, 0, 0, 1303, 1304, 5, 78, 0, 0, 1304, 176, 1, 0, 0, 0, 1305, 1306, 5, 69, 0, 0, 1306, 1307, 5, 83, 0, 0, 1307, 1308, 5, 84, 0, 0, 1308, 1309, 5, 73, 0, 0, 1309, 1310, 5, 77, 0, 0, 1310, 1311, 5, 65, 0, 0, 1311, 1312, 5, 84, 0, 0, 1312, 1313, 5, 69, 0, 0, 1313, 1314, 5, 68, 0, 0, 1314, 1315, 5, 95, 0, 0, 1315, 1316, 5, 67, 0, 0, 1316, 1317, 5, 79, 0, 0, 1317, 1318, 5, 83, 0, 0, 1318, 1319, 5, 84, 0, 0, 1319, 178, 1, 0, 0, 0, 1320, 1321, 5, 70, 0, 0, 1321, 1322, 5, 79, 0, 0, 1322, 1323, 5, 82, 0, 0, 1323, 1324, 5, 77, 0, 0, 1324, 1325, 5, 65, 0, 0, 1325, 1326, 5, 84, 0, 0, 1326, 180, 1, 0, 0, 0, 1327, 1328, 5, 76, 0, 0, 1328, 1329, 5, 79, 0, 0, 1329, 1330, 5, 71, 0, 0, 1330, 1331, 5, 73, 0, 0, 1331, 1332, 5, 67, 0, 0, 1332, 1333, 5, 65, 0, 0, 1333, 1334, 5, 76, 0, 0, 1334, 182, 1, 0, 0, 0, 1335, 1336, 5, 67, 0, 0, 1336, 1337, 5, 79, 0, 0, 1337, 1338, 5, 68, 0, 0, 1338, 1339, 5, 69, 0, 0, 1339, 1340, 5, 71, 0, 0, 1340, 1341, 5, 69, 0, 0, 1341, 1342, 5, 78, 0, 0, 1342, 184, 1, 0, 0, 0, 1343, 1344, 5, 67, 0, 0, 1344, 1345, 5, 79, 0, 0, 1345, 1346, 5, 83, 0, 0, 1346, 1347, 5, 84, 0, 0, 1347, 186, 1, 0, 0, 0, 1348, 1349, 5, 67, 0, 0, 1349, 1350, 5, 65, 0, 0, 1350, 1351, 5, 83, 0, 0, 1351, 1352, 5, 84, 0, 0, 1352, 188, 1, 0, 0, 0, 1353, 1354, 5, 83, 0, 0, 1354, 1355, 5, 72, 0, 0, 1355, 1356, 5, 79, 0, 0, 1356, 1357, 5, 87, 0, 0, 1357, 190, 1, 0, 0, 0, 1358, 1359, 5, 84, 0, 0, 1359, 1360, 5, 65, 0, 0, 1360, 1361, 5, 66, 0, 0, 1361, 1362, 5, 76, 0, 0, 1362, 1363, 5, 69, 0, 0, 1363, 1364, 5, 83, 0, 0, 1364, 192, 1, 0, 0, 0, 1365, 1366, 5, 67, 0, 0, 1366, 1367, 5, 79, 0, 0, 1367, 1368, 5, 76, 0, 0, 1368, 1369, 5, 85, 0, 0, 1369, 1370, 5, 77, 0, 0, 1370, 1371, 5, 78, 0, 0, 1371, 1372, 5, 83, 0, 0, 1372, 194, 1, 0, 0, 0, 1373, 1374, 5, 67, 0, 0, 1374, 1375, 5, 79, 0, 0, 1375, 1376, 5, 76, 0, 0, 1376, 1377, 5, 85, 0, 0, 1377, 1378, 5, 77, 0, 0, 1378, 1379, 5, 78, 0, 0, 1379, 196, 1, 0, 0, 0, 1380, 1381, 5, 85, 0, 0, 1381, 1382, 5, 83, 0, 0, 1382, 1383, 5, 69, 0, 0, 1383, 198, 1, 0, 0, 0, 1384, 1385, 5, 77, 0, 0, 1385, 1386, 5, 79, 0, 0, 1386, 1387, 5, 68, 0, 0, 1387, 1388, 5, 85, 0, 0, 1388, 1389, 5, 76, 0, 0, 1389, 1390, 5, 69, 0, 0, 1390, 200, 1, 0, 0, 0, 1391, 1392, 5, 77, 0, 0, 1392, 1393, 5, 79, 0, 0, 1393, 1394, 5, 68, 0, 0, 1394, 1395, 5, 85, 0, 0, 1395, 1396, 5, 76, 0, 0, 1396, 1397, 5, 69, 0, 0, 1397, 1398, 5, 83, 0, 0, 1398, 202, 1, 0, 0, 0, 1399, 1400, 5, 80, 0, 0, 1400, 1401, 5, 65, 0, 0, 1401, 1402, 5, 82, 0, 0, 1402, 1403, 5, 84, 0, 0, 1403, 1404, 5, 73, 0, 0, 1404, 1405, 5, 84, 0, 0, 1405, 1406, 5, 73, 0, 0, 1406, 1407, 5, 79, 0, 0, 1407, 1408, 5, 78, 0, 0, 1408, 1409, 5, 83, 0, 0, 1409, 204, 1, 0, 0, 0, 1410, 1411, 5, 70, 0, 0, 1411, 1412, 5, 85, 0, 0, 1412, 1413, 5, 78, 0, 0, 1413, 1414, 5, 67, 0, 0, 1414, 1415, 5, 84, 0, 0, 1415, 1416, 5, 73, 0, 0, 1416, 1417, 5, 79, 0, 0, 1417, 1418, 5, 78, 0, 0, 1418, 1419, 5, 83, 0, 0, 1419, 206, 1, 0, 0, 0, 1420, 1421, 5, 68, 0, 0, 1421, 1422, 5, 82, 0, 0, 1422, 1423, 5, 79, 0, 0, 1423, 1424, 5, 80, 0, 0, 1424, 208, 1, 0, 0, 0, 1425, 1426, 5, 85, 0, 0, 1426, 1427, 5, 78, 0, 0, 1427, 1428, 5, 73, 0, 0, 1428, 1429, 5, 79, 0, 0, 1429, 1430, 5, 78, 0, 0, 1430, 210, 1, 0, 0, 0, 1431, 1432, 5, 69, 0, 0, 1432, 1433, 5, 88, 0, 0, 1433, 1434, 5, 67, 0, 0, 1434, 1435, 5, 69, 0, 0, 1435, 1436, 5, 80, 0, 0, 1436, 1437, 5, 84, 0, 0, 1437, 212, 1, 0, 0, 0, 1438, 1439, 5, 83, 0, 0, 1439, 1440, 5, 69, 0, 0, 1440, 1441, 5, 84, 0, 0, 1441, 1442, 5, 77, 0, 0, 1442, 1443, 5, 73, 0, 0, 1443, 1444, 5, 78, 0, 0, 1444, 1445, 5, 85, 0, 0, 1445, 1446, 5, 83, 0, 0, 1446, 214, 1, 0, 0, 0, 1447, 1448, 5, 73, 0, 0, 1448, 1449, 5, 78, 0, 0, 1449, 1450, 5, 84, 0, 0, 1450, 1451, 5, 69, 0, 0, 1451, 1452, 5, 82, 0, 0, 1452, 1453, 5, 83, 0, 0, 1453, 1454, 5, 69, 0, 0, 1454, 1455, 5, 67, 0, 0, 1455, 1456, 5, 84, 0, 0, 1456, 216, 1, 0, 0, 0, 1457, 1458, 5, 84, 0, 0, 1458, 1459, 5, 79, 0, 0, 1459, 218, 1, 0, 0, 0, 1460, 1461, 5, 84, 0, 0, 1461, 1462, 5, 65, 0, 0, 1462, 1463, 5, 66, 0, 0, 1463, 1464, 5, 76, 0, 0, 1464, 1465, 5, 69, 0, 0, 1465, 1466, 5, 83, 0, 0, 1466, 1467, 5, 65, 0, 0, 1467, 1468, 5, 77, 0, 0, 1468, 1469, 5, 80, 0, 0, 1469, 1470, 5, 76, 0, 0, 1470, 1471, 5, 69, 0, 0, 1471, 220, 1, 0, 0, 0, 1472, 1473, 5, 83, 0, 0, 1473, 1474, 5, 84, 0, 0, 1474, 1475, 5, 82, 0, 0, 1475, 1476, 5, 65, 0, 0, 1476, 1477, 5, 84, 0, 0, 1477, 1478, 5, 73, 0, 0, 1478, 1479, 5, 70, 0, 0, 1479, 1480, 5, 89, 0, 0, 1480, 222, 1, 0, 0, 0, 1481, 1482, 5, 65, 0, 0, 1482, 1483, 5, 76, 0, 0, 1483, 1484, 5, 84, 0, 0, 1484, 1485, 5, 69, 0, 0, 1485, 1486, 5, 82, 0, 0, 1486, 224, 1, 0, 0, 0, 1487, 1488, 5, 82, 0, 0, 1488, 1489, 5, 69, 0, 0, 1489, 1490, 5, 78, 0, 0, 1490, 1491, 5, 65, 0, 0, 1491, 1492, 5, 77, 0, 0, 1492, 1493, 5, 69, 0, 0, 1493, 226, 1, 0, 0, 0, 1494, 1495, 5, 83, 0, 0, 1495, 1496, 5, 84, 0, 0, 1496, 1497, 5, 82, 0, 0, 1497, 1498, 5, 85, 0, 0, 1498, 1499, 5, 67, 0, 0, 1499, 1500, 5, 84, 0, 0, 1500, 228, 1, 0, 0, 0, 1501, 1502, 5, 67, 0, 0, 1502, 1503, 5, 79, 0, 0, 1503, 1504, 5, 77, 0, 0, 1504, 1505, 5, 77, 0, 0, 1505, 1506, 5, 69, 0, 0, 1506, 1507, 5, 78, 0, 0, 1507, 1508, 5, 84, 0, 0, 1508, 230, 1, 0, 0, 0, 1509, 1510, 5, 83, 0, 0, 1510, 1511, 5, 69, 0, 0, 1511, 1512, 5, 84, 0, 0, 1512, 232, 1, 0, 0, 0, 1513, 1514, 5, 82, 0, 0, 1514, 1515, 5, 69, 0, 0, 1515, 1516, 5, 83, 0, 0, 1516, 1517, 5, 69, 0, 0, 1517, 1518, 5, 84, 0, 0, 1518, 234, 1, 0, 0, 0, 1519, 1520, 5, 68, 0, 0, 1520, 1521, 5, 65, 0, 0, 1521, 1522, 5, 84, 0, 0, 1522, 1523, 5, 65, 0, 0, 1523, 236, 1, 0, 0, 0, 1524, 1525, 5, 83, 0, 0, 1525, 1526, 5, 84, 0, 0, 1526, 1527, 5, 65, 0, 0, 1527, 1528, 5, 82, 0, 0, 1528, 1529, 5, 84, 0, 0, 1529, 238, 1, 0, 0, 0, 1530, 1531, 5, 84, 0, 0, 1531, 1532, 5, 82, 0, 0, 1532, 1533, 5, 65, 0, 0, 1533, 1534, 5, 78, 0, 0, 1534, 1535, 5, 83, 0, 0, 1535, 1536, 5, 65, 0, 0, 1536, 1537, 5, 67, 0, 0, 1537, 1538, 5, 84, 0, 0, 1538, 1539, 5, 73, 0, 0, 1539, 1540, 5, 79, 0, 0, 1540, 1541, 5, 78, 0, 0, 1541, 240, 1, 0, 0, 0, 1542, 1543, 5, 67, 0, 0, 1543, 1544, 5, 79, 0, 0, 1544, 1545, 5, 77, 0, 0, 1545, 1546, 5, 77, 0, 0, 1546, 1547, 5, 73, 0, 0, 1547, 1548, 5, 84, 0, 0, 1548, 242, 1, 0, 0, 0, 1549, 1550, 5, 82, 0, 0, 1550, 1551, 5, 79, 0, 0, 1551, 1552, 5, 76, 0, 0, 1552, 1553, 5, 76, 0, 0, 1553, 1554, 5, 66, 0, 0, 1554, 1555, 5, 65, 0, 0, 1555, 1556, 5, 67, 0, 0, 1556, 1557, 5, 75, 0, 0, 1557, 244, 1, 0, 0, 0, 1558, 1559, 5, 77, 0, 0, 1559, 1560, 5, 65, 0, 0, 1560, 1561, 5, 67, 0, 0, 1561, 1562, 5, 82, 0, 0, 1562, 1563, 5, 79, 0, 0, 1563, 246, 1, 0, 0, 0, 1564, 1565, 5, 73, 0, 0, 1565, 1566, 5, 71, 0, 0, 1566, 1567, 5, 78, 0, 0, 1567, 1568, 5, 79, 0, 0, 1568, 1569, 5, 82, 0, 0, 1569, 1570, 5, 69, 0, 0, 1570, 248, 1, 0, 0, 0, 1571, 1572, 5, 66, 0, 0, 1572, 1573, 5, 79, 0, 0, 1573, 1574, 5, 84, 0, 0, 1574, 1575, 5, 72, 0, 0, 1575, 250, 1, 0, 0, 0, 1576, 1577, 5, 76, 0, 0, 1577, 1578, 5, 69, 0, 0, 1578, 1579, 5, 65, 0, 0, 1579, 1580, 5, 68, 0, 0, 1580, 1581, 5, 73, 0, 0, 1581, 1582, 5, 78, 0, 0, 1582, 1583, 5, 71, 0, 0, 1583, 252, 1, 0, 0, 0, 1584, 1585, 5, 84, 0, 0, 1585, 1586, 5, 82, 0, 0, 1586, 1587, 5, 65, 0, 0, 1587, 1588, 5, 73, 0, 0, 1588, 1589, 5, 76, 0, 0, 1589, 1590, 5, 73, 0, 0, 1590, 1591, 5, 78, 0, 0, 1591, 1592, 5, 71, 0, 0, 1592, 254, 1, 0, 0, 0, 1593, 1594, 5, 73, 0, 0, 1594, 1595, 5, 70, 0, 0, 1595, 256, 1, 0, 0, 0, 1596, 1597, 5, 80, 0, 0, 1597, 1598, 5, 79, 0, 0, 1598, 1599, 5, 83, 0, 0, 1599, 1600, 5, 73, 0, 0, 1600, 1601, 5, 84, 0, 0, 1601, 1602, 5, 73, 0, 0, 1602, 1603, 5, 79, 0, 0, 1603, 1604, 5, 78, 0, 0, 1604, 258, 1, 0, 0, 0, 1605, 1606, 5, 69, 0, 0, 1606, 1607, 5, 88, 0, 0, 1607, 1608, 5, 84, 0, 0, 1608, 1609, 5, 82, 0, 0, 1609, 1610, 5, 65, 0, 0, 1610, 1611, 5, 67, 0, 0, 1611, 1612, 5, 84, 0, 0, 1612, 260, 1, 0, 0, 0, 1613, 1614, 5, 77, 0, 0, 1614, 1615, 5, 73, 0, 0, 1615, 1616, 5, 78, 0, 0, 1616, 1617, 5, 85, 0, 0, 1617, 1618, 5, 83, 0, 0, 1618, 262, 1, 0, 0, 0, 1619, 1620, 5, 68, 0, 0, 1620, 1621, 5, 73, 0, 0, 1621, 1622, 5, 86, 0, 0, 1622, 264, 1, 0, 0, 0, 1623, 1624, 5, 80, 0, 0, 1624, 1625, 5, 69, 0, 0, 1625, 1626, 5, 82, 0, 0, 1626, 1627, 5, 67, 0, 0, 1627, 1628, 5, 69, 0, 0, 1628, 1629, 5, 78, 0, 0, 1629, 1630, 5, 84, 0, 0, 1630, 1631, 5, 76, 0, 0, 1631, 1632, 5, 73, 0, 0, 1632, 1633, 5, 84, 0, 0, 1633, 266, 1, 0, 0, 0, 1634, 1635, 5, 66, 0, 0, 1635, 1636, 5, 85, 0, 0, 1636, 1637, 5, 67, 0, 0, 1637, 1638, 5, 75, 0, 0, 1638, 1639, 5, 69, 0, 0, 1639, 1640, 5, 84, 0, 0, 1640, 268, 1, 0, 0, 0, 1641, 1642, 5, 79, 0, 0, 1642, 1643, 5, 85, 0, 0, 1643, 1644, 5, 84, 0, 0, 1644, 270, 1, 0, 0, 0, 1645, 1646, 5, 79, 0, 0, 1646, 1647, 5, 70, 0, 0, 1647, 272, 1, 0, 0, 0, 1648, 1649, 5, 83, 0, 0, 1649, 1650, 5, 79, 0, 0, 1650, 1651, 5, 82, 0, 0, 1651, 1652, 5, 84, 0, 0, 1652, 274, 1, 0, 0, 0, 1653, 1654, 5, 67, 0, 0, 1654, 1655, 5, 76, 0, 0, 1655, 1656, 5, 85, 0, 0, 1656, 1657, 5, 83, 0, 0, 1657, 1658, 5, 84, 0, 0, 1658, 1659, 5, 69, 0, 0, 1659, 1660, 5, 82, 0, 0, 1660, 276, 1, 0, 0, 0, 1661, 1662, 5, 68, 0, 0, 1662, 1663, 5, 73, 0, 0, 1663, 1664, 5, 83, 0, 0, 1664, 1665, 5, 84, 0, 0, 1665, 1666, 5, 82, 0, 0, 1666, 1667, 5, 73, 0, 0, 1667, 1668, 5, 66, 0, 0, 1668, 1669, 5, 85, 0, 0, 1669, 1670, 5, 84, 0, 0, 1670, 1671, 5, 69, 0, 0, 1671, 278, 1, 0, 0, 0, 1672, 1673, 5, 79, 0, 0, 1673, 1674, 5, 86, 0, 0, 1674, 1675, 5, 69, 0, 0, 1675, 1676, 5, 82, 0, 0, 1676, 1677, 5, 87, 0, 0, 1677, 1678, 5, 82, 0, 0, 1678, 1679, 5, 73, 0, 0, 1679, 1680, 5, 84, 0, 0, 1680, 1681, 5, 69, 0, 0, 1681, 280, 1, 0, 0, 0, 1682, 1683, 5, 84, 0, 0, 1683, 1684, 5, 82, 0, 0, 1684, 1685, 5, 65, 0, 0, 1685, 1686, 5, 78, 0, 0, 1686, 1687, 5, 83, 0, 0, 1687, 1688, 5, 70, 0, 0, 1688, 1689, 5, 79, 0, 0, 1689, 1690, 5, 82, 0, 0, 1690, 1691, 5, 77, 0, 0, 1691, 282, 1, 0, 0, 0, 1692, 1693, 5, 82, 0, 0, 1693, 1694, 5, 69, 0, 0, 1694, 1695, 5, 68, 0, 0, 1695, 1696, 5, 85, 0, 0, 1696, 1697, 5, 67, 0, 0, 1697, 1698, 5, 69, 0, 0, 1698, 284, 1, 0, 0, 0, 1699, 1700, 5, 85, 0, 0, 1700, 1701, 5, 83, 0, 0, 1701, 1702, 5, 73, 0, 0, 1702, 1703, 5, 78, 0, 0, 1703, 1704, 5, 71, 0, 0, 1704, 286, 1, 0, 0, 0, 1705, 1706, 5, 83, 0, 0, 1706, 1707, 5, 69, 0, 0, 1707, 1708, 5, 82, 0, 0, 1708, 1709, 5, 68, 0, 0, 1709, 1710, 5, 69, 0, 0, 1710, 288, 1, 0, 0, 0, 1711, 1712, 5, 83, 0, 0, 1712, 1713, 5, 69, 0, 0, 1713, 1714, 5, 82, 0, 0, 1714, 1715, 5, 68, 0, 0, 1715, 1716, 5, 69, 0, 0, 1716, 1717, 5, 80, 0, 0, 1717, 1718, 5, 82, 0, 0, 1718, 1719, 5, 79, 0, 0, 1719, 1720, 5, 80, 0, 0, 1720, 1721, 5, 69, 0, 0, 1721, 1722, 5, 82, 0, 0, 1722, 1723, 5, 84, 0, 0, 1723, 1724, 5, 73, 0, 0, 1724, 1725, 5, 69, 0, 0, 1725, 1726, 5, 83, 0, 0, 1726, 290, 1, 0, 0, 0, 1727, 1728, 5, 82, 0, 0, 1728, 1729, 5, 69, 0, 0, 1729, 1730, 5, 67, 0, 0, 1730, 1731, 5, 79, 0, 0, 1731, 1732, 5, 82, 0, 0, 1732, 1733, 5, 68, 0, 0, 1733, 1734, 5, 82, 0, 0, 1734, 1735, 5, 69, 0, 0, 1735, 1736, 5, 65, 0, 0, 1736, 1737, 5, 68, 0, 0, 1737, 1738, 5, 69, 0, 0, 1738, 1739, 5, 82, 0, 0, 1739, 292, 1, 0, 0, 0, 1740, 1741, 5, 82, 0, 0, 1741, 1742, 5, 69, 0, 0, 1742, 1743, 5, 67, 0, 0, 1743, 1744, 5, 79, 0, 0, 1744, 1745, 5, 82, 0, 0, 1745, 1746, 5, 68, 0, 0, 1746, 1747, 5, 87, 0, 0, 1747, 1748, 5, 82, 0, 0, 1748, 1749, 5, 73, 0, 0, 1749, 1750, 5, 84, 0, 0, 1750, 1751, 5, 69, 0, 0, 1751, 1752, 5, 82, 0, 0, 1752, 294, 1, 0, 0, 0, 1753, 1754, 5, 68, 0, 0, 1754, 1755, 5, 69, 0, 0, 1755, 1756, 5, 76, 0, 0, 1756, 1757, 5, 73, 0, 0, 1757, 1758, 5, 77, 0, 0, 1758, 1759, 5, 73, 0, 0, 1759, 1760, 5, 84, 0, 0, 1760, 1761, 5, 69, 0, 0, 1761, 1762, 5, 68, 0, 0, 1762, 296, 1, 0, 0, 0, 1763, 1764, 5, 70, 0, 0, 1764, 1765, 5, 73, 0, 0, 1765, 1766, 5, 69, 0, 0, 1766, 1767, 5, 76, 0, 0, 1767, 1768, 5, 68, 0, 0, 1768, 1769, 5, 83, 0, 0, 1769, 298, 1, 0, 0, 0, 1770, 1771, 5, 84, 0, 0, 1771, 1772, 5, 69, 0, 0, 1772, 1773, 5, 82, 0, 0, 1773, 1774, 5, 77, 0, 0, 1774, 1775, 5, 73, 0, 0, 1775, 1776, 5, 78, 0, 0, 1776, 1777, 5, 65, 0, 0, 1777, 1778, 5, 84, 0, 0, 1778, 1779, 5, 69, 0, 0, 1779, 1780, 5, 68, 0, 0, 1780, 300, 1, 0, 0, 0, 1781, 1782, 5, 67, 0, 0, 1782, 1783, 5, 79, 0, 0, 1783, 1784, 5, 76, 0, 0, 1784, 1785, 5, 76, 0, 0, 1785, 1786, 5, 69, 0, 0, 1786, 1787, 5, 67, 0, 0, 1787, 1788, 5, 84, 0, 0, 1788, 1789, 5, 73, 0, 0, 1789, 1790, 5, 79, 0, 0, 1790, 1791, 5, 78, 0, 0, 1791, 302, 1, 0, 0, 0, 1792, 1793, 5, 73, 0, 0, 1793, 1794, 5, 84, 0, 0, 1794, 1795, 5, 69, 0, 0, 1795, 1796, 5, 77, 0, 0, 1796, 1797, 5, 83, 0, 0, 1797, 304, 1, 0, 0, 0, 1798, 1799, 5, 75, 0, 0, 1799, 1800, 5, 69, 0, 0, 1800, 1801, 5, 89, 0, 0, 1801, 1802, 5, 83, 0, 0, 1802, 306, 1, 0, 0, 0, 1803, 1804, 5, 69, 0, 0, 1804, 1805, 5, 83, 0, 0, 1805, 1806, 5, 67, 0, 0, 1806, 1807, 5, 65, 0, 0, 1807, 1808, 5, 80, 0, 0, 1808, 1809, 5, 69, 0, 0, 1809, 1810, 5, 68, 0, 0, 1810, 308, 1, 0, 0, 0, 1811, 1812, 5, 76, 0, 0, 1812, 1813, 5, 73, 0, 0, 1813, 1814, 5, 78, 0, 0, 1814, 1815, 5, 69, 0, 0, 1815, 1816, 5, 83, 0, 0, 1816, 310, 1, 0, 0, 0, 1817, 1818, 5, 83, 0, 0, 1818, 1819, 5, 69, 0, 0, 1819, 1820, 5, 80, 0, 0, 1820, 1821, 5, 65, 0, 0, 1821, 1822, 5, 82, 0, 0, 1822, 1823, 5, 65, 0, 0, 1823, 1824, 5, 84, 0, 0, 1824, 1825, 5, 69, 0, 0, 1825, 1826, 5, 68, 0, 0, 1826, 312, 1, 0, 0, 0, 1827, 1828, 5, 70, 0, 0, 1828, 1829, 5, 85, 0, 0, 1829, 1830, 5, 78, 0, 0, 1830, 1831, 5, 67, 0, 0, 1831, 1832, 5, 84, 0, 0, 1832, 1833, 5, 73, 0, 0, 1833, 1834, 5, 79, 0, 0, 1834, 1835, 5, 78, 0, 0, 1835, 314, 1, 0, 0, 0, 1836, 1837, 5, 69, 0, 0, 1837, 1838, 5, 88, 0, 0, 1838, 1839, 5, 84, 0, 0, 1839, 1840, 5, 69, 0, 0, 1840, 1841, 5, 78, 0, 0, 1841, 1842, 5, 68, 0, 0, 1842, 1843, 5, 69, 0, 0, 1843, 1844, 5, 68, 0, 0, 1844, 316, 1, 0, 0, 0, 1845, 1846, 5, 82, 0, 0, 1846, 1847, 5, 69, 0, 0, 1847, 1848, 5, 70, 0, 0, 1848, 1849, 5, 82, 0, 0, 1849, 1850, 5, 69, 0, 0, 1850, 1851, 5, 83, 0, 0, 1851, 1852, 5, 72, 0, 0, 1852, 318, 1, 0, 0, 0, 1853, 1854, 5, 67, 0, 0, 1854, 1855, 5, 76, 0, 0, 1855, 1856, 5, 69, 0, 0, 1856, 1857, 5, 65, 0, 0, 1857, 1858, 5, 82, 0, 0, 1858, 320, 1, 0, 0, 0, 1859, 1860, 5, 67, 0, 0, 1860, 1861, 5, 65, 0, 0, 1861, 1862, 5, 67, 0, 0, 1862, 1863, 5, 72, 0, 0, 1863, 1864, 5, 69, 0, 0, 1864, 322, 1, 0, 0, 0, 1865, 1866, 5, 85, 0, 0, 1866, 1867, 5, 78, 0, 0, 1867, 1868, 5, 67, 0, 0, 1868, 1869, 5, 65, 0, 0, 1869, 1870, 5, 67, 0, 0, 1870, 1871, 5, 72, 0, 0, 1871, 1872, 5, 69, 0, 0, 1872, 324, 1, 0, 0, 0, 1873, 1874, 5, 76, 0, 0, 1874, 1875, 5, 65, 0, 0, 1875, 1876, 5, 90, 0, 0, 1876, 1877, 5, 89, 0, 0, 1877, 326, 1, 0, 0, 0, 1878, 1879, 5, 70, 0, 0, 1879, 1880, 5, 79, 0, 0, 1880, 1881, 5, 82, 0, 0, 1881, 1882, 5, 77, 0, 0, 1882, 1883, 5, 65, 0, 0, 1883, 1884, 5, 84, 0, 0, 1884, 1885, 5, 84, 0, 0, 1885, 1886, 5, 69, 0, 0, 1886, 1887, 5, 68, 0, 0, 1887, 328, 1, 0, 0, 0, 1888, 1889, 5, 71, 0, 0, 1889, 1890, 5, 76, 0, 0, 1890, 1891, 5, 79, 0, 0, 1891, 1892, 5, 66, 0, 0, 1892, 1893, 5, 65, 0, 0, 1893, 1894, 5, 76, 0, 0, 1894, 330, 1, 0, 0, 0, 1895, 1896, 5, 84, 0, 0, 1896, 1897, 5, 69, 0, 0, 1897, 1898, 5, 77, 0, 0, 1898, 1899, 5, 80, 0, 0, 1899, 1900, 5, 79, 0, 0, 1900, 1901, 5, 82, 0, 0, 1901, 1902, 5, 65, 0, 0, 1902, 1903, 5, 82, 0, 0, 1903, 1904, 5, 89, 0, 0, 1904, 332, 1, 0, 0, 0, 1905, 1906, 5, 79, 0, 0, 1906, 1907, 5, 80, 0, 0, 1907, 1908, 5, 84, 0, 0, 1908, 1909, 5, 73, 0, 0, 1909, 1910, 5, 79, 0, 0, 1910, 1911, 5, 78, 0, 0, 1911, 1912, 5, 83, 0, 0, 1912, 334, 1, 0, 0, 0, 1913, 1914, 5, 85, 0, 0, 1914, 1915, 5, 78, 0, 0, 1915, 1916, 5, 83, 0, 0, 1916, 1917, 5, 69, 0, 0, 1917, 1918, 5, 84, 0, 0, 1918, 336, 1, 0, 0, 0, 1919, 1920, 5, 84, 0, 0, 1920, 1921, 5, 66, 0, 0, 1921, 1922, 5, 76, 0, 0, 1922, 1923, 5, 80, 0, 0, 1923, 1924, 5, 82, 0, 0, 1924, 1925, 5, 79, 0, 0, 1925, 1926, 5, 80, 0, 0, 1926, 1927, 5, 69, 0, 0, 1927, 1928, 5, 82, 0, 0, 1928, 1929, 5, 84, 0, 0, 1929, 1930, 5, 73, 0, 0, 1930, 1931, 5, 69, 0, 0, 1931, 1932, 5, 83, 0, 0, 1932, 338, 1, 0, 0, 0, 1933, 1934, 5, 68, 0, 0, 1934, 1935, 5, 66, 0, 0, 1935, 1936, 5, 80, 0, 0, 1936, 1937, 5, 82, 0, 0, 1937, 1938, 5, 79, 0, 0, 1938, 1939, 5, 80, 0, 0, 1939, 1940, 5, 69, 0, 0, 1940, 1941, 5, 82, 0, 0, 1941, 1942, 5, 84, 0, 0, 1942, 1943, 5, 73, 0, 0, 1943, 1944, 5, 69, 0, 0, 1944, 1945, 5, 83, 0, 0, 1945, 340, 1, 0, 0, 0, 1946, 1947, 5, 66, 0, 0, 1947, 1948, 5, 85, 0, 0, 1948, 1949, 5, 67, 0, 0, 1949, 1950, 5, 75, 0, 0, 1950, 1951, 5, 69, 0, 0, 1951, 1952, 5, 84, 0, 0, 1952, 1953, 5, 83, 0, 0, 1953, 342, 1, 0, 0, 0, 1954, 1955, 5, 83, 0, 0, 1955, 1956, 5, 75, 0, 0, 1956, 1957, 5, 69, 0, 0, 1957, 1958, 5, 87, 0, 0, 1958, 1959, 5, 69, 0, 0, 1959, 1960, 5, 68, 0, 0, 1960, 344, 1, 0, 0, 0, 1961, 1962, 5, 83, 0, 0, 1962, 1963, 5, 84, 0, 0, 1963, 1964, 5, 79, 0, 0, 1964, 1965, 5, 82, 0, 0, 1965, 1966, 5, 69, 0, 0, 1966, 1967, 5, 68, 0, 0, 1967, 346, 1, 0, 0, 0, 1968, 1969, 5, 68, 0, 0, 1969, 1970, 5, 73, 0, 0, 1970, 1971, 5, 82, 0, 0, 1971, 1972, 5, 69, 0, 0, 1972, 1973, 5, 67, 0, 0, 1973, 1974, 5, 84, 0, 0, 1974, 1975, 5, 79, 0, 0, 1975, 1976, 5, 82, 0, 0, 1976, 1977, 5, 73, 0, 0, 1977, 1978, 5, 69, 0, 0, 1978, 1979, 5, 83, 0, 0, 1979, 348, 1, 0, 0, 0, 1980, 1981, 5, 76, 0, 0, 1981, 1982, 5, 79, 0, 0, 1982, 1983, 5, 67, 0, 0, 1983, 1984, 5, 65, 0, 0, 1984, 1985, 5, 84, 0, 0, 1985, 1986, 5, 73, 0, 0, 1986, 1987, 5, 79, 0, 0, 1987, 1988, 5, 78, 0, 0, 1988, 350, 1, 0, 0, 0, 1989, 1990, 5, 69, 0, 0, 1990, 1991, 5, 88, 0, 0, 1991, 1992, 5, 67, 0, 0, 1992, 1993, 5, 72, 0, 0, 1993, 1994, 5, 65, 0, 0, 1994, 1995, 5, 78, 0, 0, 1995, 1996, 5, 71, 0, 0, 1996, 1997, 5, 69, 0, 0, 1997, 352, 1, 0, 0, 0, 1998, 1999, 5, 65, 0, 0, 1999, 2000, 5, 82, 0, 0, 2000, 2001, 5, 67, 0, 0, 2001, 2002, 5, 72, 0, 0, 2002, 2003, 5, 73, 0, 0, 2003, 2004, 5, 86, 0, 0, 2004, 2005, 5, 69, 0, 0, 2005, 354, 1, 0, 0, 0, 2006, 2007, 5, 85, 0, 0, 2007, 2008, 5, 78, 0, 0, 2008, 2009, 5, 65, 0, 0, 2009, 2010, 5, 82, 0, 0, 2010, 2011, 5, 67, 0, 0, 2011, 2012, 5, 72, 0, 0, 2012, 2013, 5, 73, 0, 0, 2013, 2014, 5, 86, 0, 0, 2014, 2015, 5, 69, 0, 0, 2015, 356, 1, 0, 0, 0, 2016, 2017, 5, 70, 0, 0, 2017, 2018, 5, 73, 0, 0, 2018, 2019, 5, 76, 0, 0, 2019, 2020, 5, 69, 0, 0, 2020, 2021, 5, 70, 0, 0, 2021, 2022, 5, 79, 0, 0, 2022, 2023, 5, 82, 0, 0, 2023, 2024, 5, 77, 0, 0, 2024, 2025, 5, 65, 0, 0, 2025, 2026, 5, 84, 0, 0, 2026, 358, 1, 0, 0, 0, 2027, 2028, 5, 84, 0, 0, 2028, 2029, 5, 79, 0, 0, 2029, 2030, 5, 85, 0, 0, 2030, 2031, 5, 67, 0, 0, 2031, 2032, 5, 72, 0, 0, 2032, 360, 1, 0, 0, 0, 2033, 2034, 5, 67, 0, 0, 2034, 2035, 5, 79, 0, 0, 2035, 2036, 5, 77, 0, 0, 2036, 2037, 5, 80, 0, 0, 2037, 2038, 5, 65, 0, 0, 2038, 2039, 5, 67, 0, 0, 2039, 2040, 5, 84, 0, 0, 2040, 362, 1, 0, 0, 0, 2041, 2042, 5, 67, 0, 0, 2042, 2043, 5, 79, 0, 0, 2043, 2044, 5, 78, 0, 0, 2044, 2045, 5, 67, 0, 0, 2045, 2046, 5, 65, 0, 0, 2046, 2047, 5, 84, 0, 0, 2047, 2048, 5, 69, 0, 0, 2048, 2049, 5, 78, 0, 0, 2049, 2050, 5, 65, 0, 0, 2050, 2051, 5, 84, 0, 0, 2051, 2052, 5, 69, 0, 0, 2052, 364, 1, 0, 0, 0, 2053, 2054, 5, 67, 0, 0, 2054, 2055, 5, 72, 0, 0, 2055, 2056, 5, 65, 0, 0, 2056, 2057, 5, 78, 0, 0, 2057, 2058, 5, 71, 0, 0, 2058, 2059, 5, 69, 0, 0, 2059, 366, 1, 0, 0, 0, 2060, 2061, 5, 67, 0, 0, 2061, 2062, 5, 65, 0, 0, 2062, 2063, 5, 83, 0, 0, 2063, 2064, 5, 67, 0, 0, 2064, 2065, 5, 65, 0, 0, 2065, 2066, 5, 68, 0, 0, 2066, 2067, 5, 69, 0, 0, 2067, 368, 1, 0, 0, 0, 2068, 2069, 5, 67, 0, 0, 2069, 2070, 5, 79, 0, 0, 2070, 2071, 5, 78, 0, 0, 2071, 2072, 5, 83, 0, 0, 2072, 2073, 5, 84, 0, 0, 2073, 2074, 5, 82, 0, 0, 2074, 2075, 5, 65, 0, 0, 2075, 2076, 5, 73, 0, 0, 2076, 2077, 5, 78, 0, 0, 2077, 2078, 5, 84, 0, 0, 2078, 370, 1, 0, 0, 0, 2079, 2080, 5, 82, 0, 0, 2080, 2081, 5, 69, 0, 0, 2081, 2082, 5, 83, 0, 0, 2082, 2083, 5, 84, 0, 0, 2083, 2084, 5, 82, 0, 0, 2084, 2085, 5, 73, 0, 0, 2085, 2086, 5, 67, 0, 0, 2086, 2087, 5, 84, 0, 0, 2087, 372, 1, 0, 0, 0, 2088, 2089, 5, 67, 0, 0, 2089, 2090, 5, 76, 0, 0, 2090, 2091, 5, 85, 0, 0, 2091, 2092, 5, 83, 0, 0, 2092, 2093, 5, 84, 0, 0, 2093, 2094, 5, 69, 0, 0, 2094, 2095, 5, 82, 0, 0, 2095, 2096, 5, 69, 0, 0, 2096, 2097, 5, 68, 0, 0, 2097, 374, 1, 0, 0, 0, 2098, 2099, 5, 83, 0, 0, 2099, 2100, 5, 79, 0, 0, 2100, 2101, 5, 82, 0, 0, 2101, 2102, 5, 84, 0, 0, 2102, 2103, 5, 69, 0, 0, 2103, 2104, 5, 68, 0, 0, 2104, 376, 1, 0, 0, 0, 2105, 2106, 5, 80, 0, 0, 2106, 2107, 5, 85, 0, 0, 2107, 2108, 5, 82, 0, 0, 2108, 2109, 5, 71, 0, 0, 2109, 2110, 5, 69, 0, 0, 2110, 378, 1, 0, 0, 0, 2111, 2112, 5, 73, 0, 0, 2112, 2113, 5, 78, 0, 0, 2113, 2114, 5, 80, 0, 0, 2114, 2115, 5, 85, 0, 0, 2115, 2116, 5, 84, 0, 0, 2116, 2117, 5, 70, 0, 0, 2117, 2118, 5, 79, 0, 0, 2118, 2119, 5, 82, 0, 0, 2119, 2120, 5, 77, 0, 0, 2120, 2121, 5, 65, 0, 0, 2121, 2122, 5, 84, 0, 0, 2122, 380, 1, 0, 0, 0, 2123, 2124, 5, 79, 0, 0, 2124, 2125, 5, 85, 0, 0, 2125, 2126, 5, 84, 0, 0, 2126, 2127, 5, 80, 0, 0, 2127, 2128, 5, 85, 0, 0, 2128, 2129, 5, 84, 0, 0, 2129, 2130, 5, 70, 0, 0, 2130, 2131, 5, 79, 0, 0, 2131, 2132, 5, 82, 0, 0, 2132, 2133, 5, 77, 0, 0, 2133, 2134, 5, 65, 0, 0, 2134, 2135, 5, 84, 0, 0, 2135, 382, 1, 0, 0, 0, 2136, 2137, 5, 68, 0, 0, 2137, 2138, 5, 65, 0, 0, 2138, 2139, 5, 84, 0, 0, 2139, 2140, 5, 65, 0, 0, 2140, 2141, 5, 66, 0, 0, 2141, 2142, 5, 65, 0, 0, 2142, 2143, 5, 83, 0, 0, 2143, 2144, 5, 69, 0, 0, 2144, 384, 1, 0, 0, 0, 2145, 2146, 5, 68, 0, 0, 2146, 2147, 5, 65, 0, 0, 2147, 2148, 5, 84, 0, 0, 2148, 2149, 5, 65, 0, 0, 2149, 2150, 5, 66, 0, 0, 2150, 2151, 5, 65, 0, 0, 2151, 2152, 5, 83, 0, 0, 2152, 2153, 5, 69, 0, 0, 2153, 2154, 5, 83, 0, 0, 2154, 386, 1, 0, 0, 0, 2155, 2156, 5, 68, 0, 0, 2156, 2157, 5, 70, 0, 0, 2157, 2158, 5, 83, 0, 0, 2158, 388, 1, 0, 0, 0, 2159, 2160, 5, 84, 0, 0, 2160, 2161, 5, 82, 0, 0, 2161, 2162, 5, 85, 0, 0, 2162, 2163, 5, 78, 0, 0, 2163, 2164, 5, 67, 0, 0, 2164, 2165, 5, 65, 0, 0, 2165, 2166, 5, 84, 0, 0, 2166, 2167, 5, 69, 0, 0, 2167, 390, 1, 0, 0, 0, 2168, 2169, 5, 65, 0, 0, 2169, 2170, 5, 78, 0, 0, 2170, 2171, 5, 65, 0, 0, 2171, 2172, 5, 76, 0, 0, 2172, 2173, 5, 89, 0, 0, 2173, 2174, 5, 90, 0, 0, 2174, 2175, 5, 69, 0, 0, 2175, 392, 1, 0, 0, 0, 2176, 2177, 5, 67, 0, 0, 2177, 2178, 5, 79, 0, 0, 2178, 2179, 5, 77, 0, 0, 2179, 2180, 5, 80, 0, 0, 2180, 2181, 5, 85, 0, 0, 2181, 2182, 5, 84, 0, 0, 2182, 2183, 5, 69, 0, 0, 2183, 394, 1, 0, 0, 0, 2184, 2185, 5, 76, 0, 0, 2185, 2186, 5, 73, 0, 0, 2186, 2187, 5, 83, 0, 0, 2187, 2188, 5, 84, 0, 0, 2188, 396, 1, 0, 0, 0, 2189, 2190, 5, 83, 0, 0, 2190, 2191, 5, 84, 0, 0, 2191, 2192, 5, 65, 0, 0, 2192, 2193, 5, 84, 0, 0, 2193, 2194, 5, 73, 0, 0, 2194, 2195, 5, 83, 0, 0, 2195, 2196, 5, 84, 0, 0, 2196, 2197, 5, 73, 0, 0, 2197, 2198, 5, 67, 0, 0, 2198, 2199, 5, 83, 0, 0, 2199, 398, 1, 0, 0, 0, 2200, 2201, 5, 80, 0, 0, 2201, 2202, 5, 65, 0, 0, 2202, 2203, 5, 82, 0, 0, 2203, 2204, 5, 84, 0, 0, 2204, 2205, 5, 73, 0, 0, 2205, 2206, 5, 84, 0, 0, 2206, 2207, 5, 73, 0, 0, 2207, 2208, 5, 79, 0, 0, 2208, 2209, 5, 78, 0, 0, 2209, 2210, 5, 69, 0, 0, 2210, 2211, 5, 68, 0, 0, 2211, 400, 1, 0, 0, 0, 2212, 2213, 5, 69, 0, 0, 2213, 2214, 5, 88, 0, 0, 2214, 2215, 5, 84, 0, 0, 2215, 2216, 5, 69, 0, 0, 2216, 2217, 5, 82, 0, 0, 2217, 2218, 5, 78, 0, 0, 2218, 2219, 5, 65, 0, 0, 2219, 2220, 5, 76, 0, 0, 2220, 402, 1, 0, 0, 0, 2221, 2222, 5, 68, 0, 0, 2222, 2223, 5, 69, 0, 0, 2223, 2224, 5, 70, 0, 0, 2224, 2225, 5, 73, 0, 0, 2225, 2226, 5, 78, 0, 0, 2226, 2227, 5, 69, 0, 0, 2227, 2228, 5, 68, 0, 0, 2228, 404, 1, 0, 0, 0, 2229, 2230, 5, 82, 0, 0, 2230, 2231, 5, 69, 0, 0, 2231, 2232, 5, 86, 0, 0, 2232, 2233, 5, 79, 0, 0, 2233, 2234, 5, 75, 0, 0, 2234, 2235, 5, 69, 0, 0, 2235, 406, 1, 0, 0, 0, 2236, 2237, 5, 71, 0, 0, 2237, 2238, 5, 82, 0, 0, 2238, 2239, 5, 65, 0, 0, 2239, 2240, 5, 78, 0, 0, 2240, 2241, 5, 84, 0, 0, 2241, 408, 1, 0, 0, 0, 2242, 2243, 5, 76, 0, 0, 2243, 2244, 5, 79, 0, 0, 2244, 2245, 5, 67, 0, 0, 2245, 2246, 5, 75, 0, 0, 2246, 410, 1, 0, 0, 0, 2247, 2248, 5, 85, 0, 0, 2248, 2249, 5, 78, 0, 0, 2249, 2250, 5, 76, 0, 0, 2250, 2251, 5, 79, 0, 0, 2251, 2252, 5, 67, 0, 0, 2252, 2253, 5, 75, 0, 0, 2253, 412, 1, 0, 0, 0, 2254, 2255, 5, 77, 0, 0, 2255, 2256, 5, 83, 0, 0, 2256, 2257, 5, 67, 0, 0, 2257, 2258, 5, 75, 0, 0, 2258, 414, 1, 0, 0, 0, 2259, 2260, 5, 82, 0, 0, 2260, 2261, 5, 69, 0, 0, 2261, 2262, 5, 80, 0, 0, 2262, 2263, 5, 65, 0, 0, 2263, 2264, 5, 73, 0, 0, 2264, 2265, 5, 82, 0, 0, 2265, 416, 1, 0, 0, 0, 2266, 2267, 5, 82, 0, 0, 2267, 2268, 5, 69, 0, 0, 2268, 2269, 5, 67, 0, 0, 2269, 2270, 5, 79, 0, 0, 2270, 2271, 5, 86, 0, 0, 2271, 2272, 5, 69, 0, 0, 2272, 2273, 5, 82, 0, 0, 2273, 418, 1, 0, 0, 0, 2274, 2275, 5, 69, 0, 0, 2275, 2276, 5, 88, 0, 0, 2276, 2277, 5, 80, 0, 0, 2277, 2278, 5, 79, 0, 0, 2278, 2279, 5, 82, 0, 0, 2279, 2280, 5, 84, 0, 0, 2280, 420, 1, 0, 0, 0, 2281, 2282, 5, 73, 0, 0, 2282, 2283, 5, 77, 0, 0, 2283, 2284, 5, 80, 0, 0, 2284, 2285, 5, 79, 0, 0, 2285, 2286, 5, 82, 0, 0, 2286, 2287, 5, 84, 0, 0, 2287, 422, 1, 0, 0, 0, 2288, 2289, 5, 76, 0, 0, 2289, 2290, 5, 79, 0, 0, 2290, 2291, 5, 65, 0, 0, 2291, 2292, 5, 68, 0, 0, 2292, 424, 1, 0, 0, 0, 2293, 2294, 5, 85, 0, 0, 2294, 2295, 5, 78, 0, 0, 2295, 2296, 5, 76, 0, 0, 2296, 2297, 5, 79, 0, 0, 2297, 2298, 5, 65, 0, 0, 2298, 2299, 5, 68, 0, 0, 2299, 426, 1, 0, 0, 0, 2300, 2301, 5, 82, 0, 0, 2301, 2302, 5, 79, 0, 0, 2302, 2303, 5, 76, 0, 0, 2303, 2304, 5, 69, 0, 0, 2304, 428, 1, 0, 0, 0, 2305, 2306, 5, 82, 0, 0, 2306, 2307, 5, 79, 0, 0, 2307, 2308, 5, 76, 0, 0, 2308, 2309, 5, 69, 0, 0, 2309, 2310, 5, 83, 0, 0, 2310, 430, 1, 0, 0, 0, 2311, 2312, 5, 67, 0, 0, 2312, 2313, 5, 79, 0, 0, 2313, 2314, 5, 77, 0, 0, 2314, 2315, 5, 80, 0, 0, 2315, 2316, 5, 65, 0, 0, 2316, 2317, 5, 67, 0, 0, 2317, 2318, 5, 84, 0, 0, 2318, 2319, 5, 73, 0, 0, 2319, 2320, 5, 79, 0, 0, 2320, 2321, 5, 78, 0, 0, 2321, 2322, 5, 83, 0, 0, 2322, 432, 1, 0, 0, 0, 2323, 2324, 5, 80, 0, 0, 2324, 2325, 5, 82, 0, 0, 2325, 2326, 5, 73, 0, 0, 2326, 2327, 5, 78, 0, 0, 2327, 2328, 5, 67, 0, 0, 2328, 2329, 5, 73, 0, 0, 2329, 2330, 5, 80, 0, 0, 2330, 2331, 5, 65, 0, 0, 2331, 2332, 5, 76, 0, 0, 2332, 2333, 5, 83, 0, 0, 2333, 434, 1, 0, 0, 0, 2334, 2335, 5, 84, 0, 0, 2335, 2336, 5, 82, 0, 0, 2336, 2337, 5, 65, 0, 0, 2337, 2338, 5, 78, 0, 0, 2338, 2339, 5, 83, 0, 0, 2339, 2340, 5, 65, 0, 0, 2340, 2341, 5, 67, 0, 0, 2341, 2342, 5, 84, 0, 0, 2342, 2343, 5, 73, 0, 0, 2343, 2344, 5, 79, 0, 0, 2344, 2345, 5, 78, 0, 0, 2345, 2346, 5, 83, 0, 0, 2346, 436, 1, 0, 0, 0, 2347, 2348, 5, 73, 0, 0, 2348, 2349, 5, 78, 0, 0, 2349, 2350, 5, 68, 0, 0, 2350, 2351, 5, 69, 0, 0, 2351, 2352, 5, 88, 0, 0, 2352, 438, 1, 0, 0, 0, 2353, 2354, 5, 73, 0, 0, 2354, 2355, 5, 78, 0, 0, 2355, 2356, 5, 68, 0, 0, 2356, 2357, 5, 69, 0, 0, 2357, 2358, 5, 88, 0, 0, 2358, 2359, 5, 69, 0, 0, 2359, 2360, 5, 83, 0, 0, 2360, 440, 1, 0, 0, 0, 2361, 2362, 5, 76, 0, 0, 2362, 2363, 5, 79, 0, 0, 2363, 2364, 5, 67, 0, 0, 2364, 2365, 5, 75, 0, 0, 2365, 2366, 5, 83, 0, 0, 2366, 442, 1, 0, 0, 0, 2367, 2368, 5, 79, 0, 0, 2368, 2369, 5, 80, 0, 0, 2369, 2370, 5, 84, 0, 0, 2370, 2371, 5, 73, 0, 0, 2371, 2372, 5, 79, 0, 0, 2372, 2373, 5, 78, 0, 0, 2373, 444, 1, 0, 0, 0, 2374, 2375, 5, 65, 0, 0, 2375, 2376, 5, 78, 0, 0, 2376, 2377, 5, 84, 0, 0, 2377, 2378, 5, 73, 0, 0, 2378, 446, 1, 0, 0, 0, 2379, 2380, 5, 76, 0, 0, 2380, 2381, 5, 79, 0, 0, 2381, 2382, 5, 67, 0, 0, 2382, 2383, 5, 65, 0, 0, 2383, 2384, 5, 76, 0, 0, 2384, 448, 1, 0, 0, 0, 2385, 2386, 5, 73, 0, 0, 2386, 2387, 5, 78, 0, 0, 2387, 2388, 5, 80, 0, 0, 2388, 2389, 5, 65, 0, 0, 2389, 2390, 5, 84, 0, 0, 2390, 2391, 5, 72, 0, 0, 2391, 450, 1, 0, 0, 0, 2392, 2393, 5, 87, 0, 0, 2393, 2394, 5, 65, 0, 0, 2394, 2395, 5, 84, 0, 0, 2395, 2396, 5, 69, 0, 0, 2396, 2397, 5, 82, 0, 0, 2397, 2398, 5, 77, 0, 0, 2398, 2399, 5, 65, 0, 0, 2399, 2400, 5, 82, 0, 0, 2400, 2401, 5, 75, 0, 0, 2401, 452, 1, 0, 0, 0, 2402, 2403, 5, 85, 0, 0, 2403, 2404, 5, 78, 0, 0, 2404, 2405, 5, 78, 0, 0, 2405, 2406, 5, 69, 0, 0, 2406, 2407, 5, 83, 0, 0, 2407, 2408, 5, 84, 0, 0, 2408, 454, 1, 0, 0, 0, 2409, 2410, 5, 77, 0, 0, 2410, 2411, 5, 65, 0, 0, 2411, 2412, 5, 84, 0, 0, 2412, 2413, 5, 67, 0, 0, 2413, 2414, 5, 72, 0, 0, 2414, 456, 1, 0, 0, 0, 2415, 2416, 5, 78, 0, 0, 2416, 2417, 5, 69, 0, 0, 2417, 2418, 5, 88, 0, 0, 2418, 2419, 5, 84, 0, 0, 2419, 458, 1, 0, 0, 0, 2420, 2421, 5, 87, 0, 0, 2421, 2422, 5, 73, 0, 0, 2422, 2423, 5, 84, 0, 0, 2423, 2424, 5, 72, 0, 0, 2424, 2425, 5, 73, 0, 0, 2425, 2426, 5, 78, 0, 0, 2426, 460, 1, 0, 0, 0, 2427, 2428, 5, 87, 0, 0, 2428, 2429, 5, 83, 0, 0, 2429, 462, 1, 0, 0, 0, 2430, 2431, 5, 83, 0, 0, 2431, 2432, 5, 89, 0, 0, 2432, 2433, 5, 83, 0, 0, 2433, 2434, 5, 84, 0, 0, 2434, 2435, 5, 69, 0, 0, 2435, 2436, 5, 77, 0, 0, 2436, 464, 1, 0, 0, 0, 2437, 2438, 5, 73, 0, 0, 2438, 2439, 5, 78, 0, 0, 2439, 2440, 5, 67, 0, 0, 2440, 2441, 5, 76, 0, 0, 2441, 2442, 5, 85, 0, 0, 2442, 2443, 5, 68, 0, 0, 2443, 2444, 5, 73, 0, 0, 2444, 2445, 5, 78, 0, 0, 2445, 2446, 5, 71, 0, 0, 2446, 466, 1, 0, 0, 0, 2447, 2448, 5, 69, 0, 0, 2448, 2449, 5, 88, 0, 0, 2449, 2450, 5, 67, 0, 0, 2450, 2451, 5, 76, 0, 0, 2451, 2452, 5, 85, 0, 0, 2452, 2453, 5, 68, 0, 0, 2453, 2454, 5, 73, 0, 0, 2454, 2455, 5, 78, 0, 0, 2455, 2456, 5, 71, 0, 0, 2456, 468, 1, 0, 0, 0, 2457, 2458, 5, 79, 0, 0, 2458, 2459, 5, 86, 0, 0, 2459, 2460, 5, 69, 0, 0, 2460, 2461, 5, 82, 0, 0, 2461, 2462, 5, 87, 0, 0, 2462, 2463, 5, 82, 0, 0, 2463, 2464, 5, 73, 0, 0, 2464, 2465, 5, 84, 0, 0, 2465, 2466, 5, 73, 0, 0, 2466, 2467, 5, 78, 0, 0, 2467, 2468, 5, 71, 0, 0, 2468, 470, 1, 0, 0, 0, 2469, 2470, 5, 67, 0, 0, 2470, 2471, 5, 79, 0, 0, 2471, 2472, 5, 78, 0, 0, 2472, 2473, 5, 83, 0, 0, 2473, 2474, 5, 84, 0, 0, 2474, 2475, 5, 82, 0, 0, 2475, 2476, 5, 65, 0, 0, 2476, 2477, 5, 73, 0, 0, 2477, 2478, 5, 78, 0, 0, 2478, 2479, 5, 84, 0, 0, 2479, 2480, 5, 83, 0, 0, 2480, 472, 1, 0, 0, 0, 2481, 2482, 5, 71, 0, 0, 2482, 2483, 5, 69, 0, 0, 2483, 2484, 5, 78, 0, 0, 2484, 2485, 5, 69, 0, 0, 2485, 2486, 5, 82, 0, 0, 2486, 2487, 5, 65, 0, 0, 2487, 2488, 5, 84, 0, 0, 2488, 2489, 5, 69, 0, 0, 2489, 2490, 5, 68, 0, 0, 2490, 474, 1, 0, 0, 0, 2491, 2492, 5, 87, 0, 0, 2492, 2493, 5, 65, 0, 0, 2493, 2494, 5, 84, 0, 0, 2494, 2495, 5, 69, 0, 0, 2495, 2496, 5, 82, 0, 0, 2496, 2497, 5, 77, 0, 0, 2497, 2498, 5, 65, 0, 0, 2498, 2499, 5, 82, 0, 0, 2499, 2500, 5, 75, 0, 0, 2500, 2501, 5, 83, 0, 0, 2501, 476, 1, 0, 0, 0, 2502, 2503, 5, 67, 0, 0, 2503, 2504, 5, 65, 0, 0, 2504, 2505, 5, 84, 0, 0, 2505, 2506, 5, 65, 0, 0, 2506, 2507, 5, 76, 0, 0, 2507, 2508, 5, 79, 0, 0, 2508, 2509, 5, 71, 0, 0, 2509, 478, 1, 0, 0, 0, 2510, 2511, 5, 76, 0, 0, 2511, 2512, 5, 65, 0, 0, 2512, 2513, 5, 78, 0, 0, 2513, 2514, 5, 71, 0, 0, 2514, 2515, 5, 85, 0, 0, 2515, 2516, 5, 65, 0, 0, 2516, 2517, 5, 71, 0, 0, 2517, 2518, 5, 69, 0, 0, 2518, 480, 1, 0, 0, 0, 2519, 2520, 5, 74, 0, 0, 2520, 2521, 5, 65, 0, 0, 2521, 2522, 5, 86, 0, 0, 2522, 2523, 5, 65, 0, 0, 2523, 482, 1, 0, 0, 0, 2524, 2525, 5, 83, 0, 0, 2525, 2526, 5, 67, 0, 0, 2526, 2527, 5, 65, 0, 0, 2527, 2528, 5, 76, 0, 0, 2528, 2529, 5, 65, 0, 0, 2529, 484, 1, 0, 0, 0, 2530, 2531, 5, 80, 0, 0, 2531, 2532, 5, 89, 0, 0, 2532, 2533, 5, 84, 0, 0, 2533, 2534, 5, 72, 0, 0, 2534, 2535, 5, 79, 0, 0, 2535, 2536, 5, 78, 0, 0, 2536, 486, 1, 0, 0, 0, 2537, 2538, 5, 74, 0, 0, 2538, 2539, 5, 65, 0, 0, 2539, 2540, 5, 82, 0, 0, 2540, 488, 1, 0, 0, 0, 2541, 2542, 5, 70, 0, 0, 2542, 2543, 5, 73, 0, 0, 2543, 2544, 5, 76, 0, 0, 2544, 2545, 5, 69, 0, 0, 2545, 490, 1, 0, 0, 0, 2546, 2547, 5, 80, 0, 0, 2547, 2548, 5, 89, 0, 0, 2548, 2549, 5, 84, 0, 0, 2549, 2550, 5, 72, 0, 0, 2550, 2551, 5, 79, 0, 0, 2551, 2552, 5, 78, 0, 0, 2552, 2553, 5, 95, 0, 0, 2553, 2554, 5, 70, 0, 0, 2554, 2555, 5, 73, 0, 0, 2555, 2556, 5, 76, 0, 0, 2556, 2557, 5, 69, 0, 0, 2557, 2558, 5, 83, 0, 0, 2558, 492, 1, 0, 0, 0, 2559, 2560, 5, 80, 0, 0, 2560, 2561, 5, 89, 0, 0, 2561, 2562, 5, 84, 0, 0, 2562, 2563, 5, 72, 0, 0, 2563, 2564, 5, 79, 0, 0, 2564, 2565, 5, 78, 0, 0, 2565, 2566, 5, 95, 0, 0, 2566, 2567, 5, 82, 0, 0, 2567, 2568, 5, 69, 0, 0, 2568, 2569, 5, 81, 0, 0, 2569, 2570, 5, 85, 0, 0, 2570, 2571, 5, 73, 0, 0, 2571, 2572, 5, 82, 0, 0, 2572, 2573, 5, 69, 0, 0, 2573, 2574, 5, 77, 0, 0, 2574, 2575, 5, 69, 0, 0, 2575, 2576, 5, 78, 0, 0, 2576, 2577, 5, 84, 0, 0, 2577, 2578, 5, 83, 0, 0, 2578, 494, 1, 0, 0, 0, 2579, 2580, 5, 80, 0, 0, 2580, 2581, 5, 89, 0, 0, 2581, 2582, 5, 84, 0, 0, 2582, 2583, 5, 72, 0, 0, 2583, 2584, 5, 79, 0, 0, 2584, 2585, 5, 78, 0, 0, 2585, 2586, 5, 95, 0, 0, 2586, 2587, 5, 68, 0, 0, 2587, 2588, 5, 69, 0, 0, 2588, 2589, 5, 80, 0, 0, 2589, 2590, 5, 69, 0, 0, 2590, 2591, 5, 78, 0, 0, 2591, 2592, 5, 68, 0, 0, 2592, 2593, 5, 69, 0, 0, 2593, 2594, 5, 78, 0, 0, 2594, 2595, 5, 67, 0, 0, 2595, 2596, 5, 73, 0, 0, 2596, 2597, 5, 69, 0, 0, 2597, 2598, 5, 83, 0, 0, 2598, 496, 1, 0, 0, 0, 2599, 2600, 5, 80, 0, 0, 2600, 2601, 5, 89, 0, 0, 2601, 2602, 5, 84, 0, 0, 2602, 2603, 5, 72, 0, 0, 2603, 2604, 5, 79, 0, 0, 2604, 2605, 5, 78, 0, 0, 2605, 2606, 5, 95, 0, 0, 2606, 2607, 5, 74, 0, 0, 2607, 2608, 5, 65, 0, 0, 2608, 2609, 5, 82, 0, 0, 2609, 498, 1, 0, 0, 0, 2610, 2611, 5, 80, 0, 0, 2611, 2612, 5, 89, 0, 0, 2612, 2613, 5, 84, 0, 0, 2613, 2614, 5, 72, 0, 0, 2614, 2615, 5, 79, 0, 0, 2615, 2616, 5, 78, 0, 0, 2616, 2617, 5, 95, 0, 0, 2617, 2618, 5, 65, 0, 0, 2618, 2619, 5, 82, 0, 0, 2619, 2620, 5, 67, 0, 0, 2620, 2621, 5, 72, 0, 0, 2621, 2622, 5, 73, 0, 0, 2622, 2623, 5, 86, 0, 0, 2623, 2624, 5, 69, 0, 0, 2624, 2625, 5, 83, 0, 0, 2625, 500, 1, 0, 0, 0, 2626, 2627, 5, 80, 0, 0, 2627, 2628, 5, 89, 0, 0, 2628, 2629, 5, 84, 0, 0, 2629, 2630, 5, 72, 0, 0, 2630, 2631, 5, 79, 0, 0, 2631, 2632, 5, 78, 0, 0, 2632, 2633, 5, 95, 0, 0, 2633, 2634, 5, 80, 0, 0, 2634, 2635, 5, 65, 0, 0, 2635, 2636, 5, 82, 0, 0, 2636, 2637, 5, 65, 0, 0, 2637, 2638, 5, 77, 0, 0, 2638, 2639, 5, 69, 0, 0, 2639, 2640, 5, 84, 0, 0, 2640, 2641, 5, 69, 0, 0, 2641, 2642, 5, 82, 0, 0, 2642, 502, 1, 0, 0, 0, 2643, 2644, 5, 69, 0, 0, 2644, 2645, 5, 78, 0, 0, 2645, 2646, 5, 71, 0, 0, 2646, 2647, 5, 73, 0, 0, 2647, 2648, 5, 78, 0, 0, 2648, 2649, 5, 69, 0, 0, 2649, 504, 1, 0, 0, 0, 2650, 2651, 5, 67, 0, 0, 2651, 2652, 5, 65, 0, 0, 2652, 2653, 5, 84, 0, 0, 2653, 2654, 5, 65, 0, 0, 2654, 2655, 5, 76, 0, 0, 2655, 2656, 5, 79, 0, 0, 2656, 2657, 5, 71, 0, 0, 2657, 2658, 5, 83, 0, 0, 2658, 506, 1, 0, 0, 0, 2659, 2660, 5, 86, 0, 0, 2660, 2661, 5, 73, 0, 0, 2661, 2662, 5, 69, 0, 0, 2662, 2663, 5, 87, 0, 0, 2663, 2664, 5, 83, 0, 0, 2664, 508, 1, 0, 0, 0, 2665, 2666, 5, 74, 0, 0, 2666, 2667, 5, 65, 0, 0, 2667, 2668, 5, 82, 0, 0, 2668, 2669, 5, 83, 0, 0, 2669, 510, 1, 0, 0, 0, 2670, 2671, 5, 80, 0, 0, 2671, 2672, 5, 82, 0, 0, 2672, 2673, 5, 73, 0, 0, 2673, 2674, 5, 77, 0, 0, 2674, 2675, 5, 65, 0, 0, 2675, 2676, 5, 82, 0, 0, 2676, 2677, 5, 89, 0, 0, 2677, 512, 1, 0, 0, 0, 2678, 2679, 5, 85, 0, 0, 2679, 2680, 5, 78, 0, 0, 2680, 2681, 5, 73, 0, 0, 2681, 2682, 5, 81, 0, 0, 2682, 2683, 5, 85, 0, 0, 2683, 2684, 5, 69, 0, 0, 2684, 514, 1, 0, 0, 0, 2685, 2686, 5, 75, 0, 0, 2686, 2687, 5, 69, 0, 0, 2687, 2688, 5, 89, 0, 0, 2688, 516, 1, 0, 0, 0, 2689, 2690, 5, 80, 0, 0, 2690, 2691, 5, 69, 0, 0, 2691, 2692, 5, 82, 0, 0, 2692, 2693, 5, 73, 0, 0, 2693, 2694, 5, 79, 0, 0, 2694, 2695, 5, 68, 0, 0, 2695, 518, 1, 0, 0, 0, 2696, 2697, 5, 83, 0, 0, 2697, 2698, 5, 89, 0, 0, 2698, 2699, 5, 83, 0, 0, 2699, 2700, 5, 84, 0, 0, 2700, 2701, 5, 69, 0, 0, 2701, 2702, 5, 77, 0, 0, 2702, 2703, 5, 95, 0, 0, 2703, 2704, 5, 84, 0, 0, 2704, 2705, 5, 73, 0, 0, 2705, 2706, 5, 77, 0, 0, 2706, 2707, 5, 69, 0, 0, 2707, 520, 1, 0, 0, 0, 2708, 2709, 5, 69, 0, 0, 2709, 2710, 5, 78, 0, 0, 2710, 2711, 5, 70, 0, 0, 2711, 2712, 5, 79, 0, 0, 2712, 2713, 5, 82, 0, 0, 2713, 2714, 5, 67, 0, 0, 2714, 2715, 5, 69, 0, 0, 2715, 2716, 5, 68, 0, 0, 2716, 522, 1, 0, 0, 0, 2717, 2718, 5, 77, 0, 0, 2718, 2719, 5, 69, 0, 0, 2719, 2720, 5, 84, 0, 0, 2720, 2721, 5, 65, 0, 0, 2721, 2722, 5, 68, 0, 0, 2722, 2723, 5, 65, 0, 0, 2723, 2724, 5, 84, 0, 0, 2724, 2725, 5, 65, 0, 0, 2725, 524, 1, 0, 0, 0, 2726, 2727, 5, 86, 0, 0, 2727, 2728, 5, 73, 0, 0, 2728, 2729, 5, 82, 0, 0, 2729, 2730, 5, 84, 0, 0, 2730, 2731, 5, 85, 0, 0, 2731, 2732, 5, 65, 0, 0, 2732, 2733, 5, 76, 0, 0, 2733, 526, 1, 0, 0, 0, 2734, 2735, 5, 90, 0, 0, 2735, 2736, 5, 79, 0, 0, 2736, 2737, 5, 78, 0, 0, 2737, 2738, 5, 69, 0, 0, 2738, 528, 1, 0, 0, 0, 2739, 2740, 5, 84, 0, 0, 2740, 2741, 5, 85, 0, 0, 2741, 2742, 5, 77, 0, 0, 2742, 2743, 5, 66, 0, 0, 2743, 2744, 5, 76, 0, 0, 2744, 2745, 5, 69, 0, 0, 2745, 530, 1, 0, 0, 0, 2746, 2747, 5, 72, 0, 0, 2747, 2748, 5, 79, 0, 0, 2748, 2749, 5, 80, 0, 0, 2749, 532, 1, 0, 0, 0, 2750, 2751, 5, 67, 0, 0, 2751, 2752, 5, 85, 0, 0, 2752, 2753, 5, 77, 0, 0, 2753, 2754, 5, 85, 0, 0, 2754, 2755, 5, 76, 0, 0, 2755, 2756, 5, 65, 0, 0, 2756, 2757, 5, 84, 0, 0, 2757, 2758, 5, 69, 0, 0, 2758, 534, 1, 0, 0, 0, 2759, 2760, 5, 68, 0, 0, 2760, 2761, 5, 69, 0, 0, 2761, 2762, 5, 83, 0, 0, 2762, 2763, 5, 67, 0, 0, 2763, 2764, 5, 82, 0, 0, 2764, 2765, 5, 73, 0, 0, 2765, 2766, 5, 80, 0, 0, 2766, 2767, 5, 84, 0, 0, 2767, 2768, 5, 79, 0, 0, 2768, 2769, 5, 82, 0, 0, 2769, 536, 1, 0, 0, 0, 2770, 2771, 5, 84, 0, 0, 2771, 2772, 5, 73, 0, 0, 2772, 2773, 5, 77, 0, 0, 2773, 2774, 5, 69, 0, 0, 2774, 2775, 5, 67, 0, 0, 2775, 2776, 5, 79, 0, 0, 2776, 2777, 5, 76, 0, 0, 2777, 538, 1, 0, 0, 0, 2778, 2779, 5, 83, 0, 0, 2779, 2780, 5, 73, 0, 0, 2780, 2781, 5, 90, 0, 0, 2781, 2782, 5, 69, 0, 0, 2782, 540, 1, 0, 0, 0, 2783, 2784, 5, 79, 0, 0, 2784, 2785, 5, 70, 0, 0, 2785, 2786, 5, 70, 0, 0, 2786, 2787, 5, 83, 0, 0, 2787, 2788, 5, 69, 0, 0, 2788, 2789, 5, 84, 0, 0, 2789, 542, 1, 0, 0, 0, 2790, 2791, 5, 83, 0, 0, 2791, 2792, 5, 84, 0, 0, 2792, 2793, 5, 69, 0, 0, 2793, 2794, 5, 80, 0, 0, 2794, 544, 1, 0, 0, 0, 2795, 2796, 5, 83, 0, 0, 2796, 2797, 5, 76, 0, 0, 2797, 2798, 5, 73, 0, 0, 2798, 2799, 5, 68, 0, 0, 2799, 2800, 5, 69, 0, 0, 2800, 546, 1, 0, 0, 0, 2801, 2802, 5, 83, 0, 0, 2802, 2803, 5, 69, 0, 0, 2803, 2804, 5, 83, 0, 0, 2804, 2805, 5, 83, 0, 0, 2805, 2806, 5, 73, 0, 0, 2806, 2807, 5, 79, 0, 0, 2807, 2808, 5, 78, 0, 0, 2808, 548, 1, 0, 0, 0, 2809, 2810, 5, 77, 0, 0, 2810, 2811, 5, 65, 0, 0, 2811, 2812, 5, 84, 0, 0, 2812, 2813, 5, 67, 0, 0, 2813, 2814, 5, 72, 0, 0, 2814, 2815, 5, 95, 0, 0, 2815, 2816, 5, 82, 0, 0, 2816, 2817, 5, 69, 0, 0, 2817, 2818, 5, 67, 0, 0, 2818, 2819, 5, 79, 0, 0, 2819, 2820, 5, 71, 0, 0, 2820, 2821, 5, 78, 0, 0, 2821, 2822, 5, 73, 0, 0, 2822, 2823, 5, 90, 0, 0, 2823, 2824, 5, 69, 0, 0, 2824, 550, 1, 0, 0, 0, 2825, 2826, 5, 77, 0, 0, 2826, 2827, 5, 69, 0, 0, 2827, 2828, 5, 65, 0, 0, 2828, 2829, 5, 83, 0, 0, 2829, 2830, 5, 85, 0, 0, 2830, 2831, 5, 82, 0, 0, 2831, 2832, 5, 69, 0, 0, 2832, 2833, 5, 83, 0, 0, 2833, 552, 1, 0, 0, 0, 2834, 2835, 5, 80, 0, 0, 2835, 2836, 5, 65, 0, 0, 2836, 2837, 5, 84, 0, 0, 2837, 2838, 5, 84, 0, 0, 2838, 2839, 5, 69, 0, 0, 2839, 2840, 5, 82, 0, 0, 2840, 2841, 5, 78, 0, 0, 2841, 554, 1, 0, 0, 0, 2842, 2843, 5, 79, 0, 0, 2843, 2844, 5, 78, 0, 0, 2844, 2845, 5, 69, 0, 0, 2845, 556, 1, 0, 0, 0, 2846, 2847, 5, 80, 0, 0, 2847, 2848, 5, 69, 0, 0, 2848, 2849, 5, 82, 0, 0, 2849, 558, 1, 0, 0, 0, 2850, 2851, 5, 83, 0, 0, 2851, 2852, 5, 75, 0, 0, 2852, 2853, 5, 73, 0, 0, 2853, 2854, 5, 80, 0, 0, 2854, 560, 1, 0, 0, 0, 2855, 2856, 5, 80, 0, 0, 2856, 2857, 5, 65, 0, 0, 2857, 2858, 5, 83, 0, 0, 2858, 2859, 5, 84, 0, 0, 2859, 562, 1, 0, 0, 0, 2860, 2861, 5, 68, 0, 0, 2861, 2862, 5, 69, 0, 0, 2862, 2863, 5, 70, 0, 0, 2863, 2864, 5, 73, 0, 0, 2864, 2865, 5, 78, 0, 0, 2865, 2866, 5, 69, 0, 0, 2866, 564, 1, 0, 0, 0, 2867, 2868, 5, 83, 0, 0, 2868, 2869, 5, 84, 0, 0, 2869, 2870, 5, 82, 0, 0, 2870, 2871, 5, 73, 0, 0, 2871, 2872, 5, 78, 0, 0, 2872, 2873, 5, 71, 0, 0, 2873, 566, 1, 0, 0, 0, 2874, 2875, 5, 65, 0, 0, 2875, 2876, 5, 82, 0, 0, 2876, 2877, 5, 82, 0, 0, 2877, 2878, 5, 65, 0, 0, 2878, 2879, 5, 89, 0, 0, 2879, 568, 1, 0, 0, 0, 2880, 2881, 5, 77, 0, 0, 2881, 2882, 5, 65, 0, 0, 2882, 2883, 5, 80, 0, 0, 2883, 570, 1, 0, 0, 0, 2884, 2885, 5, 67, 0, 0, 2885, 2886, 5, 72, 0, 0, 2886, 2887, 5, 65, 0, 0, 2887, 2888, 5, 82, 0, 0, 2888, 572, 1, 0, 0, 0, 2889, 2890, 5, 86, 0, 0, 2890, 2891, 5, 65, 0, 0, 2891, 2892, 5, 82, 0, 0, 2892, 2893, 5, 67, 0, 0, 2893, 2894, 5, 72, 0, 0, 2894, 2895, 5, 65, 0, 0, 2895, 2896, 5, 82, 0, 0, 2896, 574, 1, 0, 0, 0, 2897, 2898, 5, 66, 0, 0, 2898, 2899, 5, 73, 0, 0, 2899, 2900, 5, 78, 0, 0, 2900, 2901, 5, 65, 0, 0, 2901, 2902, 5, 82, 0, 0, 2902, 2903, 5, 89, 0, 0, 2903, 576, 1, 0, 0, 0, 2904, 2905, 5, 86, 0, 0, 2905, 2906, 5, 65, 0, 0, 2906, 2907, 5, 82, 0, 0, 2907, 2908, 5, 66, 0, 0, 2908, 2909, 5, 73, 0, 0, 2909, 2910, 5, 78, 0, 0, 2910, 2911, 5, 65, 0, 0, 2911, 2912, 5, 82, 0, 0, 2912, 2913, 5, 89, 0, 0, 2913, 578, 1, 0, 0, 0, 2914, 2915, 5, 66, 0, 0, 2915, 2916, 5, 89, 0, 0, 2916, 2917, 5, 84, 0, 0, 2917, 2918, 5, 69, 0, 0, 2918, 2919, 5, 83, 0, 0, 2919, 580, 1, 0, 0, 0, 2920, 2921, 5, 68, 0, 0, 2921, 2922, 5, 69, 0, 0, 2922, 2923, 5, 67, 0, 0, 2923, 2924, 5, 73, 0, 0, 2924, 2925, 5, 77, 0, 0, 2925, 2926, 5, 65, 0, 0, 2926, 2927, 5, 76, 0, 0, 2927, 582, 1, 0, 0, 0, 2928, 2929, 5, 68, 0, 0, 2929, 2930, 5, 69, 0, 0, 2930, 2931, 5, 67, 0, 0, 2931, 584, 1, 0, 0, 0, 2932, 2933, 5, 78, 0, 0, 2933, 2934, 5, 85, 0, 0, 2934, 2935, 5, 77, 0, 0, 2935, 2936, 5, 69, 0, 0, 2936, 2937, 5, 82, 0, 0, 2937, 2938, 5, 73, 0, 0, 2938, 2939, 5, 67, 0, 0, 2939, 586, 1, 0, 0, 0, 2940, 2941, 5, 84, 0, 0, 2941, 2942, 5, 73, 0, 0, 2942, 2943, 5, 78, 0, 0, 2943, 2944, 5, 89, 0, 0, 2944, 2945, 5, 73, 0, 0, 2945, 2946, 5, 78, 0, 0, 2946, 2947, 5, 84, 0, 0, 2947, 588, 1, 0, 0, 0, 2948, 2949, 5, 83, 0, 0, 2949, 2950, 5, 77, 0, 0, 2950, 2951, 5, 65, 0, 0, 2951, 2952, 5, 76, 0, 0, 2952, 2953, 5, 76, 0, 0, 2953, 2954, 5, 73, 0, 0, 2954, 2955, 5, 78, 0, 0, 2955, 2956, 5, 84, 0, 0, 2956, 590, 1, 0, 0, 0, 2957, 2958, 5, 73, 0, 0, 2958, 2959, 5, 78, 0, 0, 2959, 2960, 5, 84, 0, 0, 2960, 592, 1, 0, 0, 0, 2961, 2962, 5, 73, 0, 0, 2962, 2963, 5, 78, 0, 0, 2963, 2964, 5, 84, 0, 0, 2964, 2965, 5, 69, 0, 0, 2965, 2966, 5, 71, 0, 0, 2966, 2967, 5, 69, 0, 0, 2967, 2968, 5, 82, 0, 0, 2968, 594, 1, 0, 0, 0, 2969, 2970, 5, 66, 0, 0, 2970, 2971, 5, 73, 0, 0, 2971, 2972, 5, 71, 0, 0, 2972, 2973, 5, 73, 0, 0, 2973, 2974, 5, 78, 0, 0, 2974, 2975, 5, 84, 0, 0, 2975, 596, 1, 0, 0, 0, 2976, 2977, 5, 70, 0, 0, 2977, 2978, 5, 76, 0, 0, 2978, 2979, 5, 79, 0, 0, 2979, 2980, 5, 65, 0, 0, 2980, 2981, 5, 84, 0, 0, 2981, 598, 1, 0, 0, 0, 2982, 2983, 5, 68, 0, 0, 2983, 2984, 5, 79, 0, 0, 2984, 2985, 5, 85, 0, 0, 2985, 2986, 5, 66, 0, 0, 2986, 2987, 5, 76, 0, 0, 2987, 2988, 5, 69, 0, 0, 2988, 600, 1, 0, 0, 0, 2989, 2990, 5, 68, 0, 0, 2990, 2991, 5, 65, 0, 0, 2991, 2992, 5, 84, 0, 0, 2992, 2993, 5, 69, 0, 0, 2993, 602, 1, 0, 0, 0, 2994, 2995, 5, 84, 0, 0, 2995, 2996, 5, 73, 0, 0, 2996, 2997, 5, 77, 0, 0, 2997, 2998, 5, 69, 0, 0, 2998, 604, 1, 0, 0, 0, 2999, 3000, 5, 84, 0, 0, 3000, 3001, 5, 73, 0, 0, 3001, 3002, 5, 77, 0, 0, 3002, 3003, 5, 69, 0, 0, 3003, 3004, 5, 83, 0, 0, 3004, 3005, 5, 84, 0, 0, 3005, 3006, 5, 65, 0, 0, 3006, 3007, 5, 77, 0, 0, 3007, 3008, 5, 80, 0, 0, 3008, 606, 1, 0, 0, 0, 3009, 3010, 5, 84, 0, 0, 3010, 3011, 5, 73, 0, 0, 3011, 3012, 5, 77, 0, 0, 3012, 3013, 5, 69, 0, 0, 3013, 3014, 5, 83, 0, 0, 3014, 3015, 5, 84, 0, 0, 3015, 3016, 5, 65, 0, 0, 3016, 3017, 5, 77, 0, 0, 3017, 3018, 5, 80, 0, 0, 3018, 3019, 5, 95, 0, 0, 3019, 3020, 5, 76, 0, 0, 3020, 3021, 5, 84, 0, 0, 3021, 3022, 5, 90, 0, 0, 3022, 608, 1, 0, 0, 0, 3023, 3024, 5, 77, 0, 0, 3024, 3025, 5, 85, 0, 0, 3025, 3026, 5, 76, 0, 0, 3026, 3027, 5, 84, 0, 0, 3027, 3028, 5, 73, 0, 0, 3028, 3029, 5, 83, 0, 0, 3029, 3030, 5, 69, 0, 0, 3030, 3031, 5, 84, 0, 0, 3031, 610, 1, 0, 0, 0, 3032, 3033, 5, 66, 0, 0, 3033, 3034, 5, 79, 0, 0, 3034, 3035, 5, 79, 0, 0, 3035, 3036, 5, 76, 0, 0, 3036, 3037, 5, 69, 0, 0, 3037, 3038, 5, 65, 0, 0, 3038, 3039, 5, 78, 0, 0, 3039, 612, 1, 0, 0, 0, 3040, 3041, 5, 82, 0, 0, 3041, 3042, 5, 65, 0, 0, 3042, 3043, 5, 87, 0, 0, 3043, 614, 1, 0, 0, 0, 3044, 3045, 5, 82, 0, 0, 3045, 3046, 5, 79, 0, 0, 3046, 3047, 5, 87, 0, 0, 3047, 616, 1, 0, 0, 0, 3048, 3049, 5, 78, 0, 0, 3049, 3050, 5, 85, 0, 0, 3050, 3051, 5, 76, 0, 0, 3051, 3052, 5, 76, 0, 0, 3052, 618, 1, 0, 0, 0, 3053, 3054, 5, 68, 0, 0, 3054, 3055, 5, 65, 0, 0, 3055, 3056, 5, 84, 0, 0, 3056, 3057, 5, 69, 0, 0, 3057, 3058, 5, 84, 0, 0, 3058, 3059, 5, 73, 0, 0, 3059, 3060, 5, 77, 0, 0, 3060, 3061, 5, 69, 0, 0, 3061, 620, 1, 0, 0, 0, 3062, 3063, 5, 61, 0, 0, 3063, 622, 1, 0, 0, 0, 3064, 3065, 5, 62, 0, 0, 3065, 624, 1, 0, 0, 0, 3066, 3067, 5, 60, 0, 0, 3067, 626, 1, 0, 0, 0, 3068, 3069, 5, 33, 0, 0, 3069, 628, 1, 0, 0, 0, 3070, 3071, 5, 126, 0, 0, 3071, 630, 1, 0, 0, 0, 3072, 3073, 5, 124, 0, 0, 3073, 632, 1, 0, 0, 0, 3074, 3075, 5, 38, 0, 0, 3075, 634, 1, 0, 0, 0, 3076, 3077, 5, 94, 0, 0, 3077, 636, 1, 0, 0, 0, 3078, 3079, 5, 46, 0, 0, 3079, 638, 1, 0, 0, 0, 3080, 3081, 5, 91, 0, 0, 3081, 640, 1, 0, 0, 0, 3082, 3083, 5, 93, 0, 0, 3083, 642, 1, 0, 0, 0, 3084, 3085, 5, 40, 0, 0, 3085, 644, 1, 0, 0, 0, 3086, 3087, 5, 41, 0, 0, 3087, 646, 1, 0, 0, 0, 3088, 3089, 5, 123, 0, 0, 3089, 648, 1, 0, 0, 0, 3090, 3091, 5, 125, 0, 0, 3091, 650, 1, 0, 0, 0, 3092, 3093, 5, 44, 0, 0, 3093, 652, 1, 0, 0, 0, 3094, 3095, 5, 59, 0, 0, 3095, 654, 1, 0, 0, 0, 3096, 3097, 5, 64, 0, 0, 3097, 656, 1, 0, 0, 0, 3098, 3099, 5, 39, 0, 0, 3099, 658, 1, 0, 0, 0, 3100, 3101, 5, 34, 0, 0, 3101, 660, 1, 0, 0, 0, 3102, 3103, 5, 96, 0, 0, 3103, 662, 1, 0, 0, 0, 3104, 3105, 5, 58, 0, 0, 3105, 664, 1, 0, 0, 0, 3106, 3107, 5, 42, 0, 0, 3107, 666, 1, 0, 0, 0, 3108, 3109, 5, 95, 0, 0, 3109, 668, 1, 0, 0, 0, 3110, 3111, 5, 45, 0, 0, 3111, 670, 1, 0, 0, 0, 3112, 3113, 5, 43, 0, 0, 3113, 672, 1, 0, 0, 0, 3114, 3115, 5, 37, 0, 0, 3115, 674, 1, 0, 0, 0, 3116, 3117, 5, 124, 0, 0, 3117, 3118, 5, 124, 0, 0, 3118, 676, 1, 0, 0, 0, 3119, 3120, 5, 45, 0, 0, 3120, 3121, 5, 45, 0, 0, 3121, 678, 1, 0, 0, 0, 3122, 3123, 5, 47, 0, 0, 3123, 680, 1, 0, 0, 0, 3124, 3125, 5, 63, 0, 0, 3125, 682, 1, 0, 0, 0, 3126, 3127, 5, 46, 0, 0, 3127, 3128, 3, 705, 352, 0, 3128, 684, 1, 0, 0, 0, 3129, 3133, 3, 711, 355, 0, 3130, 3133, 3, 713, 356, 0, 3131, 3133, 3, 717, 358, 0, 3132, 3129, 1, 0, 0, 0, 3132, 3130, 1, 0, 0, 0, 3132, 3131, 1, 0, 0, 0, 3133, 686, 1, 0, 0, 0, 3134, 3136, 3, 707, 353, 0, 3135, 3134, 1, 0, 0, 0, 3136, 3137, 1, 0, 0, 0, 3137, 3135, 1, 0, 0, 0, 3137, 3138, 1, 0, 0, 0, 3138, 688, 1, 0, 0, 0, 3139, 3141, 3, 707, 353, 0, 3140, 3139, 1, 0, 0, 0, 3141, 3142, 1, 0, 0, 0, 3142, 3140, 1, 0, 0, 0, 3142, 3143, 1, 0, 0, 0, 3143, 3145, 1, 0, 0, 0, 3144, 3140, 1, 0, 0, 0, 3144, 3145, 1, 0, 0, 0, 3145, 3146, 1, 0, 0, 0, 3146, 3148, 5, 46, 0, 0, 3147, 3149, 3, 707, 353, 0, 3148, 3147, 1, 0, 0, 0, 3149, 3150, 1, 0, 0, 0, 3150, 3148, 1, 0, 0, 0, 3150, 3151, 1, 0, 0, 0, 3151, 3183, 1, 0, 0, 0, 3152, 3154, 3, 707, 353, 0, 3153, 3152, 1, 0, 0, 0, 3154, 3155, 1, 0, 0, 0, 3155, 3153, 1, 0, 0, 0, 3155, 3156, 1, 0, 0, 0, 3156, 3157, 1, 0, 0, 0, 3157, 3158, 5, 46, 0, 0, 3158, 3159, 3, 703, 351, 0, 3159, 3183, 1, 0, 0, 0, 3160, 3162, 3, 707, 353, 0, 3161, 3160, 1, 0, 0, 0, 3162, 3163, 1, 0, 0, 0, 3163, 3161, 1, 0, 0, 0, 3163, 3164, 1, 0, 0, 0, 3164, 3166, 1, 0, 0, 0, 3165, 3161, 1, 0, 0, 0, 3165, 3166, 1, 0, 0, 0, 3166, 3167, 1, 0, 0, 0, 3167, 3169, 5, 46, 0, 0, 3168, 3170, 3, 707, 353, 0, 3169, 3168, 1, 0, 0, 0, 3170, 3171, 1, 0, 0, 0, 3171, 3169, 1, 0, 0, 0, 3171, 3172, 1, 0, 0, 0, 3172, 3173, 1, 0, 0, 0, 3173, 3174, 3, 703, 351, 0, 3174, 3183, 1, 0, 0, 0, 3175, 3177, 3, 707, 353, 0, 3176, 3175, 1, 0, 0, 0, 3177, 3178, 1, 0, 0, 0, 3178, 3176, 1, 0, 0, 0, 3178, 3179, 1, 0, 0, 0, 3179, 3180, 1, 0, 0, 0, 3180, 3181, 3, 703, 351, 0, 3181, 3183, 1, 0, 0, 0, 3182, 3144, 1, 0, 0, 0, 3182, 3153, 1, 0, 0, 0, 3182, 3165, 1, 0, 0, 0, 3182, 3176, 1, 0, 0, 0, 3183, 690, 1, 0, 0, 0, 3184, 3185, 3, 715, 357, 0, 3185, 692, 1, 0, 0, 0, 3186, 3187, 3, 705, 352, 0, 3187, 694, 1, 0, 0, 0, 3188, 3189, 3, 699, 349, 0, 3189, 696, 1, 0, 0, 0, 3190, 3191, 5, 61, 0, 0, 3191, 3192, 5, 62, 0, 0, 3192, 698, 1, 0, 0, 0, 3193, 3197, 7, 2, 0, 0, 3194, 3196, 8, 3, 0, 0, 3195, 3194, 1, 0, 0, 0, 3196, 3199, 1, 0, 0, 0, 3197, 3195, 1, 0, 0, 0, 3197, 3198, 1, 0, 0, 0, 3198, 3201, 1, 0, 0, 0, 3199, 3197, 1, 0, 0, 0, 3200, 3193, 1, 0, 0, 0, 3201, 3202, 1, 0, 0, 0, 3202, 3200, 1, 0, 0, 0, 3202, 3203, 1, 0, 0, 0, 3203, 700, 1, 0, 0, 0, 3204, 3212, 5, 96, 0, 0, 3205, 3206, 5, 92, 0, 0, 3206, 3211, 9, 0, 0, 0, 3207, 3208, 5, 96, 0, 0, 3208, 3211, 5, 96, 0, 0, 3209, 3211, 8, 4, 0, 0, 3210, 3205, 1, 0, 0, 0, 3210, 3207, 1, 0, 0, 0, 3210, 3209, 1, 0, 0, 0, 3211, 3214, 1, 0, 0, 0, 3212, 3210, 1, 0, 0, 0, 3212, 3213, 1, 0, 0, 0, 3213, 3215, 1, 0, 0, 0, 3214, 3212, 1, 0, 0, 0, 3215, 3216, 5, 96, 0, 0, 3216, 702, 1, 0, 0, 0, 3217, 3219, 5, 69, 0, 0, 3218, 3220, 7, 5, 0, 0, 3219, 3218, 1, 0, 0, 0, 3219, 3220, 1, 0, 0, 0, 3220, 3222, 1, 0, 0, 0, 3221, 3223, 3, 707, 353, 0, 3222, 3221, 1, 0, 0, 0, 3223, 3224, 1, 0, 0, 0, 3224, 3222, 1, 0, 0, 0, 3224, 3225, 1, 0, 0, 0, 3225, 704, 1, 0, 0, 0, 3226, 3228, 7, 6, 0, 0, 3227, 3226, 1, 0, 0, 0, 3228, 3231, 1, 0, 0, 0, 3229, 3230, 1, 0, 0, 0, 3229, 3227, 1, 0, 0, 0, 3230, 3233, 1, 0, 0, 0, 3231, 3229, 1, 0, 0, 0, 3232, 3234, 7, 7, 0, 0, 3233, 3232, 1, 0, 0, 0, 3234, 3235, 1, 0, 0, 0, 3235, 3236, 1, 0, 0, 0, 3235, 3233, 1, 0, 0, 0, 3236, 3240, 1, 0, 0, 0, 3237, 3239, 7, 6, 0, 0, 3238, 3237, 1, 0, 0, 0, 3239, 3242, 1, 0, 0, 0, 3240, 3238, 1, 0, 0, 0, 3240, 3241, 1, 0, 0, 0, 3241, 706, 1, 0, 0, 0, 3242, 3240, 1, 0, 0, 0, 3243, 3244, 7, 8, 0, 0, 3244, 708, 1, 0, 0, 0, 3245, 3246, 7, 9, 0, 0, 3246, 710, 1, 0, 0, 0, 3247, 3255, 5, 34, 0, 0, 3248, 3249, 5, 92, 0, 0, 3249, 3254, 9, 0, 0, 0, 3250, 3251, 5, 34, 0, 0, 3251, 3254, 5, 34, 0, 0, 3252, 3254, 8, 10, 0, 0, 3253, 3248, 1, 0, 0, 0, 3253, 3250, 1, 0, 0, 0, 3253, 3252, 1, 0, 0, 0, 3254, 3257, 1, 0, 0, 0, 3255, 3253, 1, 0, 0, 0, 3255, 3256, 1, 0, 0, 0, 3256, 3258, 1, 0, 0, 0, 3257, 3255, 1, 0, 0, 0, 3258, 3259, 5, 34, 0, 0, 3259, 712, 1, 0, 0, 0, 3260, 3268, 5, 39, 0, 0, 3261, 3262, 5, 92, 0, 0, 3262, 3267, 9, 0, 0, 0, 3263, 3264, 5, 39, 0, 0, 3264, 3267, 5, 39, 0, 0, 3265, 3267, 8, 11, 0, 0, 3266, 3261, 1, 0, 0, 0, 3266, 3263, 1, 0, 0, 0, 3266, 3265, 1, 0, 0, 0, 3267, 3270, 1, 0, 0, 0, 3268, 3266, 1, 0, 0, 0, 3268, 3269, 1, 0, 0, 0, 3269, 3271, 1, 0, 0, 0, 3270, 3268, 1, 0, 0, 0, 3271, 3272, 5, 39, 0, 0, 3272, 714, 1, 0, 0, 0, 3273, 3274, 5, 66, 0, 0, 3274, 3276, 5, 39, 0, 0, 3275, 3277, 7, 12, 0, 0, 3276, 3275, 1, 0, 0, 0, 3277, 3278, 1, 0, 0, 0, 3278, 3276, 1, 0, 0, 0, 3278, 3279, 1, 0, 0, 0, 3279, 3280, 1, 0, 0, 0, 3280, 3281, 5, 39, 0, 0, 3281, 716, 1, 0, 0, 0, 3282, 3290, 5, 96, 0, 0, 3283, 3284, 5, 92, 0, 0, 3284, 3289, 9, 0, 0, 0, 3285, 3286, 5, 96, 0, 0, 3286, 3289, 5, 96, 0, 0, 3287, 3289, 8, 4, 0, 0, 3288, 3283, 1, 0, 0, 0, 3288, 3285, 1, 0, 0, 0, 3288, 3287, 1, 0, 0, 0, 3289, 3292, 1, 0, 0, 0, 3290, 3288, 1, 0, 0, 0, 3290, 3291, 1, 0, 0, 0, 3291, 3293, 1, 0, 0, 0, 3292, 3290, 1, 0, 0, 0, 3293, 3294, 5, 96, 0, 0, 3294, 718, 1, 0, 0, 0, 37, 0, 722, 732, 743, 748, 752, 756, 762, 766, 768, 3132, 3137, 3142, 3144, 3150, 3155, 3163, 3165, 3171, 3178, 3182, 3197, 3202, 3210, 3212, 3219, 3224, 3229, 3235, 3240, 3253, 3255, 3266, 3268, 3278, 3288, 3290, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 402, 3709, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 2, 272, 7, 272, 2, 273, 7, 273, 2, 274, 7, 274, 2, 275, 7, 275, 2, 276, 7, 276, 2, 277, 7, 277, 2, 278, 7, 278, 2, 279, 7, 279, 2, 280, 7, 280, 2, 281, 7, 281, 2, 282, 7, 282, 2, 283, 7, 283, 2, 284, 7, 284, 2, 285, 7, 285, 2, 286, 7, 286, 2, 287, 7, 287, 2, 288, 7, 288, 2, 289, 7, 289, 2, 290, 7, 290, 2, 291, 7, 291, 2, 292, 7, 292, 2, 293, 7, 293, 2, 294, 7, 294, 2, 295, 7, 295, 2, 296, 7, 296, 2, 297, 7, 297, 2, 298, 7, 298, 2, 299, 7, 299, 2, 300, 7, 300, 2, 301, 7, 301, 2, 302, 7, 302, 2, 303, 7, 303, 2, 304, 7, 304, 2, 305, 7, 305, 2, 306, 7, 306, 2, 307, 7, 307, 2, 308, 7, 308, 2, 309, 7, 309, 2, 310, 7, 310, 2, 311, 7, 311, 2, 312, 7, 312, 2, 313, 7, 313, 2, 314, 7, 314, 2, 315, 7, 315, 2, 316, 7, 316, 2, 317, 7, 317, 2, 318, 7, 318, 2, 319, 7, 319, 2, 320, 7, 320, 2, 321, 7, 321, 2, 322, 7, 322, 2, 323, 7, 323, 2, 324, 7, 324, 2, 325, 7, 325, 2, 326, 7, 326, 2, 327, 7, 327, 2, 328, 7, 328, 2, 329, 7, 329, 2, 330, 7, 330, 2, 331, 7, 331, 2, 332, 7, 332, 2, 333, 7, 333, 2, 334, 7, 334, 2, 335, 7, 335, 2, 336, 7, 336, 2, 337, 7, 337, 2, 338, 7, 338, 2, 339, 7, 339, 2, 340, 7, 340, 2, 341, 7, 341, 2, 342, 7, 342, 2, 343, 7, 343, 2, 344, 7, 344, 2, 345, 7, 345, 2, 346, 7, 346, 2, 347, 7, 347, 2, 348, 7, 348, 2, 349, 7, 349, 2, 350, 7, 350, 2, 351, 7, 351, 2, 352, 7, 352, 2, 353, 7, 353, 2, 354, 7, 354, 2, 355, 7, 355, 2, 356, 7, 356, 2, 357, 7, 357, 2, 358, 7, 358, 2, 359, 7, 359, 2, 360, 7, 360, 2, 361, 7, 361, 2, 362, 7, 362, 2, 363, 7, 363, 2, 364, 7, 364, 2, 365, 7, 365, 2, 366, 7, 366, 2, 367, 7, 367, 2, 368, 7, 368, 2, 369, 7, 369, 2, 370, 7, 370, 2, 371, 7, 371, 2, 372, 7, 372, 2, 373, 7, 373, 2, 374, 7, 374, 2, 375, 7, 375, 2, 376, 7, 376, 2, 377, 7, 377, 2, 378, 7, 378, 2, 379, 7, 379, 2, 380, 7, 380, 2, 381, 7, 381, 2, 382, 7, 382, 2, 383, 7, 383, 2, 384, 7, 384, 2, 385, 7, 385, 2, 386, 7, 386, 2, 387, 7, 387, 2, 388, 7, 388, 2, 389, 7, 389, 2, 390, 7, 390, 2, 391, 7, 391, 2, 392, 7, 392, 2, 393, 7, 393, 2, 394, 7, 394, 2, 395, 7, 395, 2, 396, 7, 396, 2, 397, 7, 397, 2, 398, 7, 398, 2, 399, 7, 399, 2, 400, 7, 400, 2, 401, 7, 401, 2, 402, 7, 402, 2, 403, 7, 403, 2, 404, 7, 404, 2, 405, 7, 405, 2, 406, 7, 406, 2, 407, 7, 407, 2, 408, 7, 408, 2, 409, 7, 409, 2, 410, 7, 410, 2, 411, 7, 411, 1, 0, 4, 0, 827, 8, 0, 11, 0, 12, 0, 828, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 837, 8, 1, 10, 1, 12, 1, 840, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 3, 2, 850, 8, 2, 1, 2, 5, 2, 853, 8, 2, 10, 2, 12, 2, 856, 9, 2, 1, 2, 3, 2, 859, 8, 2, 1, 2, 1, 2, 3, 2, 863, 8, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 869, 8, 2, 1, 2, 1, 2, 3, 2, 873, 8, 2, 3, 2, 875, 8, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 193, 1, 193, 1, 193, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 196, 1, 197, 1, 197, 1, 197, 1, 197, 1, 197, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 200, 1, 200, 1, 200, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 201, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 202, 1, 203, 1, 203, 1, 203, 1, 203, 1, 203, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 204, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 205, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 206, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 207, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 208, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 209, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 210, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 211, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 212, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 213, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 214, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 215, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 216, 1, 217, 1, 217, 1, 217, 1, 217, 1, 217, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 218, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 219, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 220, 1, 221, 1, 221, 1, 221, 1, 221, 1, 221, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 222, 1, 223, 1, 223, 1, 223, 1, 223, 1, 224, 1, 224, 1, 224, 1, 224, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 225, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 226, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 227, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 228, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 231, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 232, 1, 233, 1, 233, 1, 233, 1, 233, 1, 233, 1, 234, 1, 234, 1, 234, 1, 234, 1, 234, 1, 235, 1, 235, 1, 235, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 237, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 238, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 243, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 247, 1, 247, 1, 247, 1, 248, 1, 248, 1, 248, 1, 248, 1, 248, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 256, 1, 256, 1, 256, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 257, 1, 258, 1, 258, 1, 258, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 259, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 260, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 263, 1, 263, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 264, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 265, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 266, 1, 267, 1, 267, 1, 267, 1, 267, 1, 267, 1, 268, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 271, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 272, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 273, 1, 274, 1, 274, 1, 274, 1, 274, 1, 274, 1, 275, 1, 275, 1, 275, 1, 275, 1, 275, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 276, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 277, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 278, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 279, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 280, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 281, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 282, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 283, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 284, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 285, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 286, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 287, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 288, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 289, 1, 290, 1, 290, 1, 290, 1, 290, 1, 290, 1, 291, 1, 291, 1, 291, 1, 292, 1, 292, 1, 292, 1, 292, 1, 292, 1, 293, 1, 293, 1, 293, 1, 293, 1, 294, 1, 294, 1, 294, 1, 294, 1, 294, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 295, 1, 296, 1, 296, 1, 296, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 297, 1, 298, 1, 298, 1, 298, 1, 299, 1, 299, 1, 299, 1, 299, 1, 300, 1, 300, 1, 300, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 301, 1, 302, 1, 302, 1, 302, 1, 302, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 303, 1, 304, 1, 304, 1, 304, 1, 304, 1, 304, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 305, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 306, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 307, 1, 308, 1, 308, 1, 308, 1, 308, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 309, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 310, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 311, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 312, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 313, 1, 314, 1, 314, 1, 314, 1, 314, 1, 314, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 315, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 316, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 317, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 318, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 319, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 320, 1, 321, 1, 321, 1, 321, 1, 321, 1, 322, 1, 322, 1, 322, 1, 322, 1, 322, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 323, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 324, 1, 325, 1, 325, 1, 325, 1, 325, 1, 326, 1, 326, 1, 326, 1, 326, 1, 326, 1, 327, 1, 327, 1, 327, 1, 327, 1, 327, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 328, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 329, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 330, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 331, 1, 332, 1, 332, 1, 332, 1, 332, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 333, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 334, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 335, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 336, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 337, 1, 338, 1, 338, 1, 338, 1, 338, 1, 338, 1, 339, 1, 339, 1, 339, 1, 339, 1, 339, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 340, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 341, 1, 342, 1, 342, 1, 342, 1, 343, 1, 343, 1, 343, 1, 343, 1, 343, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 344, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 345, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 346, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 347, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 348, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 349, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 350, 1, 351, 1, 351, 1, 351, 1, 351, 1, 351, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, 1, 352, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 353, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 354, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 355, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 356, 1, 357, 1, 357, 1, 357, 1, 357, 1, 357, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 358, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 359, 1, 360, 1, 360, 1, 360, 1, 360, 1, 360, 1, 361, 1, 361, 1, 361, 1, 361, 1, 361, 1, 361, 1, 361, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 362, 1, 363, 1, 363, 1, 363, 1, 363, 1, 363, 1, 364, 1, 364, 1, 365, 1, 365, 1, 366, 1, 366, 1, 367, 1, 367, 1, 368, 1, 368, 1, 369, 1, 369, 1, 370, 1, 370, 1, 371, 1, 371, 1, 372, 1, 372, 1, 373, 1, 373, 1, 374, 1, 374, 1, 375, 1, 375, 1, 376, 1, 376, 1, 377, 1, 377, 1, 378, 1, 378, 1, 379, 1, 379, 1, 380, 1, 380, 1, 381, 1, 381, 1, 382, 1, 382, 1, 383, 1, 383, 1, 384, 1, 384, 1, 385, 1, 385, 1, 386, 1, 386, 1, 387, 1, 387, 1, 388, 1, 388, 1, 389, 1, 389, 1, 390, 1, 390, 1, 391, 1, 391, 1, 391, 1, 392, 1, 392, 1, 392, 1, 393, 1, 393, 1, 394, 1, 394, 1, 395, 1, 395, 1, 395, 1, 396, 1, 396, 1, 396, 3, 396, 3550, 8, 396, 1, 397, 4, 397, 3553, 8, 397, 11, 397, 12, 397, 3554, 1, 398, 4, 398, 3558, 8, 398, 11, 398, 12, 398, 3559, 3, 398, 3562, 8, 398, 1, 398, 1, 398, 4, 398, 3566, 8, 398, 11, 398, 12, 398, 3567, 1, 398, 4, 398, 3571, 8, 398, 11, 398, 12, 398, 3572, 1, 398, 1, 398, 1, 398, 1, 398, 4, 398, 3579, 8, 398, 11, 398, 12, 398, 3580, 3, 398, 3583, 8, 398, 1, 398, 1, 398, 4, 398, 3587, 8, 398, 11, 398, 12, 398, 3588, 1, 398, 1, 398, 1, 398, 4, 398, 3594, 8, 398, 11, 398, 12, 398, 3595, 1, 398, 1, 398, 3, 398, 3600, 8, 398, 1, 399, 1, 399, 1, 400, 1, 400, 1, 401, 1, 401, 1, 402, 1, 402, 5, 402, 3610, 8, 402, 10, 402, 12, 402, 3613, 9, 402, 4, 402, 3615, 8, 402, 11, 402, 12, 402, 3616, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 1, 403, 5, 403, 3625, 8, 403, 10, 403, 12, 403, 3628, 9, 403, 1, 403, 1, 403, 1, 404, 1, 404, 3, 404, 3634, 8, 404, 1, 404, 4, 404, 3637, 8, 404, 11, 404, 12, 404, 3638, 1, 405, 5, 405, 3642, 8, 405, 10, 405, 12, 405, 3645, 9, 405, 1, 405, 4, 405, 3648, 8, 405, 11, 405, 12, 405, 3649, 1, 405, 5, 405, 3653, 8, 405, 10, 405, 12, 405, 3656, 9, 405, 1, 406, 1, 406, 1, 407, 1, 407, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 1, 408, 5, 408, 3668, 8, 408, 10, 408, 12, 408, 3671, 9, 408, 1, 408, 1, 408, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 1, 409, 5, 409, 3681, 8, 409, 10, 409, 12, 409, 3684, 9, 409, 1, 409, 1, 409, 1, 410, 1, 410, 1, 410, 4, 410, 3691, 8, 410, 11, 410, 12, 410, 3692, 1, 410, 1, 410, 1, 411, 1, 411, 1, 411, 1, 411, 1, 411, 1, 411, 5, 411, 3703, 8, 411, 10, 411, 12, 411, 3706, 9, 411, 1, 411, 1, 411, 3, 838, 3643, 3649, 0, 412, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 201, 403, 202, 405, 203, 407, 204, 409, 205, 411, 206, 413, 207, 415, 208, 417, 209, 419, 210, 421, 211, 423, 212, 425, 213, 427, 214, 429, 215, 431, 216, 433, 217, 435, 218, 437, 219, 439, 220, 441, 221, 443, 222, 445, 223, 447, 224, 449, 225, 451, 226, 453, 227, 455, 228, 457, 229, 459, 230, 461, 231, 463, 232, 465, 233, 467, 234, 469, 235, 471, 236, 473, 237, 475, 238, 477, 239, 479, 240, 481, 241, 483, 242, 485, 243, 487, 244, 489, 245, 491, 246, 493, 247, 495, 248, 497, 249, 499, 250, 501, 251, 503, 252, 505, 253, 507, 254, 509, 255, 511, 256, 513, 257, 515, 258, 517, 259, 519, 260, 521, 261, 523, 262, 525, 263, 527, 264, 529, 265, 531, 266, 533, 267, 535, 268, 537, 269, 539, 270, 541, 271, 543, 272, 545, 273, 547, 274, 549, 275, 551, 276, 553, 277, 555, 278, 557, 279, 559, 280, 561, 281, 563, 282, 565, 283, 567, 284, 569, 285, 571, 286, 573, 287, 575, 288, 577, 289, 579, 290, 581, 291, 583, 292, 585, 293, 587, 294, 589, 295, 591, 296, 593, 297, 595, 298, 597, 299, 599, 300, 601, 301, 603, 302, 605, 303, 607, 304, 609, 305, 611, 306, 613, 307, 615, 308, 617, 309, 619, 310, 621, 311, 623, 312, 625, 313, 627, 314, 629, 315, 631, 316, 633, 317, 635, 318, 637, 319, 639, 320, 641, 321, 643, 322, 645, 323, 647, 324, 649, 325, 651, 326, 653, 327, 655, 328, 657, 329, 659, 330, 661, 331, 663, 332, 665, 333, 667, 334, 669, 335, 671, 336, 673, 337, 675, 338, 677, 339, 679, 340, 681, 341, 683, 342, 685, 343, 687, 344, 689, 345, 691, 346, 693, 347, 695, 348, 697, 349, 699, 350, 701, 351, 703, 352, 705, 353, 707, 354, 709, 355, 711, 356, 713, 357, 715, 358, 717, 359, 719, 360, 721, 361, 723, 362, 725, 363, 727, 364, 729, 365, 731, 366, 733, 367, 735, 368, 737, 369, 739, 370, 741, 371, 743, 372, 745, 373, 747, 374, 749, 375, 751, 376, 753, 377, 755, 378, 757, 379, 759, 380, 761, 381, 763, 382, 765, 383, 767, 384, 769, 385, 771, 386, 773, 387, 775, 388, 777, 389, 779, 390, 781, 391, 783, 392, 785, 393, 787, 394, 789, 395, 791, 396, 793, 397, 795, 398, 797, 399, 799, 400, 801, 401, 803, 402, 805, 0, 807, 0, 809, 0, 811, 0, 813, 0, 815, 0, 817, 0, 819, 0, 821, 0, 823, 0, 1, 0, 13, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 10, 10, 13, 13, 2, 0, 47, 47, 92, 92, 3, 0, 32, 32, 47, 47, 92, 92, 2, 0, 92, 92, 96, 96, 2, 0, 43, 43, 45, 45, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 2, 0, 65, 90, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 1, 0, 48, 49, 3741, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 401, 1, 0, 0, 0, 0, 403, 1, 0, 0, 0, 0, 405, 1, 0, 0, 0, 0, 407, 1, 0, 0, 0, 0, 409, 1, 0, 0, 0, 0, 411, 1, 0, 0, 0, 0, 413, 1, 0, 0, 0, 0, 415, 1, 0, 0, 0, 0, 417, 1, 0, 0, 0, 0, 419, 1, 0, 0, 0, 0, 421, 1, 0, 0, 0, 0, 423, 1, 0, 0, 0, 0, 425, 1, 0, 0, 0, 0, 427, 1, 0, 0, 0, 0, 429, 1, 0, 0, 0, 0, 431, 1, 0, 0, 0, 0, 433, 1, 0, 0, 0, 0, 435, 1, 0, 0, 0, 0, 437, 1, 0, 0, 0, 0, 439, 1, 0, 0, 0, 0, 441, 1, 0, 0, 0, 0, 443, 1, 0, 0, 0, 0, 445, 1, 0, 0, 0, 0, 447, 1, 0, 0, 0, 0, 449, 1, 0, 0, 0, 0, 451, 1, 0, 0, 0, 0, 453, 1, 0, 0, 0, 0, 455, 1, 0, 0, 0, 0, 457, 1, 0, 0, 0, 0, 459, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 0, 545, 1, 0, 0, 0, 0, 547, 1, 0, 0, 0, 0, 549, 1, 0, 0, 0, 0, 551, 1, 0, 0, 0, 0, 553, 1, 0, 0, 0, 0, 555, 1, 0, 0, 0, 0, 557, 1, 0, 0, 0, 0, 559, 1, 0, 0, 0, 0, 561, 1, 0, 0, 0, 0, 563, 1, 0, 0, 0, 0, 565, 1, 0, 0, 0, 0, 567, 1, 0, 0, 0, 0, 569, 1, 0, 0, 0, 0, 571, 1, 0, 0, 0, 0, 573, 1, 0, 0, 0, 0, 575, 1, 0, 0, 0, 0, 577, 1, 0, 0, 0, 0, 579, 1, 0, 0, 0, 0, 581, 1, 0, 0, 0, 0, 583, 1, 0, 0, 0, 0, 585, 1, 0, 0, 0, 0, 587, 1, 0, 0, 0, 0, 589, 1, 0, 0, 0, 0, 591, 1, 0, 0, 0, 0, 593, 1, 0, 0, 0, 0, 595, 1, 0, 0, 0, 0, 597, 1, 0, 0, 0, 0, 599, 1, 0, 0, 0, 0, 601, 1, 0, 0, 0, 0, 603, 1, 0, 0, 0, 0, 605, 1, 0, 0, 0, 0, 607, 1, 0, 0, 0, 0, 609, 1, 0, 0, 0, 0, 611, 1, 0, 0, 0, 0, 613, 1, 0, 0, 0, 0, 615, 1, 0, 0, 0, 0, 617, 1, 0, 0, 0, 0, 619, 1, 0, 0, 0, 0, 621, 1, 0, 0, 0, 0, 623, 1, 0, 0, 0, 0, 625, 1, 0, 0, 0, 0, 627, 1, 0, 0, 0, 0, 629, 1, 0, 0, 0, 0, 631, 1, 0, 0, 0, 0, 633, 1, 0, 0, 0, 0, 635, 1, 0, 0, 0, 0, 637, 1, 0, 0, 0, 0, 639, 1, 0, 0, 0, 0, 641, 1, 0, 0, 0, 0, 643, 1, 0, 0, 0, 0, 645, 1, 0, 0, 0, 0, 647, 1, 0, 0, 0, 0, 649, 1, 0, 0, 0, 0, 651, 1, 0, 0, 0, 0, 653, 1, 0, 0, 0, 0, 655, 1, 0, 0, 0, 0, 657, 1, 0, 0, 0, 0, 659, 1, 0, 0, 0, 0, 661, 1, 0, 0, 0, 0, 663, 1, 0, 0, 0, 0, 665, 1, 0, 0, 0, 0, 667, 1, 0, 0, 0, 0, 669, 1, 0, 0, 0, 0, 671, 1, 0, 0, 0, 0, 673, 1, 0, 0, 0, 0, 675, 1, 0, 0, 0, 0, 677, 1, 0, 0, 0, 0, 679, 1, 0, 0, 0, 0, 681, 1, 0, 0, 0, 0, 683, 1, 0, 0, 0, 0, 685, 1, 0, 0, 0, 0, 687, 1, 0, 0, 0, 0, 689, 1, 0, 0, 0, 0, 691, 1, 0, 0, 0, 0, 693, 1, 0, 0, 0, 0, 695, 1, 0, 0, 0, 0, 697, 1, 0, 0, 0, 0, 699, 1, 0, 0, 0, 0, 701, 1, 0, 0, 0, 0, 703, 1, 0, 0, 0, 0, 705, 1, 0, 0, 0, 0, 707, 1, 0, 0, 0, 0, 709, 1, 0, 0, 0, 0, 711, 1, 0, 0, 0, 0, 713, 1, 0, 0, 0, 0, 715, 1, 0, 0, 0, 0, 717, 1, 0, 0, 0, 0, 719, 1, 0, 0, 0, 0, 721, 1, 0, 0, 0, 0, 723, 1, 0, 0, 0, 0, 725, 1, 0, 0, 0, 0, 727, 1, 0, 0, 0, 0, 729, 1, 0, 0, 0, 0, 731, 1, 0, 0, 0, 0, 733, 1, 0, 0, 0, 0, 735, 1, 0, 0, 0, 0, 737, 1, 0, 0, 0, 0, 739, 1, 0, 0, 0, 0, 741, 1, 0, 0, 0, 0, 743, 1, 0, 0, 0, 0, 745, 1, 0, 0, 0, 0, 747, 1, 0, 0, 0, 0, 749, 1, 0, 0, 0, 0, 751, 1, 0, 0, 0, 0, 753, 1, 0, 0, 0, 0, 755, 1, 0, 0, 0, 0, 757, 1, 0, 0, 0, 0, 759, 1, 0, 0, 0, 0, 761, 1, 0, 0, 0, 0, 763, 1, 0, 0, 0, 0, 765, 1, 0, 0, 0, 0, 767, 1, 0, 0, 0, 0, 769, 1, 0, 0, 0, 0, 771, 1, 0, 0, 0, 0, 773, 1, 0, 0, 0, 0, 775, 1, 0, 0, 0, 0, 777, 1, 0, 0, 0, 0, 779, 1, 0, 0, 0, 0, 781, 1, 0, 0, 0, 0, 783, 1, 0, 0, 0, 0, 785, 1, 0, 0, 0, 0, 787, 1, 0, 0, 0, 0, 789, 1, 0, 0, 0, 0, 791, 1, 0, 0, 0, 0, 793, 1, 0, 0, 0, 0, 795, 1, 0, 0, 0, 0, 797, 1, 0, 0, 0, 0, 799, 1, 0, 0, 0, 0, 801, 1, 0, 0, 0, 0, 803, 1, 0, 0, 0, 1, 826, 1, 0, 0, 0, 3, 832, 1, 0, 0, 0, 5, 874, 1, 0, 0, 0, 7, 878, 1, 0, 0, 0, 9, 882, 1, 0, 0, 0, 11, 888, 1, 0, 0, 0, 13, 894, 1, 0, 0, 0, 15, 902, 1, 0, 0, 0, 17, 906, 1, 0, 0, 0, 19, 913, 1, 0, 0, 0, 21, 919, 1, 0, 0, 0, 23, 927, 1, 0, 0, 0, 25, 935, 1, 0, 0, 0, 27, 944, 1, 0, 0, 0, 29, 952, 1, 0, 0, 0, 31, 958, 1, 0, 0, 0, 33, 973, 1, 0, 0, 0, 35, 984, 1, 0, 0, 0, 37, 992, 1, 0, 0, 0, 39, 1000, 1, 0, 0, 0, 41, 1008, 1, 0, 0, 0, 43, 1020, 1, 0, 0, 0, 45, 1032, 1, 0, 0, 0, 47, 1041, 1, 0, 0, 0, 49, 1046, 1, 0, 0, 0, 51, 1055, 1, 0, 0, 0, 53, 1065, 1, 0, 0, 0, 55, 1070, 1, 0, 0, 0, 57, 1077, 1, 0, 0, 0, 59, 1085, 1, 0, 0, 0, 61, 1090, 1, 0, 0, 0, 63, 1101, 1, 0, 0, 0, 65, 1105, 1, 0, 0, 0, 67, 1114, 1, 0, 0, 0, 69, 1123, 1, 0, 0, 0, 71, 1130, 1, 0, 0, 0, 73, 1136, 1, 0, 0, 0, 75, 1151, 1, 0, 0, 0, 77, 1161, 1, 0, 0, 0, 79, 1169, 1, 0, 0, 0, 81, 1179, 1, 0, 0, 0, 83, 1188, 1, 0, 0, 0, 85, 1193, 1, 0, 0, 0, 87, 1199, 1, 0, 0, 0, 89, 1205, 1, 0, 0, 0, 91, 1215, 1, 0, 0, 0, 93, 1222, 1, 0, 0, 0, 95, 1230, 1, 0, 0, 0, 97, 1236, 1, 0, 0, 0, 99, 1248, 1, 0, 0, 0, 101, 1258, 1, 0, 0, 0, 103, 1266, 1, 0, 0, 0, 105, 1276, 1, 0, 0, 0, 107, 1279, 1, 0, 0, 0, 109, 1284, 1, 0, 0, 0, 111, 1292, 1, 0, 0, 0, 113, 1296, 1, 0, 0, 0, 115, 1302, 1, 0, 0, 0, 117, 1305, 1, 0, 0, 0, 119, 1312, 1, 0, 0, 0, 121, 1322, 1, 0, 0, 0, 123, 1328, 1, 0, 0, 0, 125, 1336, 1, 0, 0, 0, 127, 1340, 1, 0, 0, 0, 129, 1345, 1, 0, 0, 0, 131, 1350, 1, 0, 0, 0, 133, 1355, 1, 0, 0, 0, 135, 1375, 1, 0, 0, 0, 137, 1379, 1, 0, 0, 0, 139, 1390, 1, 0, 0, 0, 141, 1399, 1, 0, 0, 0, 143, 1405, 1, 0, 0, 0, 145, 1410, 1, 0, 0, 0, 147, 1417, 1, 0, 0, 0, 149, 1423, 1, 0, 0, 0, 151, 1428, 1, 0, 0, 0, 153, 1432, 1, 0, 0, 0, 155, 1444, 1, 0, 0, 0, 157, 1455, 1, 0, 0, 0, 159, 1467, 1, 0, 0, 0, 161, 1475, 1, 0, 0, 0, 163, 1484, 1, 0, 0, 0, 165, 1491, 1, 0, 0, 0, 167, 1499, 1, 0, 0, 0, 169, 1506, 1, 0, 0, 0, 171, 1517, 1, 0, 0, 0, 173, 1523, 1, 0, 0, 0, 175, 1530, 1, 0, 0, 0, 177, 1537, 1, 0, 0, 0, 179, 1545, 1, 0, 0, 0, 181, 1554, 1, 0, 0, 0, 183, 1561, 1, 0, 0, 0, 185, 1571, 1, 0, 0, 0, 187, 1583, 1, 0, 0, 0, 189, 1595, 1, 0, 0, 0, 191, 1606, 1, 0, 0, 0, 193, 1614, 1, 0, 0, 0, 195, 1619, 1, 0, 0, 0, 197, 1624, 1, 0, 0, 0, 199, 1632, 1, 0, 0, 0, 201, 1637, 1, 0, 0, 0, 203, 1647, 1, 0, 0, 0, 205, 1656, 1, 0, 0, 0, 207, 1662, 1, 0, 0, 0, 209, 1673, 1, 0, 0, 0, 211, 1680, 1, 0, 0, 0, 213, 1687, 1, 0, 0, 0, 215, 1700, 1, 0, 0, 0, 217, 1720, 1, 0, 0, 0, 219, 1740, 1, 0, 0, 0, 221, 1751, 1, 0, 0, 0, 223, 1767, 1, 0, 0, 0, 225, 1784, 1, 0, 0, 0, 227, 1792, 1, 0, 0, 0, 229, 1796, 1, 0, 0, 0, 231, 1801, 1, 0, 0, 0, 233, 1810, 1, 0, 0, 0, 235, 1817, 1, 0, 0, 0, 237, 1824, 1, 0, 0, 0, 239, 1832, 1, 0, 0, 0, 241, 1840, 1, 0, 0, 0, 243, 1848, 1, 0, 0, 0, 245, 1857, 1, 0, 0, 0, 247, 1862, 1, 0, 0, 0, 249, 1872, 1, 0, 0, 0, 251, 1878, 1, 0, 0, 0, 253, 1885, 1, 0, 0, 0, 255, 1891, 1, 0, 0, 0, 257, 1898, 1, 0, 0, 0, 259, 1906, 1, 0, 0, 0, 261, 1914, 1, 0, 0, 0, 263, 1923, 1, 0, 0, 0, 265, 1928, 1, 0, 0, 0, 267, 1935, 1, 0, 0, 0, 269, 1947, 1, 0, 0, 0, 271, 1955, 1, 0, 0, 0, 273, 1960, 1, 0, 0, 0, 275, 1967, 1, 0, 0, 0, 277, 1972, 1, 0, 0, 0, 279, 1978, 1, 0, 0, 0, 281, 1985, 1, 0, 0, 0, 283, 1991, 1, 0, 0, 0, 285, 1997, 1, 0, 0, 0, 287, 2007, 1, 0, 0, 0, 289, 2012, 1, 0, 0, 0, 291, 2019, 1, 0, 0, 0, 293, 2029, 1, 0, 0, 0, 295, 2035, 1, 0, 0, 0, 297, 2042, 1, 0, 0, 0, 299, 2052, 1, 0, 0, 0, 301, 2060, 1, 0, 0, 0, 303, 2074, 1, 0, 0, 0, 305, 2087, 1, 0, 0, 0, 307, 2101, 1, 0, 0, 0, 309, 2111, 1, 0, 0, 0, 311, 2118, 1, 0, 0, 0, 313, 2123, 1, 0, 0, 0, 315, 2129, 1, 0, 0, 0, 317, 2136, 1, 0, 0, 0, 319, 2142, 1, 0, 0, 0, 321, 2146, 1, 0, 0, 0, 323, 2152, 1, 0, 0, 0, 325, 2158, 1, 0, 0, 0, 327, 2163, 1, 0, 0, 0, 329, 2171, 1, 0, 0, 0, 331, 2176, 1, 0, 0, 0, 333, 2182, 1, 0, 0, 0, 335, 2190, 1, 0, 0, 0, 337, 2200, 1, 0, 0, 0, 339, 2211, 1, 0, 0, 0, 341, 2216, 1, 0, 0, 0, 343, 2221, 1, 0, 0, 0, 345, 2229, 1, 0, 0, 0, 347, 2235, 1, 0, 0, 0, 349, 2240, 1, 0, 0, 0, 351, 2244, 1, 0, 0, 0, 353, 2248, 1, 0, 0, 0, 355, 2254, 1, 0, 0, 0, 357, 2260, 1, 0, 0, 0, 359, 2264, 1, 0, 0, 0, 361, 2268, 1, 0, 0, 0, 363, 2272, 1, 0, 0, 0, 365, 2278, 1, 0, 0, 0, 367, 2281, 1, 0, 0, 0, 369, 2284, 1, 0, 0, 0, 371, 2288, 1, 0, 0, 0, 373, 2294, 1, 0, 0, 0, 375, 2302, 1, 0, 0, 0, 377, 2309, 1, 0, 0, 0, 379, 2316, 1, 0, 0, 0, 381, 2320, 1, 0, 0, 0, 383, 2325, 1, 0, 0, 0, 385, 2333, 1, 0, 0, 0, 387, 2338, 1, 0, 0, 0, 389, 2341, 1, 0, 0, 0, 391, 2346, 1, 0, 0, 0, 393, 2353, 1, 0, 0, 0, 395, 2362, 1, 0, 0, 0, 397, 2367, 1, 0, 0, 0, 399, 2372, 1, 0, 0, 0, 401, 2377, 1, 0, 0, 0, 403, 2382, 1, 0, 0, 0, 405, 2392, 1, 0, 0, 0, 407, 2398, 1, 0, 0, 0, 409, 2403, 1, 0, 0, 0, 411, 2409, 1, 0, 0, 0, 413, 2418, 1, 0, 0, 0, 415, 2426, 1, 0, 0, 0, 417, 2434, 1, 0, 0, 0, 419, 2441, 1, 0, 0, 0, 421, 2448, 1, 0, 0, 0, 423, 2456, 1, 0, 0, 0, 425, 2467, 1, 0, 0, 0, 427, 2476, 1, 0, 0, 0, 429, 2484, 1, 0, 0, 0, 431, 2490, 1, 0, 0, 0, 433, 2497, 1, 0, 0, 0, 435, 2503, 1, 0, 0, 0, 437, 2508, 1, 0, 0, 0, 439, 2516, 1, 0, 0, 0, 441, 2523, 1, 0, 0, 0, 443, 2529, 1, 0, 0, 0, 445, 2534, 1, 0, 0, 0, 447, 2543, 1, 0, 0, 0, 449, 2547, 1, 0, 0, 0, 451, 2551, 1, 0, 0, 0, 453, 2559, 1, 0, 0, 0, 455, 2567, 1, 0, 0, 0, 457, 2575, 1, 0, 0, 0, 459, 2582, 1, 0, 0, 0, 461, 2589, 1, 0, 0, 0, 463, 2598, 1, 0, 0, 0, 465, 2607, 1, 0, 0, 0, 467, 2614, 1, 0, 0, 0, 469, 2619, 1, 0, 0, 0, 471, 2624, 1, 0, 0, 0, 473, 2629, 1, 0, 0, 0, 475, 2633, 1, 0, 0, 0, 477, 2640, 1, 0, 0, 0, 479, 2647, 1, 0, 0, 0, 481, 2655, 1, 0, 0, 0, 483, 2662, 1, 0, 0, 0, 485, 2670, 1, 0, 0, 0, 487, 2679, 1, 0, 0, 0, 489, 2687, 1, 0, 0, 0, 491, 2693, 1, 0, 0, 0, 493, 2699, 1, 0, 0, 0, 495, 2703, 1, 0, 0, 0, 497, 2708, 1, 0, 0, 0, 499, 2713, 1, 0, 0, 0, 501, 2722, 1, 0, 0, 0, 503, 2729, 1, 0, 0, 0, 505, 2735, 1, 0, 0, 0, 507, 2741, 1, 0, 0, 0, 509, 2750, 1, 0, 0, 0, 511, 2757, 1, 0, 0, 0, 513, 2764, 1, 0, 0, 0, 515, 2769, 1, 0, 0, 0, 517, 2776, 1, 0, 0, 0, 519, 2779, 1, 0, 0, 0, 521, 2789, 1, 0, 0, 0, 523, 2795, 1, 0, 0, 0, 525, 2801, 1, 0, 0, 0, 527, 2808, 1, 0, 0, 0, 529, 2812, 1, 0, 0, 0, 531, 2820, 1, 0, 0, 0, 533, 2830, 1, 0, 0, 0, 535, 2839, 1, 0, 0, 0, 537, 2844, 1, 0, 0, 0, 539, 2847, 1, 0, 0, 0, 541, 2852, 1, 0, 0, 0, 543, 2856, 1, 0, 0, 0, 545, 2865, 1, 0, 0, 0, 547, 2873, 1, 0, 0, 0, 549, 2881, 1, 0, 0, 0, 551, 2886, 1, 0, 0, 0, 553, 2891, 1, 0, 0, 0, 555, 2897, 1, 0, 0, 0, 557, 2903, 1, 0, 0, 0, 559, 2909, 1, 0, 0, 0, 561, 2925, 1, 0, 0, 0, 563, 2934, 1, 0, 0, 0, 565, 2940, 1, 0, 0, 0, 567, 2949, 1, 0, 0, 0, 569, 2955, 1, 0, 0, 0, 571, 2962, 1, 0, 0, 0, 573, 2971, 1, 0, 0, 0, 575, 2978, 1, 0, 0, 0, 577, 2984, 1, 0, 0, 0, 579, 2993, 1, 0, 0, 0, 581, 3001, 1, 0, 0, 0, 583, 3006, 1, 0, 0, 0, 585, 3009, 1, 0, 0, 0, 587, 3014, 1, 0, 0, 0, 589, 3018, 1, 0, 0, 0, 591, 3023, 1, 0, 0, 0, 593, 3031, 1, 0, 0, 0, 595, 3034, 1, 0, 0, 0, 597, 3041, 1, 0, 0, 0, 599, 3044, 1, 0, 0, 0, 601, 3048, 1, 0, 0, 0, 603, 3051, 1, 0, 0, 0, 605, 3057, 1, 0, 0, 0, 607, 3061, 1, 0, 0, 0, 609, 3067, 1, 0, 0, 0, 611, 3072, 1, 0, 0, 0, 613, 3080, 1, 0, 0, 0, 615, 3090, 1, 0, 0, 0, 617, 3098, 1, 0, 0, 0, 619, 3102, 1, 0, 0, 0, 621, 3110, 1, 0, 0, 0, 623, 3117, 1, 0, 0, 0, 625, 3126, 1, 0, 0, 0, 627, 3134, 1, 0, 0, 0, 629, 3140, 1, 0, 0, 0, 631, 3145, 1, 0, 0, 0, 633, 3151, 1, 0, 0, 0, 635, 3158, 1, 0, 0, 0, 637, 3164, 1, 0, 0, 0, 639, 3170, 1, 0, 0, 0, 641, 3179, 1, 0, 0, 0, 643, 3186, 1, 0, 0, 0, 645, 3190, 1, 0, 0, 0, 647, 3195, 1, 0, 0, 0, 649, 3202, 1, 0, 0, 0, 651, 3209, 1, 0, 0, 0, 653, 3213, 1, 0, 0, 0, 655, 3218, 1, 0, 0, 0, 657, 3223, 1, 0, 0, 0, 659, 3232, 1, 0, 0, 0, 661, 3238, 1, 0, 0, 0, 663, 3245, 1, 0, 0, 0, 665, 3255, 1, 0, 0, 0, 667, 3259, 1, 0, 0, 0, 669, 3266, 1, 0, 0, 0, 671, 3278, 1, 0, 0, 0, 673, 3290, 1, 0, 0, 0, 675, 3296, 1, 0, 0, 0, 677, 3308, 1, 0, 0, 0, 679, 3313, 1, 0, 0, 0, 681, 3318, 1, 0, 0, 0, 683, 3328, 1, 0, 0, 0, 685, 3336, 1, 0, 0, 0, 687, 3339, 1, 0, 0, 0, 689, 3344, 1, 0, 0, 0, 691, 3353, 1, 0, 0, 0, 693, 3359, 1, 0, 0, 0, 695, 3366, 1, 0, 0, 0, 697, 3374, 1, 0, 0, 0, 699, 3381, 1, 0, 0, 0, 701, 3387, 1, 0, 0, 0, 703, 3394, 1, 0, 0, 0, 705, 3399, 1, 0, 0, 0, 707, 3405, 1, 0, 0, 0, 709, 3411, 1, 0, 0, 0, 711, 3418, 1, 0, 0, 0, 713, 3428, 1, 0, 0, 0, 715, 3436, 1, 0, 0, 0, 717, 3441, 1, 0, 0, 0, 719, 3447, 1, 0, 0, 0, 721, 3454, 1, 0, 0, 0, 723, 3459, 1, 0, 0, 0, 725, 3466, 1, 0, 0, 0, 727, 3474, 1, 0, 0, 0, 729, 3479, 1, 0, 0, 0, 731, 3481, 1, 0, 0, 0, 733, 3483, 1, 0, 0, 0, 735, 3485, 1, 0, 0, 0, 737, 3487, 1, 0, 0, 0, 739, 3489, 1, 0, 0, 0, 741, 3491, 1, 0, 0, 0, 743, 3493, 1, 0, 0, 0, 745, 3495, 1, 0, 0, 0, 747, 3497, 1, 0, 0, 0, 749, 3499, 1, 0, 0, 0, 751, 3501, 1, 0, 0, 0, 753, 3503, 1, 0, 0, 0, 755, 3505, 1, 0, 0, 0, 757, 3507, 1, 0, 0, 0, 759, 3509, 1, 0, 0, 0, 761, 3511, 1, 0, 0, 0, 763, 3513, 1, 0, 0, 0, 765, 3515, 1, 0, 0, 0, 767, 3517, 1, 0, 0, 0, 769, 3519, 1, 0, 0, 0, 771, 3521, 1, 0, 0, 0, 773, 3523, 1, 0, 0, 0, 775, 3525, 1, 0, 0, 0, 777, 3527, 1, 0, 0, 0, 779, 3529, 1, 0, 0, 0, 781, 3531, 1, 0, 0, 0, 783, 3533, 1, 0, 0, 0, 785, 3536, 1, 0, 0, 0, 787, 3539, 1, 0, 0, 0, 789, 3541, 1, 0, 0, 0, 791, 3543, 1, 0, 0, 0, 793, 3549, 1, 0, 0, 0, 795, 3552, 1, 0, 0, 0, 797, 3599, 1, 0, 0, 0, 799, 3601, 1, 0, 0, 0, 801, 3603, 1, 0, 0, 0, 803, 3605, 1, 0, 0, 0, 805, 3614, 1, 0, 0, 0, 807, 3618, 1, 0, 0, 0, 809, 3631, 1, 0, 0, 0, 811, 3643, 1, 0, 0, 0, 813, 3657, 1, 0, 0, 0, 815, 3659, 1, 0, 0, 0, 817, 3661, 1, 0, 0, 0, 819, 3674, 1, 0, 0, 0, 821, 3687, 1, 0, 0, 0, 823, 3696, 1, 0, 0, 0, 825, 827, 7, 0, 0, 0, 826, 825, 1, 0, 0, 0, 827, 828, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 830, 1, 0, 0, 0, 830, 831, 6, 0, 0, 0, 831, 2, 1, 0, 0, 0, 832, 833, 5, 47, 0, 0, 833, 834, 5, 42, 0, 0, 834, 838, 1, 0, 0, 0, 835, 837, 9, 0, 0, 0, 836, 835, 1, 0, 0, 0, 837, 840, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 838, 836, 1, 0, 0, 0, 839, 841, 1, 0, 0, 0, 840, 838, 1, 0, 0, 0, 841, 842, 5, 42, 0, 0, 842, 843, 5, 47, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 6, 1, 0, 0, 845, 4, 1, 0, 0, 0, 846, 847, 5, 45, 0, 0, 847, 850, 5, 45, 0, 0, 848, 850, 5, 35, 0, 0, 849, 846, 1, 0, 0, 0, 849, 848, 1, 0, 0, 0, 850, 854, 1, 0, 0, 0, 851, 853, 8, 1, 0, 0, 852, 851, 1, 0, 0, 0, 853, 856, 1, 0, 0, 0, 854, 852, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 862, 1, 0, 0, 0, 856, 854, 1, 0, 0, 0, 857, 859, 5, 13, 0, 0, 858, 857, 1, 0, 0, 0, 858, 859, 1, 0, 0, 0, 859, 860, 1, 0, 0, 0, 860, 863, 5, 10, 0, 0, 861, 863, 5, 0, 0, 1, 862, 858, 1, 0, 0, 0, 862, 861, 1, 0, 0, 0, 863, 875, 1, 0, 0, 0, 864, 865, 5, 45, 0, 0, 865, 866, 5, 45, 0, 0, 866, 872, 1, 0, 0, 0, 867, 869, 5, 13, 0, 0, 868, 867, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 873, 5, 10, 0, 0, 871, 873, 5, 0, 0, 1, 872, 868, 1, 0, 0, 0, 872, 871, 1, 0, 0, 0, 873, 875, 1, 0, 0, 0, 874, 849, 1, 0, 0, 0, 874, 864, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 877, 6, 2, 0, 0, 877, 6, 1, 0, 0, 0, 878, 879, 5, 65, 0, 0, 879, 880, 5, 68, 0, 0, 880, 881, 5, 68, 0, 0, 881, 8, 1, 0, 0, 0, 882, 883, 5, 65, 0, 0, 883, 884, 5, 68, 0, 0, 884, 885, 5, 77, 0, 0, 885, 886, 5, 73, 0, 0, 886, 887, 5, 78, 0, 0, 887, 10, 1, 0, 0, 0, 888, 889, 5, 65, 0, 0, 889, 890, 5, 70, 0, 0, 890, 891, 5, 84, 0, 0, 891, 892, 5, 69, 0, 0, 892, 893, 5, 82, 0, 0, 893, 12, 1, 0, 0, 0, 894, 895, 5, 65, 0, 0, 895, 896, 5, 78, 0, 0, 896, 897, 5, 65, 0, 0, 897, 898, 5, 76, 0, 0, 898, 899, 5, 89, 0, 0, 899, 900, 5, 90, 0, 0, 900, 901, 5, 69, 0, 0, 901, 14, 1, 0, 0, 0, 902, 903, 5, 65, 0, 0, 903, 904, 5, 83, 0, 0, 904, 905, 5, 67, 0, 0, 905, 16, 1, 0, 0, 0, 906, 907, 5, 66, 0, 0, 907, 908, 5, 69, 0, 0, 908, 909, 5, 70, 0, 0, 909, 910, 5, 79, 0, 0, 910, 911, 5, 82, 0, 0, 911, 912, 5, 69, 0, 0, 912, 18, 1, 0, 0, 0, 913, 914, 5, 66, 0, 0, 914, 915, 5, 89, 0, 0, 915, 916, 5, 84, 0, 0, 916, 917, 5, 69, 0, 0, 917, 918, 5, 83, 0, 0, 918, 20, 1, 0, 0, 0, 919, 920, 5, 67, 0, 0, 920, 921, 5, 65, 0, 0, 921, 922, 5, 83, 0, 0, 922, 923, 5, 67, 0, 0, 923, 924, 5, 65, 0, 0, 924, 925, 5, 68, 0, 0, 925, 926, 5, 69, 0, 0, 926, 22, 1, 0, 0, 0, 927, 928, 5, 67, 0, 0, 928, 929, 5, 65, 0, 0, 929, 930, 5, 84, 0, 0, 930, 931, 5, 65, 0, 0, 931, 932, 5, 76, 0, 0, 932, 933, 5, 79, 0, 0, 933, 934, 5, 71, 0, 0, 934, 24, 1, 0, 0, 0, 935, 936, 5, 67, 0, 0, 936, 937, 5, 65, 0, 0, 937, 938, 5, 84, 0, 0, 938, 939, 5, 65, 0, 0, 939, 940, 5, 76, 0, 0, 940, 941, 5, 79, 0, 0, 941, 942, 5, 71, 0, 0, 942, 943, 5, 83, 0, 0, 943, 26, 1, 0, 0, 0, 944, 945, 5, 67, 0, 0, 945, 946, 5, 69, 0, 0, 946, 947, 5, 78, 0, 0, 947, 948, 5, 84, 0, 0, 948, 949, 5, 85, 0, 0, 949, 950, 5, 82, 0, 0, 950, 951, 5, 89, 0, 0, 951, 28, 1, 0, 0, 0, 952, 953, 5, 67, 0, 0, 953, 954, 5, 72, 0, 0, 954, 955, 5, 65, 0, 0, 955, 956, 5, 73, 0, 0, 956, 957, 5, 78, 0, 0, 957, 30, 1, 0, 0, 0, 958, 959, 5, 67, 0, 0, 959, 960, 5, 72, 0, 0, 960, 961, 5, 65, 0, 0, 961, 962, 5, 78, 0, 0, 962, 963, 5, 71, 0, 0, 963, 964, 5, 69, 0, 0, 964, 965, 5, 76, 0, 0, 965, 966, 5, 79, 0, 0, 966, 967, 5, 71, 0, 0, 967, 968, 5, 95, 0, 0, 968, 969, 5, 77, 0, 0, 969, 970, 5, 79, 0, 0, 970, 971, 5, 68, 0, 0, 971, 972, 5, 69, 0, 0, 972, 32, 1, 0, 0, 0, 973, 974, 5, 67, 0, 0, 974, 975, 5, 72, 0, 0, 975, 976, 5, 65, 0, 0, 976, 977, 5, 82, 0, 0, 977, 978, 5, 65, 0, 0, 978, 979, 5, 67, 0, 0, 979, 980, 5, 84, 0, 0, 980, 981, 5, 69, 0, 0, 981, 982, 5, 82, 0, 0, 982, 983, 5, 83, 0, 0, 983, 34, 1, 0, 0, 0, 984, 985, 5, 67, 0, 0, 985, 986, 5, 79, 0, 0, 986, 987, 5, 77, 0, 0, 987, 988, 5, 77, 0, 0, 988, 989, 5, 69, 0, 0, 989, 990, 5, 78, 0, 0, 990, 991, 5, 84, 0, 0, 991, 36, 1, 0, 0, 0, 992, 993, 5, 67, 0, 0, 993, 994, 5, 79, 0, 0, 994, 995, 5, 77, 0, 0, 995, 996, 5, 80, 0, 0, 996, 997, 5, 65, 0, 0, 997, 998, 5, 67, 0, 0, 998, 999, 5, 84, 0, 0, 999, 38, 1, 0, 0, 0, 1000, 1001, 5, 67, 0, 0, 1001, 1002, 5, 79, 0, 0, 1002, 1003, 5, 76, 0, 0, 1003, 1004, 5, 85, 0, 0, 1004, 1005, 5, 77, 0, 0, 1005, 1006, 5, 78, 0, 0, 1006, 1007, 5, 83, 0, 0, 1007, 40, 1, 0, 0, 0, 1008, 1009, 5, 67, 0, 0, 1009, 1010, 5, 79, 0, 0, 1010, 1011, 5, 78, 0, 0, 1011, 1012, 5, 83, 0, 0, 1012, 1013, 5, 84, 0, 0, 1013, 1014, 5, 82, 0, 0, 1014, 1015, 5, 65, 0, 0, 1015, 1016, 5, 73, 0, 0, 1016, 1017, 5, 78, 0, 0, 1017, 1018, 5, 84, 0, 0, 1018, 1019, 5, 83, 0, 0, 1019, 42, 1, 0, 0, 0, 1020, 1021, 5, 67, 0, 0, 1021, 1022, 5, 79, 0, 0, 1022, 1023, 5, 78, 0, 0, 1023, 1024, 5, 83, 0, 0, 1024, 1025, 5, 84, 0, 0, 1025, 1026, 5, 82, 0, 0, 1026, 1027, 5, 85, 0, 0, 1027, 1028, 5, 67, 0, 0, 1028, 1029, 5, 84, 0, 0, 1029, 1030, 5, 79, 0, 0, 1030, 1031, 5, 82, 0, 0, 1031, 44, 1, 0, 0, 0, 1032, 1033, 5, 67, 0, 0, 1033, 1034, 5, 85, 0, 0, 1034, 1035, 5, 77, 0, 0, 1035, 1036, 5, 85, 0, 0, 1036, 1037, 5, 76, 0, 0, 1037, 1038, 5, 65, 0, 0, 1038, 1039, 5, 84, 0, 0, 1039, 1040, 5, 69, 0, 0, 1040, 46, 1, 0, 0, 0, 1041, 1042, 5, 68, 0, 0, 1042, 1043, 5, 65, 0, 0, 1043, 1044, 5, 84, 0, 0, 1044, 1045, 5, 65, 0, 0, 1045, 48, 1, 0, 0, 0, 1046, 1047, 5, 68, 0, 0, 1047, 1048, 5, 65, 0, 0, 1048, 1049, 5, 84, 0, 0, 1049, 1050, 5, 65, 0, 0, 1050, 1051, 5, 66, 0, 0, 1051, 1052, 5, 65, 0, 0, 1052, 1053, 5, 83, 0, 0, 1053, 1054, 5, 69, 0, 0, 1054, 50, 1, 0, 0, 0, 1055, 1056, 5, 68, 0, 0, 1056, 1057, 5, 65, 0, 0, 1057, 1058, 5, 84, 0, 0, 1058, 1059, 5, 65, 0, 0, 1059, 1060, 5, 66, 0, 0, 1060, 1061, 5, 65, 0, 0, 1061, 1062, 5, 83, 0, 0, 1062, 1063, 5, 69, 0, 0, 1063, 1064, 5, 83, 0, 0, 1064, 52, 1, 0, 0, 0, 1065, 1066, 5, 68, 0, 0, 1066, 1067, 5, 65, 0, 0, 1067, 1068, 5, 89, 0, 0, 1068, 1069, 5, 83, 0, 0, 1069, 54, 1, 0, 0, 0, 1070, 1071, 5, 68, 0, 0, 1071, 1072, 5, 69, 0, 0, 1072, 1073, 5, 67, 0, 0, 1073, 1074, 5, 65, 0, 0, 1074, 1075, 5, 68, 0, 0, 1075, 1076, 5, 69, 0, 0, 1076, 56, 1, 0, 0, 0, 1077, 1078, 5, 68, 0, 0, 1078, 1079, 5, 69, 0, 0, 1079, 1080, 5, 70, 0, 0, 1080, 1081, 5, 73, 0, 0, 1081, 1082, 5, 78, 0, 0, 1082, 1083, 5, 69, 0, 0, 1083, 1084, 5, 68, 0, 0, 1084, 58, 1, 0, 0, 0, 1085, 1086, 5, 68, 0, 0, 1086, 1087, 5, 69, 0, 0, 1087, 1088, 5, 83, 0, 0, 1088, 1089, 5, 67, 0, 0, 1089, 60, 1, 0, 0, 0, 1090, 1091, 5, 68, 0, 0, 1091, 1092, 5, 69, 0, 0, 1092, 1093, 5, 83, 0, 0, 1093, 1094, 5, 67, 0, 0, 1094, 1095, 5, 82, 0, 0, 1095, 1096, 5, 73, 0, 0, 1096, 1097, 5, 80, 0, 0, 1097, 1098, 5, 84, 0, 0, 1098, 1099, 5, 79, 0, 0, 1099, 1100, 5, 82, 0, 0, 1100, 62, 1, 0, 0, 0, 1101, 1102, 5, 68, 0, 0, 1102, 1103, 5, 73, 0, 0, 1103, 1104, 5, 86, 0, 0, 1104, 64, 1, 0, 0, 0, 1105, 1106, 5, 69, 0, 0, 1106, 1107, 5, 78, 0, 0, 1107, 1108, 5, 67, 0, 0, 1108, 1109, 5, 79, 0, 0, 1109, 1110, 5, 68, 0, 0, 1110, 1111, 5, 73, 0, 0, 1111, 1112, 5, 78, 0, 0, 1112, 1113, 5, 71, 0, 0, 1113, 66, 1, 0, 0, 0, 1114, 1115, 5, 69, 0, 0, 1115, 1116, 5, 78, 0, 0, 1116, 1117, 5, 70, 0, 0, 1117, 1118, 5, 79, 0, 0, 1118, 1119, 5, 82, 0, 0, 1119, 1120, 5, 67, 0, 0, 1120, 1121, 5, 69, 0, 0, 1121, 1122, 5, 68, 0, 0, 1122, 68, 1, 0, 0, 0, 1123, 1124, 5, 69, 0, 0, 1124, 1125, 5, 78, 0, 0, 1125, 1126, 5, 71, 0, 0, 1126, 1127, 5, 73, 0, 0, 1127, 1128, 5, 78, 0, 0, 1128, 1129, 5, 69, 0, 0, 1129, 70, 1, 0, 0, 0, 1130, 1131, 5, 69, 0, 0, 1131, 1132, 5, 82, 0, 0, 1132, 1133, 5, 82, 0, 0, 1133, 1134, 5, 79, 0, 0, 1134, 1135, 5, 82, 0, 0, 1135, 72, 1, 0, 0, 0, 1136, 1137, 5, 69, 0, 0, 1137, 1138, 5, 83, 0, 0, 1138, 1139, 5, 84, 0, 0, 1139, 1140, 5, 73, 0, 0, 1140, 1141, 5, 77, 0, 0, 1141, 1142, 5, 65, 0, 0, 1142, 1143, 5, 84, 0, 0, 1143, 1144, 5, 69, 0, 0, 1144, 1145, 5, 68, 0, 0, 1145, 1146, 5, 95, 0, 0, 1146, 1147, 5, 67, 0, 0, 1147, 1148, 5, 79, 0, 0, 1148, 1149, 5, 83, 0, 0, 1149, 1150, 5, 84, 0, 0, 1150, 74, 1, 0, 0, 0, 1151, 1152, 5, 69, 0, 0, 1152, 1153, 5, 88, 0, 0, 1153, 1154, 5, 67, 0, 0, 1154, 1155, 5, 69, 0, 0, 1155, 1156, 5, 80, 0, 0, 1156, 1157, 5, 84, 0, 0, 1157, 1158, 5, 73, 0, 0, 1158, 1159, 5, 79, 0, 0, 1159, 1160, 5, 78, 0, 0, 1160, 76, 1, 0, 0, 0, 1161, 1162, 5, 69, 0, 0, 1162, 1163, 5, 88, 0, 0, 1163, 1164, 5, 67, 0, 0, 1164, 1165, 5, 76, 0, 0, 1165, 1166, 5, 85, 0, 0, 1166, 1167, 5, 68, 0, 0, 1167, 1168, 5, 69, 0, 0, 1168, 78, 1, 0, 0, 0, 1169, 1170, 5, 69, 0, 0, 1170, 1171, 5, 88, 0, 0, 1171, 1172, 5, 67, 0, 0, 1172, 1173, 5, 76, 0, 0, 1173, 1174, 5, 85, 0, 0, 1174, 1175, 5, 68, 0, 0, 1175, 1176, 5, 73, 0, 0, 1176, 1177, 5, 78, 0, 0, 1177, 1178, 5, 71, 0, 0, 1178, 80, 1, 0, 0, 0, 1179, 1180, 5, 69, 0, 0, 1180, 1181, 5, 88, 0, 0, 1181, 1182, 5, 84, 0, 0, 1182, 1183, 5, 69, 0, 0, 1183, 1184, 5, 78, 0, 0, 1184, 1185, 5, 68, 0, 0, 1185, 1186, 5, 69, 0, 0, 1186, 1187, 5, 68, 0, 0, 1187, 82, 1, 0, 0, 0, 1188, 1189, 5, 70, 0, 0, 1189, 1190, 5, 73, 0, 0, 1190, 1191, 5, 76, 0, 0, 1191, 1192, 5, 69, 0, 0, 1192, 84, 1, 0, 0, 0, 1193, 1194, 5, 70, 0, 0, 1194, 1195, 5, 73, 0, 0, 1195, 1196, 5, 78, 0, 0, 1196, 1197, 5, 65, 0, 0, 1197, 1198, 5, 76, 0, 0, 1198, 86, 1, 0, 0, 0, 1199, 1200, 5, 70, 0, 0, 1200, 1201, 5, 73, 0, 0, 1201, 1202, 5, 82, 0, 0, 1202, 1203, 5, 83, 0, 0, 1203, 1204, 5, 84, 0, 0, 1204, 88, 1, 0, 0, 0, 1205, 1206, 5, 70, 0, 0, 1206, 1207, 5, 79, 0, 0, 1207, 1208, 5, 76, 0, 0, 1208, 1209, 5, 76, 0, 0, 1209, 1210, 5, 79, 0, 0, 1210, 1211, 5, 87, 0, 0, 1211, 1212, 5, 73, 0, 0, 1212, 1213, 5, 78, 0, 0, 1213, 1214, 5, 71, 0, 0, 1214, 90, 1, 0, 0, 0, 1215, 1216, 5, 70, 0, 0, 1216, 1217, 5, 79, 0, 0, 1217, 1218, 5, 82, 0, 0, 1218, 1219, 5, 77, 0, 0, 1219, 1220, 5, 65, 0, 0, 1220, 1221, 5, 84, 0, 0, 1221, 92, 1, 0, 0, 0, 1222, 1223, 5, 70, 0, 0, 1223, 1224, 5, 79, 0, 0, 1224, 1225, 5, 82, 0, 0, 1225, 1226, 5, 84, 0, 0, 1226, 1227, 5, 82, 0, 0, 1227, 1228, 5, 65, 0, 0, 1228, 1229, 5, 78, 0, 0, 1229, 94, 1, 0, 0, 0, 1230, 1231, 5, 70, 0, 0, 1231, 1232, 5, 79, 0, 0, 1232, 1233, 5, 85, 0, 0, 1233, 1234, 5, 78, 0, 0, 1234, 1235, 5, 68, 0, 0, 1235, 96, 1, 0, 0, 0, 1236, 1237, 5, 70, 0, 0, 1237, 1238, 5, 82, 0, 0, 1238, 1239, 5, 65, 0, 0, 1239, 1240, 5, 67, 0, 0, 1240, 1241, 5, 95, 0, 0, 1241, 1242, 5, 83, 0, 0, 1242, 1243, 5, 69, 0, 0, 1243, 1244, 5, 67, 0, 0, 1244, 1245, 5, 79, 0, 0, 1245, 1246, 5, 78, 0, 0, 1246, 1247, 5, 68, 0, 0, 1247, 98, 1, 0, 0, 0, 1248, 1249, 5, 70, 0, 0, 1249, 1250, 5, 85, 0, 0, 1250, 1251, 5, 78, 0, 0, 1251, 1252, 5, 67, 0, 0, 1252, 1253, 5, 84, 0, 0, 1253, 1254, 5, 73, 0, 0, 1254, 1255, 5, 79, 0, 0, 1255, 1256, 5, 78, 0, 0, 1256, 1257, 5, 83, 0, 0, 1257, 100, 1, 0, 0, 0, 1258, 1259, 5, 71, 0, 0, 1259, 1260, 5, 69, 0, 0, 1260, 1261, 5, 78, 0, 0, 1261, 1262, 5, 69, 0, 0, 1262, 1263, 5, 82, 0, 0, 1263, 1264, 5, 65, 0, 0, 1264, 1265, 5, 76, 0, 0, 1265, 102, 1, 0, 0, 0, 1266, 1267, 5, 71, 0, 0, 1267, 1268, 5, 69, 0, 0, 1268, 1269, 5, 78, 0, 0, 1269, 1270, 5, 69, 0, 0, 1270, 1271, 5, 82, 0, 0, 1271, 1272, 5, 65, 0, 0, 1272, 1273, 5, 84, 0, 0, 1273, 1274, 5, 69, 0, 0, 1274, 1275, 5, 68, 0, 0, 1275, 104, 1, 0, 0, 0, 1276, 1277, 5, 71, 0, 0, 1277, 1278, 5, 79, 0, 0, 1278, 106, 1, 0, 0, 0, 1279, 1280, 5, 71, 0, 0, 1280, 1281, 5, 79, 0, 0, 1281, 1282, 5, 84, 0, 0, 1282, 1283, 5, 79, 0, 0, 1283, 108, 1, 0, 0, 0, 1284, 1285, 5, 71, 0, 0, 1285, 1286, 5, 82, 0, 0, 1286, 1287, 5, 65, 0, 0, 1287, 1288, 5, 78, 0, 0, 1288, 1289, 5, 84, 0, 0, 1289, 1290, 5, 69, 0, 0, 1290, 1291, 5, 68, 0, 0, 1291, 110, 1, 0, 0, 0, 1292, 1293, 5, 72, 0, 0, 1293, 1294, 5, 79, 0, 0, 1294, 1295, 5, 80, 0, 0, 1295, 112, 1, 0, 0, 0, 1296, 1297, 5, 72, 0, 0, 1297, 1298, 5, 79, 0, 0, 1298, 1299, 5, 85, 0, 0, 1299, 1300, 5, 82, 0, 0, 1300, 1301, 5, 83, 0, 0, 1301, 114, 1, 0, 0, 0, 1302, 1303, 5, 73, 0, 0, 1303, 1304, 5, 70, 0, 0, 1304, 116, 1, 0, 0, 0, 1305, 1306, 5, 73, 0, 0, 1306, 1307, 5, 71, 0, 0, 1307, 1308, 5, 78, 0, 0, 1308, 1309, 5, 79, 0, 0, 1309, 1310, 5, 82, 0, 0, 1310, 1311, 5, 69, 0, 0, 1311, 118, 1, 0, 0, 0, 1312, 1313, 5, 73, 0, 0, 1313, 1314, 5, 78, 0, 0, 1314, 1315, 5, 67, 0, 0, 1315, 1316, 5, 82, 0, 0, 1316, 1317, 5, 69, 0, 0, 1317, 1318, 5, 77, 0, 0, 1318, 1319, 5, 69, 0, 0, 1319, 1320, 5, 78, 0, 0, 1320, 1321, 5, 84, 0, 0, 1321, 120, 1, 0, 0, 0, 1322, 1323, 5, 73, 0, 0, 1323, 1324, 5, 78, 0, 0, 1324, 1325, 5, 80, 0, 0, 1325, 1326, 5, 85, 0, 0, 1326, 1327, 5, 84, 0, 0, 1327, 122, 1, 0, 0, 0, 1328, 1329, 5, 73, 0, 0, 1329, 1330, 5, 78, 0, 0, 1330, 1331, 5, 86, 0, 0, 1331, 1332, 5, 79, 0, 0, 1332, 1333, 5, 75, 0, 0, 1333, 1334, 5, 69, 0, 0, 1334, 1335, 5, 82, 0, 0, 1335, 124, 1, 0, 0, 0, 1336, 1337, 5, 74, 0, 0, 1337, 1338, 5, 65, 0, 0, 1338, 1339, 5, 82, 0, 0, 1339, 126, 1, 0, 0, 0, 1340, 1341, 5, 74, 0, 0, 1341, 1342, 5, 65, 0, 0, 1342, 1343, 5, 82, 0, 0, 1343, 1344, 5, 83, 0, 0, 1344, 128, 1, 0, 0, 0, 1345, 1346, 5, 74, 0, 0, 1346, 1347, 5, 65, 0, 0, 1347, 1348, 5, 86, 0, 0, 1348, 1349, 5, 65, 0, 0, 1349, 130, 1, 0, 0, 0, 1350, 1351, 5, 74, 0, 0, 1351, 1352, 5, 83, 0, 0, 1352, 1353, 5, 79, 0, 0, 1353, 1354, 5, 78, 0, 0, 1354, 132, 1, 0, 0, 0, 1355, 1356, 5, 74, 0, 0, 1356, 1357, 5, 83, 0, 0, 1357, 1358, 5, 79, 0, 0, 1358, 1359, 5, 78, 0, 0, 1359, 1360, 5, 95, 0, 0, 1360, 1361, 5, 69, 0, 0, 1361, 1362, 5, 88, 0, 0, 1362, 1363, 5, 69, 0, 0, 1363, 1364, 5, 67, 0, 0, 1364, 1365, 5, 85, 0, 0, 1365, 1366, 5, 84, 0, 0, 1366, 1367, 5, 73, 0, 0, 1367, 1368, 5, 79, 0, 0, 1368, 1369, 5, 78, 0, 0, 1369, 1370, 5, 95, 0, 0, 1370, 1371, 5, 80, 0, 0, 1371, 1372, 5, 76, 0, 0, 1372, 1373, 5, 65, 0, 0, 1373, 1374, 5, 78, 0, 0, 1374, 134, 1, 0, 0, 0, 1375, 1376, 5, 75, 0, 0, 1376, 1377, 5, 69, 0, 0, 1377, 1378, 5, 89, 0, 0, 1378, 136, 1, 0, 0, 0, 1379, 1380, 5, 75, 0, 0, 1380, 1381, 5, 69, 0, 0, 1381, 1382, 5, 89, 0, 0, 1382, 1383, 5, 95, 0, 0, 1383, 1384, 5, 77, 0, 0, 1384, 1385, 5, 69, 0, 0, 1385, 1386, 5, 77, 0, 0, 1386, 1387, 5, 66, 0, 0, 1387, 1388, 5, 69, 0, 0, 1388, 1389, 5, 82, 0, 0, 1389, 138, 1, 0, 0, 0, 1390, 1391, 5, 75, 0, 0, 1391, 1392, 5, 69, 0, 0, 1392, 1393, 5, 89, 0, 0, 1393, 1394, 5, 95, 0, 0, 1394, 1395, 5, 84, 0, 0, 1395, 1396, 5, 89, 0, 0, 1396, 1397, 5, 80, 0, 0, 1397, 1398, 5, 69, 0, 0, 1398, 140, 1, 0, 0, 0, 1399, 1400, 5, 76, 0, 0, 1400, 1401, 5, 65, 0, 0, 1401, 1402, 5, 66, 0, 0, 1402, 1403, 5, 69, 0, 0, 1403, 1404, 5, 76, 0, 0, 1404, 142, 1, 0, 0, 0, 1405, 1406, 5, 76, 0, 0, 1406, 1407, 5, 65, 0, 0, 1407, 1408, 5, 83, 0, 0, 1408, 1409, 5, 84, 0, 0, 1409, 144, 1, 0, 0, 0, 1410, 1411, 5, 76, 0, 0, 1411, 1412, 5, 69, 0, 0, 1412, 1413, 5, 78, 0, 0, 1413, 1414, 5, 71, 0, 0, 1414, 1415, 5, 84, 0, 0, 1415, 1416, 5, 72, 0, 0, 1416, 146, 1, 0, 0, 0, 1417, 1418, 5, 76, 0, 0, 1418, 1419, 5, 69, 0, 0, 1419, 1420, 5, 86, 0, 0, 1420, 1421, 5, 69, 0, 0, 1421, 1422, 5, 76, 0, 0, 1422, 148, 1, 0, 0, 0, 1423, 1424, 5, 76, 0, 0, 1424, 1425, 5, 79, 0, 0, 1425, 1426, 5, 65, 0, 0, 1426, 1427, 5, 68, 0, 0, 1427, 150, 1, 0, 0, 0, 1428, 1429, 5, 77, 0, 0, 1429, 1430, 5, 65, 0, 0, 1430, 1431, 5, 80, 0, 0, 1431, 152, 1, 0, 0, 0, 1432, 1433, 5, 77, 0, 0, 1433, 1434, 5, 73, 0, 0, 1434, 1435, 5, 67, 0, 0, 1435, 1436, 5, 82, 0, 0, 1436, 1437, 5, 79, 0, 0, 1437, 1438, 5, 83, 0, 0, 1438, 1439, 5, 69, 0, 0, 1439, 1440, 5, 67, 0, 0, 1440, 1441, 5, 79, 0, 0, 1441, 1442, 5, 78, 0, 0, 1442, 1443, 5, 68, 0, 0, 1443, 154, 1, 0, 0, 0, 1444, 1445, 5, 77, 0, 0, 1445, 1446, 5, 73, 0, 0, 1446, 1447, 5, 76, 0, 0, 1447, 1448, 5, 76, 0, 0, 1448, 1449, 5, 69, 0, 0, 1449, 1450, 5, 78, 0, 0, 1450, 1451, 5, 78, 0, 0, 1451, 1452, 5, 73, 0, 0, 1452, 1453, 5, 85, 0, 0, 1453, 1454, 5, 77, 0, 0, 1454, 156, 1, 0, 0, 0, 1455, 1456, 5, 77, 0, 0, 1456, 1457, 5, 73, 0, 0, 1457, 1458, 5, 76, 0, 0, 1458, 1459, 5, 76, 0, 0, 1459, 1460, 5, 73, 0, 0, 1460, 1461, 5, 83, 0, 0, 1461, 1462, 5, 69, 0, 0, 1462, 1463, 5, 67, 0, 0, 1463, 1464, 5, 79, 0, 0, 1464, 1465, 5, 78, 0, 0, 1465, 1466, 5, 68, 0, 0, 1466, 158, 1, 0, 0, 0, 1467, 1468, 5, 77, 0, 0, 1468, 1469, 5, 73, 0, 0, 1469, 1470, 5, 78, 0, 0, 1470, 1471, 5, 85, 0, 0, 1471, 1472, 5, 84, 0, 0, 1472, 1473, 5, 69, 0, 0, 1473, 1474, 5, 83, 0, 0, 1474, 160, 1, 0, 0, 0, 1475, 1476, 5, 77, 0, 0, 1476, 1477, 5, 73, 0, 0, 1477, 1478, 5, 78, 0, 0, 1478, 1479, 5, 86, 0, 0, 1479, 1480, 5, 65, 0, 0, 1480, 1481, 5, 76, 0, 0, 1481, 1482, 5, 85, 0, 0, 1482, 1483, 5, 69, 0, 0, 1483, 162, 1, 0, 0, 0, 1484, 1485, 5, 77, 0, 0, 1485, 1486, 5, 79, 0, 0, 1486, 1487, 5, 68, 0, 0, 1487, 1488, 5, 73, 0, 0, 1488, 1489, 5, 70, 0, 0, 1489, 1490, 5, 89, 0, 0, 1490, 164, 1, 0, 0, 0, 1491, 1492, 5, 77, 0, 0, 1492, 1493, 5, 79, 0, 0, 1493, 1494, 5, 68, 0, 0, 1494, 1495, 5, 85, 0, 0, 1495, 1496, 5, 76, 0, 0, 1496, 1497, 5, 69, 0, 0, 1497, 1498, 5, 83, 0, 0, 1498, 166, 1, 0, 0, 0, 1499, 1500, 5, 77, 0, 0, 1500, 1501, 5, 79, 0, 0, 1501, 1502, 5, 78, 0, 0, 1502, 1503, 5, 84, 0, 0, 1503, 1504, 5, 72, 0, 0, 1504, 1505, 5, 83, 0, 0, 1505, 168, 1, 0, 0, 0, 1506, 1507, 5, 78, 0, 0, 1507, 1508, 5, 65, 0, 0, 1508, 1509, 5, 78, 0, 0, 1509, 1510, 5, 79, 0, 0, 1510, 1511, 5, 83, 0, 0, 1511, 1512, 5, 69, 0, 0, 1512, 1513, 5, 67, 0, 0, 1513, 1514, 5, 79, 0, 0, 1514, 1515, 5, 78, 0, 0, 1515, 1516, 5, 68, 0, 0, 1516, 170, 1, 0, 0, 0, 1517, 1518, 5, 78, 0, 0, 1518, 1519, 5, 85, 0, 0, 1519, 1520, 5, 76, 0, 0, 1520, 1521, 5, 76, 0, 0, 1521, 1522, 5, 83, 0, 0, 1522, 172, 1, 0, 0, 0, 1523, 1524, 5, 78, 0, 0, 1524, 1525, 5, 85, 0, 0, 1525, 1526, 5, 77, 0, 0, 1526, 1527, 5, 66, 0, 0, 1527, 1528, 5, 69, 0, 0, 1528, 1529, 5, 82, 0, 0, 1529, 174, 1, 0, 0, 0, 1530, 1531, 5, 79, 0, 0, 1531, 1532, 5, 80, 0, 0, 1532, 1533, 5, 84, 0, 0, 1533, 1534, 5, 73, 0, 0, 1534, 1535, 5, 79, 0, 0, 1535, 1536, 5, 78, 0, 0, 1536, 176, 1, 0, 0, 0, 1537, 1538, 5, 79, 0, 0, 1538, 1539, 5, 80, 0, 0, 1539, 1540, 5, 84, 0, 0, 1540, 1541, 5, 73, 0, 0, 1541, 1542, 5, 79, 0, 0, 1542, 1543, 5, 78, 0, 0, 1543, 1544, 5, 83, 0, 0, 1544, 178, 1, 0, 0, 0, 1545, 1546, 5, 79, 0, 0, 1546, 1547, 5, 82, 0, 0, 1547, 1548, 5, 68, 0, 0, 1548, 1549, 5, 69, 0, 0, 1549, 1550, 5, 82, 0, 0, 1550, 1551, 5, 73, 0, 0, 1551, 1552, 5, 78, 0, 0, 1552, 1553, 5, 71, 0, 0, 1553, 180, 1, 0, 0, 0, 1554, 1555, 5, 79, 0, 0, 1555, 1556, 5, 85, 0, 0, 1556, 1557, 5, 84, 0, 0, 1557, 1558, 5, 80, 0, 0, 1558, 1559, 5, 85, 0, 0, 1559, 1560, 5, 84, 0, 0, 1560, 182, 1, 0, 0, 0, 1561, 1562, 5, 79, 0, 0, 1562, 1563, 5, 86, 0, 0, 1563, 1564, 5, 69, 0, 0, 1564, 1565, 5, 82, 0, 0, 1565, 1566, 5, 87, 0, 0, 1566, 1567, 5, 82, 0, 0, 1567, 1568, 5, 73, 0, 0, 1568, 1569, 5, 84, 0, 0, 1569, 1570, 5, 69, 0, 0, 1570, 184, 1, 0, 0, 0, 1571, 1572, 5, 79, 0, 0, 1572, 1573, 5, 86, 0, 0, 1573, 1574, 5, 69, 0, 0, 1574, 1575, 5, 82, 0, 0, 1575, 1576, 5, 87, 0, 0, 1576, 1577, 5, 82, 0, 0, 1577, 1578, 5, 73, 0, 0, 1578, 1579, 5, 84, 0, 0, 1579, 1580, 5, 73, 0, 0, 1580, 1581, 5, 78, 0, 0, 1581, 1582, 5, 71, 0, 0, 1582, 186, 1, 0, 0, 0, 1583, 1584, 5, 80, 0, 0, 1584, 1585, 5, 65, 0, 0, 1585, 1586, 5, 82, 0, 0, 1586, 1587, 5, 84, 0, 0, 1587, 1588, 5, 73, 0, 0, 1588, 1589, 5, 84, 0, 0, 1589, 1590, 5, 73, 0, 0, 1590, 1591, 5, 79, 0, 0, 1591, 1592, 5, 78, 0, 0, 1592, 1593, 5, 69, 0, 0, 1593, 1594, 5, 68, 0, 0, 1594, 188, 1, 0, 0, 0, 1595, 1596, 5, 80, 0, 0, 1596, 1597, 5, 65, 0, 0, 1597, 1598, 5, 82, 0, 0, 1598, 1599, 5, 84, 0, 0, 1599, 1600, 5, 73, 0, 0, 1600, 1601, 5, 84, 0, 0, 1601, 1602, 5, 73, 0, 0, 1602, 1603, 5, 79, 0, 0, 1603, 1604, 5, 78, 0, 0, 1604, 1605, 5, 83, 0, 0, 1605, 190, 1, 0, 0, 0, 1606, 1607, 5, 80, 0, 0, 1607, 1608, 5, 65, 0, 0, 1608, 1609, 5, 83, 0, 0, 1609, 1610, 5, 83, 0, 0, 1610, 1611, 5, 73, 0, 0, 1611, 1612, 5, 78, 0, 0, 1612, 1613, 5, 71, 0, 0, 1613, 192, 1, 0, 0, 0, 1614, 1615, 5, 80, 0, 0, 1615, 1616, 5, 65, 0, 0, 1616, 1617, 5, 83, 0, 0, 1617, 1618, 5, 84, 0, 0, 1618, 194, 1, 0, 0, 0, 1619, 1620, 5, 80, 0, 0, 1620, 1621, 5, 65, 0, 0, 1621, 1622, 5, 84, 0, 0, 1622, 1623, 5, 72, 0, 0, 1623, 196, 1, 0, 0, 0, 1624, 1625, 5, 80, 0, 0, 1625, 1626, 5, 76, 0, 0, 1626, 1627, 5, 65, 0, 0, 1627, 1628, 5, 67, 0, 0, 1628, 1629, 5, 73, 0, 0, 1629, 1630, 5, 78, 0, 0, 1630, 1631, 5, 71, 0, 0, 1631, 198, 1, 0, 0, 0, 1632, 1633, 5, 80, 0, 0, 1633, 1634, 5, 76, 0, 0, 1634, 1635, 5, 65, 0, 0, 1635, 1636, 5, 78, 0, 0, 1636, 200, 1, 0, 0, 0, 1637, 1638, 5, 80, 0, 0, 1638, 1639, 5, 82, 0, 0, 1639, 1640, 5, 69, 0, 0, 1640, 1641, 5, 67, 0, 0, 1641, 1642, 5, 69, 0, 0, 1642, 1643, 5, 68, 0, 0, 1643, 1644, 5, 73, 0, 0, 1644, 1645, 5, 78, 0, 0, 1645, 1646, 5, 71, 0, 0, 1646, 202, 1, 0, 0, 0, 1647, 1648, 5, 80, 0, 0, 1648, 1649, 5, 82, 0, 0, 1649, 1650, 5, 69, 0, 0, 1650, 1651, 5, 83, 0, 0, 1651, 1652, 5, 69, 0, 0, 1652, 1653, 5, 82, 0, 0, 1653, 1654, 5, 86, 0, 0, 1654, 1655, 5, 69, 0, 0, 1655, 204, 1, 0, 0, 0, 1656, 1657, 5, 80, 0, 0, 1657, 1658, 5, 82, 0, 0, 1658, 1659, 5, 73, 0, 0, 1659, 1660, 5, 79, 0, 0, 1660, 1661, 5, 82, 0, 0, 1661, 206, 1, 0, 0, 0, 1662, 1663, 5, 80, 0, 0, 1663, 1664, 5, 82, 0, 0, 1664, 1665, 5, 73, 0, 0, 1665, 1666, 5, 86, 0, 0, 1666, 1667, 5, 73, 0, 0, 1667, 1668, 5, 76, 0, 0, 1668, 1669, 5, 69, 0, 0, 1669, 1670, 5, 71, 0, 0, 1670, 1671, 5, 69, 0, 0, 1671, 1672, 5, 83, 0, 0, 1672, 208, 1, 0, 0, 0, 1673, 1674, 5, 80, 0, 0, 1674, 1675, 5, 85, 0, 0, 1675, 1676, 5, 66, 0, 0, 1676, 1677, 5, 76, 0, 0, 1677, 1678, 5, 73, 0, 0, 1678, 1679, 5, 67, 0, 0, 1679, 210, 1, 0, 0, 0, 1680, 1681, 5, 80, 0, 0, 1681, 1682, 5, 89, 0, 0, 1682, 1683, 5, 84, 0, 0, 1683, 1684, 5, 72, 0, 0, 1684, 1685, 5, 79, 0, 0, 1685, 1686, 5, 78, 0, 0, 1686, 212, 1, 0, 0, 0, 1687, 1688, 5, 80, 0, 0, 1688, 1689, 5, 89, 0, 0, 1689, 1690, 5, 84, 0, 0, 1690, 1691, 5, 72, 0, 0, 1691, 1692, 5, 79, 0, 0, 1692, 1693, 5, 78, 0, 0, 1693, 1694, 5, 95, 0, 0, 1694, 1695, 5, 70, 0, 0, 1695, 1696, 5, 73, 0, 0, 1696, 1697, 5, 76, 0, 0, 1697, 1698, 5, 69, 0, 0, 1698, 1699, 5, 83, 0, 0, 1699, 214, 1, 0, 0, 0, 1700, 1701, 5, 80, 0, 0, 1701, 1702, 5, 89, 0, 0, 1702, 1703, 5, 84, 0, 0, 1703, 1704, 5, 72, 0, 0, 1704, 1705, 5, 79, 0, 0, 1705, 1706, 5, 78, 0, 0, 1706, 1707, 5, 95, 0, 0, 1707, 1708, 5, 82, 0, 0, 1708, 1709, 5, 69, 0, 0, 1709, 1710, 5, 81, 0, 0, 1710, 1711, 5, 85, 0, 0, 1711, 1712, 5, 73, 0, 0, 1712, 1713, 5, 82, 0, 0, 1713, 1714, 5, 69, 0, 0, 1714, 1715, 5, 77, 0, 0, 1715, 1716, 5, 69, 0, 0, 1716, 1717, 5, 78, 0, 0, 1717, 1718, 5, 84, 0, 0, 1718, 1719, 5, 83, 0, 0, 1719, 216, 1, 0, 0, 0, 1720, 1721, 5, 80, 0, 0, 1721, 1722, 5, 89, 0, 0, 1722, 1723, 5, 84, 0, 0, 1723, 1724, 5, 72, 0, 0, 1724, 1725, 5, 79, 0, 0, 1725, 1726, 5, 78, 0, 0, 1726, 1727, 5, 95, 0, 0, 1727, 1728, 5, 68, 0, 0, 1728, 1729, 5, 69, 0, 0, 1729, 1730, 5, 80, 0, 0, 1730, 1731, 5, 69, 0, 0, 1731, 1732, 5, 78, 0, 0, 1732, 1733, 5, 68, 0, 0, 1733, 1734, 5, 69, 0, 0, 1734, 1735, 5, 78, 0, 0, 1735, 1736, 5, 67, 0, 0, 1736, 1737, 5, 73, 0, 0, 1737, 1738, 5, 69, 0, 0, 1738, 1739, 5, 83, 0, 0, 1739, 218, 1, 0, 0, 0, 1740, 1741, 5, 80, 0, 0, 1741, 1742, 5, 89, 0, 0, 1742, 1743, 5, 84, 0, 0, 1743, 1744, 5, 72, 0, 0, 1744, 1745, 5, 79, 0, 0, 1745, 1746, 5, 78, 0, 0, 1746, 1747, 5, 95, 0, 0, 1747, 1748, 5, 74, 0, 0, 1748, 1749, 5, 65, 0, 0, 1749, 1750, 5, 82, 0, 0, 1750, 220, 1, 0, 0, 0, 1751, 1752, 5, 80, 0, 0, 1752, 1753, 5, 89, 0, 0, 1753, 1754, 5, 84, 0, 0, 1754, 1755, 5, 72, 0, 0, 1755, 1756, 5, 79, 0, 0, 1756, 1757, 5, 78, 0, 0, 1757, 1758, 5, 95, 0, 0, 1758, 1759, 5, 65, 0, 0, 1759, 1760, 5, 82, 0, 0, 1760, 1761, 5, 67, 0, 0, 1761, 1762, 5, 72, 0, 0, 1762, 1763, 5, 73, 0, 0, 1763, 1764, 5, 86, 0, 0, 1764, 1765, 5, 69, 0, 0, 1765, 1766, 5, 83, 0, 0, 1766, 222, 1, 0, 0, 0, 1767, 1768, 5, 80, 0, 0, 1768, 1769, 5, 89, 0, 0, 1769, 1770, 5, 84, 0, 0, 1770, 1771, 5, 72, 0, 0, 1771, 1772, 5, 79, 0, 0, 1772, 1773, 5, 78, 0, 0, 1773, 1774, 5, 95, 0, 0, 1774, 1775, 5, 80, 0, 0, 1775, 1776, 5, 65, 0, 0, 1776, 1777, 5, 82, 0, 0, 1777, 1778, 5, 65, 0, 0, 1778, 1779, 5, 77, 0, 0, 1779, 1780, 5, 69, 0, 0, 1780, 1781, 5, 84, 0, 0, 1781, 1782, 5, 69, 0, 0, 1782, 1783, 5, 82, 0, 0, 1783, 224, 1, 0, 0, 0, 1784, 1785, 5, 81, 0, 0, 1785, 1786, 5, 85, 0, 0, 1786, 1787, 5, 65, 0, 0, 1787, 1788, 5, 82, 0, 0, 1788, 1789, 5, 84, 0, 0, 1789, 1790, 5, 69, 0, 0, 1790, 1791, 5, 82, 0, 0, 1791, 226, 1, 0, 0, 0, 1792, 1793, 5, 82, 0, 0, 1793, 1794, 5, 65, 0, 0, 1794, 1795, 5, 87, 0, 0, 1795, 228, 1, 0, 0, 0, 1796, 1797, 5, 82, 0, 0, 1797, 1798, 5, 69, 0, 0, 1798, 1799, 5, 65, 0, 0, 1799, 1800, 5, 68, 0, 0, 1800, 230, 1, 0, 0, 0, 1801, 1802, 5, 82, 0, 0, 1802, 1803, 5, 69, 0, 0, 1803, 1804, 5, 76, 0, 0, 1804, 1805, 5, 65, 0, 0, 1805, 1806, 5, 84, 0, 0, 1806, 1807, 5, 73, 0, 0, 1807, 1808, 5, 86, 0, 0, 1808, 1809, 5, 69, 0, 0, 1809, 232, 1, 0, 0, 0, 1810, 1811, 5, 82, 0, 0, 1811, 1812, 5, 69, 0, 0, 1812, 1813, 5, 77, 0, 0, 1813, 1814, 5, 79, 0, 0, 1814, 1815, 5, 86, 0, 0, 1815, 1816, 5, 69, 0, 0, 1816, 234, 1, 0, 0, 0, 1817, 1818, 5, 82, 0, 0, 1818, 1819, 5, 69, 0, 0, 1819, 1820, 5, 78, 0, 0, 1820, 1821, 5, 65, 0, 0, 1821, 1822, 5, 77, 0, 0, 1822, 1823, 5, 69, 0, 0, 1823, 236, 1, 0, 0, 0, 1824, 1825, 5, 82, 0, 0, 1825, 1826, 5, 69, 0, 0, 1826, 1827, 5, 80, 0, 0, 1827, 1828, 5, 76, 0, 0, 1828, 1829, 5, 65, 0, 0, 1829, 1830, 5, 67, 0, 0, 1830, 1831, 5, 69, 0, 0, 1831, 238, 1, 0, 0, 0, 1832, 1833, 5, 82, 0, 0, 1833, 1834, 5, 69, 0, 0, 1834, 1835, 5, 83, 0, 0, 1835, 1836, 5, 80, 0, 0, 1836, 1837, 5, 69, 0, 0, 1837, 1838, 5, 67, 0, 0, 1838, 1839, 5, 84, 0, 0, 1839, 240, 1, 0, 0, 0, 1840, 1841, 5, 82, 0, 0, 1841, 1842, 5, 69, 0, 0, 1842, 1843, 5, 83, 0, 0, 1843, 1844, 5, 84, 0, 0, 1844, 1845, 5, 65, 0, 0, 1845, 1846, 5, 82, 0, 0, 1846, 1847, 5, 84, 0, 0, 1847, 242, 1, 0, 0, 0, 1848, 1849, 5, 82, 0, 0, 1849, 1850, 5, 69, 0, 0, 1850, 1851, 5, 83, 0, 0, 1851, 1852, 5, 84, 0, 0, 1852, 1853, 5, 82, 0, 0, 1853, 1854, 5, 73, 0, 0, 1854, 1855, 5, 67, 0, 0, 1855, 1856, 5, 84, 0, 0, 1856, 244, 1, 0, 0, 0, 1857, 1858, 5, 82, 0, 0, 1858, 1859, 5, 79, 0, 0, 1859, 1860, 5, 76, 0, 0, 1860, 1861, 5, 69, 0, 0, 1861, 246, 1, 0, 0, 0, 1862, 1863, 5, 82, 0, 0, 1863, 1864, 5, 79, 0, 0, 1864, 1865, 5, 87, 0, 0, 1865, 1866, 5, 95, 0, 0, 1866, 1867, 5, 67, 0, 0, 1867, 1868, 5, 79, 0, 0, 1868, 1869, 5, 85, 0, 0, 1869, 1870, 5, 78, 0, 0, 1870, 1871, 5, 84, 0, 0, 1871, 248, 1, 0, 0, 0, 1872, 1873, 5, 83, 0, 0, 1873, 1874, 5, 67, 0, 0, 1874, 1875, 5, 65, 0, 0, 1875, 1876, 5, 76, 0, 0, 1876, 1877, 5, 65, 0, 0, 1877, 250, 1, 0, 0, 0, 1878, 1879, 5, 83, 0, 0, 1879, 1880, 5, 67, 0, 0, 1880, 1881, 5, 65, 0, 0, 1881, 1882, 5, 76, 0, 0, 1882, 1883, 5, 65, 0, 0, 1883, 1884, 5, 82, 0, 0, 1884, 252, 1, 0, 0, 0, 1885, 1886, 5, 83, 0, 0, 1886, 1887, 5, 67, 0, 0, 1887, 1888, 5, 65, 0, 0, 1888, 1889, 5, 76, 0, 0, 1889, 1890, 5, 69, 0, 0, 1890, 254, 1, 0, 0, 0, 1891, 1892, 5, 83, 0, 0, 1892, 1893, 5, 67, 0, 0, 1893, 1894, 5, 72, 0, 0, 1894, 1895, 5, 69, 0, 0, 1895, 1896, 5, 77, 0, 0, 1896, 1897, 5, 65, 0, 0, 1897, 256, 1, 0, 0, 0, 1898, 1899, 5, 83, 0, 0, 1899, 1900, 5, 69, 0, 0, 1900, 1901, 5, 67, 0, 0, 1901, 1902, 5, 79, 0, 0, 1902, 1903, 5, 78, 0, 0, 1903, 1904, 5, 68, 0, 0, 1904, 1905, 5, 83, 0, 0, 1905, 258, 1, 0, 0, 0, 1906, 1907, 5, 83, 0, 0, 1907, 1908, 5, 69, 0, 0, 1908, 1909, 5, 67, 0, 0, 1909, 1910, 5, 84, 0, 0, 1910, 1911, 5, 73, 0, 0, 1911, 1912, 5, 79, 0, 0, 1912, 1913, 5, 78, 0, 0, 1913, 260, 1, 0, 0, 0, 1914, 1915, 5, 83, 0, 0, 1915, 1916, 5, 69, 0, 0, 1916, 1917, 5, 67, 0, 0, 1917, 1918, 5, 85, 0, 0, 1918, 1919, 5, 82, 0, 0, 1919, 1920, 5, 73, 0, 0, 1920, 1921, 5, 84, 0, 0, 1921, 1922, 5, 89, 0, 0, 1922, 262, 1, 0, 0, 0, 1923, 1924, 5, 83, 0, 0, 1924, 1925, 5, 69, 0, 0, 1925, 1926, 5, 76, 0, 0, 1926, 1927, 5, 70, 0, 0, 1927, 264, 1, 0, 0, 0, 1928, 1929, 5, 83, 0, 0, 1929, 1930, 5, 69, 0, 0, 1930, 1931, 5, 82, 0, 0, 1931, 1932, 5, 86, 0, 0, 1932, 1933, 5, 69, 0, 0, 1933, 1934, 5, 82, 0, 0, 1934, 266, 1, 0, 0, 0, 1935, 1936, 5, 83, 0, 0, 1936, 1937, 5, 69, 0, 0, 1937, 1938, 5, 82, 0, 0, 1938, 1939, 5, 86, 0, 0, 1939, 1940, 5, 69, 0, 0, 1940, 1941, 5, 82, 0, 0, 1941, 1942, 5, 95, 0, 0, 1942, 1943, 5, 78, 0, 0, 1943, 1944, 5, 65, 0, 0, 1944, 1945, 5, 77, 0, 0, 1945, 1946, 5, 69, 0, 0, 1946, 268, 1, 0, 0, 0, 1947, 1948, 5, 83, 0, 0, 1948, 1949, 5, 69, 0, 0, 1949, 1950, 5, 83, 0, 0, 1950, 1951, 5, 83, 0, 0, 1951, 1952, 5, 73, 0, 0, 1952, 1953, 5, 79, 0, 0, 1953, 1954, 5, 78, 0, 0, 1954, 270, 1, 0, 0, 0, 1955, 1956, 5, 83, 0, 0, 1956, 1957, 5, 69, 0, 0, 1957, 1958, 5, 84, 0, 0, 1958, 1959, 5, 83, 0, 0, 1959, 272, 1, 0, 0, 0, 1960, 1961, 5, 83, 0, 0, 1961, 1962, 5, 73, 0, 0, 1962, 1963, 5, 77, 0, 0, 1963, 1964, 5, 80, 0, 0, 1964, 1965, 5, 76, 0, 0, 1965, 1966, 5, 69, 0, 0, 1966, 274, 1, 0, 0, 0, 1967, 1968, 5, 83, 0, 0, 1968, 1969, 5, 73, 0, 0, 1969, 1970, 5, 90, 0, 0, 1970, 1971, 5, 69, 0, 0, 1971, 276, 1, 0, 0, 0, 1972, 1973, 5, 83, 0, 0, 1973, 1974, 5, 76, 0, 0, 1974, 1975, 5, 73, 0, 0, 1975, 1976, 5, 68, 0, 0, 1976, 1977, 5, 69, 0, 0, 1977, 278, 1, 0, 0, 0, 1978, 1979, 5, 83, 0, 0, 1979, 1980, 5, 79, 0, 0, 1980, 1981, 5, 85, 0, 0, 1981, 1982, 5, 82, 0, 0, 1982, 1983, 5, 67, 0, 0, 1983, 1984, 5, 69, 0, 0, 1984, 280, 1, 0, 0, 0, 1985, 1986, 5, 83, 0, 0, 1986, 1987, 5, 80, 0, 0, 1987, 1988, 5, 65, 0, 0, 1988, 1989, 5, 67, 0, 0, 1989, 1990, 5, 69, 0, 0, 1990, 282, 1, 0, 0, 0, 1991, 1992, 5, 83, 0, 0, 1992, 1993, 5, 84, 0, 0, 1993, 1994, 5, 65, 0, 0, 1994, 1995, 5, 84, 0, 0, 1995, 1996, 5, 69, 0, 0, 1996, 284, 1, 0, 0, 0, 1997, 1998, 5, 83, 0, 0, 1998, 1999, 5, 84, 0, 0, 1999, 2000, 5, 65, 0, 0, 2000, 2001, 5, 84, 0, 0, 2001, 2002, 5, 69, 0, 0, 2002, 2003, 5, 77, 0, 0, 2003, 2004, 5, 69, 0, 0, 2004, 2005, 5, 78, 0, 0, 2005, 2006, 5, 84, 0, 0, 2006, 286, 1, 0, 0, 0, 2007, 2008, 5, 83, 0, 0, 2008, 2009, 5, 84, 0, 0, 2009, 2010, 5, 69, 0, 0, 2010, 2011, 5, 80, 0, 0, 2011, 288, 1, 0, 0, 0, 2012, 2013, 5, 83, 0, 0, 2013, 2014, 5, 84, 0, 0, 2014, 2015, 5, 82, 0, 0, 2015, 2016, 5, 73, 0, 0, 2016, 2017, 5, 78, 0, 0, 2017, 2018, 5, 71, 0, 0, 2018, 290, 1, 0, 0, 0, 2019, 2020, 5, 83, 0, 0, 2020, 2021, 5, 84, 0, 0, 2021, 2022, 5, 82, 0, 0, 2022, 2023, 5, 85, 0, 0, 2023, 2024, 5, 67, 0, 0, 2024, 2025, 5, 84, 0, 0, 2025, 2026, 5, 85, 0, 0, 2026, 2027, 5, 82, 0, 0, 2027, 2028, 5, 69, 0, 0, 2028, 292, 1, 0, 0, 0, 2029, 2030, 5, 83, 0, 0, 2030, 2031, 5, 84, 0, 0, 2031, 2032, 5, 89, 0, 0, 2032, 2033, 5, 76, 0, 0, 2033, 2034, 5, 69, 0, 0, 2034, 294, 1, 0, 0, 0, 2035, 2036, 5, 84, 0, 0, 2036, 2037, 5, 65, 0, 0, 2037, 2038, 5, 66, 0, 0, 2038, 2039, 5, 76, 0, 0, 2039, 2040, 5, 69, 0, 0, 2040, 2041, 5, 83, 0, 0, 2041, 296, 1, 0, 0, 0, 2042, 2043, 5, 84, 0, 0, 2043, 2044, 5, 69, 0, 0, 2044, 2045, 5, 77, 0, 0, 2045, 2046, 5, 80, 0, 0, 2046, 2047, 5, 79, 0, 0, 2047, 2048, 5, 82, 0, 0, 2048, 2049, 5, 65, 0, 0, 2049, 2050, 5, 82, 0, 0, 2050, 2051, 5, 89, 0, 0, 2051, 298, 1, 0, 0, 0, 2052, 2053, 5, 84, 0, 0, 2053, 2054, 5, 73, 0, 0, 2054, 2055, 5, 77, 0, 0, 2055, 2056, 5, 69, 0, 0, 2056, 2057, 5, 67, 0, 0, 2057, 2058, 5, 79, 0, 0, 2058, 2059, 5, 76, 0, 0, 2059, 300, 1, 0, 0, 0, 2060, 2061, 5, 84, 0, 0, 2061, 2062, 5, 73, 0, 0, 2062, 2063, 5, 77, 0, 0, 2063, 2064, 5, 69, 0, 0, 2064, 2065, 5, 83, 0, 0, 2065, 2066, 5, 84, 0, 0, 2066, 2067, 5, 65, 0, 0, 2067, 2068, 5, 77, 0, 0, 2068, 2069, 5, 80, 0, 0, 2069, 2070, 5, 95, 0, 0, 2070, 2071, 5, 76, 0, 0, 2071, 2072, 5, 84, 0, 0, 2072, 2073, 5, 90, 0, 0, 2073, 302, 1, 0, 0, 0, 2074, 2075, 5, 84, 0, 0, 2075, 2076, 5, 73, 0, 0, 2076, 2077, 5, 77, 0, 0, 2077, 2078, 5, 69, 0, 0, 2078, 2079, 5, 83, 0, 0, 2079, 2080, 5, 84, 0, 0, 2080, 2081, 5, 65, 0, 0, 2081, 2082, 5, 77, 0, 0, 2082, 2083, 5, 80, 0, 0, 2083, 2084, 5, 65, 0, 0, 2084, 2085, 5, 68, 0, 0, 2085, 2086, 5, 68, 0, 0, 2086, 304, 1, 0, 0, 0, 2087, 2088, 5, 84, 0, 0, 2088, 2089, 5, 73, 0, 0, 2089, 2090, 5, 77, 0, 0, 2090, 2091, 5, 69, 0, 0, 2091, 2092, 5, 83, 0, 0, 2092, 2093, 5, 84, 0, 0, 2093, 2094, 5, 65, 0, 0, 2094, 2095, 5, 77, 0, 0, 2095, 2096, 5, 80, 0, 0, 2096, 2097, 5, 68, 0, 0, 2097, 2098, 5, 73, 0, 0, 2098, 2099, 5, 70, 0, 0, 2099, 2100, 5, 70, 0, 0, 2100, 306, 1, 0, 0, 0, 2101, 2102, 5, 84, 0, 0, 2102, 2103, 5, 82, 0, 0, 2103, 2104, 5, 65, 0, 0, 2104, 2105, 5, 78, 0, 0, 2105, 2106, 5, 83, 0, 0, 2106, 2107, 5, 70, 0, 0, 2107, 2108, 5, 79, 0, 0, 2108, 2109, 5, 82, 0, 0, 2109, 2110, 5, 77, 0, 0, 2110, 308, 1, 0, 0, 0, 2111, 2112, 5, 84, 0, 0, 2112, 2113, 5, 85, 0, 0, 2113, 2114, 5, 77, 0, 0, 2114, 2115, 5, 66, 0, 0, 2115, 2116, 5, 76, 0, 0, 2116, 2117, 5, 69, 0, 0, 2117, 310, 1, 0, 0, 0, 2118, 2119, 5, 84, 0, 0, 2119, 2120, 5, 89, 0, 0, 2120, 2121, 5, 80, 0, 0, 2121, 2122, 5, 69, 0, 0, 2122, 312, 1, 0, 0, 0, 2123, 2124, 5, 85, 0, 0, 2124, 2125, 5, 78, 0, 0, 2125, 2126, 5, 68, 0, 0, 2126, 2127, 5, 69, 0, 0, 2127, 2128, 5, 82, 0, 0, 2128, 314, 1, 0, 0, 0, 2129, 2130, 5, 85, 0, 0, 2130, 2131, 5, 78, 0, 0, 2131, 2132, 5, 76, 0, 0, 2132, 2133, 5, 79, 0, 0, 2133, 2134, 5, 65, 0, 0, 2134, 2135, 5, 68, 0, 0, 2135, 316, 1, 0, 0, 0, 2136, 2137, 5, 85, 0, 0, 2137, 2138, 5, 83, 0, 0, 2138, 2139, 5, 65, 0, 0, 2139, 2140, 5, 71, 0, 0, 2140, 2141, 5, 69, 0, 0, 2141, 318, 1, 0, 0, 0, 2142, 2143, 5, 85, 0, 0, 2143, 2144, 5, 83, 0, 0, 2144, 2145, 5, 69, 0, 0, 2145, 320, 1, 0, 0, 0, 2146, 2147, 5, 85, 0, 0, 2147, 2148, 5, 84, 0, 0, 2148, 2149, 5, 70, 0, 0, 2149, 2150, 5, 49, 0, 0, 2150, 2151, 5, 54, 0, 0, 2151, 322, 1, 0, 0, 0, 2152, 2153, 5, 85, 0, 0, 2153, 2154, 5, 84, 0, 0, 2154, 2155, 5, 70, 0, 0, 2155, 2156, 5, 51, 0, 0, 2156, 2157, 5, 50, 0, 0, 2157, 324, 1, 0, 0, 0, 2158, 2159, 5, 85, 0, 0, 2159, 2160, 5, 84, 0, 0, 2160, 2161, 5, 70, 0, 0, 2161, 2162, 5, 56, 0, 0, 2162, 326, 1, 0, 0, 0, 2163, 2164, 5, 86, 0, 0, 2164, 2165, 5, 69, 0, 0, 2165, 2166, 5, 82, 0, 0, 2166, 2167, 5, 83, 0, 0, 2167, 2168, 5, 73, 0, 0, 2168, 2169, 5, 79, 0, 0, 2169, 2170, 5, 78, 0, 0, 2170, 328, 1, 0, 0, 0, 2171, 2172, 5, 86, 0, 0, 2172, 2173, 5, 73, 0, 0, 2173, 2174, 5, 69, 0, 0, 2174, 2175, 5, 87, 0, 0, 2175, 330, 1, 0, 0, 0, 2176, 2177, 5, 86, 0, 0, 2177, 2178, 5, 73, 0, 0, 2178, 2179, 5, 69, 0, 0, 2179, 2180, 5, 87, 0, 0, 2180, 2181, 5, 83, 0, 0, 2181, 332, 1, 0, 0, 0, 2182, 2183, 5, 86, 0, 0, 2183, 2184, 5, 73, 0, 0, 2184, 2185, 5, 82, 0, 0, 2185, 2186, 5, 84, 0, 0, 2186, 2187, 5, 85, 0, 0, 2187, 2188, 5, 65, 0, 0, 2188, 2189, 5, 76, 0, 0, 2189, 334, 1, 0, 0, 0, 2190, 2191, 5, 87, 0, 0, 2191, 2192, 5, 65, 0, 0, 2192, 2193, 5, 84, 0, 0, 2193, 2194, 5, 69, 0, 0, 2194, 2195, 5, 82, 0, 0, 2195, 2196, 5, 77, 0, 0, 2196, 2197, 5, 65, 0, 0, 2197, 2198, 5, 82, 0, 0, 2198, 2199, 5, 75, 0, 0, 2199, 336, 1, 0, 0, 0, 2200, 2201, 5, 87, 0, 0, 2201, 2202, 5, 65, 0, 0, 2202, 2203, 5, 84, 0, 0, 2203, 2204, 5, 69, 0, 0, 2204, 2205, 5, 82, 0, 0, 2205, 2206, 5, 77, 0, 0, 2206, 2207, 5, 65, 0, 0, 2207, 2208, 5, 82, 0, 0, 2208, 2209, 5, 75, 0, 0, 2209, 2210, 5, 83, 0, 0, 2210, 338, 1, 0, 0, 0, 2211, 2212, 5, 87, 0, 0, 2212, 2213, 5, 69, 0, 0, 2213, 2214, 5, 69, 0, 0, 2214, 2215, 5, 75, 0, 0, 2215, 340, 1, 0, 0, 0, 2216, 2217, 5, 87, 0, 0, 2217, 2218, 5, 79, 0, 0, 2218, 2219, 5, 82, 0, 0, 2219, 2220, 5, 75, 0, 0, 2220, 342, 1, 0, 0, 0, 2221, 2222, 5, 87, 0, 0, 2222, 2223, 5, 82, 0, 0, 2223, 2224, 5, 65, 0, 0, 2224, 2225, 5, 80, 0, 0, 2225, 2226, 5, 80, 0, 0, 2226, 2227, 5, 69, 0, 0, 2227, 2228, 5, 82, 0, 0, 2228, 344, 1, 0, 0, 0, 2229, 2230, 5, 89, 0, 0, 2230, 2231, 5, 69, 0, 0, 2231, 2232, 5, 65, 0, 0, 2232, 2233, 5, 82, 0, 0, 2233, 2234, 5, 83, 0, 0, 2234, 346, 1, 0, 0, 0, 2235, 2236, 5, 90, 0, 0, 2236, 2237, 5, 79, 0, 0, 2237, 2238, 5, 78, 0, 0, 2238, 2239, 5, 69, 0, 0, 2239, 348, 1, 0, 0, 0, 2240, 2241, 5, 65, 0, 0, 2241, 2242, 5, 66, 0, 0, 2242, 2243, 5, 83, 0, 0, 2243, 350, 1, 0, 0, 0, 2244, 2245, 5, 65, 0, 0, 2245, 2246, 5, 76, 0, 0, 2246, 2247, 5, 76, 0, 0, 2247, 352, 1, 0, 0, 0, 2248, 2249, 5, 65, 0, 0, 2249, 2250, 5, 76, 0, 0, 2250, 2251, 5, 76, 0, 0, 2251, 2252, 5, 79, 0, 0, 2252, 2253, 5, 87, 0, 0, 2253, 354, 1, 0, 0, 0, 2254, 2255, 5, 65, 0, 0, 2255, 2256, 5, 76, 0, 0, 2256, 2257, 5, 84, 0, 0, 2257, 2258, 5, 69, 0, 0, 2258, 2259, 5, 82, 0, 0, 2259, 356, 1, 0, 0, 0, 2260, 2261, 5, 65, 0, 0, 2261, 2262, 5, 78, 0, 0, 2262, 2263, 5, 68, 0, 0, 2263, 358, 1, 0, 0, 0, 2264, 2265, 5, 65, 0, 0, 2265, 2266, 5, 78, 0, 0, 2266, 2267, 5, 89, 0, 0, 2267, 360, 1, 0, 0, 0, 2268, 2269, 5, 65, 0, 0, 2269, 2270, 5, 82, 0, 0, 2270, 2271, 5, 69, 0, 0, 2271, 362, 1, 0, 0, 0, 2272, 2273, 5, 65, 0, 0, 2273, 2274, 5, 82, 0, 0, 2274, 2275, 5, 82, 0, 0, 2275, 2276, 5, 65, 0, 0, 2276, 2277, 5, 89, 0, 0, 2277, 364, 1, 0, 0, 0, 2278, 2279, 5, 65, 0, 0, 2279, 2280, 5, 83, 0, 0, 2280, 366, 1, 0, 0, 0, 2281, 2282, 5, 65, 0, 0, 2282, 2283, 5, 84, 0, 0, 2283, 368, 1, 0, 0, 0, 2284, 2285, 5, 65, 0, 0, 2285, 2286, 5, 86, 0, 0, 2286, 2287, 5, 71, 0, 0, 2287, 370, 1, 0, 0, 0, 2288, 2289, 5, 66, 0, 0, 2289, 2290, 5, 69, 0, 0, 2290, 2291, 5, 71, 0, 0, 2291, 2292, 5, 73, 0, 0, 2292, 2293, 5, 78, 0, 0, 2293, 372, 1, 0, 0, 0, 2294, 2295, 5, 66, 0, 0, 2295, 2296, 5, 69, 0, 0, 2296, 2297, 5, 84, 0, 0, 2297, 2298, 5, 87, 0, 0, 2298, 2299, 5, 69, 0, 0, 2299, 2300, 5, 69, 0, 0, 2300, 2301, 5, 78, 0, 0, 2301, 374, 1, 0, 0, 0, 2302, 2303, 5, 66, 0, 0, 2303, 2304, 5, 73, 0, 0, 2304, 2305, 5, 71, 0, 0, 2305, 2306, 5, 73, 0, 0, 2306, 2307, 5, 78, 0, 0, 2307, 2308, 5, 84, 0, 0, 2308, 376, 1, 0, 0, 0, 2309, 2310, 5, 66, 0, 0, 2310, 2311, 5, 73, 0, 0, 2311, 2312, 5, 78, 0, 0, 2312, 2313, 5, 65, 0, 0, 2313, 2314, 5, 82, 0, 0, 2314, 2315, 5, 89, 0, 0, 2315, 378, 1, 0, 0, 0, 2316, 2317, 5, 66, 0, 0, 2317, 2318, 5, 73, 0, 0, 2318, 2319, 5, 84, 0, 0, 2319, 380, 1, 0, 0, 0, 2320, 2321, 5, 66, 0, 0, 2321, 2322, 5, 76, 0, 0, 2322, 2323, 5, 79, 0, 0, 2323, 2324, 5, 66, 0, 0, 2324, 382, 1, 0, 0, 0, 2325, 2326, 5, 66, 0, 0, 2326, 2327, 5, 79, 0, 0, 2327, 2328, 5, 79, 0, 0, 2328, 2329, 5, 76, 0, 0, 2329, 2330, 5, 69, 0, 0, 2330, 2331, 5, 65, 0, 0, 2331, 2332, 5, 78, 0, 0, 2332, 384, 1, 0, 0, 0, 2333, 2334, 5, 66, 0, 0, 2334, 2335, 5, 79, 0, 0, 2335, 2336, 5, 84, 0, 0, 2336, 2337, 5, 72, 0, 0, 2337, 386, 1, 0, 0, 0, 2338, 2339, 5, 66, 0, 0, 2339, 2340, 5, 89, 0, 0, 2340, 388, 1, 0, 0, 0, 2341, 2342, 5, 67, 0, 0, 2342, 2343, 5, 65, 0, 0, 2343, 2344, 5, 76, 0, 0, 2344, 2345, 5, 76, 0, 0, 2345, 390, 1, 0, 0, 0, 2346, 2347, 5, 67, 0, 0, 2347, 2348, 5, 65, 0, 0, 2348, 2349, 5, 76, 0, 0, 2349, 2350, 5, 76, 0, 0, 2350, 2351, 5, 69, 0, 0, 2351, 2352, 5, 68, 0, 0, 2352, 392, 1, 0, 0, 0, 2353, 2354, 5, 67, 0, 0, 2354, 2355, 5, 65, 0, 0, 2355, 2356, 5, 83, 0, 0, 2356, 2357, 5, 67, 0, 0, 2357, 2358, 5, 65, 0, 0, 2358, 2359, 5, 68, 0, 0, 2359, 2360, 5, 69, 0, 0, 2360, 2361, 5, 68, 0, 0, 2361, 394, 1, 0, 0, 0, 2362, 2363, 5, 67, 0, 0, 2363, 2364, 5, 65, 0, 0, 2364, 2365, 5, 83, 0, 0, 2365, 2366, 5, 69, 0, 0, 2366, 396, 1, 0, 0, 0, 2367, 2368, 5, 67, 0, 0, 2368, 2369, 5, 65, 0, 0, 2369, 2370, 5, 83, 0, 0, 2370, 2371, 5, 84, 0, 0, 2371, 398, 1, 0, 0, 0, 2372, 2373, 5, 67, 0, 0, 2373, 2374, 5, 69, 0, 0, 2374, 2375, 5, 73, 0, 0, 2375, 2376, 5, 76, 0, 0, 2376, 400, 1, 0, 0, 0, 2377, 2378, 5, 67, 0, 0, 2378, 2379, 5, 72, 0, 0, 2379, 2380, 5, 65, 0, 0, 2380, 2381, 5, 82, 0, 0, 2381, 402, 1, 0, 0, 0, 2382, 2383, 5, 67, 0, 0, 2383, 2384, 5, 72, 0, 0, 2384, 2385, 5, 65, 0, 0, 2385, 2386, 5, 82, 0, 0, 2386, 2387, 5, 65, 0, 0, 2387, 2388, 5, 67, 0, 0, 2388, 2389, 5, 84, 0, 0, 2389, 2390, 5, 69, 0, 0, 2390, 2391, 5, 82, 0, 0, 2391, 404, 1, 0, 0, 0, 2392, 2393, 5, 67, 0, 0, 2393, 2394, 5, 72, 0, 0, 2394, 2395, 5, 69, 0, 0, 2395, 2396, 5, 67, 0, 0, 2396, 2397, 5, 75, 0, 0, 2397, 406, 1, 0, 0, 0, 2398, 2399, 5, 67, 0, 0, 2399, 2400, 5, 76, 0, 0, 2400, 2401, 5, 79, 0, 0, 2401, 2402, 5, 66, 0, 0, 2402, 408, 1, 0, 0, 0, 2403, 2404, 5, 67, 0, 0, 2404, 2405, 5, 76, 0, 0, 2405, 2406, 5, 79, 0, 0, 2406, 2407, 5, 83, 0, 0, 2407, 2408, 5, 69, 0, 0, 2408, 410, 1, 0, 0, 0, 2409, 2410, 5, 67, 0, 0, 2410, 2411, 5, 79, 0, 0, 2411, 2412, 5, 65, 0, 0, 2412, 2413, 5, 76, 0, 0, 2413, 2414, 5, 69, 0, 0, 2414, 2415, 5, 83, 0, 0, 2415, 2416, 5, 67, 0, 0, 2416, 2417, 5, 69, 0, 0, 2417, 412, 1, 0, 0, 0, 2418, 2419, 5, 67, 0, 0, 2419, 2420, 5, 79, 0, 0, 2420, 2421, 5, 76, 0, 0, 2421, 2422, 5, 76, 0, 0, 2422, 2423, 5, 65, 0, 0, 2423, 2424, 5, 84, 0, 0, 2424, 2425, 5, 69, 0, 0, 2425, 414, 1, 0, 0, 0, 2426, 2427, 5, 67, 0, 0, 2427, 2428, 5, 79, 0, 0, 2428, 2429, 5, 76, 0, 0, 2429, 2430, 5, 76, 0, 0, 2430, 2431, 5, 69, 0, 0, 2431, 2432, 5, 67, 0, 0, 2432, 2433, 5, 84, 0, 0, 2433, 416, 1, 0, 0, 0, 2434, 2435, 5, 67, 0, 0, 2435, 2436, 5, 79, 0, 0, 2436, 2437, 5, 76, 0, 0, 2437, 2438, 5, 85, 0, 0, 2438, 2439, 5, 77, 0, 0, 2439, 2440, 5, 78, 0, 0, 2440, 418, 1, 0, 0, 0, 2441, 2442, 5, 67, 0, 0, 2442, 2443, 5, 79, 0, 0, 2443, 2444, 5, 77, 0, 0, 2444, 2445, 5, 77, 0, 0, 2445, 2446, 5, 73, 0, 0, 2446, 2447, 5, 84, 0, 0, 2447, 420, 1, 0, 0, 0, 2448, 2449, 5, 67, 0, 0, 2449, 2450, 5, 79, 0, 0, 2450, 2451, 5, 78, 0, 0, 2451, 2452, 5, 78, 0, 0, 2452, 2453, 5, 69, 0, 0, 2453, 2454, 5, 67, 0, 0, 2454, 2455, 5, 84, 0, 0, 2455, 422, 1, 0, 0, 0, 2456, 2457, 5, 67, 0, 0, 2457, 2458, 5, 79, 0, 0, 2458, 2459, 5, 78, 0, 0, 2459, 2460, 5, 83, 0, 0, 2460, 2461, 5, 84, 0, 0, 2461, 2462, 5, 82, 0, 0, 2462, 2463, 5, 65, 0, 0, 2463, 2464, 5, 73, 0, 0, 2464, 2465, 5, 78, 0, 0, 2465, 2466, 5, 84, 0, 0, 2466, 424, 1, 0, 0, 0, 2467, 2468, 5, 67, 0, 0, 2468, 2469, 5, 79, 0, 0, 2469, 2470, 5, 78, 0, 0, 2470, 2471, 5, 84, 0, 0, 2471, 2472, 5, 65, 0, 0, 2472, 2473, 5, 73, 0, 0, 2473, 2474, 5, 78, 0, 0, 2474, 2475, 5, 83, 0, 0, 2475, 426, 1, 0, 0, 0, 2476, 2477, 5, 67, 0, 0, 2477, 2478, 5, 79, 0, 0, 2478, 2479, 5, 78, 0, 0, 2479, 2480, 5, 86, 0, 0, 2480, 2481, 5, 69, 0, 0, 2481, 2482, 5, 82, 0, 0, 2482, 2483, 5, 84, 0, 0, 2483, 428, 1, 0, 0, 0, 2484, 2485, 5, 67, 0, 0, 2485, 2486, 5, 79, 0, 0, 2486, 2487, 5, 85, 0, 0, 2487, 2488, 5, 78, 0, 0, 2488, 2489, 5, 84, 0, 0, 2489, 430, 1, 0, 0, 0, 2490, 2491, 5, 67, 0, 0, 2491, 2492, 5, 82, 0, 0, 2492, 2493, 5, 69, 0, 0, 2493, 2494, 5, 65, 0, 0, 2494, 2495, 5, 84, 0, 0, 2495, 2496, 5, 69, 0, 0, 2496, 432, 1, 0, 0, 0, 2497, 2498, 5, 67, 0, 0, 2498, 2499, 5, 82, 0, 0, 2499, 2500, 5, 79, 0, 0, 2500, 2501, 5, 83, 0, 0, 2501, 2502, 5, 83, 0, 0, 2502, 434, 1, 0, 0, 0, 2503, 2504, 5, 67, 0, 0, 2504, 2505, 5, 85, 0, 0, 2505, 2506, 5, 66, 0, 0, 2506, 2507, 5, 69, 0, 0, 2507, 436, 1, 0, 0, 0, 2508, 2509, 5, 67, 0, 0, 2509, 2510, 5, 85, 0, 0, 2510, 2511, 5, 82, 0, 0, 2511, 2512, 5, 82, 0, 0, 2512, 2513, 5, 69, 0, 0, 2513, 2514, 5, 78, 0, 0, 2514, 2515, 5, 84, 0, 0, 2515, 438, 1, 0, 0, 0, 2516, 2517, 5, 67, 0, 0, 2517, 2518, 5, 85, 0, 0, 2518, 2519, 5, 82, 0, 0, 2519, 2520, 5, 83, 0, 0, 2520, 2521, 5, 79, 0, 0, 2521, 2522, 5, 82, 0, 0, 2522, 440, 1, 0, 0, 0, 2523, 2524, 5, 67, 0, 0, 2524, 2525, 5, 89, 0, 0, 2525, 2526, 5, 67, 0, 0, 2526, 2527, 5, 76, 0, 0, 2527, 2528, 5, 69, 0, 0, 2528, 442, 1, 0, 0, 0, 2529, 2530, 5, 68, 0, 0, 2530, 2531, 5, 65, 0, 0, 2531, 2532, 5, 84, 0, 0, 2532, 2533, 5, 69, 0, 0, 2533, 444, 1, 0, 0, 0, 2534, 2535, 5, 68, 0, 0, 2535, 2536, 5, 65, 0, 0, 2536, 2537, 5, 84, 0, 0, 2537, 2538, 5, 69, 0, 0, 2538, 2539, 5, 84, 0, 0, 2539, 2540, 5, 73, 0, 0, 2540, 2541, 5, 77, 0, 0, 2541, 2542, 5, 69, 0, 0, 2542, 446, 1, 0, 0, 0, 2543, 2544, 5, 68, 0, 0, 2544, 2545, 5, 65, 0, 0, 2545, 2546, 5, 89, 0, 0, 2546, 448, 1, 0, 0, 0, 2547, 2548, 5, 68, 0, 0, 2548, 2549, 5, 69, 0, 0, 2549, 2550, 5, 67, 0, 0, 2550, 450, 1, 0, 0, 0, 2551, 2552, 5, 68, 0, 0, 2552, 2553, 5, 69, 0, 0, 2553, 2554, 5, 67, 0, 0, 2554, 2555, 5, 73, 0, 0, 2555, 2556, 5, 77, 0, 0, 2556, 2557, 5, 65, 0, 0, 2557, 2558, 5, 76, 0, 0, 2558, 452, 1, 0, 0, 0, 2559, 2560, 5, 68, 0, 0, 2560, 2561, 5, 69, 0, 0, 2561, 2562, 5, 67, 0, 0, 2562, 2563, 5, 76, 0, 0, 2563, 2564, 5, 65, 0, 0, 2564, 2565, 5, 82, 0, 0, 2565, 2566, 5, 69, 0, 0, 2566, 454, 1, 0, 0, 0, 2567, 2568, 5, 68, 0, 0, 2568, 2569, 5, 69, 0, 0, 2569, 2570, 5, 70, 0, 0, 2570, 2571, 5, 65, 0, 0, 2571, 2572, 5, 85, 0, 0, 2572, 2573, 5, 76, 0, 0, 2573, 2574, 5, 84, 0, 0, 2574, 456, 1, 0, 0, 0, 2575, 2576, 5, 68, 0, 0, 2576, 2577, 5, 69, 0, 0, 2577, 2578, 5, 70, 0, 0, 2578, 2579, 5, 73, 0, 0, 2579, 2580, 5, 78, 0, 0, 2580, 2581, 5, 69, 0, 0, 2581, 458, 1, 0, 0, 0, 2582, 2583, 5, 68, 0, 0, 2583, 2584, 5, 69, 0, 0, 2584, 2585, 5, 76, 0, 0, 2585, 2586, 5, 69, 0, 0, 2586, 2587, 5, 84, 0, 0, 2587, 2588, 5, 69, 0, 0, 2588, 460, 1, 0, 0, 0, 2589, 2590, 5, 68, 0, 0, 2590, 2591, 5, 69, 0, 0, 2591, 2592, 5, 83, 0, 0, 2592, 2593, 5, 67, 0, 0, 2593, 2594, 5, 82, 0, 0, 2594, 2595, 5, 73, 0, 0, 2595, 2596, 5, 66, 0, 0, 2596, 2597, 5, 69, 0, 0, 2597, 462, 1, 0, 0, 0, 2598, 2599, 5, 68, 0, 0, 2599, 2600, 5, 73, 0, 0, 2600, 2601, 5, 83, 0, 0, 2601, 2602, 5, 84, 0, 0, 2602, 2603, 5, 73, 0, 0, 2603, 2604, 5, 78, 0, 0, 2604, 2605, 5, 67, 0, 0, 2605, 2606, 5, 84, 0, 0, 2606, 464, 1, 0, 0, 0, 2607, 2608, 5, 68, 0, 0, 2608, 2609, 5, 79, 0, 0, 2609, 2610, 5, 85, 0, 0, 2610, 2611, 5, 66, 0, 0, 2611, 2612, 5, 76, 0, 0, 2612, 2613, 5, 69, 0, 0, 2613, 466, 1, 0, 0, 0, 2614, 2615, 5, 68, 0, 0, 2615, 2616, 5, 82, 0, 0, 2616, 2617, 5, 79, 0, 0, 2617, 2618, 5, 80, 0, 0, 2618, 468, 1, 0, 0, 0, 2619, 2620, 5, 69, 0, 0, 2620, 2621, 5, 65, 0, 0, 2621, 2622, 5, 67, 0, 0, 2622, 2623, 5, 72, 0, 0, 2623, 470, 1, 0, 0, 0, 2624, 2625, 5, 69, 0, 0, 2625, 2626, 5, 76, 0, 0, 2626, 2627, 5, 83, 0, 0, 2627, 2628, 5, 69, 0, 0, 2628, 472, 1, 0, 0, 0, 2629, 2630, 5, 69, 0, 0, 2630, 2631, 5, 78, 0, 0, 2631, 2632, 5, 68, 0, 0, 2632, 474, 1, 0, 0, 0, 2633, 2634, 5, 69, 0, 0, 2634, 2635, 5, 81, 0, 0, 2635, 2636, 5, 85, 0, 0, 2636, 2637, 5, 65, 0, 0, 2637, 2638, 5, 76, 0, 0, 2638, 2639, 5, 83, 0, 0, 2639, 476, 1, 0, 0, 0, 2640, 2641, 5, 69, 0, 0, 2641, 2642, 5, 88, 0, 0, 2642, 2643, 5, 67, 0, 0, 2643, 2644, 5, 69, 0, 0, 2644, 2645, 5, 80, 0, 0, 2645, 2646, 5, 84, 0, 0, 2646, 478, 1, 0, 0, 0, 2647, 2648, 5, 69, 0, 0, 2648, 2649, 5, 88, 0, 0, 2649, 2650, 5, 69, 0, 0, 2650, 2651, 5, 67, 0, 0, 2651, 2652, 5, 85, 0, 0, 2652, 2653, 5, 84, 0, 0, 2653, 2654, 5, 69, 0, 0, 2654, 480, 1, 0, 0, 0, 2655, 2656, 5, 69, 0, 0, 2656, 2657, 5, 88, 0, 0, 2657, 2658, 5, 73, 0, 0, 2658, 2659, 5, 83, 0, 0, 2659, 2660, 5, 84, 0, 0, 2660, 2661, 5, 83, 0, 0, 2661, 482, 1, 0, 0, 0, 2662, 2663, 5, 69, 0, 0, 2663, 2664, 5, 88, 0, 0, 2664, 2665, 5, 80, 0, 0, 2665, 2666, 5, 76, 0, 0, 2666, 2667, 5, 65, 0, 0, 2667, 2668, 5, 73, 0, 0, 2668, 2669, 5, 78, 0, 0, 2669, 484, 1, 0, 0, 0, 2670, 2671, 5, 69, 0, 0, 2671, 2672, 5, 88, 0, 0, 2672, 2673, 5, 84, 0, 0, 2673, 2674, 5, 69, 0, 0, 2674, 2675, 5, 82, 0, 0, 2675, 2676, 5, 78, 0, 0, 2676, 2677, 5, 65, 0, 0, 2677, 2678, 5, 76, 0, 0, 2678, 486, 1, 0, 0, 0, 2679, 2680, 5, 69, 0, 0, 2680, 2681, 5, 88, 0, 0, 2681, 2682, 5, 84, 0, 0, 2682, 2683, 5, 82, 0, 0, 2683, 2684, 5, 65, 0, 0, 2684, 2685, 5, 67, 0, 0, 2685, 2686, 5, 84, 0, 0, 2686, 488, 1, 0, 0, 0, 2687, 2688, 5, 70, 0, 0, 2688, 2689, 5, 65, 0, 0, 2689, 2690, 5, 76, 0, 0, 2690, 2691, 5, 83, 0, 0, 2691, 2692, 5, 69, 0, 0, 2692, 490, 1, 0, 0, 0, 2693, 2694, 5, 70, 0, 0, 2694, 2695, 5, 76, 0, 0, 2695, 2696, 5, 79, 0, 0, 2696, 2697, 5, 65, 0, 0, 2697, 2698, 5, 84, 0, 0, 2698, 492, 1, 0, 0, 0, 2699, 2700, 5, 70, 0, 0, 2700, 2701, 5, 79, 0, 0, 2701, 2702, 5, 82, 0, 0, 2702, 494, 1, 0, 0, 0, 2703, 2704, 5, 70, 0, 0, 2704, 2705, 5, 82, 0, 0, 2705, 2706, 5, 79, 0, 0, 2706, 2707, 5, 77, 0, 0, 2707, 496, 1, 0, 0, 0, 2708, 2709, 5, 70, 0, 0, 2709, 2710, 5, 85, 0, 0, 2710, 2711, 5, 76, 0, 0, 2711, 2712, 5, 76, 0, 0, 2712, 498, 1, 0, 0, 0, 2713, 2714, 5, 70, 0, 0, 2714, 2715, 5, 85, 0, 0, 2715, 2716, 5, 78, 0, 0, 2716, 2717, 5, 67, 0, 0, 2717, 2718, 5, 84, 0, 0, 2718, 2719, 5, 73, 0, 0, 2719, 2720, 5, 79, 0, 0, 2720, 2721, 5, 78, 0, 0, 2721, 500, 1, 0, 0, 0, 2722, 2723, 5, 71, 0, 0, 2723, 2724, 5, 76, 0, 0, 2724, 2725, 5, 79, 0, 0, 2725, 2726, 5, 66, 0, 0, 2726, 2727, 5, 65, 0, 0, 2727, 2728, 5, 76, 0, 0, 2728, 502, 1, 0, 0, 0, 2729, 2730, 5, 71, 0, 0, 2730, 2731, 5, 82, 0, 0, 2731, 2732, 5, 65, 0, 0, 2732, 2733, 5, 78, 0, 0, 2733, 2734, 5, 84, 0, 0, 2734, 504, 1, 0, 0, 0, 2735, 2736, 5, 71, 0, 0, 2736, 2737, 5, 82, 0, 0, 2737, 2738, 5, 79, 0, 0, 2738, 2739, 5, 85, 0, 0, 2739, 2740, 5, 80, 0, 0, 2740, 506, 1, 0, 0, 0, 2741, 2742, 5, 71, 0, 0, 2742, 2743, 5, 82, 0, 0, 2743, 2744, 5, 79, 0, 0, 2744, 2745, 5, 85, 0, 0, 2745, 2746, 5, 80, 0, 0, 2746, 2747, 5, 73, 0, 0, 2747, 2748, 5, 78, 0, 0, 2748, 2749, 5, 71, 0, 0, 2749, 508, 1, 0, 0, 0, 2750, 2751, 5, 71, 0, 0, 2751, 2752, 5, 82, 0, 0, 2752, 2753, 5, 79, 0, 0, 2753, 2754, 5, 85, 0, 0, 2754, 2755, 5, 80, 0, 0, 2755, 2756, 5, 83, 0, 0, 2756, 510, 1, 0, 0, 0, 2757, 2758, 5, 72, 0, 0, 2758, 2759, 5, 65, 0, 0, 2759, 2760, 5, 86, 0, 0, 2760, 2761, 5, 73, 0, 0, 2761, 2762, 5, 78, 0, 0, 2762, 2763, 5, 71, 0, 0, 2763, 512, 1, 0, 0, 0, 2764, 2765, 5, 72, 0, 0, 2765, 2766, 5, 79, 0, 0, 2766, 2767, 5, 85, 0, 0, 2767, 2768, 5, 82, 0, 0, 2768, 514, 1, 0, 0, 0, 2769, 2770, 5, 73, 0, 0, 2770, 2771, 5, 77, 0, 0, 2771, 2772, 5, 80, 0, 0, 2772, 2773, 5, 79, 0, 0, 2773, 2774, 5, 82, 0, 0, 2774, 2775, 5, 84, 0, 0, 2775, 516, 1, 0, 0, 0, 2776, 2777, 5, 73, 0, 0, 2777, 2778, 5, 78, 0, 0, 2778, 518, 1, 0, 0, 0, 2779, 2780, 5, 73, 0, 0, 2780, 2781, 5, 78, 0, 0, 2781, 2782, 5, 67, 0, 0, 2782, 2783, 5, 76, 0, 0, 2783, 2784, 5, 85, 0, 0, 2784, 2785, 5, 68, 0, 0, 2785, 2786, 5, 73, 0, 0, 2786, 2787, 5, 78, 0, 0, 2787, 2788, 5, 71, 0, 0, 2788, 520, 1, 0, 0, 0, 2789, 2790, 5, 73, 0, 0, 2790, 2791, 5, 78, 0, 0, 2791, 2792, 5, 78, 0, 0, 2792, 2793, 5, 69, 0, 0, 2793, 2794, 5, 82, 0, 0, 2794, 522, 1, 0, 0, 0, 2795, 2796, 5, 73, 0, 0, 2796, 2797, 5, 78, 0, 0, 2797, 2798, 5, 79, 0, 0, 2798, 2799, 5, 85, 0, 0, 2799, 2800, 5, 84, 0, 0, 2800, 524, 1, 0, 0, 0, 2801, 2802, 5, 73, 0, 0, 2802, 2803, 5, 78, 0, 0, 2803, 2804, 5, 83, 0, 0, 2804, 2805, 5, 69, 0, 0, 2805, 2806, 5, 82, 0, 0, 2806, 2807, 5, 84, 0, 0, 2807, 526, 1, 0, 0, 0, 2808, 2809, 5, 73, 0, 0, 2809, 2810, 5, 78, 0, 0, 2810, 2811, 5, 84, 0, 0, 2811, 528, 1, 0, 0, 0, 2812, 2813, 5, 73, 0, 0, 2813, 2814, 5, 78, 0, 0, 2814, 2815, 5, 84, 0, 0, 2815, 2816, 5, 69, 0, 0, 2816, 2817, 5, 71, 0, 0, 2817, 2818, 5, 69, 0, 0, 2818, 2819, 5, 82, 0, 0, 2819, 530, 1, 0, 0, 0, 2820, 2821, 5, 73, 0, 0, 2821, 2822, 5, 78, 0, 0, 2822, 2823, 5, 84, 0, 0, 2823, 2824, 5, 69, 0, 0, 2824, 2825, 5, 82, 0, 0, 2825, 2826, 5, 83, 0, 0, 2826, 2827, 5, 69, 0, 0, 2827, 2828, 5, 67, 0, 0, 2828, 2829, 5, 84, 0, 0, 2829, 532, 1, 0, 0, 0, 2830, 2831, 5, 73, 0, 0, 2831, 2832, 5, 78, 0, 0, 2832, 2833, 5, 84, 0, 0, 2833, 2834, 5, 69, 0, 0, 2834, 2835, 5, 82, 0, 0, 2835, 2836, 5, 86, 0, 0, 2836, 2837, 5, 65, 0, 0, 2837, 2838, 5, 76, 0, 0, 2838, 534, 1, 0, 0, 0, 2839, 2840, 5, 73, 0, 0, 2840, 2841, 5, 78, 0, 0, 2841, 2842, 5, 84, 0, 0, 2842, 2843, 5, 79, 0, 0, 2843, 536, 1, 0, 0, 0, 2844, 2845, 5, 73, 0, 0, 2845, 2846, 5, 83, 0, 0, 2846, 538, 1, 0, 0, 0, 2847, 2848, 5, 74, 0, 0, 2848, 2849, 5, 79, 0, 0, 2849, 2850, 5, 73, 0, 0, 2850, 2851, 5, 78, 0, 0, 2851, 540, 1, 0, 0, 0, 2852, 2853, 5, 76, 0, 0, 2853, 2854, 5, 65, 0, 0, 2854, 2855, 5, 71, 0, 0, 2855, 542, 1, 0, 0, 0, 2856, 2857, 5, 76, 0, 0, 2857, 2858, 5, 65, 0, 0, 2858, 2859, 5, 78, 0, 0, 2859, 2860, 5, 71, 0, 0, 2860, 2861, 5, 85, 0, 0, 2861, 2862, 5, 65, 0, 0, 2862, 2863, 5, 71, 0, 0, 2863, 2864, 5, 69, 0, 0, 2864, 544, 1, 0, 0, 0, 2865, 2866, 5, 76, 0, 0, 2866, 2867, 5, 65, 0, 0, 2867, 2868, 5, 84, 0, 0, 2868, 2869, 5, 69, 0, 0, 2869, 2870, 5, 82, 0, 0, 2870, 2871, 5, 65, 0, 0, 2871, 2872, 5, 76, 0, 0, 2872, 546, 1, 0, 0, 0, 2873, 2874, 5, 76, 0, 0, 2874, 2875, 5, 69, 0, 0, 2875, 2876, 5, 65, 0, 0, 2876, 2877, 5, 68, 0, 0, 2877, 2878, 5, 73, 0, 0, 2878, 2879, 5, 78, 0, 0, 2879, 2880, 5, 71, 0, 0, 2880, 548, 1, 0, 0, 0, 2881, 2882, 5, 76, 0, 0, 2882, 2883, 5, 69, 0, 0, 2883, 2884, 5, 70, 0, 0, 2884, 2885, 5, 84, 0, 0, 2885, 550, 1, 0, 0, 0, 2886, 2887, 5, 76, 0, 0, 2887, 2888, 5, 73, 0, 0, 2888, 2889, 5, 75, 0, 0, 2889, 2890, 5, 69, 0, 0, 2890, 552, 1, 0, 0, 0, 2891, 2892, 5, 76, 0, 0, 2892, 2893, 5, 73, 0, 0, 2893, 2894, 5, 77, 0, 0, 2894, 2895, 5, 73, 0, 0, 2895, 2896, 5, 84, 0, 0, 2896, 554, 1, 0, 0, 0, 2897, 2898, 5, 76, 0, 0, 2898, 2899, 5, 79, 0, 0, 2899, 2900, 5, 67, 0, 0, 2900, 2901, 5, 65, 0, 0, 2901, 2902, 5, 76, 0, 0, 2902, 556, 1, 0, 0, 0, 2903, 2904, 5, 77, 0, 0, 2904, 2905, 5, 65, 0, 0, 2905, 2906, 5, 84, 0, 0, 2906, 2907, 5, 67, 0, 0, 2907, 2908, 5, 72, 0, 0, 2908, 558, 1, 0, 0, 0, 2909, 2910, 5, 77, 0, 0, 2910, 2911, 5, 65, 0, 0, 2911, 2912, 5, 84, 0, 0, 2912, 2913, 5, 67, 0, 0, 2913, 2914, 5, 72, 0, 0, 2914, 2915, 5, 95, 0, 0, 2915, 2916, 5, 82, 0, 0, 2916, 2917, 5, 69, 0, 0, 2917, 2918, 5, 67, 0, 0, 2918, 2919, 5, 79, 0, 0, 2919, 2920, 5, 71, 0, 0, 2920, 2921, 5, 78, 0, 0, 2921, 2922, 5, 73, 0, 0, 2922, 2923, 5, 90, 0, 0, 2923, 2924, 5, 69, 0, 0, 2924, 560, 1, 0, 0, 0, 2925, 2926, 5, 77, 0, 0, 2926, 2927, 5, 69, 0, 0, 2927, 2928, 5, 65, 0, 0, 2928, 2929, 5, 83, 0, 0, 2929, 2930, 5, 85, 0, 0, 2930, 2931, 5, 82, 0, 0, 2931, 2932, 5, 69, 0, 0, 2932, 2933, 5, 83, 0, 0, 2933, 562, 1, 0, 0, 0, 2934, 2935, 5, 77, 0, 0, 2935, 2936, 5, 69, 0, 0, 2936, 2937, 5, 82, 0, 0, 2937, 2938, 5, 71, 0, 0, 2938, 2939, 5, 69, 0, 0, 2939, 564, 1, 0, 0, 0, 2940, 2941, 5, 77, 0, 0, 2941, 2942, 5, 69, 0, 0, 2942, 2943, 5, 84, 0, 0, 2943, 2944, 5, 65, 0, 0, 2944, 2945, 5, 68, 0, 0, 2945, 2946, 5, 65, 0, 0, 2946, 2947, 5, 84, 0, 0, 2947, 2948, 5, 65, 0, 0, 2948, 566, 1, 0, 0, 0, 2949, 2950, 5, 77, 0, 0, 2950, 2951, 5, 73, 0, 0, 2951, 2952, 5, 78, 0, 0, 2952, 2953, 5, 85, 0, 0, 2953, 2954, 5, 83, 0, 0, 2954, 568, 1, 0, 0, 0, 2955, 2956, 5, 77, 0, 0, 2956, 2957, 5, 73, 0, 0, 2957, 2958, 5, 78, 0, 0, 2958, 2959, 5, 85, 0, 0, 2959, 2960, 5, 84, 0, 0, 2960, 2961, 5, 69, 0, 0, 2961, 570, 1, 0, 0, 0, 2962, 2963, 5, 77, 0, 0, 2963, 2964, 5, 79, 0, 0, 2964, 2965, 5, 68, 0, 0, 2965, 2966, 5, 73, 0, 0, 2966, 2967, 5, 70, 0, 0, 2967, 2968, 5, 73, 0, 0, 2968, 2969, 5, 69, 0, 0, 2969, 2970, 5, 83, 0, 0, 2970, 572, 1, 0, 0, 0, 2971, 2972, 5, 77, 0, 0, 2972, 2973, 5, 79, 0, 0, 2973, 2974, 5, 68, 0, 0, 2974, 2975, 5, 85, 0, 0, 2975, 2976, 5, 76, 0, 0, 2976, 2977, 5, 69, 0, 0, 2977, 574, 1, 0, 0, 0, 2978, 2979, 5, 77, 0, 0, 2979, 2980, 5, 79, 0, 0, 2980, 2981, 5, 78, 0, 0, 2981, 2982, 5, 84, 0, 0, 2982, 2983, 5, 72, 0, 0, 2983, 576, 1, 0, 0, 0, 2984, 2985, 5, 77, 0, 0, 2985, 2986, 5, 85, 0, 0, 2986, 2987, 5, 76, 0, 0, 2987, 2988, 5, 84, 0, 0, 2988, 2989, 5, 73, 0, 0, 2989, 2990, 5, 83, 0, 0, 2990, 2991, 5, 69, 0, 0, 2991, 2992, 5, 84, 0, 0, 2992, 578, 1, 0, 0, 0, 2993, 2994, 5, 78, 0, 0, 2994, 2995, 5, 65, 0, 0, 2995, 2996, 5, 84, 0, 0, 2996, 2997, 5, 85, 0, 0, 2997, 2998, 5, 82, 0, 0, 2998, 2999, 5, 65, 0, 0, 2999, 3000, 5, 76, 0, 0, 3000, 580, 1, 0, 0, 0, 3001, 3002, 5, 78, 0, 0, 3002, 3003, 5, 69, 0, 0, 3003, 3004, 5, 88, 0, 0, 3004, 3005, 5, 84, 0, 0, 3005, 582, 1, 0, 0, 0, 3006, 3007, 5, 78, 0, 0, 3007, 3008, 5, 79, 0, 0, 3008, 584, 1, 0, 0, 0, 3009, 3010, 5, 78, 0, 0, 3010, 3011, 5, 79, 0, 0, 3011, 3012, 5, 78, 0, 0, 3012, 3013, 5, 69, 0, 0, 3013, 586, 1, 0, 0, 0, 3014, 3015, 5, 78, 0, 0, 3015, 3016, 5, 79, 0, 0, 3016, 3017, 5, 84, 0, 0, 3017, 588, 1, 0, 0, 0, 3018, 3019, 5, 78, 0, 0, 3019, 3020, 5, 85, 0, 0, 3020, 3021, 5, 76, 0, 0, 3021, 3022, 5, 76, 0, 0, 3022, 590, 1, 0, 0, 0, 3023, 3024, 5, 78, 0, 0, 3024, 3025, 5, 85, 0, 0, 3025, 3026, 5, 77, 0, 0, 3026, 3027, 5, 69, 0, 0, 3027, 3028, 5, 82, 0, 0, 3028, 3029, 5, 73, 0, 0, 3029, 3030, 5, 67, 0, 0, 3030, 592, 1, 0, 0, 0, 3031, 3032, 5, 79, 0, 0, 3032, 3033, 5, 70, 0, 0, 3033, 594, 1, 0, 0, 0, 3034, 3035, 5, 79, 0, 0, 3035, 3036, 5, 70, 0, 0, 3036, 3037, 5, 70, 0, 0, 3037, 3038, 5, 83, 0, 0, 3038, 3039, 5, 69, 0, 0, 3039, 3040, 5, 84, 0, 0, 3040, 596, 1, 0, 0, 0, 3041, 3042, 5, 79, 0, 0, 3042, 3043, 5, 78, 0, 0, 3043, 598, 1, 0, 0, 0, 3044, 3045, 5, 79, 0, 0, 3045, 3046, 5, 78, 0, 0, 3046, 3047, 5, 69, 0, 0, 3047, 600, 1, 0, 0, 0, 3048, 3049, 5, 79, 0, 0, 3049, 3050, 5, 82, 0, 0, 3050, 602, 1, 0, 0, 0, 3051, 3052, 5, 79, 0, 0, 3052, 3053, 5, 82, 0, 0, 3053, 3054, 5, 68, 0, 0, 3054, 3055, 5, 69, 0, 0, 3055, 3056, 5, 82, 0, 0, 3056, 604, 1, 0, 0, 0, 3057, 3058, 5, 79, 0, 0, 3058, 3059, 5, 85, 0, 0, 3059, 3060, 5, 84, 0, 0, 3060, 606, 1, 0, 0, 0, 3061, 3062, 5, 79, 0, 0, 3062, 3063, 5, 85, 0, 0, 3063, 3064, 5, 84, 0, 0, 3064, 3065, 5, 69, 0, 0, 3065, 3066, 5, 82, 0, 0, 3066, 608, 1, 0, 0, 0, 3067, 3068, 5, 79, 0, 0, 3068, 3069, 5, 86, 0, 0, 3069, 3070, 5, 69, 0, 0, 3070, 3071, 5, 82, 0, 0, 3071, 610, 1, 0, 0, 0, 3072, 3073, 5, 79, 0, 0, 3073, 3074, 5, 86, 0, 0, 3074, 3075, 5, 69, 0, 0, 3075, 3076, 5, 82, 0, 0, 3076, 3077, 5, 76, 0, 0, 3077, 3078, 5, 65, 0, 0, 3078, 3079, 5, 89, 0, 0, 3079, 612, 1, 0, 0, 0, 3080, 3081, 5, 80, 0, 0, 3081, 3082, 5, 65, 0, 0, 3082, 3083, 5, 82, 0, 0, 3083, 3084, 5, 84, 0, 0, 3084, 3085, 5, 73, 0, 0, 3085, 3086, 5, 84, 0, 0, 3086, 3087, 5, 73, 0, 0, 3087, 3088, 5, 79, 0, 0, 3088, 3089, 5, 78, 0, 0, 3089, 614, 1, 0, 0, 0, 3090, 3091, 5, 80, 0, 0, 3091, 3092, 5, 65, 0, 0, 3092, 3093, 5, 84, 0, 0, 3093, 3094, 5, 84, 0, 0, 3094, 3095, 5, 69, 0, 0, 3095, 3096, 5, 82, 0, 0, 3096, 3097, 5, 78, 0, 0, 3097, 616, 1, 0, 0, 0, 3098, 3099, 5, 80, 0, 0, 3099, 3100, 5, 69, 0, 0, 3100, 3101, 5, 82, 0, 0, 3101, 618, 1, 0, 0, 0, 3102, 3103, 5, 80, 0, 0, 3103, 3104, 5, 69, 0, 0, 3104, 3105, 5, 82, 0, 0, 3105, 3106, 5, 67, 0, 0, 3106, 3107, 5, 69, 0, 0, 3107, 3108, 5, 78, 0, 0, 3108, 3109, 5, 84, 0, 0, 3109, 620, 1, 0, 0, 0, 3110, 3111, 5, 80, 0, 0, 3111, 3112, 5, 69, 0, 0, 3112, 3113, 5, 82, 0, 0, 3113, 3114, 5, 73, 0, 0, 3114, 3115, 5, 79, 0, 0, 3115, 3116, 5, 68, 0, 0, 3116, 622, 1, 0, 0, 0, 3117, 3118, 5, 80, 0, 0, 3118, 3119, 5, 79, 0, 0, 3119, 3120, 5, 83, 0, 0, 3120, 3121, 5, 73, 0, 0, 3121, 3122, 5, 84, 0, 0, 3122, 3123, 5, 73, 0, 0, 3123, 3124, 5, 79, 0, 0, 3124, 3125, 5, 78, 0, 0, 3125, 624, 1, 0, 0, 0, 3126, 3127, 5, 80, 0, 0, 3127, 3128, 5, 82, 0, 0, 3128, 3129, 5, 73, 0, 0, 3129, 3130, 5, 77, 0, 0, 3130, 3131, 5, 65, 0, 0, 3131, 3132, 5, 82, 0, 0, 3132, 3133, 5, 89, 0, 0, 3133, 626, 1, 0, 0, 0, 3134, 3135, 5, 82, 0, 0, 3135, 3136, 5, 65, 0, 0, 3136, 3137, 5, 78, 0, 0, 3137, 3138, 5, 71, 0, 0, 3138, 3139, 5, 69, 0, 0, 3139, 628, 1, 0, 0, 0, 3140, 3141, 5, 82, 0, 0, 3141, 3142, 5, 65, 0, 0, 3142, 3143, 5, 78, 0, 0, 3143, 3144, 5, 75, 0, 0, 3144, 630, 1, 0, 0, 0, 3145, 3146, 5, 82, 0, 0, 3146, 3147, 5, 69, 0, 0, 3147, 3148, 5, 83, 0, 0, 3148, 3149, 5, 69, 0, 0, 3149, 3150, 5, 84, 0, 0, 3150, 632, 1, 0, 0, 0, 3151, 3152, 5, 82, 0, 0, 3152, 3153, 5, 69, 0, 0, 3153, 3154, 5, 86, 0, 0, 3154, 3155, 5, 79, 0, 0, 3155, 3156, 5, 75, 0, 0, 3156, 3157, 5, 69, 0, 0, 3157, 634, 1, 0, 0, 0, 3158, 3159, 5, 82, 0, 0, 3159, 3160, 5, 73, 0, 0, 3160, 3161, 5, 71, 0, 0, 3161, 3162, 5, 72, 0, 0, 3162, 3163, 5, 84, 0, 0, 3163, 636, 1, 0, 0, 0, 3164, 3165, 5, 82, 0, 0, 3165, 3166, 5, 76, 0, 0, 3166, 3167, 5, 73, 0, 0, 3167, 3168, 5, 75, 0, 0, 3168, 3169, 5, 69, 0, 0, 3169, 638, 1, 0, 0, 0, 3170, 3171, 5, 82, 0, 0, 3171, 3172, 5, 79, 0, 0, 3172, 3173, 5, 76, 0, 0, 3173, 3174, 5, 76, 0, 0, 3174, 3175, 5, 66, 0, 0, 3175, 3176, 5, 65, 0, 0, 3176, 3177, 5, 67, 0, 0, 3177, 3178, 5, 75, 0, 0, 3178, 640, 1, 0, 0, 0, 3179, 3180, 5, 82, 0, 0, 3180, 3181, 5, 79, 0, 0, 3181, 3182, 5, 76, 0, 0, 3182, 3183, 5, 76, 0, 0, 3183, 3184, 5, 85, 0, 0, 3184, 3185, 5, 80, 0, 0, 3185, 642, 1, 0, 0, 0, 3186, 3187, 5, 82, 0, 0, 3187, 3188, 5, 79, 0, 0, 3188, 3189, 5, 87, 0, 0, 3189, 644, 1, 0, 0, 0, 3190, 3191, 5, 82, 0, 0, 3191, 3192, 5, 79, 0, 0, 3192, 3193, 5, 87, 0, 0, 3193, 3194, 5, 83, 0, 0, 3194, 646, 1, 0, 0, 0, 3195, 3196, 5, 83, 0, 0, 3196, 3197, 5, 69, 0, 0, 3197, 3198, 5, 67, 0, 0, 3198, 3199, 5, 79, 0, 0, 3199, 3200, 5, 78, 0, 0, 3200, 3201, 5, 68, 0, 0, 3201, 648, 1, 0, 0, 0, 3202, 3203, 5, 83, 0, 0, 3203, 3204, 5, 69, 0, 0, 3204, 3205, 5, 76, 0, 0, 3205, 3206, 5, 69, 0, 0, 3206, 3207, 5, 67, 0, 0, 3207, 3208, 5, 84, 0, 0, 3208, 650, 1, 0, 0, 0, 3209, 3210, 5, 83, 0, 0, 3210, 3211, 5, 69, 0, 0, 3211, 3212, 5, 84, 0, 0, 3212, 652, 1, 0, 0, 0, 3213, 3214, 5, 83, 0, 0, 3214, 3215, 5, 72, 0, 0, 3215, 3216, 5, 79, 0, 0, 3216, 3217, 5, 87, 0, 0, 3217, 654, 1, 0, 0, 0, 3218, 3219, 5, 83, 0, 0, 3219, 3220, 5, 75, 0, 0, 3220, 3221, 5, 73, 0, 0, 3221, 3222, 5, 80, 0, 0, 3222, 656, 1, 0, 0, 0, 3223, 3224, 5, 83, 0, 0, 3224, 3225, 5, 77, 0, 0, 3225, 3226, 5, 65, 0, 0, 3226, 3227, 5, 76, 0, 0, 3227, 3228, 5, 76, 0, 0, 3228, 3229, 5, 73, 0, 0, 3229, 3230, 5, 78, 0, 0, 3230, 3231, 5, 84, 0, 0, 3231, 658, 1, 0, 0, 0, 3232, 3233, 5, 83, 0, 0, 3233, 3234, 5, 84, 0, 0, 3234, 3235, 5, 65, 0, 0, 3235, 3236, 5, 82, 0, 0, 3236, 3237, 5, 84, 0, 0, 3237, 660, 1, 0, 0, 0, 3238, 3239, 5, 83, 0, 0, 3239, 3240, 5, 84, 0, 0, 3240, 3241, 5, 65, 0, 0, 3241, 3242, 5, 84, 0, 0, 3242, 3243, 5, 73, 0, 0, 3243, 3244, 5, 67, 0, 0, 3244, 662, 1, 0, 0, 0, 3245, 3246, 5, 83, 0, 0, 3246, 3247, 5, 85, 0, 0, 3247, 3248, 5, 66, 0, 0, 3248, 3249, 5, 83, 0, 0, 3249, 3250, 5, 84, 0, 0, 3250, 3251, 5, 82, 0, 0, 3251, 3252, 5, 73, 0, 0, 3252, 3253, 5, 78, 0, 0, 3253, 3254, 5, 71, 0, 0, 3254, 664, 1, 0, 0, 0, 3255, 3256, 5, 83, 0, 0, 3256, 3257, 5, 85, 0, 0, 3257, 3258, 5, 77, 0, 0, 3258, 666, 1, 0, 0, 0, 3259, 3260, 5, 83, 0, 0, 3260, 3261, 5, 89, 0, 0, 3261, 3262, 5, 83, 0, 0, 3262, 3263, 5, 84, 0, 0, 3263, 3264, 5, 69, 0, 0, 3264, 3265, 5, 77, 0, 0, 3265, 668, 1, 0, 0, 0, 3266, 3267, 5, 83, 0, 0, 3267, 3268, 5, 89, 0, 0, 3268, 3269, 5, 83, 0, 0, 3269, 3270, 5, 84, 0, 0, 3270, 3271, 5, 69, 0, 0, 3271, 3272, 5, 77, 0, 0, 3272, 3273, 5, 95, 0, 0, 3273, 3274, 5, 84, 0, 0, 3274, 3275, 5, 73, 0, 0, 3275, 3276, 5, 77, 0, 0, 3276, 3277, 5, 69, 0, 0, 3277, 670, 1, 0, 0, 0, 3278, 3279, 5, 83, 0, 0, 3279, 3280, 5, 89, 0, 0, 3280, 3281, 5, 83, 0, 0, 3281, 3282, 5, 84, 0, 0, 3282, 3283, 5, 69, 0, 0, 3283, 3284, 5, 77, 0, 0, 3284, 3285, 5, 95, 0, 0, 3285, 3286, 5, 85, 0, 0, 3286, 3287, 5, 83, 0, 0, 3287, 3288, 5, 69, 0, 0, 3288, 3289, 5, 82, 0, 0, 3289, 672, 1, 0, 0, 0, 3290, 3291, 5, 84, 0, 0, 3291, 3292, 5, 65, 0, 0, 3292, 3293, 5, 66, 0, 0, 3293, 3294, 5, 76, 0, 0, 3294, 3295, 5, 69, 0, 0, 3295, 674, 1, 0, 0, 0, 3296, 3297, 5, 84, 0, 0, 3297, 3298, 5, 65, 0, 0, 3298, 3299, 5, 66, 0, 0, 3299, 3300, 5, 76, 0, 0, 3300, 3301, 5, 69, 0, 0, 3301, 3302, 5, 83, 0, 0, 3302, 3303, 5, 65, 0, 0, 3303, 3304, 5, 77, 0, 0, 3304, 3305, 5, 80, 0, 0, 3305, 3306, 5, 76, 0, 0, 3306, 3307, 5, 69, 0, 0, 3307, 676, 1, 0, 0, 0, 3308, 3309, 5, 84, 0, 0, 3309, 3310, 5, 72, 0, 0, 3310, 3311, 5, 69, 0, 0, 3311, 3312, 5, 78, 0, 0, 3312, 678, 1, 0, 0, 0, 3313, 3314, 5, 84, 0, 0, 3314, 3315, 5, 73, 0, 0, 3315, 3316, 5, 77, 0, 0, 3316, 3317, 5, 69, 0, 0, 3317, 680, 1, 0, 0, 0, 3318, 3319, 5, 84, 0, 0, 3319, 3320, 5, 73, 0, 0, 3320, 3321, 5, 77, 0, 0, 3321, 3322, 5, 69, 0, 0, 3322, 3323, 5, 83, 0, 0, 3323, 3324, 5, 84, 0, 0, 3324, 3325, 5, 65, 0, 0, 3325, 3326, 5, 77, 0, 0, 3326, 3327, 5, 80, 0, 0, 3327, 682, 1, 0, 0, 0, 3328, 3329, 5, 84, 0, 0, 3329, 3330, 5, 73, 0, 0, 3330, 3331, 5, 78, 0, 0, 3331, 3332, 5, 89, 0, 0, 3332, 3333, 5, 73, 0, 0, 3333, 3334, 5, 78, 0, 0, 3334, 3335, 5, 84, 0, 0, 3335, 684, 1, 0, 0, 0, 3336, 3337, 5, 84, 0, 0, 3337, 3338, 5, 79, 0, 0, 3338, 686, 1, 0, 0, 0, 3339, 3340, 5, 84, 0, 0, 3340, 3341, 5, 82, 0, 0, 3341, 3342, 5, 85, 0, 0, 3342, 3343, 5, 69, 0, 0, 3343, 688, 1, 0, 0, 0, 3344, 3345, 5, 84, 0, 0, 3345, 3346, 5, 82, 0, 0, 3346, 3347, 5, 85, 0, 0, 3347, 3348, 5, 78, 0, 0, 3348, 3349, 5, 67, 0, 0, 3349, 3350, 5, 65, 0, 0, 3350, 3351, 5, 84, 0, 0, 3351, 3352, 5, 69, 0, 0, 3352, 690, 1, 0, 0, 0, 3353, 3354, 5, 85, 0, 0, 3354, 3355, 5, 78, 0, 0, 3355, 3356, 5, 73, 0, 0, 3356, 3357, 5, 79, 0, 0, 3357, 3358, 5, 78, 0, 0, 3358, 692, 1, 0, 0, 0, 3359, 3360, 5, 85, 0, 0, 3360, 3361, 5, 78, 0, 0, 3361, 3362, 5, 73, 0, 0, 3362, 3363, 5, 81, 0, 0, 3363, 3364, 5, 85, 0, 0, 3364, 3365, 5, 69, 0, 0, 3365, 694, 1, 0, 0, 0, 3366, 3367, 5, 85, 0, 0, 3367, 3368, 5, 78, 0, 0, 3368, 3369, 5, 75, 0, 0, 3369, 3370, 5, 78, 0, 0, 3370, 3371, 5, 79, 0, 0, 3371, 3372, 5, 87, 0, 0, 3372, 3373, 5, 78, 0, 0, 3373, 696, 1, 0, 0, 0, 3374, 3375, 5, 85, 0, 0, 3375, 3376, 5, 78, 0, 0, 3376, 3377, 5, 78, 0, 0, 3377, 3378, 5, 69, 0, 0, 3378, 3379, 5, 83, 0, 0, 3379, 3380, 5, 84, 0, 0, 3380, 698, 1, 0, 0, 0, 3381, 3382, 5, 85, 0, 0, 3382, 3383, 5, 80, 0, 0, 3383, 3384, 5, 80, 0, 0, 3384, 3385, 5, 69, 0, 0, 3385, 3386, 5, 82, 0, 0, 3386, 700, 1, 0, 0, 0, 3387, 3388, 5, 85, 0, 0, 3388, 3389, 5, 80, 0, 0, 3389, 3390, 5, 83, 0, 0, 3390, 3391, 5, 69, 0, 0, 3391, 3392, 5, 82, 0, 0, 3392, 3393, 5, 84, 0, 0, 3393, 702, 1, 0, 0, 0, 3394, 3395, 5, 85, 0, 0, 3395, 3396, 5, 83, 0, 0, 3396, 3397, 5, 69, 0, 0, 3397, 3398, 5, 82, 0, 0, 3398, 704, 1, 0, 0, 0, 3399, 3400, 5, 85, 0, 0, 3400, 3401, 5, 83, 0, 0, 3401, 3402, 5, 73, 0, 0, 3402, 3403, 5, 78, 0, 0, 3403, 3404, 5, 71, 0, 0, 3404, 706, 1, 0, 0, 0, 3405, 3406, 5, 86, 0, 0, 3406, 3407, 5, 65, 0, 0, 3407, 3408, 5, 76, 0, 0, 3408, 3409, 5, 85, 0, 0, 3409, 3410, 5, 69, 0, 0, 3410, 708, 1, 0, 0, 0, 3411, 3412, 5, 86, 0, 0, 3412, 3413, 5, 65, 0, 0, 3413, 3414, 5, 76, 0, 0, 3414, 3415, 5, 85, 0, 0, 3415, 3416, 5, 69, 0, 0, 3416, 3417, 5, 83, 0, 0, 3417, 710, 1, 0, 0, 0, 3418, 3419, 5, 86, 0, 0, 3419, 3420, 5, 65, 0, 0, 3420, 3421, 5, 82, 0, 0, 3421, 3422, 5, 66, 0, 0, 3422, 3423, 5, 73, 0, 0, 3423, 3424, 5, 78, 0, 0, 3424, 3425, 5, 65, 0, 0, 3425, 3426, 5, 82, 0, 0, 3426, 3427, 5, 89, 0, 0, 3427, 712, 1, 0, 0, 0, 3428, 3429, 5, 86, 0, 0, 3429, 3430, 5, 65, 0, 0, 3430, 3431, 5, 82, 0, 0, 3431, 3432, 5, 67, 0, 0, 3432, 3433, 5, 72, 0, 0, 3433, 3434, 5, 65, 0, 0, 3434, 3435, 5, 82, 0, 0, 3435, 714, 1, 0, 0, 0, 3436, 3437, 5, 87, 0, 0, 3437, 3438, 5, 72, 0, 0, 3438, 3439, 5, 69, 0, 0, 3439, 3440, 5, 78, 0, 0, 3440, 716, 1, 0, 0, 0, 3441, 3442, 5, 87, 0, 0, 3442, 3443, 5, 72, 0, 0, 3443, 3444, 5, 69, 0, 0, 3444, 3445, 5, 82, 0, 0, 3445, 3446, 5, 69, 0, 0, 3446, 718, 1, 0, 0, 0, 3447, 3448, 5, 87, 0, 0, 3448, 3449, 5, 73, 0, 0, 3449, 3450, 5, 78, 0, 0, 3450, 3451, 5, 68, 0, 0, 3451, 3452, 5, 79, 0, 0, 3452, 3453, 5, 87, 0, 0, 3453, 720, 1, 0, 0, 0, 3454, 3455, 5, 87, 0, 0, 3455, 3456, 5, 73, 0, 0, 3456, 3457, 5, 84, 0, 0, 3457, 3458, 5, 72, 0, 0, 3458, 722, 1, 0, 0, 0, 3459, 3460, 5, 87, 0, 0, 3460, 3461, 5, 73, 0, 0, 3461, 3462, 5, 84, 0, 0, 3462, 3463, 5, 72, 0, 0, 3463, 3464, 5, 73, 0, 0, 3464, 3465, 5, 78, 0, 0, 3465, 724, 1, 0, 0, 0, 3466, 3467, 5, 87, 0, 0, 3467, 3468, 5, 73, 0, 0, 3468, 3469, 5, 84, 0, 0, 3469, 3470, 5, 72, 0, 0, 3470, 3471, 5, 79, 0, 0, 3471, 3472, 5, 85, 0, 0, 3472, 3473, 5, 84, 0, 0, 3473, 726, 1, 0, 0, 0, 3474, 3475, 5, 89, 0, 0, 3475, 3476, 5, 69, 0, 0, 3476, 3477, 5, 65, 0, 0, 3477, 3478, 5, 82, 0, 0, 3478, 728, 1, 0, 0, 0, 3479, 3480, 5, 61, 0, 0, 3480, 730, 1, 0, 0, 0, 3481, 3482, 5, 62, 0, 0, 3482, 732, 1, 0, 0, 0, 3483, 3484, 5, 60, 0, 0, 3484, 734, 1, 0, 0, 0, 3485, 3486, 5, 33, 0, 0, 3486, 736, 1, 0, 0, 0, 3487, 3488, 5, 126, 0, 0, 3488, 738, 1, 0, 0, 0, 3489, 3490, 5, 124, 0, 0, 3490, 740, 1, 0, 0, 0, 3491, 3492, 5, 38, 0, 0, 3492, 742, 1, 0, 0, 0, 3493, 3494, 5, 94, 0, 0, 3494, 744, 1, 0, 0, 0, 3495, 3496, 5, 46, 0, 0, 3496, 746, 1, 0, 0, 0, 3497, 3498, 5, 91, 0, 0, 3498, 748, 1, 0, 0, 0, 3499, 3500, 5, 93, 0, 0, 3500, 750, 1, 0, 0, 0, 3501, 3502, 5, 40, 0, 0, 3502, 752, 1, 0, 0, 0, 3503, 3504, 5, 41, 0, 0, 3504, 754, 1, 0, 0, 0, 3505, 3506, 5, 123, 0, 0, 3506, 756, 1, 0, 0, 0, 3507, 3508, 5, 125, 0, 0, 3508, 758, 1, 0, 0, 0, 3509, 3510, 5, 44, 0, 0, 3510, 760, 1, 0, 0, 0, 3511, 3512, 5, 59, 0, 0, 3512, 762, 1, 0, 0, 0, 3513, 3514, 5, 64, 0, 0, 3514, 764, 1, 0, 0, 0, 3515, 3516, 5, 39, 0, 0, 3516, 766, 1, 0, 0, 0, 3517, 3518, 5, 34, 0, 0, 3518, 768, 1, 0, 0, 0, 3519, 3520, 5, 96, 0, 0, 3520, 770, 1, 0, 0, 0, 3521, 3522, 5, 58, 0, 0, 3522, 772, 1, 0, 0, 0, 3523, 3524, 5, 42, 0, 0, 3524, 774, 1, 0, 0, 0, 3525, 3526, 5, 95, 0, 0, 3526, 776, 1, 0, 0, 0, 3527, 3528, 5, 45, 0, 0, 3528, 778, 1, 0, 0, 0, 3529, 3530, 5, 43, 0, 0, 3530, 780, 1, 0, 0, 0, 3531, 3532, 5, 37, 0, 0, 3532, 782, 1, 0, 0, 0, 3533, 3534, 5, 124, 0, 0, 3534, 3535, 5, 124, 0, 0, 3535, 784, 1, 0, 0, 0, 3536, 3537, 5, 45, 0, 0, 3537, 3538, 5, 45, 0, 0, 3538, 786, 1, 0, 0, 0, 3539, 3540, 5, 47, 0, 0, 3540, 788, 1, 0, 0, 0, 3541, 3542, 5, 63, 0, 0, 3542, 790, 1, 0, 0, 0, 3543, 3544, 5, 61, 0, 0, 3544, 3545, 5, 62, 0, 0, 3545, 792, 1, 0, 0, 0, 3546, 3550, 3, 817, 408, 0, 3547, 3550, 3, 819, 409, 0, 3548, 3550, 3, 823, 411, 0, 3549, 3546, 1, 0, 0, 0, 3549, 3547, 1, 0, 0, 0, 3549, 3548, 1, 0, 0, 0, 3550, 794, 1, 0, 0, 0, 3551, 3553, 3, 813, 406, 0, 3552, 3551, 1, 0, 0, 0, 3553, 3554, 1, 0, 0, 0, 3554, 3552, 1, 0, 0, 0, 3554, 3555, 1, 0, 0, 0, 3555, 796, 1, 0, 0, 0, 3556, 3558, 3, 813, 406, 0, 3557, 3556, 1, 0, 0, 0, 3558, 3559, 1, 0, 0, 0, 3559, 3557, 1, 0, 0, 0, 3559, 3560, 1, 0, 0, 0, 3560, 3562, 1, 0, 0, 0, 3561, 3557, 1, 0, 0, 0, 3561, 3562, 1, 0, 0, 0, 3562, 3563, 1, 0, 0, 0, 3563, 3565, 5, 46, 0, 0, 3564, 3566, 3, 813, 406, 0, 3565, 3564, 1, 0, 0, 0, 3566, 3567, 1, 0, 0, 0, 3567, 3565, 1, 0, 0, 0, 3567, 3568, 1, 0, 0, 0, 3568, 3600, 1, 0, 0, 0, 3569, 3571, 3, 813, 406, 0, 3570, 3569, 1, 0, 0, 0, 3571, 3572, 1, 0, 0, 0, 3572, 3570, 1, 0, 0, 0, 3572, 3573, 1, 0, 0, 0, 3573, 3574, 1, 0, 0, 0, 3574, 3575, 5, 46, 0, 0, 3575, 3576, 3, 809, 404, 0, 3576, 3600, 1, 0, 0, 0, 3577, 3579, 3, 813, 406, 0, 3578, 3577, 1, 0, 0, 0, 3579, 3580, 1, 0, 0, 0, 3580, 3578, 1, 0, 0, 0, 3580, 3581, 1, 0, 0, 0, 3581, 3583, 1, 0, 0, 0, 3582, 3578, 1, 0, 0, 0, 3582, 3583, 1, 0, 0, 0, 3583, 3584, 1, 0, 0, 0, 3584, 3586, 5, 46, 0, 0, 3585, 3587, 3, 813, 406, 0, 3586, 3585, 1, 0, 0, 0, 3587, 3588, 1, 0, 0, 0, 3588, 3586, 1, 0, 0, 0, 3588, 3589, 1, 0, 0, 0, 3589, 3590, 1, 0, 0, 0, 3590, 3591, 3, 809, 404, 0, 3591, 3600, 1, 0, 0, 0, 3592, 3594, 3, 813, 406, 0, 3593, 3592, 1, 0, 0, 0, 3594, 3595, 1, 0, 0, 0, 3595, 3593, 1, 0, 0, 0, 3595, 3596, 1, 0, 0, 0, 3596, 3597, 1, 0, 0, 0, 3597, 3598, 3, 809, 404, 0, 3598, 3600, 1, 0, 0, 0, 3599, 3561, 1, 0, 0, 0, 3599, 3570, 1, 0, 0, 0, 3599, 3582, 1, 0, 0, 0, 3599, 3593, 1, 0, 0, 0, 3600, 798, 1, 0, 0, 0, 3601, 3602, 3, 821, 410, 0, 3602, 800, 1, 0, 0, 0, 3603, 3604, 3, 811, 405, 0, 3604, 802, 1, 0, 0, 0, 3605, 3606, 3, 805, 402, 0, 3606, 804, 1, 0, 0, 0, 3607, 3611, 7, 2, 0, 0, 3608, 3610, 8, 3, 0, 0, 3609, 3608, 1, 0, 0, 0, 3610, 3613, 1, 0, 0, 0, 3611, 3609, 1, 0, 0, 0, 3611, 3612, 1, 0, 0, 0, 3612, 3615, 1, 0, 0, 0, 3613, 3611, 1, 0, 0, 0, 3614, 3607, 1, 0, 0, 0, 3615, 3616, 1, 0, 0, 0, 3616, 3614, 1, 0, 0, 0, 3616, 3617, 1, 0, 0, 0, 3617, 806, 1, 0, 0, 0, 3618, 3626, 5, 96, 0, 0, 3619, 3620, 5, 92, 0, 0, 3620, 3625, 9, 0, 0, 0, 3621, 3622, 5, 96, 0, 0, 3622, 3625, 5, 96, 0, 0, 3623, 3625, 8, 4, 0, 0, 3624, 3619, 1, 0, 0, 0, 3624, 3621, 1, 0, 0, 0, 3624, 3623, 1, 0, 0, 0, 3625, 3628, 1, 0, 0, 0, 3626, 3624, 1, 0, 0, 0, 3626, 3627, 1, 0, 0, 0, 3627, 3629, 1, 0, 0, 0, 3628, 3626, 1, 0, 0, 0, 3629, 3630, 5, 96, 0, 0, 3630, 808, 1, 0, 0, 0, 3631, 3633, 5, 69, 0, 0, 3632, 3634, 7, 5, 0, 0, 3633, 3632, 1, 0, 0, 0, 3633, 3634, 1, 0, 0, 0, 3634, 3636, 1, 0, 0, 0, 3635, 3637, 3, 813, 406, 0, 3636, 3635, 1, 0, 0, 0, 3637, 3638, 1, 0, 0, 0, 3638, 3636, 1, 0, 0, 0, 3638, 3639, 1, 0, 0, 0, 3639, 810, 1, 0, 0, 0, 3640, 3642, 7, 6, 0, 0, 3641, 3640, 1, 0, 0, 0, 3642, 3645, 1, 0, 0, 0, 3643, 3644, 1, 0, 0, 0, 3643, 3641, 1, 0, 0, 0, 3644, 3647, 1, 0, 0, 0, 3645, 3643, 1, 0, 0, 0, 3646, 3648, 7, 7, 0, 0, 3647, 3646, 1, 0, 0, 0, 3648, 3649, 1, 0, 0, 0, 3649, 3650, 1, 0, 0, 0, 3649, 3647, 1, 0, 0, 0, 3650, 3654, 1, 0, 0, 0, 3651, 3653, 7, 6, 0, 0, 3652, 3651, 1, 0, 0, 0, 3653, 3656, 1, 0, 0, 0, 3654, 3652, 1, 0, 0, 0, 3654, 3655, 1, 0, 0, 0, 3655, 812, 1, 0, 0, 0, 3656, 3654, 1, 0, 0, 0, 3657, 3658, 7, 8, 0, 0, 3658, 814, 1, 0, 0, 0, 3659, 3660, 7, 9, 0, 0, 3660, 816, 1, 0, 0, 0, 3661, 3669, 5, 34, 0, 0, 3662, 3663, 5, 92, 0, 0, 3663, 3668, 9, 0, 0, 0, 3664, 3665, 5, 34, 0, 0, 3665, 3668, 5, 34, 0, 0, 3666, 3668, 8, 10, 0, 0, 3667, 3662, 1, 0, 0, 0, 3667, 3664, 1, 0, 0, 0, 3667, 3666, 1, 0, 0, 0, 3668, 3671, 1, 0, 0, 0, 3669, 3667, 1, 0, 0, 0, 3669, 3670, 1, 0, 0, 0, 3670, 3672, 1, 0, 0, 0, 3671, 3669, 1, 0, 0, 0, 3672, 3673, 5, 34, 0, 0, 3673, 818, 1, 0, 0, 0, 3674, 3682, 5, 39, 0, 0, 3675, 3676, 5, 92, 0, 0, 3676, 3681, 9, 0, 0, 0, 3677, 3678, 5, 39, 0, 0, 3678, 3681, 5, 39, 0, 0, 3679, 3681, 8, 11, 0, 0, 3680, 3675, 1, 0, 0, 0, 3680, 3677, 1, 0, 0, 0, 3680, 3679, 1, 0, 0, 0, 3681, 3684, 1, 0, 0, 0, 3682, 3680, 1, 0, 0, 0, 3682, 3683, 1, 0, 0, 0, 3683, 3685, 1, 0, 0, 0, 3684, 3682, 1, 0, 0, 0, 3685, 3686, 5, 39, 0, 0, 3686, 820, 1, 0, 0, 0, 3687, 3688, 5, 66, 0, 0, 3688, 3690, 5, 39, 0, 0, 3689, 3691, 7, 12, 0, 0, 3690, 3689, 1, 0, 0, 0, 3691, 3692, 1, 0, 0, 0, 3692, 3690, 1, 0, 0, 0, 3692, 3693, 1, 0, 0, 0, 3693, 3694, 1, 0, 0, 0, 3694, 3695, 5, 39, 0, 0, 3695, 822, 1, 0, 0, 0, 3696, 3704, 5, 96, 0, 0, 3697, 3698, 5, 92, 0, 0, 3698, 3703, 9, 0, 0, 0, 3699, 3700, 5, 96, 0, 0, 3700, 3703, 5, 96, 0, 0, 3701, 3703, 8, 4, 0, 0, 3702, 3697, 1, 0, 0, 0, 3702, 3699, 1, 0, 0, 0, 3702, 3701, 1, 0, 0, 0, 3703, 3706, 1, 0, 0, 0, 3704, 3702, 1, 0, 0, 0, 3704, 3705, 1, 0, 0, 0, 3705, 3707, 1, 0, 0, 0, 3706, 3704, 1, 0, 0, 0, 3707, 3708, 5, 96, 0, 0, 3708, 824, 1, 0, 0, 0, 37, 0, 828, 838, 849, 854, 858, 862, 868, 872, 874, 3549, 3554, 3559, 3561, 3567, 3572, 3580, 3582, 3588, 3595, 3599, 3611, 3616, 3624, 3626, 3633, 3638, 3643, 3649, 3654, 3667, 3669, 3680, 3682, 3692, 3702, 3704, 1, 0, 1, 0] \ No newline at end of file diff --git a/src/lib/flinksql/FlinkSqlLexer.tokens b/src/lib/flinksql/FlinkSqlLexer.tokens index 62cec6d..3b1fd9d 100644 --- a/src/lib/flinksql/FlinkSqlLexer.tokens +++ b/src/lib/flinksql/FlinkSqlLexer.tokens @@ -1,688 +1,795 @@ SPACE=1 COMMENT_INPUT=2 LINE_COMMENT=3 -SELECT=4 -FROM=5 -ADD=6 -AS=7 -ALL=8 -ANY=9 -DISTINCT=10 -WHERE=11 -GROUP=12 -BY=13 -GROUPING=14 -SETS=15 -CUBE=16 -ROLLUP=17 -ORDER=18 -HAVING=19 -LIMIT=20 -AT=21 -OR=22 -AND=23 -IN=24 -NOT=25 -NO=26 -EXISTS=27 -BETWEEN=28 -LIKE=29 -RLIKE=30 -IS=31 -TRUE=32 -FALSE=33 -NULLS=34 -ASC=35 -DESC=36 -FOR=37 -INTERVAL=38 -CASE=39 -WHEN=40 -THEN=41 -ELSE=42 -BEGIN=43 -END=44 -JOIN=45 -CROSS=46 -OUTER=47 -INNER=48 -LEFT=49 -SEMI=50 -RIGHT=51 -FULL=52 -USER=53 -NATURAL=54 -ON=55 -PIVOT=56 -LATERAL=57 -WINDOW=58 -OVER=59 -PARTITION=60 -RANGE=61 -ROWS=62 -UNBOUNDED=63 -PRECEDING=64 -FOLLOWING=65 -CURRENT=66 -FIRST=67 -AFTER=68 -LAST=69 -WITH=70 -WITHOUT=71 -VALUES=72 -CREATE=73 -TABLE=74 -DIRECTORY=75 -VIEW=76 -REPLACE=77 -EXECUTE=78 -STATEMENT=79 -INSERT=80 -DELETE=81 -REMOVE=82 -INTO=83 -DESCRIBE=84 -EXPLAIN=85 -PLAN=86 -CHANGELOG_MODE=87 -JSON_EXECUTION_PLAN=88 -ESTIMATED_COST=89 -FORMAT=90 -LOGICAL=91 -CODEGEN=92 -COST=93 -CAST=94 -SHOW=95 -TABLES=96 -COLUMNS=97 -COLUMN=98 -USE=99 -MODULE=100 -MODULES=101 -PARTITIONS=102 -FUNCTIONS=103 -DROP=104 -UNION=105 -EXCEPT=106 -SETMINUS=107 -INTERSECT=108 -TO=109 -TABLESAMPLE=110 -STRATIFY=111 -ALTER=112 -RENAME=113 -STRUCT=114 -COMMENT=115 -SET=116 -RESET=117 -DATA=118 -START=119 -TRANSACTION=120 -COMMIT=121 -ROLLBACK=122 -MACRO=123 -IGNORE=124 -BOTH=125 -LEADING=126 -TRAILING=127 -IF=128 -POSITION=129 -EXTRACT=130 -MINUS=131 -DIV=132 -PERCENTLIT=133 -BUCKET=134 -OUT=135 -OF=136 -SORT=137 -CLUSTER=138 -DISTRIBUTE=139 -OVERWRITE=140 -TRANSFORM=141 -REDUCE=142 -USING=143 -SERDE=144 -SERDEPROPERTIES=145 -RECORDREADER=146 -RECORDWRITER=147 -DELIMITED=148 -FIELDS=149 -TERMINATED=150 -COLLECTION=151 -ITEMS=152 -KEYS=153 -ESCAPED=154 -LINES=155 -SEPARATED=156 -FUNCTION=157 -EXTENDED=158 -REFRESH=159 -CLEAR=160 -CACHE=161 -UNCACHE=162 -LAZY=163 -FORMATTED=164 -GLOBAL=165 -TEMPORARY=166 -OPTIONS=167 -UNSET=168 -TBLPROPERTIES=169 -DBPROPERTIES=170 -BUCKETS=171 -SKEWED=172 -STORED=173 -DIRECTORIES=174 -LOCATION=175 -EXCHANGE=176 -ARCHIVE=177 -UNARCHIVE=178 -FILEFORMAT=179 -TOUCH=180 -COMPACT=181 -CONCATENATE=182 -CHANGE=183 -CASCADE=184 -CONSTRAINT=185 -RESTRICT=186 -CLUSTERED=187 -SORTED=188 -PURGE=189 -INPUTFORMAT=190 -OUTPUTFORMAT=191 -DATABASE=192 -DATABASES=193 -DFS=194 -TRUNCATE=195 -ANALYZE=196 -COMPUTE=197 -LIST=198 -STATISTICS=199 -PARTITIONED=200 -EXTERNAL=201 -DEFINED=202 -REVOKE=203 -GRANT=204 -LOCK=205 -UNLOCK=206 -MSCK=207 -REPAIR=208 -RECOVER=209 -EXPORT=210 -IMPORT=211 -LOAD=212 -UNLOAD=213 -ROLE=214 -ROLES=215 -COMPACTIONS=216 -PRINCIPALS=217 -TRANSACTIONS=218 -INDEX=219 -INDEXES=220 -LOCKS=221 -OPTION=222 -ANTI=223 -LOCAL=224 -INPATH=225 -WATERMARK=226 -UNNEST=227 -MATCH=228 -NEXT=229 -WITHIN=230 -WS=231 -SYSTEM=232 -INCLUDING=233 -EXCLUDING=234 -OVERWRITING=235 -CONSTRAINTS=236 -GENERATED=237 -WATERMARKS=238 -CATALOG=239 -LANGUAGE=240 -JAVA=241 -SCALA=242 -PYTHON=243 -JAR=244 -FILE=245 -PYTHON_FILES=246 -PYTHON_REQUIREMENTS=247 -PYTHON_DEPENDENCIES=248 -PYTHON_JAR=249 -PYTHON_ARCHIVES=250 -PYTHON_PARAMETER=251 -ENGINE=252 -CATALOGS=253 -VIEWS=254 -JARS=255 -PRIMARY=256 -UNIQUE=257 -KEY=258 -PERIOD=259 -SYSTEM_TIME=260 -ENFORCED=261 -METADATA=262 -VIRTUAL=263 -ZONE=264 -TUMBLE=265 -HOP=266 -CUMULATE=267 -DESCRIPTOR=268 -TIMECOL=269 -SIZE=270 -OFFSET=271 -STEP=272 -SLIDE=273 -SESSION=274 -MATCH_RECOGNIZE=275 -MEASURES=276 -PATTERN=277 -ONE=278 -PER=279 -KW_SKIP=280 -PAST=281 -DEFINE=282 -STRING=283 -ARRAY=284 -MAP=285 -CHAR=286 -VARCHAR=287 -BINARY=288 -VARBINARY=289 -BYTES=290 -DECIMAL=291 -DEC=292 -NUMERIC=293 -TINYINT=294 -SMALLINT=295 -INT=296 -INTEGER=297 -BIGINT=298 -FLOAT=299 -DOUBLE=300 -DATE=301 -TIME=302 -TIMESTAMP=303 -TIMESTAMP_LTZ=304 -MULTISET=305 -BOOLEAN=306 -RAW=307 -ROW=308 -NULL=309 -DATETIME=310 -EQUAL_SYMBOL=311 -GREATER_SYMBOL=312 -LESS_SYMBOL=313 -EXCLAMATION_SYMBOL=314 -BIT_NOT_OP=315 -BIT_OR_OP=316 -BIT_AND_OP=317 -BIT_XOR_OP=318 -DOT=319 -LS_BRACKET=320 -RS_BRACKET=321 -LR_BRACKET=322 -RR_BRACKET=323 -LB_BRACKET=324 -RB_BRACKET=325 -COMMA=326 -SEMICOLON=327 -AT_SIGN=328 -SINGLE_QUOTE_SYMB=329 -DOUBLE_QUOTE_SYMB=330 -REVERSE_QUOTE_SYMB=331 -COLON_SYMB=332 -ASTERISK_SIGN=333 -UNDERLINE_SIGN=334 -HYPNEN_SIGN=335 -ADD_SIGN=336 -PENCENT_SIGN=337 -DOUBLE_VERTICAL_SIGN=338 -DOUBLE_HYPNEN_SIGN=339 -SLASH_SIGN=340 -QUESTION_MARK_SIGN=341 -DOT_ID=342 -STRING_LITERAL=343 -DIG_LITERAL=344 -REAL_LITERAL=345 -BIT_STRING=346 -ID_LITERAL=347 -FILE_PATH=348 -DOUBLE_ARROW=349 -'SELECT'=4 -'FROM'=5 -'ADD'=6 -'AS'=7 -'ALL'=8 -'ANY'=9 -'DISTINCT'=10 -'WHERE'=11 -'GROUP'=12 -'BY'=13 -'GROUPING'=14 -'SETS'=15 -'CUBE'=16 -'ROLLUP'=17 -'ORDER'=18 -'HAVING'=19 -'LIMIT'=20 -'AT'=21 -'OR'=22 -'AND'=23 -'IN'=24 -'NOT'=25 -'NO'=26 -'EXISTS'=27 -'BETWEEN'=28 -'LIKE'=29 -'RLIKE'=30 -'IS'=31 -'TRUE'=32 -'FALSE'=33 -'NULLS'=34 -'ASC'=35 -'DESC'=36 -'FOR'=37 -'INTERVAL'=38 -'CASE'=39 -'WHEN'=40 -'THEN'=41 -'ELSE'=42 -'BEGIN'=43 -'END'=44 -'JOIN'=45 -'CROSS'=46 -'OUTER'=47 -'INNER'=48 -'LEFT'=49 -'SEMI'=50 -'RIGHT'=51 -'FULL'=52 -'USER'=53 -'NATURAL'=54 -'ON'=55 -'PIVOT'=56 -'LATERAL'=57 -'WINDOW'=58 -'OVER'=59 -'PARTITION'=60 -'RANGE'=61 -'ROWS'=62 -'UNBOUNDED'=63 -'PRECEDING'=64 -'FOLLOWING'=65 -'CURRENT'=66 -'FIRST'=67 -'AFTER'=68 -'LAST'=69 -'WITH'=70 -'WITHOUT'=71 -'VALUES'=72 -'CREATE'=73 -'TABLE'=74 -'DIRECTORY'=75 -'VIEW'=76 -'REPLACE'=77 -'EXECUTE'=78 -'STATEMENT'=79 -'INSERT'=80 -'DELETE'=81 -'REMOVE'=82 -'INTO'=83 -'DESCRIBE'=84 -'EXPLAIN'=85 -'PLAN'=86 -'CHANGELOG_MODE'=87 -'JSON_EXECUTION_PLAN'=88 -'ESTIMATED_COST'=89 -'FORMAT'=90 -'LOGICAL'=91 -'CODEGEN'=92 -'COST'=93 -'CAST'=94 -'SHOW'=95 -'TABLES'=96 -'COLUMNS'=97 -'COLUMN'=98 -'USE'=99 -'MODULE'=100 -'MODULES'=101 -'PARTITIONS'=102 -'FUNCTIONS'=103 -'DROP'=104 -'UNION'=105 -'EXCEPT'=106 -'SETMINUS'=107 -'INTERSECT'=108 -'TO'=109 -'TABLESAMPLE'=110 -'STRATIFY'=111 -'ALTER'=112 -'RENAME'=113 -'STRUCT'=114 -'COMMENT'=115 -'SET'=116 -'RESET'=117 -'DATA'=118 -'START'=119 -'TRANSACTION'=120 -'COMMIT'=121 -'ROLLBACK'=122 -'MACRO'=123 -'IGNORE'=124 -'BOTH'=125 -'LEADING'=126 -'TRAILING'=127 -'IF'=128 -'POSITION'=129 -'EXTRACT'=130 -'MINUS'=131 -'DIV'=132 -'PERCENTLIT'=133 -'BUCKET'=134 -'OUT'=135 -'OF'=136 -'SORT'=137 -'CLUSTER'=138 -'DISTRIBUTE'=139 -'OVERWRITE'=140 -'TRANSFORM'=141 -'REDUCE'=142 -'USING'=143 -'SERDE'=144 -'SERDEPROPERTIES'=145 -'RECORDREADER'=146 -'RECORDWRITER'=147 -'DELIMITED'=148 -'FIELDS'=149 -'TERMINATED'=150 -'COLLECTION'=151 -'ITEMS'=152 -'KEYS'=153 -'ESCAPED'=154 -'LINES'=155 -'SEPARATED'=156 -'FUNCTION'=157 -'EXTENDED'=158 -'REFRESH'=159 -'CLEAR'=160 -'CACHE'=161 -'UNCACHE'=162 -'LAZY'=163 -'FORMATTED'=164 -'GLOBAL'=165 -'TEMPORARY'=166 -'OPTIONS'=167 -'UNSET'=168 -'TBLPROPERTIES'=169 -'DBPROPERTIES'=170 -'BUCKETS'=171 -'SKEWED'=172 -'STORED'=173 -'DIRECTORIES'=174 -'LOCATION'=175 -'EXCHANGE'=176 -'ARCHIVE'=177 -'UNARCHIVE'=178 -'FILEFORMAT'=179 -'TOUCH'=180 -'COMPACT'=181 -'CONCATENATE'=182 -'CHANGE'=183 -'CASCADE'=184 -'CONSTRAINT'=185 -'RESTRICT'=186 -'CLUSTERED'=187 -'SORTED'=188 -'PURGE'=189 -'INPUTFORMAT'=190 -'OUTPUTFORMAT'=191 -'DATABASE'=192 -'DATABASES'=193 -'DFS'=194 -'TRUNCATE'=195 -'ANALYZE'=196 -'COMPUTE'=197 -'LIST'=198 -'STATISTICS'=199 -'PARTITIONED'=200 -'EXTERNAL'=201 -'DEFINED'=202 -'REVOKE'=203 -'GRANT'=204 -'LOCK'=205 -'UNLOCK'=206 -'MSCK'=207 -'REPAIR'=208 -'RECOVER'=209 -'EXPORT'=210 -'IMPORT'=211 -'LOAD'=212 -'UNLOAD'=213 -'ROLE'=214 -'ROLES'=215 -'COMPACTIONS'=216 -'PRINCIPALS'=217 -'TRANSACTIONS'=218 -'INDEX'=219 -'INDEXES'=220 -'LOCKS'=221 -'OPTION'=222 -'ANTI'=223 -'LOCAL'=224 -'INPATH'=225 -'WATERMARK'=226 -'UNNEST'=227 -'MATCH'=228 -'NEXT'=229 -'WITHIN'=230 -'WS'=231 -'SYSTEM'=232 -'INCLUDING'=233 -'EXCLUDING'=234 -'OVERWRITING'=235 -'CONSTRAINTS'=236 -'GENERATED'=237 -'WATERMARKS'=238 -'CATALOG'=239 -'LANGUAGE'=240 -'JAVA'=241 -'SCALA'=242 -'PYTHON'=243 -'JAR'=244 -'FILE'=245 -'PYTHON_FILES'=246 -'PYTHON_REQUIREMENTS'=247 -'PYTHON_DEPENDENCIES'=248 -'PYTHON_JAR'=249 -'PYTHON_ARCHIVES'=250 -'PYTHON_PARAMETER'=251 -'ENGINE'=252 -'CATALOGS'=253 -'VIEWS'=254 -'JARS'=255 -'PRIMARY'=256 -'UNIQUE'=257 -'KEY'=258 -'PERIOD'=259 -'SYSTEM_TIME'=260 -'ENFORCED'=261 -'METADATA'=262 -'VIRTUAL'=263 -'ZONE'=264 -'TUMBLE'=265 -'HOP'=266 -'CUMULATE'=267 -'DESCRIPTOR'=268 -'TIMECOL'=269 -'SIZE'=270 -'OFFSET'=271 -'STEP'=272 -'SLIDE'=273 -'SESSION'=274 -'MATCH_RECOGNIZE'=275 -'MEASURES'=276 -'PATTERN'=277 -'ONE'=278 -'PER'=279 -'SKIP'=280 -'PAST'=281 -'DEFINE'=282 -'STRING'=283 -'ARRAY'=284 -'MAP'=285 -'CHAR'=286 -'VARCHAR'=287 -'BINARY'=288 -'VARBINARY'=289 -'BYTES'=290 -'DECIMAL'=291 -'DEC'=292 -'NUMERIC'=293 -'TINYINT'=294 -'SMALLINT'=295 -'INT'=296 -'INTEGER'=297 -'BIGINT'=298 -'FLOAT'=299 -'DOUBLE'=300 -'DATE'=301 -'TIME'=302 -'TIMESTAMP'=303 -'TIMESTAMP_LTZ'=304 -'MULTISET'=305 -'BOOLEAN'=306 -'RAW'=307 -'ROW'=308 -'NULL'=309 -'DATETIME'=310 -'='=311 -'>'=312 -'<'=313 -'!'=314 -'~'=315 -'|'=316 -'&'=317 -'^'=318 -'.'=319 -'['=320 -']'=321 -'('=322 -')'=323 -'{'=324 -'}'=325 -','=326 -';'=327 -'@'=328 -'\''=329 -'"'=330 -'`'=331 -':'=332 -'*'=333 -'_'=334 -'-'=335 -'+'=336 -'%'=337 -'||'=338 -'--'=339 -'/'=340 -'?'=341 -'=>'=349 +KW_ADD=4 +KW_ADMIN=5 +KW_AFTER=6 +KW_ANALYZE=7 +KW_ASC=8 +KW_BEFORE=9 +KW_BYTES=10 +KW_CASCADE=11 +KW_CATALOG=12 +KW_CATALOGS=13 +KW_CENTURY=14 +KW_CHAIN=15 +KW_CHANGELOG_MODE=16 +KW_CHARACTERS=17 +KW_COMMENT=18 +KW_COMPACT=19 +KW_COLUMNS=20 +KW_CONSTRAINTS=21 +KW_CONSTRUCTOR=22 +KW_CUMULATE=23 +KW_DATA=24 +KW_DATABASE=25 +KW_DATABASES=26 +KW_DAYS=27 +KW_DECADE=28 +KW_DEFINED=29 +KW_DESC=30 +KW_DESCRIPTOR=31 +KW_DIV=32 +KW_ENCODING=33 +KW_ENFORCED=34 +KW_ENGINE=35 +KW_ERROR=36 +KW_ESTIMATED_COST=37 +KW_EXCEPTION=38 +KW_EXCLUDE=39 +KW_EXCLUDING=40 +KW_EXTENDED=41 +KW_FILE=42 +KW_FINAL=43 +KW_FIRST=44 +KW_FOLLOWING=45 +KW_FORMAT=46 +KW_FORTRAN=47 +KW_FOUND=48 +KW_FRAC_SECOND=49 +KW_FUNCTIONS=50 +KW_GENERAL=51 +KW_GENERATED=52 +KW_GO=53 +KW_GOTO=54 +KW_GRANTED=55 +KW_HOP=56 +KW_HOURS=57 +KW_IF=58 +KW_IGNORE=59 +KW_INCREMENT=60 +KW_INPUT=61 +KW_INVOKER=62 +KW_JAR=63 +KW_JARS=64 +KW_JAVA=65 +KW_JSON=66 +KW_JSON_EXECUTION_PLAN=67 +KW_KEY=68 +KW_KEY_MEMBER=69 +KW_KEY_TYPE=70 +KW_LABEL=71 +KW_LAST=72 +KW_LENGTH=73 +KW_LEVEL=74 +KW_LOAD=75 +KW_MAP=76 +KW_MICROSECOND=77 +KW_MILLENNIUM=78 +KW_MILLISECOND=79 +KW_MINUTES=80 +KW_MINVALUE=81 +KW_MODIFY=82 +KW_MODULES=83 +KW_MONTHS=84 +KW_NANOSECOND=85 +KW_NULLS=86 +KW_NUMBER=87 +KW_OPTION=88 +KW_OPTIONS=89 +KW_ORDERING=90 +KW_OUTPUT=91 +KW_OVERWRITE=92 +KW_OVERWRITING=93 +KW_PARTITIONED=94 +KW_PARTITIONS=95 +KW_PASSING=96 +KW_PAST=97 +KW_PATH=98 +KW_PLACING=99 +KW_PLAN=100 +KW_PRECEDING=101 +KW_PRESERVE=102 +KW_PRIOR=103 +KW_PRIVILEGES=104 +KW_PUBLIC=105 +KW_PYTHON=106 +KW_PYTHON_FILES=107 +KW_PYTHON_REQUIREMENTS=108 +KW_PYTHON_DEPENDENCIES=109 +KW_PYTHON_JAR=110 +KW_PYTHON_ARCHIVES=111 +KW_PYTHON_PARAMETER=112 +KW_QUARTER=113 +KW_RAW=114 +KW_READ=115 +KW_RELATIVE=116 +KW_REMOVE=117 +KW_RENAME=118 +KW_REPLACE=119 +KW_RESPECT=120 +KW_RESTART=121 +KW_RESTRICT=122 +KW_ROLE=123 +KW_ROW_COUNT=124 +KW_SCALA=125 +KW_SCALAR=126 +KW_SCALE=127 +KW_SCHEMA=128 +KW_SECONDS=129 +KW_SECTION=130 +KW_SECURITY=131 +KW_SELF=132 +KW_SERVER=133 +KW_SERVER_NAME=134 +KW_SESSION=135 +KW_SETS=136 +KW_SIMPLE=137 +KW_SIZE=138 +KW_SLIDE=139 +KW_SOURCE=140 +KW_SPACE=141 +KW_STATE=142 +KW_STATEMENT=143 +KW_STEP=144 +KW_STRING=145 +KW_STRUCTURE=146 +KW_STYLE=147 +KW_TABLES=148 +KW_TEMPORARY=149 +KW_TIMECOL=150 +KW_TIMESTAMP_LTZ=151 +KW_TIMESTAMPADD=152 +KW_TIMESTAMPDIFF=153 +KW_TRANSFORM=154 +KW_TUMBLE=155 +KW_TYPE=156 +KW_UNDER=157 +KW_UNLOAD=158 +KW_USAGE=159 +KW_USE=160 +KW_UTF16=161 +KW_UTF32=162 +KW_UTF8=163 +KW_VERSION=164 +KW_VIEW=165 +KW_VIEWS=166 +KW_VIRTUAL=167 +KW_WATERMARK=168 +KW_WATERMARKS=169 +KW_WEEK=170 +KW_WORK=171 +KW_WRAPPER=172 +KW_YEARS=173 +KW_ZONE=174 +KW_ABS=175 +KW_ALL=176 +ALLOW=177 +KW_ALTER=178 +KW_AND=179 +KW_ANY=180 +KW_ARE=181 +KW_ARRAY=182 +KW_AS=183 +KW_AT=184 +KW_AVG=185 +KW_BEGIN=186 +KW_BETWEEN=187 +KW_BIGINT=188 +KW_BINARY=189 +KW_BIT=190 +KW_BLOB=191 +KW_BOOLEAN=192 +KW_BOTH=193 +KW_BY=194 +KW_CALL=195 +KW_CALLED=196 +KW_CASCADED=197 +KW_CASE=198 +KW_CAST=199 +KW_CEIL=200 +KW_CHAR=201 +KW_CHARACTER=202 +KW_CHECK=203 +KW_CLOB=204 +KW_CLOSE=205 +KW_COALESCE=206 +KW_COLLATE=207 +KW_COLLECT=208 +KW_COLUMN=209 +KW_COMMIT=210 +KW_CONNECT=211 +KW_CONSTRAINT=212 +KW_CONTAINS=213 +KW_CONVERT=214 +KW_COUNT=215 +KW_CREATE=216 +KW_CROSS=217 +KW_CUBE=218 +KW_CURRENT=219 +KW_CURSOR=220 +KW_CYCLE=221 +KW_DATE=222 +KW_DATETIME=223 +KW_DAY=224 +KW_DEC=225 +KW_DECIMAL=226 +KW_DECLARE=227 +KW_DEFAULT=228 +KW_DEFINE=229 +KW_DELETE=230 +KW_DESCRIBE=231 +KW_DISTINCT=232 +KW_DOUBLE=233 +KW_DROP=234 +KW_EACH=235 +KW_ELSE=236 +KW_END=237 +KW_EQUALS=238 +KW_EXCEPT=239 +KW_EXECUTE=240 +KW_EXISTS=241 +KW_EXPLAIN=242 +KW_EXTERNAL=243 +KW_EXTRACT=244 +KW_FALSE=245 +KW_FLOAT=246 +KW_FOR=247 +KW_FROM=248 +KW_FULL=249 +KW_FUNCTION=250 +KW_GLOBAL=251 +KW_GRANT=252 +KW_GROUP=253 +KW_GROUPING=254 +KW_GROUPS=255 +KW_HAVING=256 +KW_HOUR=257 +KW_IMPORT=258 +KW_IN=259 +KW_INCLUDING=260 +KW_INNER=261 +KW_INOUT=262 +KW_INSERT=263 +KW_INT=264 +KW_INTEGER=265 +KW_INTERSECT=266 +KW_INTERVAL=267 +KW_INTO=268 +KW_IS=269 +KW_JOIN=270 +KW_LAG=271 +KW_LANGUAGE=272 +KW_LATERAL=273 +KW_LEADING=274 +KW_LEFT=275 +KW_LIKE=276 +KW_LIMIT=277 +KW_LOCAL=278 +KW_MATCH=279 +KW_MATCH_RECOGNIZE=280 +KW_MEASURES=281 +KW_MERGE=282 +KW_METADATA=283 +KW_MINUS=284 +KW_MINUTE=285 +KW_MODIFIES=286 +KW_MODULE=287 +KW_MONTH=288 +KW_MULTISET=289 +KW_NATURAL=290 +KW_NEXT=291 +KW_NO=292 +KW_NONE=293 +KW_NOT=294 +KW_NULL=295 +KW_NUMERIC=296 +KW_OF=297 +KW_OFFSET=298 +KW_ON=299 +KW_ONE=300 +KW_OR=301 +KW_ORDER=302 +KW_OUT=303 +KW_OUTER=304 +KW_OVER=305 +KW_OVERLAY=306 +KW_PARTITION=307 +KW_PATTERN=308 +KW_PER=309 +KW_PERCENT=310 +KW_PERIOD=311 +KW_POSITION=312 +KW_PRIMARY=313 +KW_RANGE=314 +KW_RANK=315 +KW_RESET=316 +KW_REVOKE=317 +KW_RIGHT=318 +KW_RLIKE=319 +KW_ROLLBACK=320 +KW_ROLLUP=321 +KW_ROW=322 +KW_ROWS=323 +KW_SECOND=324 +KW_SELECT=325 +KW_SET=326 +KW_SHOW=327 +KW_SKIP=328 +KW_SMALLINT=329 +KW_START=330 +KW_STATIC=331 +KW_SUBSTRING=332 +KW_SUM=333 +KW_SYSTEM=334 +KW_SYSTEM_TIME=335 +KW_SYSTEM_USER=336 +KW_TABLE=337 +KW_TABLESAMPLE=338 +KW_THEN=339 +KW_TIME=340 +KW_TIMESTAMP=341 +KW_TINYINT=342 +KW_TO=343 +KW_TRUE=344 +KW_TRUNCATE=345 +KW_UNION=346 +KW_UNIQUE=347 +KW_UNKNOWN=348 +KW_UNNEST=349 +KW_UPPER=350 +KW_UPSERT=351 +KW_USER=352 +KW_USING=353 +KW_VALUE=354 +KW_VALUES=355 +KW_VARBINARY=356 +KW_VARCHAR=357 +KW_WHEN=358 +KW_WHERE=359 +KW_WINDOW=360 +KW_WITH=361 +KW_WITHIN=362 +KW_WITHOUT=363 +KW_YEAR=364 +EQUAL_SYMBOL=365 +GREATER_SYMBOL=366 +LESS_SYMBOL=367 +EXCLAMATION_SYMBOL=368 +BIT_NOT_OP=369 +BIT_OR_OP=370 +BIT_AND_OP=371 +BIT_XOR_OP=372 +DOT=373 +LS_BRACKET=374 +RS_BRACKET=375 +LR_BRACKET=376 +RR_BRACKET=377 +LB_BRACKET=378 +RB_BRACKET=379 +COMMA=380 +SEMICOLON=381 +AT_SIGN=382 +SINGLE_QUOTE_SYMB=383 +DOUBLE_QUOTE_SYMB=384 +REVERSE_QUOTE_SYMB=385 +COLON_SYMB=386 +ASTERISK_SIGN=387 +UNDERLINE_SIGN=388 +HYPNEN_SIGN=389 +ADD_SIGN=390 +PENCENT_SIGN=391 +DOUBLE_VERTICAL_SIGN=392 +DOUBLE_HYPNEN_SIGN=393 +SLASH_SIGN=394 +QUESTION_MARK_SIGN=395 +DOUBLE_RIGHT_ARROW=396 +STRING_LITERAL=397 +DIG_LITERAL=398 +REAL_LITERAL=399 +BIT_STRING=400 +ID_LITERAL=401 +FILE_PATH=402 +'ADD'=4 +'ADMIN'=5 +'AFTER'=6 +'ANALYZE'=7 +'ASC'=8 +'BEFORE'=9 +'BYTES'=10 +'CASCADE'=11 +'CATALOG'=12 +'CATALOGS'=13 +'CENTURY'=14 +'CHAIN'=15 +'CHANGELOG_MODE'=16 +'CHARACTERS'=17 +'COMMENT'=18 +'COMPACT'=19 +'COLUMNS'=20 +'CONSTRAINTS'=21 +'CONSTRUCTOR'=22 +'CUMULATE'=23 +'DATA'=24 +'DATABASE'=25 +'DATABASES'=26 +'DAYS'=27 +'DECADE'=28 +'DEFINED'=29 +'DESC'=30 +'DESCRIPTOR'=31 +'DIV'=32 +'ENCODING'=33 +'ENFORCED'=34 +'ENGINE'=35 +'ERROR'=36 +'ESTIMATED_COST'=37 +'EXCEPTION'=38 +'EXCLUDE'=39 +'EXCLUDING'=40 +'EXTENDED'=41 +'FILE'=42 +'FINAL'=43 +'FIRST'=44 +'FOLLOWING'=45 +'FORMAT'=46 +'FORTRAN'=47 +'FOUND'=48 +'FRAC_SECOND'=49 +'FUNCTIONS'=50 +'GENERAL'=51 +'GENERATED'=52 +'GO'=53 +'GOTO'=54 +'GRANTED'=55 +'HOP'=56 +'HOURS'=57 +'IF'=58 +'IGNORE'=59 +'INCREMENT'=60 +'INPUT'=61 +'INVOKER'=62 +'JAR'=63 +'JARS'=64 +'JAVA'=65 +'JSON'=66 +'JSON_EXECUTION_PLAN'=67 +'KEY'=68 +'KEY_MEMBER'=69 +'KEY_TYPE'=70 +'LABEL'=71 +'LAST'=72 +'LENGTH'=73 +'LEVEL'=74 +'LOAD'=75 +'MAP'=76 +'MICROSECOND'=77 +'MILLENNIUM'=78 +'MILLISECOND'=79 +'MINUTES'=80 +'MINVALUE'=81 +'MODIFY'=82 +'MODULES'=83 +'MONTHS'=84 +'NANOSECOND'=85 +'NULLS'=86 +'NUMBER'=87 +'OPTION'=88 +'OPTIONS'=89 +'ORDERING'=90 +'OUTPUT'=91 +'OVERWRITE'=92 +'OVERWRITING'=93 +'PARTITIONED'=94 +'PARTITIONS'=95 +'PASSING'=96 +'PAST'=97 +'PATH'=98 +'PLACING'=99 +'PLAN'=100 +'PRECEDING'=101 +'PRESERVE'=102 +'PRIOR'=103 +'PRIVILEGES'=104 +'PUBLIC'=105 +'PYTHON'=106 +'PYTHON_FILES'=107 +'PYTHON_REQUIREMENTS'=108 +'PYTHON_DEPENDENCIES'=109 +'PYTHON_JAR'=110 +'PYTHON_ARCHIVES'=111 +'PYTHON_PARAMETER'=112 +'QUARTER'=113 +'RAW'=114 +'READ'=115 +'RELATIVE'=116 +'REMOVE'=117 +'RENAME'=118 +'REPLACE'=119 +'RESPECT'=120 +'RESTART'=121 +'RESTRICT'=122 +'ROLE'=123 +'ROW_COUNT'=124 +'SCALA'=125 +'SCALAR'=126 +'SCALE'=127 +'SCHEMA'=128 +'SECONDS'=129 +'SECTION'=130 +'SECURITY'=131 +'SELF'=132 +'SERVER'=133 +'SERVER_NAME'=134 +'SESSION'=135 +'SETS'=136 +'SIMPLE'=137 +'SIZE'=138 +'SLIDE'=139 +'SOURCE'=140 +'SPACE'=141 +'STATE'=142 +'STATEMENT'=143 +'STEP'=144 +'STRING'=145 +'STRUCTURE'=146 +'STYLE'=147 +'TABLES'=148 +'TEMPORARY'=149 +'TIMECOL'=150 +'TIMESTAMP_LTZ'=151 +'TIMESTAMPADD'=152 +'TIMESTAMPDIFF'=153 +'TRANSFORM'=154 +'TUMBLE'=155 +'TYPE'=156 +'UNDER'=157 +'UNLOAD'=158 +'USAGE'=159 +'USE'=160 +'UTF16'=161 +'UTF32'=162 +'UTF8'=163 +'VERSION'=164 +'VIEW'=165 +'VIEWS'=166 +'VIRTUAL'=167 +'WATERMARK'=168 +'WATERMARKS'=169 +'WEEK'=170 +'WORK'=171 +'WRAPPER'=172 +'YEARS'=173 +'ZONE'=174 +'ABS'=175 +'ALL'=176 +'ALLOW'=177 +'ALTER'=178 +'AND'=179 +'ANY'=180 +'ARE'=181 +'ARRAY'=182 +'AS'=183 +'AT'=184 +'AVG'=185 +'BEGIN'=186 +'BETWEEN'=187 +'BIGINT'=188 +'BINARY'=189 +'BIT'=190 +'BLOB'=191 +'BOOLEAN'=192 +'BOTH'=193 +'BY'=194 +'CALL'=195 +'CALLED'=196 +'CASCADED'=197 +'CASE'=198 +'CAST'=199 +'CEIL'=200 +'CHAR'=201 +'CHARACTER'=202 +'CHECK'=203 +'CLOB'=204 +'CLOSE'=205 +'COALESCE'=206 +'COLLATE'=207 +'COLLECT'=208 +'COLUMN'=209 +'COMMIT'=210 +'CONNECT'=211 +'CONSTRAINT'=212 +'CONTAINS'=213 +'CONVERT'=214 +'COUNT'=215 +'CREATE'=216 +'CROSS'=217 +'CUBE'=218 +'CURRENT'=219 +'CURSOR'=220 +'CYCLE'=221 +'DATE'=222 +'DATETIME'=223 +'DAY'=224 +'DEC'=225 +'DECIMAL'=226 +'DECLARE'=227 +'DEFAULT'=228 +'DEFINE'=229 +'DELETE'=230 +'DESCRIBE'=231 +'DISTINCT'=232 +'DOUBLE'=233 +'DROP'=234 +'EACH'=235 +'ELSE'=236 +'END'=237 +'EQUALS'=238 +'EXCEPT'=239 +'EXECUTE'=240 +'EXISTS'=241 +'EXPLAIN'=242 +'EXTERNAL'=243 +'EXTRACT'=244 +'FALSE'=245 +'FLOAT'=246 +'FOR'=247 +'FROM'=248 +'FULL'=249 +'FUNCTION'=250 +'GLOBAL'=251 +'GRANT'=252 +'GROUP'=253 +'GROUPING'=254 +'GROUPS'=255 +'HAVING'=256 +'HOUR'=257 +'IMPORT'=258 +'IN'=259 +'INCLUDING'=260 +'INNER'=261 +'INOUT'=262 +'INSERT'=263 +'INT'=264 +'INTEGER'=265 +'INTERSECT'=266 +'INTERVAL'=267 +'INTO'=268 +'IS'=269 +'JOIN'=270 +'LAG'=271 +'LANGUAGE'=272 +'LATERAL'=273 +'LEADING'=274 +'LEFT'=275 +'LIKE'=276 +'LIMIT'=277 +'LOCAL'=278 +'MATCH'=279 +'MATCH_RECOGNIZE'=280 +'MEASURES'=281 +'MERGE'=282 +'METADATA'=283 +'MINUS'=284 +'MINUTE'=285 +'MODIFIES'=286 +'MODULE'=287 +'MONTH'=288 +'MULTISET'=289 +'NATURAL'=290 +'NEXT'=291 +'NO'=292 +'NONE'=293 +'NOT'=294 +'NULL'=295 +'NUMERIC'=296 +'OF'=297 +'OFFSET'=298 +'ON'=299 +'ONE'=300 +'OR'=301 +'ORDER'=302 +'OUT'=303 +'OUTER'=304 +'OVER'=305 +'OVERLAY'=306 +'PARTITION'=307 +'PATTERN'=308 +'PER'=309 +'PERCENT'=310 +'PERIOD'=311 +'POSITION'=312 +'PRIMARY'=313 +'RANGE'=314 +'RANK'=315 +'RESET'=316 +'REVOKE'=317 +'RIGHT'=318 +'RLIKE'=319 +'ROLLBACK'=320 +'ROLLUP'=321 +'ROW'=322 +'ROWS'=323 +'SECOND'=324 +'SELECT'=325 +'SET'=326 +'SHOW'=327 +'SKIP'=328 +'SMALLINT'=329 +'START'=330 +'STATIC'=331 +'SUBSTRING'=332 +'SUM'=333 +'SYSTEM'=334 +'SYSTEM_TIME'=335 +'SYSTEM_USER'=336 +'TABLE'=337 +'TABLESAMPLE'=338 +'THEN'=339 +'TIME'=340 +'TIMESTAMP'=341 +'TINYINT'=342 +'TO'=343 +'TRUE'=344 +'TRUNCATE'=345 +'UNION'=346 +'UNIQUE'=347 +'UNKNOWN'=348 +'UNNEST'=349 +'UPPER'=350 +'UPSERT'=351 +'USER'=352 +'USING'=353 +'VALUE'=354 +'VALUES'=355 +'VARBINARY'=356 +'VARCHAR'=357 +'WHEN'=358 +'WHERE'=359 +'WINDOW'=360 +'WITH'=361 +'WITHIN'=362 +'WITHOUT'=363 +'YEAR'=364 +'='=365 +'>'=366 +'<'=367 +'!'=368 +'~'=369 +'|'=370 +'&'=371 +'^'=372 +'.'=373 +'['=374 +']'=375 +'('=376 +')'=377 +'{'=378 +'}'=379 +','=380 +';'=381 +'@'=382 +'\''=383 +'"'=384 +'`'=385 +':'=386 +'*'=387 +'_'=388 +'-'=389 +'+'=390 +'%'=391 +'||'=392 +'--'=393 +'/'=394 +'?'=395 +'=>'=396 diff --git a/src/lib/flinksql/FlinkSqlLexer.ts b/src/lib/flinksql/FlinkSqlLexer.ts index 7f2af18..3ac14ff 100644 --- a/src/lib/flinksql/FlinkSqlLexer.ts +++ b/src/lib/flinksql/FlinkSqlLexer.ts @@ -15,644 +15,777 @@ export default class FlinkSqlLexer extends Lexer { public static readonly SPACE = 1; public static readonly COMMENT_INPUT = 2; public static readonly LINE_COMMENT = 3; - public static readonly SELECT = 4; - public static readonly FROM = 5; - public static readonly ADD = 6; - public static readonly AS = 7; - public static readonly ALL = 8; - public static readonly ANY = 9; - public static readonly DISTINCT = 10; - public static readonly WHERE = 11; - public static readonly GROUP = 12; - public static readonly BY = 13; - public static readonly GROUPING = 14; - public static readonly SETS = 15; - public static readonly CUBE = 16; - public static readonly ROLLUP = 17; - public static readonly ORDER = 18; - public static readonly HAVING = 19; - public static readonly LIMIT = 20; - public static readonly AT = 21; - public static readonly OR = 22; - public static readonly AND = 23; - public static readonly IN = 24; - public static readonly NOT = 25; - public static readonly NO = 26; - public static readonly EXISTS = 27; - public static readonly BETWEEN = 28; - public static readonly LIKE = 29; - public static readonly RLIKE = 30; - public static readonly IS = 31; - public static readonly TRUE = 32; - public static readonly FALSE = 33; - public static readonly NULLS = 34; - public static readonly ASC = 35; - public static readonly DESC = 36; - public static readonly FOR = 37; - public static readonly INTERVAL = 38; - public static readonly CASE = 39; - public static readonly WHEN = 40; - public static readonly THEN = 41; - public static readonly ELSE = 42; - public static readonly BEGIN = 43; - public static readonly END = 44; - public static readonly JOIN = 45; - public static readonly CROSS = 46; - public static readonly OUTER = 47; - public static readonly INNER = 48; - public static readonly LEFT = 49; - public static readonly SEMI = 50; - public static readonly RIGHT = 51; - public static readonly FULL = 52; - public static readonly USER = 53; - public static readonly NATURAL = 54; - public static readonly ON = 55; - public static readonly PIVOT = 56; - public static readonly LATERAL = 57; - public static readonly WINDOW = 58; - public static readonly OVER = 59; - public static readonly PARTITION = 60; - public static readonly RANGE = 61; - public static readonly ROWS = 62; - public static readonly UNBOUNDED = 63; - public static readonly PRECEDING = 64; - public static readonly FOLLOWING = 65; - public static readonly CURRENT = 66; - public static readonly FIRST = 67; - public static readonly AFTER = 68; - public static readonly LAST = 69; - public static readonly WITH = 70; - public static readonly WITHOUT = 71; - public static readonly VALUES = 72; - public static readonly CREATE = 73; - public static readonly TABLE = 74; - public static readonly DIRECTORY = 75; - public static readonly VIEW = 76; - public static readonly REPLACE = 77; - public static readonly EXECUTE = 78; - public static readonly STATEMENT = 79; - public static readonly INSERT = 80; - public static readonly DELETE = 81; - public static readonly REMOVE = 82; - public static readonly INTO = 83; - public static readonly DESCRIBE = 84; - public static readonly EXPLAIN = 85; - public static readonly PLAN = 86; - public static readonly CHANGELOG_MODE = 87; - public static readonly JSON_EXECUTION_PLAN = 88; - public static readonly ESTIMATED_COST = 89; - public static readonly FORMAT = 90; - public static readonly LOGICAL = 91; - public static readonly CODEGEN = 92; - public static readonly COST = 93; - public static readonly CAST = 94; - public static readonly SHOW = 95; - public static readonly TABLES = 96; - public static readonly COLUMNS = 97; - public static readonly COLUMN = 98; - public static readonly USE = 99; - public static readonly MODULE = 100; - public static readonly MODULES = 101; - public static readonly PARTITIONS = 102; - public static readonly FUNCTIONS = 103; - public static readonly DROP = 104; - public static readonly UNION = 105; - public static readonly EXCEPT = 106; - public static readonly SETMINUS = 107; - public static readonly INTERSECT = 108; - public static readonly TO = 109; - public static readonly TABLESAMPLE = 110; - public static readonly STRATIFY = 111; - public static readonly ALTER = 112; - public static readonly RENAME = 113; - public static readonly STRUCT = 114; - public static readonly COMMENT = 115; - public static readonly SET = 116; - public static readonly RESET = 117; - public static readonly DATA = 118; - public static readonly START = 119; - public static readonly TRANSACTION = 120; - public static readonly COMMIT = 121; - public static readonly ROLLBACK = 122; - public static readonly MACRO = 123; - public static readonly IGNORE = 124; - public static readonly BOTH = 125; - public static readonly LEADING = 126; - public static readonly TRAILING = 127; - public static readonly IF = 128; - public static readonly POSITION = 129; - public static readonly EXTRACT = 130; - public static readonly MINUS = 131; - public static readonly DIV = 132; - public static readonly PERCENTLIT = 133; - public static readonly BUCKET = 134; - public static readonly OUT = 135; - public static readonly OF = 136; - public static readonly SORT = 137; - public static readonly CLUSTER = 138; - public static readonly DISTRIBUTE = 139; - public static readonly OVERWRITE = 140; - public static readonly TRANSFORM = 141; - public static readonly REDUCE = 142; - public static readonly USING = 143; - public static readonly SERDE = 144; - public static readonly SERDEPROPERTIES = 145; - public static readonly RECORDREADER = 146; - public static readonly RECORDWRITER = 147; - public static readonly DELIMITED = 148; - public static readonly FIELDS = 149; - public static readonly TERMINATED = 150; - public static readonly COLLECTION = 151; - public static readonly ITEMS = 152; - public static readonly KEYS = 153; - public static readonly ESCAPED = 154; - public static readonly LINES = 155; - public static readonly SEPARATED = 156; - public static readonly FUNCTION = 157; - public static readonly EXTENDED = 158; - public static readonly REFRESH = 159; - public static readonly CLEAR = 160; - public static readonly CACHE = 161; - public static readonly UNCACHE = 162; - public static readonly LAZY = 163; - public static readonly FORMATTED = 164; - public static readonly GLOBAL = 165; - public static readonly TEMPORARY = 166; - public static readonly OPTIONS = 167; - public static readonly UNSET = 168; - public static readonly TBLPROPERTIES = 169; - public static readonly DBPROPERTIES = 170; - public static readonly BUCKETS = 171; - public static readonly SKEWED = 172; - public static readonly STORED = 173; - public static readonly DIRECTORIES = 174; - public static readonly LOCATION = 175; - public static readonly EXCHANGE = 176; - public static readonly ARCHIVE = 177; - public static readonly UNARCHIVE = 178; - public static readonly FILEFORMAT = 179; - public static readonly TOUCH = 180; - public static readonly COMPACT = 181; - public static readonly CONCATENATE = 182; - public static readonly CHANGE = 183; - public static readonly CASCADE = 184; - public static readonly CONSTRAINT = 185; - public static readonly RESTRICT = 186; - public static readonly CLUSTERED = 187; - public static readonly SORTED = 188; - public static readonly PURGE = 189; - public static readonly INPUTFORMAT = 190; - public static readonly OUTPUTFORMAT = 191; - public static readonly DATABASE = 192; - public static readonly DATABASES = 193; - public static readonly DFS = 194; - public static readonly TRUNCATE = 195; - public static readonly ANALYZE = 196; - public static readonly COMPUTE = 197; - public static readonly LIST = 198; - public static readonly STATISTICS = 199; - public static readonly PARTITIONED = 200; - public static readonly EXTERNAL = 201; - public static readonly DEFINED = 202; - public static readonly REVOKE = 203; - public static readonly GRANT = 204; - public static readonly LOCK = 205; - public static readonly UNLOCK = 206; - public static readonly MSCK = 207; - public static readonly REPAIR = 208; - public static readonly RECOVER = 209; - public static readonly EXPORT = 210; - public static readonly IMPORT = 211; - public static readonly LOAD = 212; - public static readonly UNLOAD = 213; - public static readonly ROLE = 214; - public static readonly ROLES = 215; - public static readonly COMPACTIONS = 216; - public static readonly PRINCIPALS = 217; - public static readonly TRANSACTIONS = 218; - public static readonly INDEX = 219; - public static readonly INDEXES = 220; - public static readonly LOCKS = 221; - public static readonly OPTION = 222; - public static readonly ANTI = 223; - public static readonly LOCAL = 224; - public static readonly INPATH = 225; - public static readonly WATERMARK = 226; - public static readonly UNNEST = 227; - public static readonly MATCH = 228; - public static readonly NEXT = 229; - public static readonly WITHIN = 230; - public static readonly WS = 231; - public static readonly SYSTEM = 232; - public static readonly INCLUDING = 233; - public static readonly EXCLUDING = 234; - public static readonly OVERWRITING = 235; - public static readonly CONSTRAINTS = 236; - public static readonly GENERATED = 237; - public static readonly WATERMARKS = 238; - public static readonly CATALOG = 239; - public static readonly LANGUAGE = 240; - public static readonly JAVA = 241; - public static readonly SCALA = 242; - public static readonly PYTHON = 243; - public static readonly JAR = 244; - public static readonly FILE = 245; - public static readonly PYTHON_FILES = 246; - public static readonly PYTHON_REQUIREMENTS = 247; - public static readonly PYTHON_DEPENDENCIES = 248; - public static readonly PYTHON_JAR = 249; - public static readonly PYTHON_ARCHIVES = 250; - public static readonly PYTHON_PARAMETER = 251; - public static readonly ENGINE = 252; - public static readonly CATALOGS = 253; - public static readonly VIEWS = 254; - public static readonly JARS = 255; - public static readonly PRIMARY = 256; - public static readonly UNIQUE = 257; - public static readonly KEY = 258; - public static readonly PERIOD = 259; - public static readonly SYSTEM_TIME = 260; - public static readonly ENFORCED = 261; - public static readonly METADATA = 262; - public static readonly VIRTUAL = 263; - public static readonly ZONE = 264; - public static readonly TUMBLE = 265; - public static readonly HOP = 266; - public static readonly CUMULATE = 267; - public static readonly DESCRIPTOR = 268; - public static readonly TIMECOL = 269; - public static readonly SIZE = 270; - public static readonly OFFSET = 271; - public static readonly STEP = 272; - public static readonly SLIDE = 273; - public static readonly SESSION = 274; - public static readonly MATCH_RECOGNIZE = 275; - public static readonly MEASURES = 276; - public static readonly PATTERN = 277; - public static readonly ONE = 278; - public static readonly PER = 279; - public static readonly KW_SKIP = 280; - public static readonly PAST = 281; - public static readonly DEFINE = 282; - public static readonly STRING = 283; - public static readonly ARRAY = 284; - public static readonly MAP = 285; - public static readonly CHAR = 286; - public static readonly VARCHAR = 287; - public static readonly BINARY = 288; - public static readonly VARBINARY = 289; - public static readonly BYTES = 290; - public static readonly DECIMAL = 291; - public static readonly DEC = 292; - public static readonly NUMERIC = 293; - public static readonly TINYINT = 294; - public static readonly SMALLINT = 295; - public static readonly INT = 296; - public static readonly INTEGER = 297; - public static readonly BIGINT = 298; - public static readonly FLOAT = 299; - public static readonly DOUBLE = 300; - public static readonly DATE = 301; - public static readonly TIME = 302; - public static readonly TIMESTAMP = 303; - public static readonly TIMESTAMP_LTZ = 304; - public static readonly MULTISET = 305; - public static readonly BOOLEAN = 306; - public static readonly RAW = 307; - public static readonly ROW = 308; - public static readonly NULL = 309; - public static readonly DATETIME = 310; - public static readonly EQUAL_SYMBOL = 311; - public static readonly GREATER_SYMBOL = 312; - public static readonly LESS_SYMBOL = 313; - public static readonly EXCLAMATION_SYMBOL = 314; - public static readonly BIT_NOT_OP = 315; - public static readonly BIT_OR_OP = 316; - public static readonly BIT_AND_OP = 317; - public static readonly BIT_XOR_OP = 318; - public static readonly DOT = 319; - public static readonly LS_BRACKET = 320; - public static readonly RS_BRACKET = 321; - public static readonly LR_BRACKET = 322; - public static readonly RR_BRACKET = 323; - public static readonly LB_BRACKET = 324; - public static readonly RB_BRACKET = 325; - public static readonly COMMA = 326; - public static readonly SEMICOLON = 327; - public static readonly AT_SIGN = 328; - public static readonly SINGLE_QUOTE_SYMB = 329; - public static readonly DOUBLE_QUOTE_SYMB = 330; - public static readonly REVERSE_QUOTE_SYMB = 331; - public static readonly COLON_SYMB = 332; - public static readonly ASTERISK_SIGN = 333; - public static readonly UNDERLINE_SIGN = 334; - public static readonly HYPNEN_SIGN = 335; - public static readonly ADD_SIGN = 336; - public static readonly PENCENT_SIGN = 337; - public static readonly DOUBLE_VERTICAL_SIGN = 338; - public static readonly DOUBLE_HYPNEN_SIGN = 339; - public static readonly SLASH_SIGN = 340; - public static readonly QUESTION_MARK_SIGN = 341; - public static readonly DOT_ID = 342; - public static readonly STRING_LITERAL = 343; - public static readonly DIG_LITERAL = 344; - public static readonly REAL_LITERAL = 345; - public static readonly BIT_STRING = 346; - public static readonly ID_LITERAL = 347; - public static readonly FILE_PATH = 348; - public static readonly DOUBLE_ARROW = 349; + public static readonly KW_ADD = 4; + public static readonly KW_ADMIN = 5; + public static readonly KW_AFTER = 6; + public static readonly KW_ANALYZE = 7; + public static readonly KW_ASC = 8; + public static readonly KW_BEFORE = 9; + public static readonly KW_BYTES = 10; + public static readonly KW_CASCADE = 11; + public static readonly KW_CATALOG = 12; + public static readonly KW_CATALOGS = 13; + public static readonly KW_CENTURY = 14; + public static readonly KW_CHAIN = 15; + public static readonly KW_CHANGELOG_MODE = 16; + public static readonly KW_CHARACTERS = 17; + public static readonly KW_COMMENT = 18; + public static readonly KW_COMPACT = 19; + public static readonly KW_COLUMNS = 20; + public static readonly KW_CONSTRAINTS = 21; + public static readonly KW_CONSTRUCTOR = 22; + public static readonly KW_CUMULATE = 23; + public static readonly KW_DATA = 24; + public static readonly KW_DATABASE = 25; + public static readonly KW_DATABASES = 26; + public static readonly KW_DAYS = 27; + public static readonly KW_DECADE = 28; + public static readonly KW_DEFINED = 29; + public static readonly KW_DESC = 30; + public static readonly KW_DESCRIPTOR = 31; + public static readonly KW_DIV = 32; + public static readonly KW_ENCODING = 33; + public static readonly KW_ENFORCED = 34; + public static readonly KW_ENGINE = 35; + public static readonly KW_ERROR = 36; + public static readonly KW_ESTIMATED_COST = 37; + public static readonly KW_EXCEPTION = 38; + public static readonly KW_EXCLUDE = 39; + public static readonly KW_EXCLUDING = 40; + public static readonly KW_EXTENDED = 41; + public static readonly KW_FILE = 42; + public static readonly KW_FINAL = 43; + public static readonly KW_FIRST = 44; + public static readonly KW_FOLLOWING = 45; + public static readonly KW_FORMAT = 46; + public static readonly KW_FORTRAN = 47; + public static readonly KW_FOUND = 48; + public static readonly KW_FRAC_SECOND = 49; + public static readonly KW_FUNCTIONS = 50; + public static readonly KW_GENERAL = 51; + public static readonly KW_GENERATED = 52; + public static readonly KW_GO = 53; + public static readonly KW_GOTO = 54; + public static readonly KW_GRANTED = 55; + public static readonly KW_HOP = 56; + public static readonly KW_HOURS = 57; + public static readonly KW_IF = 58; + public static readonly KW_IGNORE = 59; + public static readonly KW_INCREMENT = 60; + public static readonly KW_INPUT = 61; + public static readonly KW_INVOKER = 62; + public static readonly KW_JAR = 63; + public static readonly KW_JARS = 64; + public static readonly KW_JAVA = 65; + public static readonly KW_JSON = 66; + public static readonly KW_JSON_EXECUTION_PLAN = 67; + public static readonly KW_KEY = 68; + public static readonly KW_KEY_MEMBER = 69; + public static readonly KW_KEY_TYPE = 70; + public static readonly KW_LABEL = 71; + public static readonly KW_LAST = 72; + public static readonly KW_LENGTH = 73; + public static readonly KW_LEVEL = 74; + public static readonly KW_LOAD = 75; + public static readonly KW_MAP = 76; + public static readonly KW_MICROSECOND = 77; + public static readonly KW_MILLENNIUM = 78; + public static readonly KW_MILLISECOND = 79; + public static readonly KW_MINUTES = 80; + public static readonly KW_MINVALUE = 81; + public static readonly KW_MODIFY = 82; + public static readonly KW_MODULES = 83; + public static readonly KW_MONTHS = 84; + public static readonly KW_NANOSECOND = 85; + public static readonly KW_NULLS = 86; + public static readonly KW_NUMBER = 87; + public static readonly KW_OPTION = 88; + public static readonly KW_OPTIONS = 89; + public static readonly KW_ORDERING = 90; + public static readonly KW_OUTPUT = 91; + public static readonly KW_OVERWRITE = 92; + public static readonly KW_OVERWRITING = 93; + public static readonly KW_PARTITIONED = 94; + public static readonly KW_PARTITIONS = 95; + public static readonly KW_PASSING = 96; + public static readonly KW_PAST = 97; + public static readonly KW_PATH = 98; + public static readonly KW_PLACING = 99; + public static readonly KW_PLAN = 100; + public static readonly KW_PRECEDING = 101; + public static readonly KW_PRESERVE = 102; + public static readonly KW_PRIOR = 103; + public static readonly KW_PRIVILEGES = 104; + public static readonly KW_PUBLIC = 105; + public static readonly KW_PYTHON = 106; + public static readonly KW_PYTHON_FILES = 107; + public static readonly KW_PYTHON_REQUIREMENTS = 108; + public static readonly KW_PYTHON_DEPENDENCIES = 109; + public static readonly KW_PYTHON_JAR = 110; + public static readonly KW_PYTHON_ARCHIVES = 111; + public static readonly KW_PYTHON_PARAMETER = 112; + public static readonly KW_QUARTER = 113; + public static readonly KW_RAW = 114; + public static readonly KW_READ = 115; + public static readonly KW_RELATIVE = 116; + public static readonly KW_REMOVE = 117; + public static readonly KW_RENAME = 118; + public static readonly KW_REPLACE = 119; + public static readonly KW_RESPECT = 120; + public static readonly KW_RESTART = 121; + public static readonly KW_RESTRICT = 122; + public static readonly KW_ROLE = 123; + public static readonly KW_ROW_COUNT = 124; + public static readonly KW_SCALA = 125; + public static readonly KW_SCALAR = 126; + public static readonly KW_SCALE = 127; + public static readonly KW_SCHEMA = 128; + public static readonly KW_SECONDS = 129; + public static readonly KW_SECTION = 130; + public static readonly KW_SECURITY = 131; + public static readonly KW_SELF = 132; + public static readonly KW_SERVER = 133; + public static readonly KW_SERVER_NAME = 134; + public static readonly KW_SESSION = 135; + public static readonly KW_SETS = 136; + public static readonly KW_SIMPLE = 137; + public static readonly KW_SIZE = 138; + public static readonly KW_SLIDE = 139; + public static readonly KW_SOURCE = 140; + public static readonly KW_SPACE = 141; + public static readonly KW_STATE = 142; + public static readonly KW_STATEMENT = 143; + public static readonly KW_STEP = 144; + public static readonly KW_STRING = 145; + public static readonly KW_STRUCTURE = 146; + public static readonly KW_STYLE = 147; + public static readonly KW_TABLES = 148; + public static readonly KW_TEMPORARY = 149; + public static readonly KW_TIMECOL = 150; + public static readonly KW_TIMESTAMP_LTZ = 151; + public static readonly KW_TIMESTAMPADD = 152; + public static readonly KW_TIMESTAMPDIFF = 153; + public static readonly KW_TRANSFORM = 154; + public static readonly KW_TUMBLE = 155; + public static readonly KW_TYPE = 156; + public static readonly KW_UNDER = 157; + public static readonly KW_UNLOAD = 158; + public static readonly KW_USAGE = 159; + public static readonly KW_USE = 160; + public static readonly KW_UTF16 = 161; + public static readonly KW_UTF32 = 162; + public static readonly KW_UTF8 = 163; + public static readonly KW_VERSION = 164; + public static readonly KW_VIEW = 165; + public static readonly KW_VIEWS = 166; + public static readonly KW_VIRTUAL = 167; + public static readonly KW_WATERMARK = 168; + public static readonly KW_WATERMARKS = 169; + public static readonly KW_WEEK = 170; + public static readonly KW_WORK = 171; + public static readonly KW_WRAPPER = 172; + public static readonly KW_YEARS = 173; + public static readonly KW_ZONE = 174; + public static readonly KW_ABS = 175; + public static readonly KW_ALL = 176; + public static readonly ALLOW = 177; + public static readonly KW_ALTER = 178; + public static readonly KW_AND = 179; + public static readonly KW_ANY = 180; + public static readonly KW_ARE = 181; + public static readonly KW_ARRAY = 182; + public static readonly KW_AS = 183; + public static readonly KW_AT = 184; + public static readonly KW_AVG = 185; + public static readonly KW_BEGIN = 186; + public static readonly KW_BETWEEN = 187; + public static readonly KW_BIGINT = 188; + public static readonly KW_BINARY = 189; + public static readonly KW_BIT = 190; + public static readonly KW_BLOB = 191; + public static readonly KW_BOOLEAN = 192; + public static readonly KW_BOTH = 193; + public static readonly KW_BY = 194; + public static readonly KW_CALL = 195; + public static readonly KW_CALLED = 196; + public static readonly KW_CASCADED = 197; + public static readonly KW_CASE = 198; + public static readonly KW_CAST = 199; + public static readonly KW_CEIL = 200; + public static readonly KW_CHAR = 201; + public static readonly KW_CHARACTER = 202; + public static readonly KW_CHECK = 203; + public static readonly KW_CLOB = 204; + public static readonly KW_CLOSE = 205; + public static readonly KW_COALESCE = 206; + public static readonly KW_COLLATE = 207; + public static readonly KW_COLLECT = 208; + public static readonly KW_COLUMN = 209; + public static readonly KW_COMMIT = 210; + public static readonly KW_CONNECT = 211; + public static readonly KW_CONSTRAINT = 212; + public static readonly KW_CONTAINS = 213; + public static readonly KW_CONVERT = 214; + public static readonly KW_COUNT = 215; + public static readonly KW_CREATE = 216; + public static readonly KW_CROSS = 217; + public static readonly KW_CUBE = 218; + public static readonly KW_CURRENT = 219; + public static readonly KW_CURSOR = 220; + public static readonly KW_CYCLE = 221; + public static readonly KW_DATE = 222; + public static readonly KW_DATETIME = 223; + public static readonly KW_DAY = 224; + public static readonly KW_DEC = 225; + public static readonly KW_DECIMAL = 226; + public static readonly KW_DECLARE = 227; + public static readonly KW_DEFAULT = 228; + public static readonly KW_DEFINE = 229; + public static readonly KW_DELETE = 230; + public static readonly KW_DESCRIBE = 231; + public static readonly KW_DISTINCT = 232; + public static readonly KW_DOUBLE = 233; + public static readonly KW_DROP = 234; + public static readonly KW_EACH = 235; + public static readonly KW_ELSE = 236; + public static readonly KW_END = 237; + public static readonly KW_EQUALS = 238; + public static readonly KW_EXCEPT = 239; + public static readonly KW_EXECUTE = 240; + public static readonly KW_EXISTS = 241; + public static readonly KW_EXPLAIN = 242; + public static readonly KW_EXTERNAL = 243; + public static readonly KW_EXTRACT = 244; + public static readonly KW_FALSE = 245; + public static readonly KW_FLOAT = 246; + public static readonly KW_FOR = 247; + public static readonly KW_FROM = 248; + public static readonly KW_FULL = 249; + public static readonly KW_FUNCTION = 250; + public static readonly KW_GLOBAL = 251; + public static readonly KW_GRANT = 252; + public static readonly KW_GROUP = 253; + public static readonly KW_GROUPING = 254; + public static readonly KW_GROUPS = 255; + public static readonly KW_HAVING = 256; + public static readonly KW_HOUR = 257; + public static readonly KW_IMPORT = 258; + public static readonly KW_IN = 259; + public static readonly KW_INCLUDING = 260; + public static readonly KW_INNER = 261; + public static readonly KW_INOUT = 262; + public static readonly KW_INSERT = 263; + public static readonly KW_INT = 264; + public static readonly KW_INTEGER = 265; + public static readonly KW_INTERSECT = 266; + public static readonly KW_INTERVAL = 267; + public static readonly KW_INTO = 268; + public static readonly KW_IS = 269; + public static readonly KW_JOIN = 270; + public static readonly KW_LAG = 271; + public static readonly KW_LANGUAGE = 272; + public static readonly KW_LATERAL = 273; + public static readonly KW_LEADING = 274; + public static readonly KW_LEFT = 275; + public static readonly KW_LIKE = 276; + public static readonly KW_LIMIT = 277; + public static readonly KW_LOCAL = 278; + public static readonly KW_MATCH = 279; + public static readonly KW_MATCH_RECOGNIZE = 280; + public static readonly KW_MEASURES = 281; + public static readonly KW_MERGE = 282; + public static readonly KW_METADATA = 283; + public static readonly KW_MINUS = 284; + public static readonly KW_MINUTE = 285; + public static readonly KW_MODIFIES = 286; + public static readonly KW_MODULE = 287; + public static readonly KW_MONTH = 288; + public static readonly KW_MULTISET = 289; + public static readonly KW_NATURAL = 290; + public static readonly KW_NEXT = 291; + public static readonly KW_NO = 292; + public static readonly KW_NONE = 293; + public static readonly KW_NOT = 294; + public static readonly KW_NULL = 295; + public static readonly KW_NUMERIC = 296; + public static readonly KW_OF = 297; + public static readonly KW_OFFSET = 298; + public static readonly KW_ON = 299; + public static readonly KW_ONE = 300; + public static readonly KW_OR = 301; + public static readonly KW_ORDER = 302; + public static readonly KW_OUT = 303; + public static readonly KW_OUTER = 304; + public static readonly KW_OVER = 305; + public static readonly KW_OVERLAY = 306; + public static readonly KW_PARTITION = 307; + public static readonly KW_PATTERN = 308; + public static readonly KW_PER = 309; + public static readonly KW_PERCENT = 310; + public static readonly KW_PERIOD = 311; + public static readonly KW_POSITION = 312; + public static readonly KW_PRIMARY = 313; + public static readonly KW_RANGE = 314; + public static readonly KW_RANK = 315; + public static readonly KW_RESET = 316; + public static readonly KW_REVOKE = 317; + public static readonly KW_RIGHT = 318; + public static readonly KW_RLIKE = 319; + public static readonly KW_ROLLBACK = 320; + public static readonly KW_ROLLUP = 321; + public static readonly KW_ROW = 322; + public static readonly KW_ROWS = 323; + public static readonly KW_SECOND = 324; + public static readonly KW_SELECT = 325; + public static readonly KW_SET = 326; + public static readonly KW_SHOW = 327; + public static readonly KW_SKIP = 328; + public static readonly KW_SMALLINT = 329; + public static readonly KW_START = 330; + public static readonly KW_STATIC = 331; + public static readonly KW_SUBSTRING = 332; + public static readonly KW_SUM = 333; + public static readonly KW_SYSTEM = 334; + public static readonly KW_SYSTEM_TIME = 335; + public static readonly KW_SYSTEM_USER = 336; + public static readonly KW_TABLE = 337; + public static readonly KW_TABLESAMPLE = 338; + public static readonly KW_THEN = 339; + public static readonly KW_TIME = 340; + public static readonly KW_TIMESTAMP = 341; + public static readonly KW_TINYINT = 342; + public static readonly KW_TO = 343; + public static readonly KW_TRUE = 344; + public static readonly KW_TRUNCATE = 345; + public static readonly KW_UNION = 346; + public static readonly KW_UNIQUE = 347; + public static readonly KW_UNKNOWN = 348; + public static readonly KW_UNNEST = 349; + public static readonly KW_UPPER = 350; + public static readonly KW_UPSERT = 351; + public static readonly KW_USER = 352; + public static readonly KW_USING = 353; + public static readonly KW_VALUE = 354; + public static readonly KW_VALUES = 355; + public static readonly KW_VARBINARY = 356; + public static readonly KW_VARCHAR = 357; + public static readonly KW_WHEN = 358; + public static readonly KW_WHERE = 359; + public static readonly KW_WINDOW = 360; + public static readonly KW_WITH = 361; + public static readonly KW_WITHIN = 362; + public static readonly KW_WITHOUT = 363; + public static readonly KW_YEAR = 364; + public static readonly EQUAL_SYMBOL = 365; + public static readonly GREATER_SYMBOL = 366; + public static readonly LESS_SYMBOL = 367; + public static readonly EXCLAMATION_SYMBOL = 368; + public static readonly BIT_NOT_OP = 369; + public static readonly BIT_OR_OP = 370; + public static readonly BIT_AND_OP = 371; + public static readonly BIT_XOR_OP = 372; + public static readonly DOT = 373; + public static readonly LS_BRACKET = 374; + public static readonly RS_BRACKET = 375; + public static readonly LR_BRACKET = 376; + public static readonly RR_BRACKET = 377; + public static readonly LB_BRACKET = 378; + public static readonly RB_BRACKET = 379; + public static readonly COMMA = 380; + public static readonly SEMICOLON = 381; + public static readonly AT_SIGN = 382; + public static readonly SINGLE_QUOTE_SYMB = 383; + public static readonly DOUBLE_QUOTE_SYMB = 384; + public static readonly REVERSE_QUOTE_SYMB = 385; + public static readonly COLON_SYMB = 386; + public static readonly ASTERISK_SIGN = 387; + public static readonly UNDERLINE_SIGN = 388; + public static readonly HYPNEN_SIGN = 389; + public static readonly ADD_SIGN = 390; + public static readonly PENCENT_SIGN = 391; + public static readonly DOUBLE_VERTICAL_SIGN = 392; + public static readonly DOUBLE_HYPNEN_SIGN = 393; + public static readonly SLASH_SIGN = 394; + public static readonly QUESTION_MARK_SIGN = 395; + public static readonly DOUBLE_RIGHT_ARROW = 396; + public static readonly STRING_LITERAL = 397; + public static readonly DIG_LITERAL = 398; + public static readonly REAL_LITERAL = 399; + public static readonly BIT_STRING = 400; + public static readonly ID_LITERAL = 401; + public static readonly FILE_PATH = 402; public static readonly EOF = Token.EOF; public static readonly channelNames: string[] = [ "DEFAULT_TOKEN_CHANNEL", "HIDDEN" ]; public static readonly literalNames: string[] = [ null, null, null, null, - "'SELECT'", "'FROM'", - "'ADD'", "'AS'", "'ALL'", - "'ANY'", "'DISTINCT'", - "'WHERE'", "'GROUP'", - "'BY'", "'GROUPING'", - "'SETS'", "'CUBE'", "'ROLLUP'", - "'ORDER'", "'HAVING'", - "'LIMIT'", "'AT'", "'OR'", - "'AND'", "'IN'", "'NOT'", - "'NO'", "'EXISTS'", "'BETWEEN'", - "'LIKE'", "'RLIKE'", - "'IS'", "'TRUE'", "'FALSE'", - "'NULLS'", "'ASC'", "'DESC'", - "'FOR'", "'INTERVAL'", - "'CASE'", "'WHEN'", "'THEN'", - "'ELSE'", "'BEGIN'", - "'END'", "'JOIN'", "'CROSS'", - "'OUTER'", "'INNER'", - "'LEFT'", "'SEMI'", "'RIGHT'", - "'FULL'", "'USER'", "'NATURAL'", - "'ON'", "'PIVOT'", "'LATERAL'", - "'WINDOW'", "'OVER'", - "'PARTITION'", "'RANGE'", - "'ROWS'", "'UNBOUNDED'", - "'PRECEDING'", "'FOLLOWING'", - "'CURRENT'", "'FIRST'", - "'AFTER'", "'LAST'", - "'WITH'", "'WITHOUT'", - "'VALUES'", "'CREATE'", - "'TABLE'", "'DIRECTORY'", - "'VIEW'", "'REPLACE'", - "'EXECUTE'", "'STATEMENT'", - "'INSERT'", "'DELETE'", - "'REMOVE'", "'INTO'", - "'DESCRIBE'", "'EXPLAIN'", - "'PLAN'", "'CHANGELOG_MODE'", - "'JSON_EXECUTION_PLAN'", - "'ESTIMATED_COST'", "'FORMAT'", - "'LOGICAL'", "'CODEGEN'", - "'COST'", "'CAST'", "'SHOW'", - "'TABLES'", "'COLUMNS'", - "'COLUMN'", "'USE'", - "'MODULE'", "'MODULES'", - "'PARTITIONS'", "'FUNCTIONS'", - "'DROP'", "'UNION'", - "'EXCEPT'", "'SETMINUS'", - "'INTERSECT'", "'TO'", - "'TABLESAMPLE'", "'STRATIFY'", - "'ALTER'", "'RENAME'", - "'STRUCT'", "'COMMENT'", - "'SET'", "'RESET'", "'DATA'", - "'START'", "'TRANSACTION'", - "'COMMIT'", "'ROLLBACK'", - "'MACRO'", "'IGNORE'", - "'BOTH'", "'LEADING'", - "'TRAILING'", "'IF'", - "'POSITION'", "'EXTRACT'", - "'MINUS'", "'DIV'", "'PERCENTLIT'", - "'BUCKET'", "'OUT'", - "'OF'", "'SORT'", "'CLUSTER'", - "'DISTRIBUTE'", "'OVERWRITE'", - "'TRANSFORM'", "'REDUCE'", - "'USING'", "'SERDE'", - "'SERDEPROPERTIES'", - "'RECORDREADER'", "'RECORDWRITER'", - "'DELIMITED'", "'FIELDS'", - "'TERMINATED'", "'COLLECTION'", - "'ITEMS'", "'KEYS'", - "'ESCAPED'", "'LINES'", - "'SEPARATED'", "'FUNCTION'", - "'EXTENDED'", "'REFRESH'", - "'CLEAR'", "'CACHE'", - "'UNCACHE'", "'LAZY'", - "'FORMATTED'", "'GLOBAL'", - "'TEMPORARY'", "'OPTIONS'", - "'UNSET'", "'TBLPROPERTIES'", - "'DBPROPERTIES'", "'BUCKETS'", - "'SKEWED'", "'STORED'", - "'DIRECTORIES'", "'LOCATION'", - "'EXCHANGE'", "'ARCHIVE'", - "'UNARCHIVE'", "'FILEFORMAT'", - "'TOUCH'", "'COMPACT'", - "'CONCATENATE'", "'CHANGE'", - "'CASCADE'", "'CONSTRAINT'", - "'RESTRICT'", "'CLUSTERED'", - "'SORTED'", "'PURGE'", - "'INPUTFORMAT'", "'OUTPUTFORMAT'", + "'ADD'", "'ADMIN'", "'AFTER'", + "'ANALYZE'", "'ASC'", + "'BEFORE'", "'BYTES'", + "'CASCADE'", "'CATALOG'", + "'CATALOGS'", "'CENTURY'", + "'CHAIN'", "'CHANGELOG_MODE'", + "'CHARACTERS'", "'COMMENT'", + "'COMPACT'", "'COLUMNS'", + "'CONSTRAINTS'", "'CONSTRUCTOR'", + "'CUMULATE'", "'DATA'", "'DATABASE'", "'DATABASES'", - "'DFS'", "'TRUNCATE'", - "'ANALYZE'", "'COMPUTE'", - "'LIST'", "'STATISTICS'", - "'PARTITIONED'", "'EXTERNAL'", - "'DEFINED'", "'REVOKE'", - "'GRANT'", "'LOCK'", - "'UNLOCK'", "'MSCK'", - "'REPAIR'", "'RECOVER'", - "'EXPORT'", "'IMPORT'", - "'LOAD'", "'UNLOAD'", - "'ROLE'", "'ROLES'", - "'COMPACTIONS'", "'PRINCIPALS'", - "'TRANSACTIONS'", "'INDEX'", - "'INDEXES'", "'LOCKS'", - "'OPTION'", "'ANTI'", - "'LOCAL'", "'INPATH'", - "'WATERMARK'", "'UNNEST'", - "'MATCH'", "'NEXT'", - "'WITHIN'", "'WS'", "'SYSTEM'", - "'INCLUDING'", "'EXCLUDING'", - "'OVERWRITING'", "'CONSTRAINTS'", - "'GENERATED'", "'WATERMARKS'", - "'CATALOG'", "'LANGUAGE'", - "'JAVA'", "'SCALA'", - "'PYTHON'", "'JAR'", - "'FILE'", "'PYTHON_FILES'", + "'DAYS'", "'DECADE'", + "'DEFINED'", "'DESC'", + "'DESCRIPTOR'", "'DIV'", + "'ENCODING'", "'ENFORCED'", + "'ENGINE'", "'ERROR'", + "'ESTIMATED_COST'", "'EXCEPTION'", + "'EXCLUDE'", "'EXCLUDING'", + "'EXTENDED'", "'FILE'", + "'FINAL'", "'FIRST'", + "'FOLLOWING'", "'FORMAT'", + "'FORTRAN'", "'FOUND'", + "'FRAC_SECOND'", "'FUNCTIONS'", + "'GENERAL'", "'GENERATED'", + "'GO'", "'GOTO'", "'GRANTED'", + "'HOP'", "'HOURS'", "'IF'", + "'IGNORE'", "'INCREMENT'", + "'INPUT'", "'INVOKER'", + "'JAR'", "'JARS'", "'JAVA'", + "'JSON'", "'JSON_EXECUTION_PLAN'", + "'KEY'", "'KEY_MEMBER'", + "'KEY_TYPE'", "'LABEL'", + "'LAST'", "'LENGTH'", + "'LEVEL'", "'LOAD'", + "'MAP'", "'MICROSECOND'", + "'MILLENNIUM'", "'MILLISECOND'", + "'MINUTES'", "'MINVALUE'", + "'MODIFY'", "'MODULES'", + "'MONTHS'", "'NANOSECOND'", + "'NULLS'", "'NUMBER'", + "'OPTION'", "'OPTIONS'", + "'ORDERING'", "'OUTPUT'", + "'OVERWRITE'", "'OVERWRITING'", + "'PARTITIONED'", "'PARTITIONS'", + "'PASSING'", "'PAST'", + "'PATH'", "'PLACING'", + "'PLAN'", "'PRECEDING'", + "'PRESERVE'", "'PRIOR'", + "'PRIVILEGES'", "'PUBLIC'", + "'PYTHON'", "'PYTHON_FILES'", "'PYTHON_REQUIREMENTS'", "'PYTHON_DEPENDENCIES'", "'PYTHON_JAR'", "'PYTHON_ARCHIVES'", "'PYTHON_PARAMETER'", - "'ENGINE'", "'CATALOGS'", - "'VIEWS'", "'JARS'", - "'PRIMARY'", "'UNIQUE'", - "'KEY'", "'PERIOD'", - "'SYSTEM_TIME'", "'ENFORCED'", - "'METADATA'", "'VIRTUAL'", - "'ZONE'", "'TUMBLE'", - "'HOP'", "'CUMULATE'", - "'DESCRIPTOR'", "'TIMECOL'", - "'SIZE'", "'OFFSET'", - "'STEP'", "'SLIDE'", - "'SESSION'", "'MATCH_RECOGNIZE'", - "'MEASURES'", "'PATTERN'", - "'ONE'", "'PER'", "'SKIP'", - "'PAST'", "'DEFINE'", - "'STRING'", "'ARRAY'", - "'MAP'", "'CHAR'", "'VARCHAR'", - "'BINARY'", "'VARBINARY'", - "'BYTES'", "'DECIMAL'", - "'DEC'", "'NUMERIC'", - "'TINYINT'", "'SMALLINT'", - "'INT'", "'INTEGER'", - "'BIGINT'", "'FLOAT'", - "'DOUBLE'", "'DATE'", + "'QUARTER'", "'RAW'", + "'READ'", "'RELATIVE'", + "'REMOVE'", "'RENAME'", + "'REPLACE'", "'RESPECT'", + "'RESTART'", "'RESTRICT'", + "'ROLE'", "'ROW_COUNT'", + "'SCALA'", "'SCALAR'", + "'SCALE'", "'SCHEMA'", + "'SECONDS'", "'SECTION'", + "'SECURITY'", "'SELF'", + "'SERVER'", "'SERVER_NAME'", + "'SESSION'", "'SETS'", + "'SIMPLE'", "'SIZE'", + "'SLIDE'", "'SOURCE'", + "'SPACE'", "'STATE'", + "'STATEMENT'", "'STEP'", + "'STRING'", "'STRUCTURE'", + "'STYLE'", "'TABLES'", + "'TEMPORARY'", "'TIMECOL'", + "'TIMESTAMP_LTZ'", "'TIMESTAMPADD'", + "'TIMESTAMPDIFF'", "'TRANSFORM'", + "'TUMBLE'", "'TYPE'", + "'UNDER'", "'UNLOAD'", + "'USAGE'", "'USE'", "'UTF16'", + "'UTF32'", "'UTF8'", + "'VERSION'", "'VIEW'", + "'VIEWS'", "'VIRTUAL'", + "'WATERMARK'", "'WATERMARKS'", + "'WEEK'", "'WORK'", "'WRAPPER'", + "'YEARS'", "'ZONE'", + "'ABS'", "'ALL'", "'ALLOW'", + "'ALTER'", "'AND'", "'ANY'", + "'ARE'", "'ARRAY'", "'AS'", + "'AT'", "'AVG'", "'BEGIN'", + "'BETWEEN'", "'BIGINT'", + "'BINARY'", "'BIT'", + "'BLOB'", "'BOOLEAN'", + "'BOTH'", "'BY'", "'CALL'", + "'CALLED'", "'CASCADED'", + "'CASE'", "'CAST'", "'CEIL'", + "'CHAR'", "'CHARACTER'", + "'CHECK'", "'CLOB'", + "'CLOSE'", "'COALESCE'", + "'COLLATE'", "'COLLECT'", + "'COLUMN'", "'COMMIT'", + "'CONNECT'", "'CONSTRAINT'", + "'CONTAINS'", "'CONVERT'", + "'COUNT'", "'CREATE'", + "'CROSS'", "'CUBE'", + "'CURRENT'", "'CURSOR'", + "'CYCLE'", "'DATE'", + "'DATETIME'", "'DAY'", + "'DEC'", "'DECIMAL'", + "'DECLARE'", "'DEFAULT'", + "'DEFINE'", "'DELETE'", + "'DESCRIBE'", "'DISTINCT'", + "'DOUBLE'", "'DROP'", + "'EACH'", "'ELSE'", "'END'", + "'EQUALS'", "'EXCEPT'", + "'EXECUTE'", "'EXISTS'", + "'EXPLAIN'", "'EXTERNAL'", + "'EXTRACT'", "'FALSE'", + "'FLOAT'", "'FOR'", "'FROM'", + "'FULL'", "'FUNCTION'", + "'GLOBAL'", "'GRANT'", + "'GROUP'", "'GROUPING'", + "'GROUPS'", "'HAVING'", + "'HOUR'", "'IMPORT'", + "'IN'", "'INCLUDING'", + "'INNER'", "'INOUT'", + "'INSERT'", "'INT'", + "'INTEGER'", "'INTERSECT'", + "'INTERVAL'", "'INTO'", + "'IS'", "'JOIN'", "'LAG'", + "'LANGUAGE'", "'LATERAL'", + "'LEADING'", "'LEFT'", + "'LIKE'", "'LIMIT'", + "'LOCAL'", "'MATCH'", + "'MATCH_RECOGNIZE'", + "'MEASURES'", "'MERGE'", + "'METADATA'", "'MINUS'", + "'MINUTE'", "'MODIFIES'", + "'MODULE'", "'MONTH'", + "'MULTISET'", "'NATURAL'", + "'NEXT'", "'NO'", "'NONE'", + "'NOT'", "'NULL'", "'NUMERIC'", + "'OF'", "'OFFSET'", "'ON'", + "'ONE'", "'OR'", "'ORDER'", + "'OUT'", "'OUTER'", "'OVER'", + "'OVERLAY'", "'PARTITION'", + "'PATTERN'", "'PER'", + "'PERCENT'", "'PERIOD'", + "'POSITION'", "'PRIMARY'", + "'RANGE'", "'RANK'", + "'RESET'", "'REVOKE'", + "'RIGHT'", "'RLIKE'", + "'ROLLBACK'", "'ROLLUP'", + "'ROW'", "'ROWS'", "'SECOND'", + "'SELECT'", "'SET'", + "'SHOW'", "'SKIP'", "'SMALLINT'", + "'START'", "'STATIC'", + "'SUBSTRING'", "'SUM'", + "'SYSTEM'", "'SYSTEM_TIME'", + "'SYSTEM_USER'", "'TABLE'", + "'TABLESAMPLE'", "'THEN'", "'TIME'", "'TIMESTAMP'", - "'TIMESTAMP_LTZ'", "'MULTISET'", - "'BOOLEAN'", "'RAW'", - "'ROW'", "'NULL'", "'DATETIME'", - "'='", "'>'", "'<'", - "'!'", "'~'", "'|'", - "'&'", "'^'", "'.'", - "'['", "']'", "'('", - "')'", "'{'", "'}'", - "','", "';'", "'@'", - "'''", "'\"'", "'`'", - "':'", "'*'", "'_'", - "'-'", "'+'", "'%'", - "'||'", "'--'", "'/'", - "'?'", null, null, null, - null, null, null, null, - "'=>'" ]; + "'TINYINT'", "'TO'", + "'TRUE'", "'TRUNCATE'", + "'UNION'", "'UNIQUE'", + "'UNKNOWN'", "'UNNEST'", + "'UPPER'", "'UPSERT'", + "'USER'", "'USING'", + "'VALUE'", "'VALUES'", + "'VARBINARY'", "'VARCHAR'", + "'WHEN'", "'WHERE'", + "'WINDOW'", "'WITH'", + "'WITHIN'", "'WITHOUT'", + "'YEAR'", "'='", "'>'", + "'<'", "'!'", "'~'", + "'|'", "'&'", "'^'", + "'.'", "'['", "']'", + "'('", "')'", "'{'", + "'}'", "','", "';'", + "'@'", "'''", "'\"'", + "'`'", "':'", "'*'", + "'_'", "'-'", "'+'", + "'%'", "'||'", "'--'", + "'/'", "'?'", "'=>'" ]; public static readonly symbolicNames: string[] = [ null, "SPACE", "COMMENT_INPUT", - "LINE_COMMENT", "SELECT", - "FROM", "ADD", "AS", - "ALL", "ANY", "DISTINCT", - "WHERE", "GROUP", "BY", - "GROUPING", "SETS", - "CUBE", "ROLLUP", "ORDER", - "HAVING", "LIMIT", "AT", - "OR", "AND", "IN", "NOT", - "NO", "EXISTS", "BETWEEN", - "LIKE", "RLIKE", "IS", - "TRUE", "FALSE", "NULLS", - "ASC", "DESC", "FOR", - "INTERVAL", "CASE", - "WHEN", "THEN", "ELSE", - "BEGIN", "END", "JOIN", - "CROSS", "OUTER", "INNER", - "LEFT", "SEMI", "RIGHT", - "FULL", "USER", "NATURAL", - "ON", "PIVOT", "LATERAL", - "WINDOW", "OVER", "PARTITION", - "RANGE", "ROWS", "UNBOUNDED", - "PRECEDING", "FOLLOWING", - "CURRENT", "FIRST", - "AFTER", "LAST", "WITH", - "WITHOUT", "VALUES", - "CREATE", "TABLE", "DIRECTORY", - "VIEW", "REPLACE", "EXECUTE", - "STATEMENT", "INSERT", - "DELETE", "REMOVE", - "INTO", "DESCRIBE", - "EXPLAIN", "PLAN", "CHANGELOG_MODE", - "JSON_EXECUTION_PLAN", - "ESTIMATED_COST", "FORMAT", - "LOGICAL", "CODEGEN", - "COST", "CAST", "SHOW", - "TABLES", "COLUMNS", - "COLUMN", "USE", "MODULE", - "MODULES", "PARTITIONS", - "FUNCTIONS", "DROP", - "UNION", "EXCEPT", "SETMINUS", - "INTERSECT", "TO", "TABLESAMPLE", - "STRATIFY", "ALTER", - "RENAME", "STRUCT", - "COMMENT", "SET", "RESET", - "DATA", "START", "TRANSACTION", - "COMMIT", "ROLLBACK", - "MACRO", "IGNORE", "BOTH", - "LEADING", "TRAILING", - "IF", "POSITION", "EXTRACT", - "MINUS", "DIV", "PERCENTLIT", - "BUCKET", "OUT", "OF", - "SORT", "CLUSTER", "DISTRIBUTE", - "OVERWRITE", "TRANSFORM", - "REDUCE", "USING", "SERDE", - "SERDEPROPERTIES", "RECORDREADER", - "RECORDWRITER", "DELIMITED", - "FIELDS", "TERMINATED", - "COLLECTION", "ITEMS", - "KEYS", "ESCAPED", "LINES", - "SEPARATED", "FUNCTION", - "EXTENDED", "REFRESH", - "CLEAR", "CACHE", "UNCACHE", - "LAZY", "FORMATTED", - "GLOBAL", "TEMPORARY", - "OPTIONS", "UNSET", - "TBLPROPERTIES", "DBPROPERTIES", - "BUCKETS", "SKEWED", - "STORED", "DIRECTORIES", - "LOCATION", "EXCHANGE", - "ARCHIVE", "UNARCHIVE", - "FILEFORMAT", "TOUCH", - "COMPACT", "CONCATENATE", - "CHANGE", "CASCADE", - "CONSTRAINT", "RESTRICT", - "CLUSTERED", "SORTED", - "PURGE", "INPUTFORMAT", - "OUTPUTFORMAT", "DATABASE", - "DATABASES", "DFS", - "TRUNCATE", "ANALYZE", - "COMPUTE", "LIST", "STATISTICS", - "PARTITIONED", "EXTERNAL", - "DEFINED", "REVOKE", - "GRANT", "LOCK", "UNLOCK", - "MSCK", "REPAIR", "RECOVER", - "EXPORT", "IMPORT", - "LOAD", "UNLOAD", "ROLE", - "ROLES", "COMPACTIONS", - "PRINCIPALS", "TRANSACTIONS", - "INDEX", "INDEXES", - "LOCKS", "OPTION", "ANTI", - "LOCAL", "INPATH", "WATERMARK", - "UNNEST", "MATCH", "NEXT", - "WITHIN", "WS", "SYSTEM", - "INCLUDING", "EXCLUDING", - "OVERWRITING", "CONSTRAINTS", - "GENERATED", "WATERMARKS", - "CATALOG", "LANGUAGE", - "JAVA", "SCALA", "PYTHON", - "JAR", "FILE", "PYTHON_FILES", - "PYTHON_REQUIREMENTS", - "PYTHON_DEPENDENCIES", - "PYTHON_JAR", "PYTHON_ARCHIVES", - "PYTHON_PARAMETER", - "ENGINE", "CATALOGS", - "VIEWS", "JARS", "PRIMARY", - "UNIQUE", "KEY", "PERIOD", - "SYSTEM_TIME", "ENFORCED", - "METADATA", "VIRTUAL", - "ZONE", "TUMBLE", "HOP", - "CUMULATE", "DESCRIPTOR", - "TIMECOL", "SIZE", "OFFSET", - "STEP", "SLIDE", "SESSION", - "MATCH_RECOGNIZE", "MEASURES", - "PATTERN", "ONE", "PER", - "KW_SKIP", "PAST", "DEFINE", - "STRING", "ARRAY", "MAP", - "CHAR", "VARCHAR", "BINARY", - "VARBINARY", "BYTES", - "DECIMAL", "DEC", "NUMERIC", - "TINYINT", "SMALLINT", - "INT", "INTEGER", "BIGINT", - "FLOAT", "DOUBLE", "DATE", - "TIME", "TIMESTAMP", - "TIMESTAMP_LTZ", "MULTISET", - "BOOLEAN", "RAW", "ROW", - "NULL", "DATETIME", - "EQUAL_SYMBOL", "GREATER_SYMBOL", - "LESS_SYMBOL", "EXCLAMATION_SYMBOL", + "LINE_COMMENT", "KW_ADD", + "KW_ADMIN", "KW_AFTER", + "KW_ANALYZE", "KW_ASC", + "KW_BEFORE", "KW_BYTES", + "KW_CASCADE", "KW_CATALOG", + "KW_CATALOGS", "KW_CENTURY", + "KW_CHAIN", "KW_CHANGELOG_MODE", + "KW_CHARACTERS", "KW_COMMENT", + "KW_COMPACT", "KW_COLUMNS", + "KW_CONSTRAINTS", "KW_CONSTRUCTOR", + "KW_CUMULATE", "KW_DATA", + "KW_DATABASE", "KW_DATABASES", + "KW_DAYS", "KW_DECADE", + "KW_DEFINED", "KW_DESC", + "KW_DESCRIPTOR", "KW_DIV", + "KW_ENCODING", "KW_ENFORCED", + "KW_ENGINE", "KW_ERROR", + "KW_ESTIMATED_COST", + "KW_EXCEPTION", "KW_EXCLUDE", + "KW_EXCLUDING", "KW_EXTENDED", + "KW_FILE", "KW_FINAL", + "KW_FIRST", "KW_FOLLOWING", + "KW_FORMAT", "KW_FORTRAN", + "KW_FOUND", "KW_FRAC_SECOND", + "KW_FUNCTIONS", "KW_GENERAL", + "KW_GENERATED", "KW_GO", + "KW_GOTO", "KW_GRANTED", + "KW_HOP", "KW_HOURS", + "KW_IF", "KW_IGNORE", + "KW_INCREMENT", "KW_INPUT", + "KW_INVOKER", "KW_JAR", + "KW_JARS", "KW_JAVA", + "KW_JSON", "KW_JSON_EXECUTION_PLAN", + "KW_KEY", "KW_KEY_MEMBER", + "KW_KEY_TYPE", "KW_LABEL", + "KW_LAST", "KW_LENGTH", + "KW_LEVEL", "KW_LOAD", + "KW_MAP", "KW_MICROSECOND", + "KW_MILLENNIUM", "KW_MILLISECOND", + "KW_MINUTES", "KW_MINVALUE", + "KW_MODIFY", "KW_MODULES", + "KW_MONTHS", "KW_NANOSECOND", + "KW_NULLS", "KW_NUMBER", + "KW_OPTION", "KW_OPTIONS", + "KW_ORDERING", "KW_OUTPUT", + "KW_OVERWRITE", "KW_OVERWRITING", + "KW_PARTITIONED", "KW_PARTITIONS", + "KW_PASSING", "KW_PAST", + "KW_PATH", "KW_PLACING", + "KW_PLAN", "KW_PRECEDING", + "KW_PRESERVE", "KW_PRIOR", + "KW_PRIVILEGES", "KW_PUBLIC", + "KW_PYTHON", "KW_PYTHON_FILES", + "KW_PYTHON_REQUIREMENTS", + "KW_PYTHON_DEPENDENCIES", + "KW_PYTHON_JAR", "KW_PYTHON_ARCHIVES", + "KW_PYTHON_PARAMETER", + "KW_QUARTER", "KW_RAW", + "KW_READ", "KW_RELATIVE", + "KW_REMOVE", "KW_RENAME", + "KW_REPLACE", "KW_RESPECT", + "KW_RESTART", "KW_RESTRICT", + "KW_ROLE", "KW_ROW_COUNT", + "KW_SCALA", "KW_SCALAR", + "KW_SCALE", "KW_SCHEMA", + "KW_SECONDS", "KW_SECTION", + "KW_SECURITY", "KW_SELF", + "KW_SERVER", "KW_SERVER_NAME", + "KW_SESSION", "KW_SETS", + "KW_SIMPLE", "KW_SIZE", + "KW_SLIDE", "KW_SOURCE", + "KW_SPACE", "KW_STATE", + "KW_STATEMENT", "KW_STEP", + "KW_STRING", "KW_STRUCTURE", + "KW_STYLE", "KW_TABLES", + "KW_TEMPORARY", "KW_TIMECOL", + "KW_TIMESTAMP_LTZ", + "KW_TIMESTAMPADD", "KW_TIMESTAMPDIFF", + "KW_TRANSFORM", "KW_TUMBLE", + "KW_TYPE", "KW_UNDER", + "KW_UNLOAD", "KW_USAGE", + "KW_USE", "KW_UTF16", + "KW_UTF32", "KW_UTF8", + "KW_VERSION", "KW_VIEW", + "KW_VIEWS", "KW_VIRTUAL", + "KW_WATERMARK", "KW_WATERMARKS", + "KW_WEEK", "KW_WORK", + "KW_WRAPPER", "KW_YEARS", + "KW_ZONE", "KW_ABS", + "KW_ALL", "ALLOW", "KW_ALTER", + "KW_AND", "KW_ANY", + "KW_ARE", "KW_ARRAY", + "KW_AS", "KW_AT", "KW_AVG", + "KW_BEGIN", "KW_BETWEEN", + "KW_BIGINT", "KW_BINARY", + "KW_BIT", "KW_BLOB", + "KW_BOOLEAN", "KW_BOTH", + "KW_BY", "KW_CALL", + "KW_CALLED", "KW_CASCADED", + "KW_CASE", "KW_CAST", + "KW_CEIL", "KW_CHAR", + "KW_CHARACTER", "KW_CHECK", + "KW_CLOB", "KW_CLOSE", + "KW_COALESCE", "KW_COLLATE", + "KW_COLLECT", "KW_COLUMN", + "KW_COMMIT", "KW_CONNECT", + "KW_CONSTRAINT", "KW_CONTAINS", + "KW_CONVERT", "KW_COUNT", + "KW_CREATE", "KW_CROSS", + "KW_CUBE", "KW_CURRENT", + "KW_CURSOR", "KW_CYCLE", + "KW_DATE", "KW_DATETIME", + "KW_DAY", "KW_DEC", + "KW_DECIMAL", "KW_DECLARE", + "KW_DEFAULT", "KW_DEFINE", + "KW_DELETE", "KW_DESCRIBE", + "KW_DISTINCT", "KW_DOUBLE", + "KW_DROP", "KW_EACH", + "KW_ELSE", "KW_END", + "KW_EQUALS", "KW_EXCEPT", + "KW_EXECUTE", "KW_EXISTS", + "KW_EXPLAIN", "KW_EXTERNAL", + "KW_EXTRACT", "KW_FALSE", + "KW_FLOAT", "KW_FOR", + "KW_FROM", "KW_FULL", + "KW_FUNCTION", "KW_GLOBAL", + "KW_GRANT", "KW_GROUP", + "KW_GROUPING", "KW_GROUPS", + "KW_HAVING", "KW_HOUR", + "KW_IMPORT", "KW_IN", + "KW_INCLUDING", "KW_INNER", + "KW_INOUT", "KW_INSERT", + "KW_INT", "KW_INTEGER", + "KW_INTERSECT", "KW_INTERVAL", + "KW_INTO", "KW_IS", + "KW_JOIN", "KW_LAG", + "KW_LANGUAGE", "KW_LATERAL", + "KW_LEADING", "KW_LEFT", + "KW_LIKE", "KW_LIMIT", + "KW_LOCAL", "KW_MATCH", + "KW_MATCH_RECOGNIZE", + "KW_MEASURES", "KW_MERGE", + "KW_METADATA", "KW_MINUS", + "KW_MINUTE", "KW_MODIFIES", + "KW_MODULE", "KW_MONTH", + "KW_MULTISET", "KW_NATURAL", + "KW_NEXT", "KW_NO", + "KW_NONE", "KW_NOT", + "KW_NULL", "KW_NUMERIC", + "KW_OF", "KW_OFFSET", + "KW_ON", "KW_ONE", "KW_OR", + "KW_ORDER", "KW_OUT", + "KW_OUTER", "KW_OVER", + "KW_OVERLAY", "KW_PARTITION", + "KW_PATTERN", "KW_PER", + "KW_PERCENT", "KW_PERIOD", + "KW_POSITION", "KW_PRIMARY", + "KW_RANGE", "KW_RANK", + "KW_RESET", "KW_REVOKE", + "KW_RIGHT", "KW_RLIKE", + "KW_ROLLBACK", "KW_ROLLUP", + "KW_ROW", "KW_ROWS", + "KW_SECOND", "KW_SELECT", + "KW_SET", "KW_SHOW", + "KW_SKIP", "KW_SMALLINT", + "KW_START", "KW_STATIC", + "KW_SUBSTRING", "KW_SUM", + "KW_SYSTEM", "KW_SYSTEM_TIME", + "KW_SYSTEM_USER", "KW_TABLE", + "KW_TABLESAMPLE", "KW_THEN", + "KW_TIME", "KW_TIMESTAMP", + "KW_TINYINT", "KW_TO", + "KW_TRUE", "KW_TRUNCATE", + "KW_UNION", "KW_UNIQUE", + "KW_UNKNOWN", "KW_UNNEST", + "KW_UPPER", "KW_UPSERT", + "KW_USER", "KW_USING", + "KW_VALUE", "KW_VALUES", + "KW_VARBINARY", "KW_VARCHAR", + "KW_WHEN", "KW_WHERE", + "KW_WINDOW", "KW_WITH", + "KW_WITHIN", "KW_WITHOUT", + "KW_YEAR", "EQUAL_SYMBOL", + "GREATER_SYMBOL", "LESS_SYMBOL", + "EXCLAMATION_SYMBOL", "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LS_BRACKET", @@ -669,64 +802,83 @@ export default class FlinkSqlLexer extends Lexer { "DOUBLE_VERTICAL_SIGN", "DOUBLE_HYPNEN_SIGN", "SLASH_SIGN", "QUESTION_MARK_SIGN", - "DOT_ID", "STRING_LITERAL", - "DIG_LITERAL", "REAL_LITERAL", - "BIT_STRING", "ID_LITERAL", - "FILE_PATH", "DOUBLE_ARROW" ]; + "DOUBLE_RIGHT_ARROW", + "STRING_LITERAL", "DIG_LITERAL", + "REAL_LITERAL", "BIT_STRING", + "ID_LITERAL", "FILE_PATH" ]; public static readonly modeNames: string[] = [ "DEFAULT_MODE", ]; public static readonly ruleNames: string[] = [ - "SPACE", "COMMENT_INPUT", "LINE_COMMENT", "SELECT", "FROM", "ADD", "AS", - "ALL", "ANY", "DISTINCT", "WHERE", "GROUP", "BY", "GROUPING", "SETS", - "CUBE", "ROLLUP", "ORDER", "HAVING", "LIMIT", "AT", "OR", "AND", "IN", - "NOT", "NO", "EXISTS", "BETWEEN", "LIKE", "RLIKE", "IS", "TRUE", "FALSE", - "NULLS", "ASC", "DESC", "FOR", "INTERVAL", "CASE", "WHEN", "THEN", "ELSE", - "BEGIN", "END", "JOIN", "CROSS", "OUTER", "INNER", "LEFT", "SEMI", "RIGHT", - "FULL", "USER", "NATURAL", "ON", "PIVOT", "LATERAL", "WINDOW", "OVER", - "PARTITION", "RANGE", "ROWS", "UNBOUNDED", "PRECEDING", "FOLLOWING", "CURRENT", - "FIRST", "AFTER", "LAST", "WITH", "WITHOUT", "VALUES", "CREATE", "TABLE", - "DIRECTORY", "VIEW", "REPLACE", "EXECUTE", "STATEMENT", "INSERT", "DELETE", - "REMOVE", "INTO", "DESCRIBE", "EXPLAIN", "PLAN", "CHANGELOG_MODE", "JSON_EXECUTION_PLAN", - "ESTIMATED_COST", "FORMAT", "LOGICAL", "CODEGEN", "COST", "CAST", "SHOW", - "TABLES", "COLUMNS", "COLUMN", "USE", "MODULE", "MODULES", "PARTITIONS", - "FUNCTIONS", "DROP", "UNION", "EXCEPT", "SETMINUS", "INTERSECT", "TO", - "TABLESAMPLE", "STRATIFY", "ALTER", "RENAME", "STRUCT", "COMMENT", "SET", - "RESET", "DATA", "START", "TRANSACTION", "COMMIT", "ROLLBACK", "MACRO", - "IGNORE", "BOTH", "LEADING", "TRAILING", "IF", "POSITION", "EXTRACT", - "MINUS", "DIV", "PERCENTLIT", "BUCKET", "OUT", "OF", "SORT", "CLUSTER", - "DISTRIBUTE", "OVERWRITE", "TRANSFORM", "REDUCE", "USING", "SERDE", "SERDEPROPERTIES", - "RECORDREADER", "RECORDWRITER", "DELIMITED", "FIELDS", "TERMINATED", "COLLECTION", - "ITEMS", "KEYS", "ESCAPED", "LINES", "SEPARATED", "FUNCTION", "EXTENDED", - "REFRESH", "CLEAR", "CACHE", "UNCACHE", "LAZY", "FORMATTED", "GLOBAL", - "TEMPORARY", "OPTIONS", "UNSET", "TBLPROPERTIES", "DBPROPERTIES", "BUCKETS", - "SKEWED", "STORED", "DIRECTORIES", "LOCATION", "EXCHANGE", "ARCHIVE", - "UNARCHIVE", "FILEFORMAT", "TOUCH", "COMPACT", "CONCATENATE", "CHANGE", - "CASCADE", "CONSTRAINT", "RESTRICT", "CLUSTERED", "SORTED", "PURGE", "INPUTFORMAT", - "OUTPUTFORMAT", "DATABASE", "DATABASES", "DFS", "TRUNCATE", "ANALYZE", - "COMPUTE", "LIST", "STATISTICS", "PARTITIONED", "EXTERNAL", "DEFINED", - "REVOKE", "GRANT", "LOCK", "UNLOCK", "MSCK", "REPAIR", "RECOVER", "EXPORT", - "IMPORT", "LOAD", "UNLOAD", "ROLE", "ROLES", "COMPACTIONS", "PRINCIPALS", - "TRANSACTIONS", "INDEX", "INDEXES", "LOCKS", "OPTION", "ANTI", "LOCAL", - "INPATH", "WATERMARK", "UNNEST", "MATCH", "NEXT", "WITHIN", "WS", "SYSTEM", - "INCLUDING", "EXCLUDING", "OVERWRITING", "CONSTRAINTS", "GENERATED", "WATERMARKS", - "CATALOG", "LANGUAGE", "JAVA", "SCALA", "PYTHON", "JAR", "FILE", "PYTHON_FILES", - "PYTHON_REQUIREMENTS", "PYTHON_DEPENDENCIES", "PYTHON_JAR", "PYTHON_ARCHIVES", - "PYTHON_PARAMETER", "ENGINE", "CATALOGS", "VIEWS", "JARS", "PRIMARY", - "UNIQUE", "KEY", "PERIOD", "SYSTEM_TIME", "ENFORCED", "METADATA", "VIRTUAL", - "ZONE", "TUMBLE", "HOP", "CUMULATE", "DESCRIPTOR", "TIMECOL", "SIZE", - "OFFSET", "STEP", "SLIDE", "SESSION", "MATCH_RECOGNIZE", "MEASURES", "PATTERN", - "ONE", "PER", "KW_SKIP", "PAST", "DEFINE", "STRING", "ARRAY", "MAP", "CHAR", - "VARCHAR", "BINARY", "VARBINARY", "BYTES", "DECIMAL", "DEC", "NUMERIC", - "TINYINT", "SMALLINT", "INT", "INTEGER", "BIGINT", "FLOAT", "DOUBLE", - "DATE", "TIME", "TIMESTAMP", "TIMESTAMP_LTZ", "MULTISET", "BOOLEAN", "RAW", - "ROW", "NULL", "DATETIME", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", - "EXCLAMATION_SYMBOL", "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", - "DOT", "LS_BRACKET", "RS_BRACKET", "LR_BRACKET", "RR_BRACKET", "LB_BRACKET", - "RB_BRACKET", "COMMA", "SEMICOLON", "AT_SIGN", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", + "SPACE", "COMMENT_INPUT", "LINE_COMMENT", "KW_ADD", "KW_ADMIN", "KW_AFTER", + "KW_ANALYZE", "KW_ASC", "KW_BEFORE", "KW_BYTES", "KW_CASCADE", "KW_CATALOG", + "KW_CATALOGS", "KW_CENTURY", "KW_CHAIN", "KW_CHANGELOG_MODE", "KW_CHARACTERS", + "KW_COMMENT", "KW_COMPACT", "KW_COLUMNS", "KW_CONSTRAINTS", "KW_CONSTRUCTOR", + "KW_CUMULATE", "KW_DATA", "KW_DATABASE", "KW_DATABASES", "KW_DAYS", "KW_DECADE", + "KW_DEFINED", "KW_DESC", "KW_DESCRIPTOR", "KW_DIV", "KW_ENCODING", "KW_ENFORCED", + "KW_ENGINE", "KW_ERROR", "KW_ESTIMATED_COST", "KW_EXCEPTION", "KW_EXCLUDE", + "KW_EXCLUDING", "KW_EXTENDED", "KW_FILE", "KW_FINAL", "KW_FIRST", "KW_FOLLOWING", + "KW_FORMAT", "KW_FORTRAN", "KW_FOUND", "KW_FRAC_SECOND", "KW_FUNCTIONS", + "KW_GENERAL", "KW_GENERATED", "KW_GO", "KW_GOTO", "KW_GRANTED", "KW_HOP", + "KW_HOURS", "KW_IF", "KW_IGNORE", "KW_INCREMENT", "KW_INPUT", "KW_INVOKER", + "KW_JAR", "KW_JARS", "KW_JAVA", "KW_JSON", "KW_JSON_EXECUTION_PLAN", "KW_KEY", + "KW_KEY_MEMBER", "KW_KEY_TYPE", "KW_LABEL", "KW_LAST", "KW_LENGTH", "KW_LEVEL", + "KW_LOAD", "KW_MAP", "KW_MICROSECOND", "KW_MILLENNIUM", "KW_MILLISECOND", + "KW_MINUTES", "KW_MINVALUE", "KW_MODIFY", "KW_MODULES", "KW_MONTHS", "KW_NANOSECOND", + "KW_NULLS", "KW_NUMBER", "KW_OPTION", "KW_OPTIONS", "KW_ORDERING", "KW_OUTPUT", + "KW_OVERWRITE", "KW_OVERWRITING", "KW_PARTITIONED", "KW_PARTITIONS", "KW_PASSING", + "KW_PAST", "KW_PATH", "KW_PLACING", "KW_PLAN", "KW_PRECEDING", "KW_PRESERVE", + "KW_PRIOR", "KW_PRIVILEGES", "KW_PUBLIC", "KW_PYTHON", "KW_PYTHON_FILES", + "KW_PYTHON_REQUIREMENTS", "KW_PYTHON_DEPENDENCIES", "KW_PYTHON_JAR", "KW_PYTHON_ARCHIVES", + "KW_PYTHON_PARAMETER", "KW_QUARTER", "KW_RAW", "KW_READ", "KW_RELATIVE", + "KW_REMOVE", "KW_RENAME", "KW_REPLACE", "KW_RESPECT", "KW_RESTART", "KW_RESTRICT", + "KW_ROLE", "KW_ROW_COUNT", "KW_SCALA", "KW_SCALAR", "KW_SCALE", "KW_SCHEMA", + "KW_SECONDS", "KW_SECTION", "KW_SECURITY", "KW_SELF", "KW_SERVER", "KW_SERVER_NAME", + "KW_SESSION", "KW_SETS", "KW_SIMPLE", "KW_SIZE", "KW_SLIDE", "KW_SOURCE", + "KW_SPACE", "KW_STATE", "KW_STATEMENT", "KW_STEP", "KW_STRING", "KW_STRUCTURE", + "KW_STYLE", "KW_TABLES", "KW_TEMPORARY", "KW_TIMECOL", "KW_TIMESTAMP_LTZ", + "KW_TIMESTAMPADD", "KW_TIMESTAMPDIFF", "KW_TRANSFORM", "KW_TUMBLE", "KW_TYPE", + "KW_UNDER", "KW_UNLOAD", "KW_USAGE", "KW_USE", "KW_UTF16", "KW_UTF32", + "KW_UTF8", "KW_VERSION", "KW_VIEW", "KW_VIEWS", "KW_VIRTUAL", "KW_WATERMARK", + "KW_WATERMARKS", "KW_WEEK", "KW_WORK", "KW_WRAPPER", "KW_YEARS", "KW_ZONE", + "KW_ABS", "KW_ALL", "ALLOW", "KW_ALTER", "KW_AND", "KW_ANY", "KW_ARE", + "KW_ARRAY", "KW_AS", "KW_AT", "KW_AVG", "KW_BEGIN", "KW_BETWEEN", "KW_BIGINT", + "KW_BINARY", "KW_BIT", "KW_BLOB", "KW_BOOLEAN", "KW_BOTH", "KW_BY", "KW_CALL", + "KW_CALLED", "KW_CASCADED", "KW_CASE", "KW_CAST", "KW_CEIL", "KW_CHAR", + "KW_CHARACTER", "KW_CHECK", "KW_CLOB", "KW_CLOSE", "KW_COALESCE", "KW_COLLATE", + "KW_COLLECT", "KW_COLUMN", "KW_COMMIT", "KW_CONNECT", "KW_CONSTRAINT", + "KW_CONTAINS", "KW_CONVERT", "KW_COUNT", "KW_CREATE", "KW_CROSS", "KW_CUBE", + "KW_CURRENT", "KW_CURSOR", "KW_CYCLE", "KW_DATE", "KW_DATETIME", "KW_DAY", + "KW_DEC", "KW_DECIMAL", "KW_DECLARE", "KW_DEFAULT", "KW_DEFINE", "KW_DELETE", + "KW_DESCRIBE", "KW_DISTINCT", "KW_DOUBLE", "KW_DROP", "KW_EACH", "KW_ELSE", + "KW_END", "KW_EQUALS", "KW_EXCEPT", "KW_EXECUTE", "KW_EXISTS", "KW_EXPLAIN", + "KW_EXTERNAL", "KW_EXTRACT", "KW_FALSE", "KW_FLOAT", "KW_FOR", "KW_FROM", + "KW_FULL", "KW_FUNCTION", "KW_GLOBAL", "KW_GRANT", "KW_GROUP", "KW_GROUPING", + "KW_GROUPS", "KW_HAVING", "KW_HOUR", "KW_IMPORT", "KW_IN", "KW_INCLUDING", + "KW_INNER", "KW_INOUT", "KW_INSERT", "KW_INT", "KW_INTEGER", "KW_INTERSECT", + "KW_INTERVAL", "KW_INTO", "KW_IS", "KW_JOIN", "KW_LAG", "KW_LANGUAGE", + "KW_LATERAL", "KW_LEADING", "KW_LEFT", "KW_LIKE", "KW_LIMIT", "KW_LOCAL", + "KW_MATCH", "KW_MATCH_RECOGNIZE", "KW_MEASURES", "KW_MERGE", "KW_METADATA", + "KW_MINUS", "KW_MINUTE", "KW_MODIFIES", "KW_MODULE", "KW_MONTH", "KW_MULTISET", + "KW_NATURAL", "KW_NEXT", "KW_NO", "KW_NONE", "KW_NOT", "KW_NULL", "KW_NUMERIC", + "KW_OF", "KW_OFFSET", "KW_ON", "KW_ONE", "KW_OR", "KW_ORDER", "KW_OUT", + "KW_OUTER", "KW_OVER", "KW_OVERLAY", "KW_PARTITION", "KW_PATTERN", "KW_PER", + "KW_PERCENT", "KW_PERIOD", "KW_POSITION", "KW_PRIMARY", "KW_RANGE", "KW_RANK", + "KW_RESET", "KW_REVOKE", "KW_RIGHT", "KW_RLIKE", "KW_ROLLBACK", "KW_ROLLUP", + "KW_ROW", "KW_ROWS", "KW_SECOND", "KW_SELECT", "KW_SET", "KW_SHOW", "KW_SKIP", + "KW_SMALLINT", "KW_START", "KW_STATIC", "KW_SUBSTRING", "KW_SUM", "KW_SYSTEM", + "KW_SYSTEM_TIME", "KW_SYSTEM_USER", "KW_TABLE", "KW_TABLESAMPLE", "KW_THEN", + "KW_TIME", "KW_TIMESTAMP", "KW_TINYINT", "KW_TO", "KW_TRUE", "KW_TRUNCATE", + "KW_UNION", "KW_UNIQUE", "KW_UNKNOWN", "KW_UNNEST", "KW_UPPER", "KW_UPSERT", + "KW_USER", "KW_USING", "KW_VALUE", "KW_VALUES", "KW_VARBINARY", "KW_VARCHAR", + "KW_WHEN", "KW_WHERE", "KW_WINDOW", "KW_WITH", "KW_WITHIN", "KW_WITHOUT", + "KW_YEAR", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", "EXCLAMATION_SYMBOL", + "BIT_NOT_OP", "BIT_OR_OP", "BIT_AND_OP", "BIT_XOR_OP", "DOT", "LS_BRACKET", + "RS_BRACKET", "LR_BRACKET", "RR_BRACKET", "LB_BRACKET", "RB_BRACKET", + "COMMA", "SEMICOLON", "AT_SIGN", "SINGLE_QUOTE_SYMB", "DOUBLE_QUOTE_SYMB", "REVERSE_QUOTE_SYMB", "COLON_SYMB", "ASTERISK_SIGN", "UNDERLINE_SIGN", "HYPNEN_SIGN", "ADD_SIGN", "PENCENT_SIGN", "DOUBLE_VERTICAL_SIGN", "DOUBLE_HYPNEN_SIGN", - "SLASH_SIGN", "QUESTION_MARK_SIGN", "DOT_ID", "STRING_LITERAL", "DIG_LITERAL", - "REAL_LITERAL", "BIT_STRING", "ID_LITERAL", "FILE_PATH", "DOUBLE_ARROW", + "SLASH_SIGN", "QUESTION_MARK_SIGN", "DOUBLE_RIGHT_ARROW", "STRING_LITERAL", + "DIG_LITERAL", "REAL_LITERAL", "BIT_STRING", "ID_LITERAL", "FILE_PATH", "FILE_PATH_STRING", "JAR_FILE_PARTTARN", "EXPONENT_NUM_PART", "ID_LITERAL_FRAG", "DEC_DIGIT", "DEC_LETTER", "DQUOTA_STRING", "SQUOTA_STRING", "BIT_STRING_L", "BQUOTA_STRING", @@ -750,7 +902,7 @@ export default class FlinkSqlLexer extends Lexer { public get modeNames(): string[] { return FlinkSqlLexer.modeNames; } - public static readonly _serializedATN: number[] = [4,0,349,3295,6,-1,2, + public static readonly _serializedATN: number[] = [4,0,402,3709,6,-1,2, 0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2, 9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16, 7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7, @@ -807,1078 +959,1221 @@ export default class FlinkSqlLexer extends Lexer { 2,337,7,337,2,338,7,338,2,339,7,339,2,340,7,340,2,341,7,341,2,342,7,342, 2,343,7,343,2,344,7,344,2,345,7,345,2,346,7,346,2,347,7,347,2,348,7,348, 2,349,7,349,2,350,7,350,2,351,7,351,2,352,7,352,2,353,7,353,2,354,7,354, - 2,355,7,355,2,356,7,356,2,357,7,357,2,358,7,358,1,0,4,0,721,8,0,11,0,12, - 0,722,1,0,1,0,1,1,1,1,1,1,1,1,5,1,731,8,1,10,1,12,1,734,9,1,1,1,1,1,1,1, - 1,1,1,1,1,2,1,2,1,2,3,2,744,8,2,1,2,5,2,747,8,2,10,2,12,2,750,9,2,1,2,3, - 2,753,8,2,1,2,1,2,3,2,757,8,2,1,2,1,2,1,2,1,2,3,2,763,8,2,1,2,1,2,3,2,767, - 8,2,3,2,769,8,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4, - 1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,9,1,9,1,9, - 1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1, - 11,1,11,1,11,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13, - 1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,1, - 16,1,16,1,16,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18, - 1,18,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,21,1,21,1,21,1,22,1, - 22,1,22,1,22,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,26,1,26, - 1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1, - 28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,31,1,31, - 1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1, - 33,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,39,1, - 39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42, - 1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1, - 45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47, - 1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,50,1, - 50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52, - 1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,55,1,55,1,55,1, - 55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57, - 1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1, + 2,355,7,355,2,356,7,356,2,357,7,357,2,358,7,358,2,359,7,359,2,360,7,360, + 2,361,7,361,2,362,7,362,2,363,7,363,2,364,7,364,2,365,7,365,2,366,7,366, + 2,367,7,367,2,368,7,368,2,369,7,369,2,370,7,370,2,371,7,371,2,372,7,372, + 2,373,7,373,2,374,7,374,2,375,7,375,2,376,7,376,2,377,7,377,2,378,7,378, + 2,379,7,379,2,380,7,380,2,381,7,381,2,382,7,382,2,383,7,383,2,384,7,384, + 2,385,7,385,2,386,7,386,2,387,7,387,2,388,7,388,2,389,7,389,2,390,7,390, + 2,391,7,391,2,392,7,392,2,393,7,393,2,394,7,394,2,395,7,395,2,396,7,396, + 2,397,7,397,2,398,7,398,2,399,7,399,2,400,7,400,2,401,7,401,2,402,7,402, + 2,403,7,403,2,404,7,404,2,405,7,405,2,406,7,406,2,407,7,407,2,408,7,408, + 2,409,7,409,2,410,7,410,2,411,7,411,1,0,4,0,827,8,0,11,0,12,0,828,1,0,1, + 0,1,1,1,1,1,1,1,1,5,1,837,8,1,10,1,12,1,840,9,1,1,1,1,1,1,1,1,1,1,1,1,2, + 1,2,1,2,3,2,850,8,2,1,2,5,2,853,8,2,10,2,12,2,856,9,2,1,2,3,2,859,8,2,1, + 2,1,2,3,2,863,8,2,1,2,1,2,1,2,1,2,3,2,869,8,2,1,2,1,2,3,2,873,8,2,3,2,875, + 8,2,1,2,1,2,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5, + 1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8, + 1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10, + 1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1, + 12,1,12,1,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14, + 1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1, + 15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,17, + 1,17,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1, + 18,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20, + 1,20,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1, + 21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23, + 1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,1,26,1,26,1,27,1,27, + 1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,29,1, + 29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30,1,30, + 1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1, + 33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,34, + 1,35,1,35,1,35,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1, + 36,1,36,1,36,1,36,1,36,1,36,1,36,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1, + 39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40,1,40, + 1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1, + 43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45, + 1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,47,1, + 47,1,47,1,47,1,47,1,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,1,48, + 1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,50,1,50,1, + 50,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51,1,51, + 1,51,1,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1, + 54,1,54,1,54,1,55,1,55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,56,1,57,1,57, + 1,57,1,58,1,58,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1, 59,1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61,1,61, - 1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1, - 63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64, - 1,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1, - 66,1,67,1,67,1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,69,1,69,1,69, - 1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,71,1,71,1,71,1,71,1, - 71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,73, - 1,73,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1, - 75,1,75,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77, - 1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,79,1, - 79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81, - 1,81,1,81,1,81,1,81,1,81,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1, - 83,1,83,1,83,1,83,1,83,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85, - 1,85,1,85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1, - 86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87, - 1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,87,1,88,1,88,1,88,1,88,1,88,1, - 88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89, - 1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91,1, - 91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,94, - 1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1, - 96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98, - 1,98,1,99,1,99,1,99,1,99,1,99,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1, - 100,1,100,1,100,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1,101,1, - 101,1,101,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1,102,1, - 103,1,103,1,103,1,103,1,103,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1, - 105,1,105,1,105,1,105,1,105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1, + 1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1, + 64,1,64,1,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66, + 1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,67,1, + 67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,69, + 1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,70,1,70,1,70,1,70,1,70,1,70,1, + 71,1,71,1,71,1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73, + 1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,76,1,76,1, + 76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77, + 1,77,1,77,1,77,1,77,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1, + 78,1,78,1,78,1,78,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,79,1,80,1,80,1,80, + 1,80,1,80,1,80,1,80,1,80,1,80,1,81,1,81,1,81,1,81,1,81,1,81,1,81,1,82,1, + 82,1,82,1,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,83,1,83,1,83,1,84, + 1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,84,1,85,1,85,1,85,1,85,1, + 85,1,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,87,1,87,1,87,1,87,1,87,1,87, + 1,87,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,88,1,89,1,89,1,89,1,89,1,89,1, + 89,1,89,1,89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91,1,91,1,91, + 1,91,1,91,1,91,1,91,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1,92,1, + 92,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93,1,93, + 1,93,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1, + 95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96,1,97,1,97,1,97,1,97, + 1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,99,1,99,1,99,1,99,1,99,1, + 100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1, + 101,1,101,1,101,1,101,1,101,1,101,1,101,1,102,1,102,1,102,1,102,1,102,1, + 102,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1,103,1, + 104,1,104,1,104,1,104,1,104,1,104,1,104,1,105,1,105,1,105,1,105,1,105,1, + 105,1,105,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1,106,1, 106,1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1, - 107,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1,109,1, - 109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1, - 110,1,111,1,111,1,111,1,111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1, - 112,1,112,1,113,1,113,1,113,1,113,1,113,1,113,1,113,1,114,1,114,1,114,1, - 114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1, - 116,1,116,1,116,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1, - 118,1,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1, - 119,1,119,1,120,1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1, - 121,1,121,1,121,1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,122,1, + 107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1, + 108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1,108,1, + 108,1,108,1,108,1,108,1,108,1,108,1,108,1,109,1,109,1,109,1,109,1,109,1, + 109,1,109,1,109,1,109,1,109,1,109,1,110,1,110,1,110,1,110,1,110,1,110,1, + 110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,110,1,111,1,111,1, + 111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1,111,1, + 111,1,111,1,111,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,112,1,113,1, + 113,1,113,1,113,1,114,1,114,1,114,1,114,1,114,1,115,1,115,1,115,1,115,1, + 115,1,115,1,115,1,115,1,115,1,116,1,116,1,116,1,116,1,116,1,116,1,116,1, + 117,1,117,1,117,1,117,1,117,1,117,1,117,1,118,1,118,1,118,1,118,1,118,1, + 118,1,118,1,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,120,1, + 120,1,120,1,120,1,120,1,120,1,120,1,120,1,121,1,121,1,121,1,121,1,121,1, + 121,1,121,1,121,1,121,1,122,1,122,1,122,1,122,1,122,1,123,1,123,1,123,1, 123,1,123,1,123,1,123,1,123,1,123,1,123,1,124,1,124,1,124,1,124,1,124,1, - 125,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1, - 126,1,126,1,126,1,126,1,126,1,127,1,127,1,127,1,128,1,128,1,128,1,128,1, + 124,1,125,1,125,1,125,1,125,1,125,1,125,1,125,1,126,1,126,1,126,1,126,1, + 126,1,126,1,127,1,127,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128,1, 128,1,128,1,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129,1,129,1,129,1, - 129,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131,1,131,1,131,1,132,1, - 132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,133,1,133,1, - 133,1,133,1,133,1,133,1,133,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1, - 136,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,137,1,137,1, - 137,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1,138,1, - 139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1,140,1,140,1, - 140,1,140,1,140,1,140,1,140,1,140,1,140,1,140,1,141,1,141,1,141,1,141,1, - 141,1,141,1,141,1,142,1,142,1,142,1,142,1,142,1,142,1,143,1,143,1,143,1, - 143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1, - 144,1,144,1,144,1,144,1,144,1,144,1,144,1,145,1,145,1,145,1,145,1,145,1, + 129,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,131,1,131,1, + 131,1,131,1,131,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,133,1,133,1, + 133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,134,1,134,1, + 134,1,134,1,134,1,134,1,134,1,134,1,135,1,135,1,135,1,135,1,135,1,136,1, + 136,1,136,1,136,1,136,1,136,1,136,1,137,1,137,1,137,1,137,1,137,1,138,1, + 138,1,138,1,138,1,138,1,138,1,139,1,139,1,139,1,139,1,139,1,139,1,139,1, + 140,1,140,1,140,1,140,1,140,1,140,1,141,1,141,1,141,1,141,1,141,1,141,1, + 142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,142,1,143,1,143,1, + 143,1,143,1,143,1,144,1,144,1,144,1,144,1,144,1,144,1,144,1,145,1,145,1, 145,1,145,1,145,1,145,1,145,1,145,1,145,1,145,1,146,1,146,1,146,1,146,1, - 146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,146,1,147,1,147,1,147,1, - 147,1,147,1,147,1,147,1,147,1,147,1,147,1,148,1,148,1,148,1,148,1,148,1, - 148,1,148,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1,149,1, - 149,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1, - 151,1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152,1,153,1, - 153,1,153,1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1, - 154,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,155,1,156,1, - 156,1,156,1,156,1,156,1,156,1,156,1,156,1,156,1,157,1,157,1,157,1,157,1, - 157,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1,158,1,158,1, - 158,1,159,1,159,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1, - 160,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1, - 162,1,162,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1,163,1, - 164,1,164,1,164,1,164,1,164,1,164,1,164,1,165,1,165,1,165,1,165,1,165,1, + 146,1,146,1,147,1,147,1,147,1,147,1,147,1,147,1,147,1,148,1,148,1,148,1, + 148,1,148,1,148,1,148,1,148,1,148,1,148,1,149,1,149,1,149,1,149,1,149,1, + 149,1,149,1,149,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1,150,1, + 150,1,150,1,150,1,150,1,150,1,151,1,151,1,151,1,151,1,151,1,151,1,151,1, + 151,1,151,1,151,1,151,1,151,1,151,1,152,1,152,1,152,1,152,1,152,1,152,1, + 152,1,152,1,152,1,152,1,152,1,152,1,152,1,152,1,153,1,153,1,153,1,153,1, + 153,1,153,1,153,1,153,1,153,1,153,1,154,1,154,1,154,1,154,1,154,1,154,1, + 154,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,156,1, + 157,1,157,1,157,1,157,1,157,1,157,1,157,1,158,1,158,1,158,1,158,1,158,1, + 158,1,159,1,159,1,159,1,159,1,160,1,160,1,160,1,160,1,160,1,160,1,161,1, + 161,1,161,1,161,1,161,1,161,1,162,1,162,1,162,1,162,1,162,1,163,1,163,1, + 163,1,163,1,163,1,163,1,163,1,163,1,164,1,164,1,164,1,164,1,164,1,165,1, 165,1,165,1,165,1,165,1,165,1,166,1,166,1,166,1,166,1,166,1,166,1,166,1, - 166,1,167,1,167,1,167,1,167,1,167,1,167,1,168,1,168,1,168,1,168,1,168,1, - 168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,169,1,169,1,169,1, - 169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1,170,1,170,1, - 170,1,170,1,170,1,170,1,170,1,170,1,171,1,171,1,171,1,171,1,171,1,171,1, - 171,1,172,1,172,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1,173,1,173,1, - 173,1,173,1,173,1,173,1,173,1,173,1,173,1,173,1,174,1,174,1,174,1,174,1, - 174,1,174,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,175,1,175,1,175,1, - 175,1,175,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,176,1,177,1,177,1, - 177,1,177,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1,178,1,178,1,178,1, - 178,1,178,1,178,1,178,1,178,1,178,1,178,1,179,1,179,1,179,1,179,1,179,1, - 179,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,180,1,181,1,181,1,181,1, - 181,1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1, - 182,1,182,1,182,1,182,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1,183,1, - 184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,184,1,185,1, - 185,1,185,1,185,1,185,1,185,1,185,1,185,1,185,1,186,1,186,1,186,1,186,1, - 186,1,186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,187,1, - 187,1,188,1,188,1,188,1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,189,1, - 189,1,189,1,189,1,189,1,189,1,189,1,189,1,190,1,190,1,190,1,190,1,190,1, - 190,1,190,1,190,1,190,1,190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1, - 191,1,191,1,191,1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1, - 192,1,192,1,192,1,193,1,193,1,193,1,193,1,194,1,194,1,194,1,194,1,194,1, - 194,1,194,1,194,1,194,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1, - 196,1,196,1,196,1,196,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,1, - 197,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1,198,1, - 199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1,199,1, - 200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,200,1,201,1,201,1,201,1, - 201,1,201,1,201,1,201,1,201,1,202,1,202,1,202,1,202,1,202,1,202,1,202,1, - 203,1,203,1,203,1,203,1,203,1,203,1,204,1,204,1,204,1,204,1,204,1,205,1, - 205,1,205,1,205,1,205,1,205,1,205,1,206,1,206,1,206,1,206,1,206,1,207,1, - 207,1,207,1,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208,1, - 208,1,208,1,209,1,209,1,209,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1, - 210,1,210,1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,212,1,212,1,212,1, - 212,1,212,1,212,1,212,1,213,1,213,1,213,1,213,1,213,1,214,1,214,1,214,1, - 214,1,214,1,214,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1, - 215,1,215,1,215,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1,216,1, - 216,1,216,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1,217,1, - 217,1,217,1,217,1,218,1,218,1,218,1,218,1,218,1,218,1,219,1,219,1,219,1, - 219,1,219,1,219,1,219,1,219,1,220,1,220,1,220,1,220,1,220,1,220,1,221,1, - 221,1,221,1,221,1,221,1,221,1,221,1,222,1,222,1,222,1,222,1,222,1,223,1, - 223,1,223,1,223,1,223,1,223,1,224,1,224,1,224,1,224,1,224,1,224,1,224,1, - 225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1, - 226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227,1,227,1,228,1, - 228,1,228,1,228,1,228,1,229,1,229,1,229,1,229,1,229,1,229,1,229,1,230,1, - 230,1,230,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,232,1,232,1,232,1, - 232,1,232,1,232,1,232,1,232,1,232,1,232,1,233,1,233,1,233,1,233,1,233,1, - 233,1,233,1,233,1,233,1,233,1,234,1,234,1,234,1,234,1,234,1,234,1,234,1, - 234,1,234,1,234,1,234,1,234,1,235,1,235,1,235,1,235,1,235,1,235,1,235,1, - 235,1,235,1,235,1,235,1,235,1,236,1,236,1,236,1,236,1,236,1,236,1,236,1, - 236,1,236,1,236,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1,237,1, - 237,1,237,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,238,1,239,1,239,1, - 239,1,239,1,239,1,239,1,239,1,239,1,239,1,240,1,240,1,240,1,240,1,240,1, - 241,1,241,1,241,1,241,1,241,1,241,1,242,1,242,1,242,1,242,1,242,1,242,1, - 242,1,243,1,243,1,243,1,243,1,244,1,244,1,244,1,244,1,244,1,245,1,245,1, - 245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,245,1,246,1, - 246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1,246,1, - 246,1,246,1,246,1,246,1,246,1,246,1,246,1,247,1,247,1,247,1,247,1,247,1, - 247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1,247,1, - 247,1,247,1,247,1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,248,1,248,1, - 248,1,248,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1,249,1, - 249,1,249,1,249,1,249,1,249,1,249,1,250,1,250,1,250,1,250,1,250,1,250,1, - 250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1,251,1, + 166,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,168,1, + 168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,168,1,169,1,169,1, + 169,1,169,1,169,1,170,1,170,1,170,1,170,1,170,1,171,1,171,1,171,1,171,1, + 171,1,171,1,171,1,171,1,172,1,172,1,172,1,172,1,172,1,172,1,173,1,173,1, + 173,1,173,1,173,1,174,1,174,1,174,1,174,1,175,1,175,1,175,1,175,1,176,1, + 176,1,176,1,176,1,176,1,176,1,177,1,177,1,177,1,177,1,177,1,177,1,178,1, + 178,1,178,1,178,1,179,1,179,1,179,1,179,1,180,1,180,1,180,1,180,1,181,1, + 181,1,181,1,181,1,181,1,181,1,182,1,182,1,182,1,183,1,183,1,183,1,184,1, + 184,1,184,1,184,1,185,1,185,1,185,1,185,1,185,1,185,1,186,1,186,1,186,1, + 186,1,186,1,186,1,186,1,186,1,187,1,187,1,187,1,187,1,187,1,187,1,187,1, + 188,1,188,1,188,1,188,1,188,1,188,1,188,1,189,1,189,1,189,1,189,1,190,1, + 190,1,190,1,190,1,190,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1,191,1, + 192,1,192,1,192,1,192,1,192,1,193,1,193,1,193,1,194,1,194,1,194,1,194,1, + 194,1,195,1,195,1,195,1,195,1,195,1,195,1,195,1,196,1,196,1,196,1,196,1, + 196,1,196,1,196,1,196,1,196,1,197,1,197,1,197,1,197,1,197,1,198,1,198,1, + 198,1,198,1,198,1,199,1,199,1,199,1,199,1,199,1,200,1,200,1,200,1,200,1, + 200,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,201,1,202,1, + 202,1,202,1,202,1,202,1,202,1,203,1,203,1,203,1,203,1,203,1,204,1,204,1, + 204,1,204,1,204,1,204,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1,205,1, + 205,1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,206,1,207,1,207,1,207,1, + 207,1,207,1,207,1,207,1,207,1,208,1,208,1,208,1,208,1,208,1,208,1,208,1, + 209,1,209,1,209,1,209,1,209,1,209,1,209,1,210,1,210,1,210,1,210,1,210,1, + 210,1,210,1,210,1,211,1,211,1,211,1,211,1,211,1,211,1,211,1,211,1,211,1, + 211,1,211,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,212,1,213,1, + 213,1,213,1,213,1,213,1,213,1,213,1,213,1,214,1,214,1,214,1,214,1,214,1, + 214,1,215,1,215,1,215,1,215,1,215,1,215,1,215,1,216,1,216,1,216,1,216,1, + 216,1,216,1,217,1,217,1,217,1,217,1,217,1,218,1,218,1,218,1,218,1,218,1, + 218,1,218,1,218,1,219,1,219,1,219,1,219,1,219,1,219,1,219,1,220,1,220,1, + 220,1,220,1,220,1,220,1,221,1,221,1,221,1,221,1,221,1,222,1,222,1,222,1, + 222,1,222,1,222,1,222,1,222,1,222,1,223,1,223,1,223,1,223,1,224,1,224,1, + 224,1,224,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,225,1,226,1,226,1, + 226,1,226,1,226,1,226,1,226,1,226,1,227,1,227,1,227,1,227,1,227,1,227,1, + 227,1,227,1,228,1,228,1,228,1,228,1,228,1,228,1,228,1,229,1,229,1,229,1, + 229,1,229,1,229,1,229,1,230,1,230,1,230,1,230,1,230,1,230,1,230,1,230,1, + 230,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,231,1,232,1,232,1, + 232,1,232,1,232,1,232,1,232,1,233,1,233,1,233,1,233,1,233,1,234,1,234,1, + 234,1,234,1,234,1,235,1,235,1,235,1,235,1,235,1,236,1,236,1,236,1,236,1, + 237,1,237,1,237,1,237,1,237,1,237,1,237,1,238,1,238,1,238,1,238,1,238,1, + 238,1,238,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,239,1,240,1,240,1, + 240,1,240,1,240,1,240,1,240,1,241,1,241,1,241,1,241,1,241,1,241,1,241,1, + 241,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,242,1,243,1,243,1, + 243,1,243,1,243,1,243,1,243,1,243,1,244,1,244,1,244,1,244,1,244,1,244,1, + 245,1,245,1,245,1,245,1,245,1,245,1,246,1,246,1,246,1,246,1,247,1,247,1, + 247,1,247,1,247,1,248,1,248,1,248,1,248,1,248,1,249,1,249,1,249,1,249,1, + 249,1,249,1,249,1,249,1,249,1,250,1,250,1,250,1,250,1,250,1,250,1,250,1, 251,1,251,1,251,1,251,1,251,1,251,1,252,1,252,1,252,1,252,1,252,1,252,1, - 252,1,252,1,252,1,253,1,253,1,253,1,253,1,253,1,253,1,254,1,254,1,254,1, - 254,1,254,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,256,1,256,1, - 256,1,256,1,256,1,256,1,256,1,257,1,257,1,257,1,257,1,258,1,258,1,258,1, - 258,1,258,1,258,1,258,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1, - 259,1,259,1,259,1,259,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1,260,1, - 260,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,261,1,262,1,262,1, - 262,1,262,1,262,1,262,1,262,1,262,1,263,1,263,1,263,1,263,1,263,1,264,1, - 264,1,264,1,264,1,264,1,264,1,264,1,265,1,265,1,265,1,265,1,266,1,266,1, - 266,1,266,1,266,1,266,1,266,1,266,1,266,1,267,1,267,1,267,1,267,1,267,1, - 267,1,267,1,267,1,267,1,267,1,267,1,268,1,268,1,268,1,268,1,268,1,268,1, - 268,1,268,1,269,1,269,1,269,1,269,1,269,1,270,1,270,1,270,1,270,1,270,1, - 270,1,270,1,271,1,271,1,271,1,271,1,271,1,272,1,272,1,272,1,272,1,272,1, - 272,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,274,1,274,1,274,1, - 274,1,274,1,274,1,274,1,274,1,274,1,274,1,274,1,274,1,274,1,274,1,274,1, - 274,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,275,1,276,1,276,1, - 276,1,276,1,276,1,276,1,276,1,276,1,277,1,277,1,277,1,277,1,278,1,278,1, - 278,1,278,1,279,1,279,1,279,1,279,1,279,1,280,1,280,1,280,1,280,1,280,1, - 281,1,281,1,281,1,281,1,281,1,281,1,281,1,282,1,282,1,282,1,282,1,282,1, - 282,1,282,1,283,1,283,1,283,1,283,1,283,1,283,1,284,1,284,1,284,1,284,1, - 285,1,285,1,285,1,285,1,285,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1, - 286,1,287,1,287,1,287,1,287,1,287,1,287,1,287,1,288,1,288,1,288,1,288,1, - 288,1,288,1,288,1,288,1,288,1,288,1,289,1,289,1,289,1,289,1,289,1,289,1, - 290,1,290,1,290,1,290,1,290,1,290,1,290,1,290,1,291,1,291,1,291,1,291,1, - 292,1,292,1,292,1,292,1,292,1,292,1,292,1,292,1,293,1,293,1,293,1,293,1, - 293,1,293,1,293,1,293,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1,294,1, - 294,1,295,1,295,1,295,1,295,1,296,1,296,1,296,1,296,1,296,1,296,1,296,1, - 296,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1,298,1,298,1,298,1,298,1, - 298,1,298,1,299,1,299,1,299,1,299,1,299,1,299,1,299,1,300,1,300,1,300,1, - 300,1,300,1,301,1,301,1,301,1,301,1,301,1,302,1,302,1,302,1,302,1,302,1, - 302,1,302,1,302,1,302,1,302,1,303,1,303,1,303,1,303,1,303,1,303,1,303,1, - 303,1,303,1,303,1,303,1,303,1,303,1,303,1,304,1,304,1,304,1,304,1,304,1, - 304,1,304,1,304,1,304,1,305,1,305,1,305,1,305,1,305,1,305,1,305,1,305,1, - 306,1,306,1,306,1,306,1,307,1,307,1,307,1,307,1,308,1,308,1,308,1,308,1, - 308,1,309,1,309,1,309,1,309,1,309,1,309,1,309,1,309,1,309,1,310,1,310,1, - 311,1,311,1,312,1,312,1,313,1,313,1,314,1,314,1,315,1,315,1,316,1,316,1, - 317,1,317,1,318,1,318,1,319,1,319,1,320,1,320,1,321,1,321,1,322,1,322,1, - 323,1,323,1,324,1,324,1,325,1,325,1,326,1,326,1,327,1,327,1,328,1,328,1, - 329,1,329,1,330,1,330,1,331,1,331,1,332,1,332,1,333,1,333,1,334,1,334,1, - 335,1,335,1,336,1,336,1,337,1,337,1,337,1,338,1,338,1,338,1,339,1,339,1, - 340,1,340,1,341,1,341,1,341,1,342,1,342,1,342,3,342,3133,8,342,1,343,4, - 343,3136,8,343,11,343,12,343,3137,1,344,4,344,3141,8,344,11,344,12,344, - 3142,3,344,3145,8,344,1,344,1,344,4,344,3149,8,344,11,344,12,344,3150,1, - 344,4,344,3154,8,344,11,344,12,344,3155,1,344,1,344,1,344,1,344,4,344,3162, - 8,344,11,344,12,344,3163,3,344,3166,8,344,1,344,1,344,4,344,3170,8,344, - 11,344,12,344,3171,1,344,1,344,1,344,4,344,3177,8,344,11,344,12,344,3178, - 1,344,1,344,3,344,3183,8,344,1,345,1,345,1,346,1,346,1,347,1,347,1,348, - 1,348,1,348,1,349,1,349,5,349,3196,8,349,10,349,12,349,3199,9,349,4,349, - 3201,8,349,11,349,12,349,3202,1,350,1,350,1,350,1,350,1,350,1,350,5,350, - 3211,8,350,10,350,12,350,3214,9,350,1,350,1,350,1,351,1,351,3,351,3220, - 8,351,1,351,4,351,3223,8,351,11,351,12,351,3224,1,352,5,352,3228,8,352, - 10,352,12,352,3231,9,352,1,352,4,352,3234,8,352,11,352,12,352,3235,1,352, - 5,352,3239,8,352,10,352,12,352,3242,9,352,1,353,1,353,1,354,1,354,1,355, - 1,355,1,355,1,355,1,355,1,355,5,355,3254,8,355,10,355,12,355,3257,9,355, - 1,355,1,355,1,356,1,356,1,356,1,356,1,356,1,356,5,356,3267,8,356,10,356, - 12,356,3270,9,356,1,356,1,356,1,357,1,357,1,357,4,357,3277,8,357,11,357, - 12,357,3278,1,357,1,357,1,358,1,358,1,358,1,358,1,358,1,358,5,358,3289, - 8,358,10,358,12,358,3292,9,358,1,358,1,358,3,732,3229,3235,0,359,1,1,3, - 2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31, - 16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55, - 28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79, - 40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103, - 52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62, - 125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70,141,71,143,72,145, - 73,147,74,149,75,151,76,153,77,155,78,157,79,159,80,161,81,163,82,165,83, - 167,84,169,85,171,86,173,87,175,88,177,89,179,90,181,91,183,92,185,93,187, - 94,189,95,191,96,193,97,195,98,197,99,199,100,201,101,203,102,205,103,207, - 104,209,105,211,106,213,107,215,108,217,109,219,110,221,111,223,112,225, - 113,227,114,229,115,231,116,233,117,235,118,237,119,239,120,241,121,243, - 122,245,123,247,124,249,125,251,126,253,127,255,128,257,129,259,130,261, - 131,263,132,265,133,267,134,269,135,271,136,273,137,275,138,277,139,279, - 140,281,141,283,142,285,143,287,144,289,145,291,146,293,147,295,148,297, - 149,299,150,301,151,303,152,305,153,307,154,309,155,311,156,313,157,315, - 158,317,159,319,160,321,161,323,162,325,163,327,164,329,165,331,166,333, - 167,335,168,337,169,339,170,341,171,343,172,345,173,347,174,349,175,351, - 176,353,177,355,178,357,179,359,180,361,181,363,182,365,183,367,184,369, - 185,371,186,373,187,375,188,377,189,379,190,381,191,383,192,385,193,387, - 194,389,195,391,196,393,197,395,198,397,199,399,200,401,201,403,202,405, - 203,407,204,409,205,411,206,413,207,415,208,417,209,419,210,421,211,423, - 212,425,213,427,214,429,215,431,216,433,217,435,218,437,219,439,220,441, - 221,443,222,445,223,447,224,449,225,451,226,453,227,455,228,457,229,459, - 230,461,231,463,232,465,233,467,234,469,235,471,236,473,237,475,238,477, - 239,479,240,481,241,483,242,485,243,487,244,489,245,491,246,493,247,495, - 248,497,249,499,250,501,251,503,252,505,253,507,254,509,255,511,256,513, - 257,515,258,517,259,519,260,521,261,523,262,525,263,527,264,529,265,531, - 266,533,267,535,268,537,269,539,270,541,271,543,272,545,273,547,274,549, - 275,551,276,553,277,555,278,557,279,559,280,561,281,563,282,565,283,567, - 284,569,285,571,286,573,287,575,288,577,289,579,290,581,291,583,292,585, - 293,587,294,589,295,591,296,593,297,595,298,597,299,599,300,601,301,603, - 302,605,303,607,304,609,305,611,306,613,307,615,308,617,309,619,310,621, - 311,623,312,625,313,627,314,629,315,631,316,633,317,635,318,637,319,639, - 320,641,321,643,322,645,323,647,324,649,325,651,326,653,327,655,328,657, - 329,659,330,661,331,663,332,665,333,667,334,669,335,671,336,673,337,675, - 338,677,339,679,340,681,341,683,342,685,343,687,344,689,345,691,346,693, - 347,695,348,697,349,699,0,701,0,703,0,705,0,707,0,709,0,711,0,713,0,715, - 0,717,0,1,0,13,3,0,9,10,13,13,32,32,2,0,10,10,13,13,2,0,47,47,92,92,3,0, - 32,32,47,47,92,92,2,0,92,92,96,96,2,0,43,43,45,45,4,0,48,57,65,90,95,95, - 97,122,3,0,65,90,95,95,97,122,1,0,48,57,2,0,65,90,97,122,2,0,34,34,92,92, - 2,0,39,39,92,92,1,0,48,49,3327,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7, - 1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0, - 0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1, - 0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0, - 0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1, - 0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0, - 0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1, - 0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0, - 0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1, - 0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0, - 0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0, - 0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0, - 127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137, - 1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1, - 0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0, - 0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0, - 0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0, - 0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0, - 189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199, - 1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1, - 0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0, - 0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0, - 0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0,0,0, - 0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0,0,0, - 251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0,0,259,1,0,0,0,0,261, - 1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0,0,269,1,0,0,0,0,271,1, - 0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0, - 0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0, - 0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0, - 0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0, - 313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0,323, - 1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0,0,0,0,333,1, - 0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0, - 0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0, - 0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0, - 0,365,1,0,0,0,0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0, - 375,1,0,0,0,0,377,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385, - 1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1, - 0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0,403,1,0,0,0,0,405,1,0, - 0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413,1,0,0,0,0,415,1,0,0, - 0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1,0,0,0,0,425,1,0,0,0, - 0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433,1,0,0,0,0,435,1,0,0,0,0, - 437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0,0,443,1,0,0,0,0,445,1,0,0,0,0,447, - 1,0,0,0,0,449,1,0,0,0,0,451,1,0,0,0,0,453,1,0,0,0,0,455,1,0,0,0,0,457,1, - 0,0,0,0,459,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0, - 0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0, - 0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0, - 0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0,0,0,497,1,0,0,0,0, - 499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0,0,507,1,0,0,0,0,509, - 1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0,0,0,0,517,1,0,0,0,0,519,1, - 0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525,1,0,0,0,0,527,1,0,0,0,0,529,1,0, - 0,0,0,531,1,0,0,0,0,533,1,0,0,0,0,535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0, - 0,0,541,1,0,0,0,0,543,1,0,0,0,0,545,1,0,0,0,0,547,1,0,0,0,0,549,1,0,0,0, - 0,551,1,0,0,0,0,553,1,0,0,0,0,555,1,0,0,0,0,557,1,0,0,0,0,559,1,0,0,0,0, - 561,1,0,0,0,0,563,1,0,0,0,0,565,1,0,0,0,0,567,1,0,0,0,0,569,1,0,0,0,0,571, - 1,0,0,0,0,573,1,0,0,0,0,575,1,0,0,0,0,577,1,0,0,0,0,579,1,0,0,0,0,581,1, - 0,0,0,0,583,1,0,0,0,0,585,1,0,0,0,0,587,1,0,0,0,0,589,1,0,0,0,0,591,1,0, - 0,0,0,593,1,0,0,0,0,595,1,0,0,0,0,597,1,0,0,0,0,599,1,0,0,0,0,601,1,0,0, - 0,0,603,1,0,0,0,0,605,1,0,0,0,0,607,1,0,0,0,0,609,1,0,0,0,0,611,1,0,0,0, - 0,613,1,0,0,0,0,615,1,0,0,0,0,617,1,0,0,0,0,619,1,0,0,0,0,621,1,0,0,0,0, - 623,1,0,0,0,0,625,1,0,0,0,0,627,1,0,0,0,0,629,1,0,0,0,0,631,1,0,0,0,0,633, - 1,0,0,0,0,635,1,0,0,0,0,637,1,0,0,0,0,639,1,0,0,0,0,641,1,0,0,0,0,643,1, - 0,0,0,0,645,1,0,0,0,0,647,1,0,0,0,0,649,1,0,0,0,0,651,1,0,0,0,0,653,1,0, - 0,0,0,655,1,0,0,0,0,657,1,0,0,0,0,659,1,0,0,0,0,661,1,0,0,0,0,663,1,0,0, - 0,0,665,1,0,0,0,0,667,1,0,0,0,0,669,1,0,0,0,0,671,1,0,0,0,0,673,1,0,0,0, - 0,675,1,0,0,0,0,677,1,0,0,0,0,679,1,0,0,0,0,681,1,0,0,0,0,683,1,0,0,0,0, - 685,1,0,0,0,0,687,1,0,0,0,0,689,1,0,0,0,0,691,1,0,0,0,0,693,1,0,0,0,0,695, - 1,0,0,0,0,697,1,0,0,0,1,720,1,0,0,0,3,726,1,0,0,0,5,768,1,0,0,0,7,772,1, - 0,0,0,9,779,1,0,0,0,11,784,1,0,0,0,13,788,1,0,0,0,15,791,1,0,0,0,17,795, - 1,0,0,0,19,799,1,0,0,0,21,808,1,0,0,0,23,814,1,0,0,0,25,820,1,0,0,0,27, - 823,1,0,0,0,29,832,1,0,0,0,31,837,1,0,0,0,33,842,1,0,0,0,35,849,1,0,0,0, - 37,855,1,0,0,0,39,862,1,0,0,0,41,868,1,0,0,0,43,871,1,0,0,0,45,874,1,0, - 0,0,47,878,1,0,0,0,49,881,1,0,0,0,51,885,1,0,0,0,53,888,1,0,0,0,55,895, - 1,0,0,0,57,903,1,0,0,0,59,908,1,0,0,0,61,914,1,0,0,0,63,917,1,0,0,0,65, - 922,1,0,0,0,67,928,1,0,0,0,69,934,1,0,0,0,71,938,1,0,0,0,73,943,1,0,0,0, - 75,947,1,0,0,0,77,956,1,0,0,0,79,961,1,0,0,0,81,966,1,0,0,0,83,971,1,0, - 0,0,85,976,1,0,0,0,87,982,1,0,0,0,89,986,1,0,0,0,91,991,1,0,0,0,93,997, - 1,0,0,0,95,1003,1,0,0,0,97,1009,1,0,0,0,99,1014,1,0,0,0,101,1019,1,0,0, - 0,103,1025,1,0,0,0,105,1030,1,0,0,0,107,1035,1,0,0,0,109,1043,1,0,0,0,111, - 1046,1,0,0,0,113,1052,1,0,0,0,115,1060,1,0,0,0,117,1067,1,0,0,0,119,1072, - 1,0,0,0,121,1082,1,0,0,0,123,1088,1,0,0,0,125,1093,1,0,0,0,127,1103,1,0, - 0,0,129,1113,1,0,0,0,131,1123,1,0,0,0,133,1131,1,0,0,0,135,1137,1,0,0,0, - 137,1143,1,0,0,0,139,1148,1,0,0,0,141,1153,1,0,0,0,143,1161,1,0,0,0,145, - 1168,1,0,0,0,147,1175,1,0,0,0,149,1181,1,0,0,0,151,1191,1,0,0,0,153,1196, - 1,0,0,0,155,1204,1,0,0,0,157,1212,1,0,0,0,159,1222,1,0,0,0,161,1229,1,0, - 0,0,163,1236,1,0,0,0,165,1243,1,0,0,0,167,1248,1,0,0,0,169,1257,1,0,0,0, - 171,1265,1,0,0,0,173,1270,1,0,0,0,175,1285,1,0,0,0,177,1305,1,0,0,0,179, - 1320,1,0,0,0,181,1327,1,0,0,0,183,1335,1,0,0,0,185,1343,1,0,0,0,187,1348, - 1,0,0,0,189,1353,1,0,0,0,191,1358,1,0,0,0,193,1365,1,0,0,0,195,1373,1,0, - 0,0,197,1380,1,0,0,0,199,1384,1,0,0,0,201,1391,1,0,0,0,203,1399,1,0,0,0, - 205,1410,1,0,0,0,207,1420,1,0,0,0,209,1425,1,0,0,0,211,1431,1,0,0,0,213, - 1438,1,0,0,0,215,1447,1,0,0,0,217,1457,1,0,0,0,219,1460,1,0,0,0,221,1472, - 1,0,0,0,223,1481,1,0,0,0,225,1487,1,0,0,0,227,1494,1,0,0,0,229,1501,1,0, - 0,0,231,1509,1,0,0,0,233,1513,1,0,0,0,235,1519,1,0,0,0,237,1524,1,0,0,0, - 239,1530,1,0,0,0,241,1542,1,0,0,0,243,1549,1,0,0,0,245,1558,1,0,0,0,247, - 1564,1,0,0,0,249,1571,1,0,0,0,251,1576,1,0,0,0,253,1584,1,0,0,0,255,1593, - 1,0,0,0,257,1596,1,0,0,0,259,1605,1,0,0,0,261,1613,1,0,0,0,263,1619,1,0, - 0,0,265,1623,1,0,0,0,267,1634,1,0,0,0,269,1641,1,0,0,0,271,1645,1,0,0,0, - 273,1648,1,0,0,0,275,1653,1,0,0,0,277,1661,1,0,0,0,279,1672,1,0,0,0,281, - 1682,1,0,0,0,283,1692,1,0,0,0,285,1699,1,0,0,0,287,1705,1,0,0,0,289,1711, - 1,0,0,0,291,1727,1,0,0,0,293,1740,1,0,0,0,295,1753,1,0,0,0,297,1763,1,0, - 0,0,299,1770,1,0,0,0,301,1781,1,0,0,0,303,1792,1,0,0,0,305,1798,1,0,0,0, - 307,1803,1,0,0,0,309,1811,1,0,0,0,311,1817,1,0,0,0,313,1827,1,0,0,0,315, - 1836,1,0,0,0,317,1845,1,0,0,0,319,1853,1,0,0,0,321,1859,1,0,0,0,323,1865, - 1,0,0,0,325,1873,1,0,0,0,327,1878,1,0,0,0,329,1888,1,0,0,0,331,1895,1,0, - 0,0,333,1905,1,0,0,0,335,1913,1,0,0,0,337,1919,1,0,0,0,339,1933,1,0,0,0, - 341,1946,1,0,0,0,343,1954,1,0,0,0,345,1961,1,0,0,0,347,1968,1,0,0,0,349, - 1980,1,0,0,0,351,1989,1,0,0,0,353,1998,1,0,0,0,355,2006,1,0,0,0,357,2016, - 1,0,0,0,359,2027,1,0,0,0,361,2033,1,0,0,0,363,2041,1,0,0,0,365,2053,1,0, - 0,0,367,2060,1,0,0,0,369,2068,1,0,0,0,371,2079,1,0,0,0,373,2088,1,0,0,0, - 375,2098,1,0,0,0,377,2105,1,0,0,0,379,2111,1,0,0,0,381,2123,1,0,0,0,383, - 2136,1,0,0,0,385,2145,1,0,0,0,387,2155,1,0,0,0,389,2159,1,0,0,0,391,2168, - 1,0,0,0,393,2176,1,0,0,0,395,2184,1,0,0,0,397,2189,1,0,0,0,399,2200,1,0, - 0,0,401,2212,1,0,0,0,403,2221,1,0,0,0,405,2229,1,0,0,0,407,2236,1,0,0,0, - 409,2242,1,0,0,0,411,2247,1,0,0,0,413,2254,1,0,0,0,415,2259,1,0,0,0,417, - 2266,1,0,0,0,419,2274,1,0,0,0,421,2281,1,0,0,0,423,2288,1,0,0,0,425,2293, - 1,0,0,0,427,2300,1,0,0,0,429,2305,1,0,0,0,431,2311,1,0,0,0,433,2323,1,0, - 0,0,435,2334,1,0,0,0,437,2347,1,0,0,0,439,2353,1,0,0,0,441,2361,1,0,0,0, - 443,2367,1,0,0,0,445,2374,1,0,0,0,447,2379,1,0,0,0,449,2385,1,0,0,0,451, - 2392,1,0,0,0,453,2402,1,0,0,0,455,2409,1,0,0,0,457,2415,1,0,0,0,459,2420, - 1,0,0,0,461,2427,1,0,0,0,463,2430,1,0,0,0,465,2437,1,0,0,0,467,2447,1,0, - 0,0,469,2457,1,0,0,0,471,2469,1,0,0,0,473,2481,1,0,0,0,475,2491,1,0,0,0, - 477,2502,1,0,0,0,479,2510,1,0,0,0,481,2519,1,0,0,0,483,2524,1,0,0,0,485, - 2530,1,0,0,0,487,2537,1,0,0,0,489,2541,1,0,0,0,491,2546,1,0,0,0,493,2559, - 1,0,0,0,495,2579,1,0,0,0,497,2599,1,0,0,0,499,2610,1,0,0,0,501,2626,1,0, - 0,0,503,2643,1,0,0,0,505,2650,1,0,0,0,507,2659,1,0,0,0,509,2665,1,0,0,0, - 511,2670,1,0,0,0,513,2678,1,0,0,0,515,2685,1,0,0,0,517,2689,1,0,0,0,519, - 2696,1,0,0,0,521,2708,1,0,0,0,523,2717,1,0,0,0,525,2726,1,0,0,0,527,2734, - 1,0,0,0,529,2739,1,0,0,0,531,2746,1,0,0,0,533,2750,1,0,0,0,535,2759,1,0, - 0,0,537,2770,1,0,0,0,539,2778,1,0,0,0,541,2783,1,0,0,0,543,2790,1,0,0,0, - 545,2795,1,0,0,0,547,2801,1,0,0,0,549,2809,1,0,0,0,551,2825,1,0,0,0,553, - 2834,1,0,0,0,555,2842,1,0,0,0,557,2846,1,0,0,0,559,2850,1,0,0,0,561,2855, - 1,0,0,0,563,2860,1,0,0,0,565,2867,1,0,0,0,567,2874,1,0,0,0,569,2880,1,0, - 0,0,571,2884,1,0,0,0,573,2889,1,0,0,0,575,2897,1,0,0,0,577,2904,1,0,0,0, - 579,2914,1,0,0,0,581,2920,1,0,0,0,583,2928,1,0,0,0,585,2932,1,0,0,0,587, - 2940,1,0,0,0,589,2948,1,0,0,0,591,2957,1,0,0,0,593,2961,1,0,0,0,595,2969, - 1,0,0,0,597,2976,1,0,0,0,599,2982,1,0,0,0,601,2989,1,0,0,0,603,2994,1,0, - 0,0,605,2999,1,0,0,0,607,3009,1,0,0,0,609,3023,1,0,0,0,611,3032,1,0,0,0, - 613,3040,1,0,0,0,615,3044,1,0,0,0,617,3048,1,0,0,0,619,3053,1,0,0,0,621, - 3062,1,0,0,0,623,3064,1,0,0,0,625,3066,1,0,0,0,627,3068,1,0,0,0,629,3070, - 1,0,0,0,631,3072,1,0,0,0,633,3074,1,0,0,0,635,3076,1,0,0,0,637,3078,1,0, - 0,0,639,3080,1,0,0,0,641,3082,1,0,0,0,643,3084,1,0,0,0,645,3086,1,0,0,0, - 647,3088,1,0,0,0,649,3090,1,0,0,0,651,3092,1,0,0,0,653,3094,1,0,0,0,655, - 3096,1,0,0,0,657,3098,1,0,0,0,659,3100,1,0,0,0,661,3102,1,0,0,0,663,3104, - 1,0,0,0,665,3106,1,0,0,0,667,3108,1,0,0,0,669,3110,1,0,0,0,671,3112,1,0, - 0,0,673,3114,1,0,0,0,675,3116,1,0,0,0,677,3119,1,0,0,0,679,3122,1,0,0,0, - 681,3124,1,0,0,0,683,3126,1,0,0,0,685,3132,1,0,0,0,687,3135,1,0,0,0,689, - 3182,1,0,0,0,691,3184,1,0,0,0,693,3186,1,0,0,0,695,3188,1,0,0,0,697,3190, - 1,0,0,0,699,3200,1,0,0,0,701,3204,1,0,0,0,703,3217,1,0,0,0,705,3229,1,0, - 0,0,707,3243,1,0,0,0,709,3245,1,0,0,0,711,3247,1,0,0,0,713,3260,1,0,0,0, - 715,3273,1,0,0,0,717,3282,1,0,0,0,719,721,7,0,0,0,720,719,1,0,0,0,721,722, - 1,0,0,0,722,720,1,0,0,0,722,723,1,0,0,0,723,724,1,0,0,0,724,725,6,0,0,0, - 725,2,1,0,0,0,726,727,5,47,0,0,727,728,5,42,0,0,728,732,1,0,0,0,729,731, - 9,0,0,0,730,729,1,0,0,0,731,734,1,0,0,0,732,733,1,0,0,0,732,730,1,0,0,0, - 733,735,1,0,0,0,734,732,1,0,0,0,735,736,5,42,0,0,736,737,5,47,0,0,737,738, - 1,0,0,0,738,739,6,1,0,0,739,4,1,0,0,0,740,741,5,45,0,0,741,744,5,45,0,0, - 742,744,5,35,0,0,743,740,1,0,0,0,743,742,1,0,0,0,744,748,1,0,0,0,745,747, - 8,1,0,0,746,745,1,0,0,0,747,750,1,0,0,0,748,746,1,0,0,0,748,749,1,0,0,0, - 749,756,1,0,0,0,750,748,1,0,0,0,751,753,5,13,0,0,752,751,1,0,0,0,752,753, - 1,0,0,0,753,754,1,0,0,0,754,757,5,10,0,0,755,757,5,0,0,1,756,752,1,0,0, - 0,756,755,1,0,0,0,757,769,1,0,0,0,758,759,5,45,0,0,759,760,5,45,0,0,760, - 766,1,0,0,0,761,763,5,13,0,0,762,761,1,0,0,0,762,763,1,0,0,0,763,764,1, - 0,0,0,764,767,5,10,0,0,765,767,5,0,0,1,766,762,1,0,0,0,766,765,1,0,0,0, - 767,769,1,0,0,0,768,743,1,0,0,0,768,758,1,0,0,0,769,770,1,0,0,0,770,771, - 6,2,0,0,771,6,1,0,0,0,772,773,5,83,0,0,773,774,5,69,0,0,774,775,5,76,0, - 0,775,776,5,69,0,0,776,777,5,67,0,0,777,778,5,84,0,0,778,8,1,0,0,0,779, - 780,5,70,0,0,780,781,5,82,0,0,781,782,5,79,0,0,782,783,5,77,0,0,783,10, - 1,0,0,0,784,785,5,65,0,0,785,786,5,68,0,0,786,787,5,68,0,0,787,12,1,0,0, - 0,788,789,5,65,0,0,789,790,5,83,0,0,790,14,1,0,0,0,791,792,5,65,0,0,792, - 793,5,76,0,0,793,794,5,76,0,0,794,16,1,0,0,0,795,796,5,65,0,0,796,797,5, - 78,0,0,797,798,5,89,0,0,798,18,1,0,0,0,799,800,5,68,0,0,800,801,5,73,0, - 0,801,802,5,83,0,0,802,803,5,84,0,0,803,804,5,73,0,0,804,805,5,78,0,0,805, - 806,5,67,0,0,806,807,5,84,0,0,807,20,1,0,0,0,808,809,5,87,0,0,809,810,5, - 72,0,0,810,811,5,69,0,0,811,812,5,82,0,0,812,813,5,69,0,0,813,22,1,0,0, - 0,814,815,5,71,0,0,815,816,5,82,0,0,816,817,5,79,0,0,817,818,5,85,0,0,818, - 819,5,80,0,0,819,24,1,0,0,0,820,821,5,66,0,0,821,822,5,89,0,0,822,26,1, - 0,0,0,823,824,5,71,0,0,824,825,5,82,0,0,825,826,5,79,0,0,826,827,5,85,0, - 0,827,828,5,80,0,0,828,829,5,73,0,0,829,830,5,78,0,0,830,831,5,71,0,0,831, - 28,1,0,0,0,832,833,5,83,0,0,833,834,5,69,0,0,834,835,5,84,0,0,835,836,5, - 83,0,0,836,30,1,0,0,0,837,838,5,67,0,0,838,839,5,85,0,0,839,840,5,66,0, - 0,840,841,5,69,0,0,841,32,1,0,0,0,842,843,5,82,0,0,843,844,5,79,0,0,844, - 845,5,76,0,0,845,846,5,76,0,0,846,847,5,85,0,0,847,848,5,80,0,0,848,34, - 1,0,0,0,849,850,5,79,0,0,850,851,5,82,0,0,851,852,5,68,0,0,852,853,5,69, - 0,0,853,854,5,82,0,0,854,36,1,0,0,0,855,856,5,72,0,0,856,857,5,65,0,0,857, - 858,5,86,0,0,858,859,5,73,0,0,859,860,5,78,0,0,860,861,5,71,0,0,861,38, - 1,0,0,0,862,863,5,76,0,0,863,864,5,73,0,0,864,865,5,77,0,0,865,866,5,73, - 0,0,866,867,5,84,0,0,867,40,1,0,0,0,868,869,5,65,0,0,869,870,5,84,0,0,870, - 42,1,0,0,0,871,872,5,79,0,0,872,873,5,82,0,0,873,44,1,0,0,0,874,875,5,65, - 0,0,875,876,5,78,0,0,876,877,5,68,0,0,877,46,1,0,0,0,878,879,5,73,0,0,879, - 880,5,78,0,0,880,48,1,0,0,0,881,882,5,78,0,0,882,883,5,79,0,0,883,884,5, - 84,0,0,884,50,1,0,0,0,885,886,5,78,0,0,886,887,5,79,0,0,887,52,1,0,0,0, - 888,889,5,69,0,0,889,890,5,88,0,0,890,891,5,73,0,0,891,892,5,83,0,0,892, - 893,5,84,0,0,893,894,5,83,0,0,894,54,1,0,0,0,895,896,5,66,0,0,896,897,5, - 69,0,0,897,898,5,84,0,0,898,899,5,87,0,0,899,900,5,69,0,0,900,901,5,69, - 0,0,901,902,5,78,0,0,902,56,1,0,0,0,903,904,5,76,0,0,904,905,5,73,0,0,905, - 906,5,75,0,0,906,907,5,69,0,0,907,58,1,0,0,0,908,909,5,82,0,0,909,910,5, - 76,0,0,910,911,5,73,0,0,911,912,5,75,0,0,912,913,5,69,0,0,913,60,1,0,0, - 0,914,915,5,73,0,0,915,916,5,83,0,0,916,62,1,0,0,0,917,918,5,84,0,0,918, - 919,5,82,0,0,919,920,5,85,0,0,920,921,5,69,0,0,921,64,1,0,0,0,922,923,5, - 70,0,0,923,924,5,65,0,0,924,925,5,76,0,0,925,926,5,83,0,0,926,927,5,69, - 0,0,927,66,1,0,0,0,928,929,5,78,0,0,929,930,5,85,0,0,930,931,5,76,0,0,931, - 932,5,76,0,0,932,933,5,83,0,0,933,68,1,0,0,0,934,935,5,65,0,0,935,936,5, - 83,0,0,936,937,5,67,0,0,937,70,1,0,0,0,938,939,5,68,0,0,939,940,5,69,0, - 0,940,941,5,83,0,0,941,942,5,67,0,0,942,72,1,0,0,0,943,944,5,70,0,0,944, - 945,5,79,0,0,945,946,5,82,0,0,946,74,1,0,0,0,947,948,5,73,0,0,948,949,5, - 78,0,0,949,950,5,84,0,0,950,951,5,69,0,0,951,952,5,82,0,0,952,953,5,86, - 0,0,953,954,5,65,0,0,954,955,5,76,0,0,955,76,1,0,0,0,956,957,5,67,0,0,957, - 958,5,65,0,0,958,959,5,83,0,0,959,960,5,69,0,0,960,78,1,0,0,0,961,962,5, - 87,0,0,962,963,5,72,0,0,963,964,5,69,0,0,964,965,5,78,0,0,965,80,1,0,0, - 0,966,967,5,84,0,0,967,968,5,72,0,0,968,969,5,69,0,0,969,970,5,78,0,0,970, - 82,1,0,0,0,971,972,5,69,0,0,972,973,5,76,0,0,973,974,5,83,0,0,974,975,5, - 69,0,0,975,84,1,0,0,0,976,977,5,66,0,0,977,978,5,69,0,0,978,979,5,71,0, - 0,979,980,5,73,0,0,980,981,5,78,0,0,981,86,1,0,0,0,982,983,5,69,0,0,983, - 984,5,78,0,0,984,985,5,68,0,0,985,88,1,0,0,0,986,987,5,74,0,0,987,988,5, - 79,0,0,988,989,5,73,0,0,989,990,5,78,0,0,990,90,1,0,0,0,991,992,5,67,0, - 0,992,993,5,82,0,0,993,994,5,79,0,0,994,995,5,83,0,0,995,996,5,83,0,0,996, - 92,1,0,0,0,997,998,5,79,0,0,998,999,5,85,0,0,999,1000,5,84,0,0,1000,1001, - 5,69,0,0,1001,1002,5,82,0,0,1002,94,1,0,0,0,1003,1004,5,73,0,0,1004,1005, - 5,78,0,0,1005,1006,5,78,0,0,1006,1007,5,69,0,0,1007,1008,5,82,0,0,1008, - 96,1,0,0,0,1009,1010,5,76,0,0,1010,1011,5,69,0,0,1011,1012,5,70,0,0,1012, - 1013,5,84,0,0,1013,98,1,0,0,0,1014,1015,5,83,0,0,1015,1016,5,69,0,0,1016, - 1017,5,77,0,0,1017,1018,5,73,0,0,1018,100,1,0,0,0,1019,1020,5,82,0,0,1020, - 1021,5,73,0,0,1021,1022,5,71,0,0,1022,1023,5,72,0,0,1023,1024,5,84,0,0, - 1024,102,1,0,0,0,1025,1026,5,70,0,0,1026,1027,5,85,0,0,1027,1028,5,76,0, - 0,1028,1029,5,76,0,0,1029,104,1,0,0,0,1030,1031,5,85,0,0,1031,1032,5,83, - 0,0,1032,1033,5,69,0,0,1033,1034,5,82,0,0,1034,106,1,0,0,0,1035,1036,5, - 78,0,0,1036,1037,5,65,0,0,1037,1038,5,84,0,0,1038,1039,5,85,0,0,1039,1040, - 5,82,0,0,1040,1041,5,65,0,0,1041,1042,5,76,0,0,1042,108,1,0,0,0,1043,1044, - 5,79,0,0,1044,1045,5,78,0,0,1045,110,1,0,0,0,1046,1047,5,80,0,0,1047,1048, - 5,73,0,0,1048,1049,5,86,0,0,1049,1050,5,79,0,0,1050,1051,5,84,0,0,1051, - 112,1,0,0,0,1052,1053,5,76,0,0,1053,1054,5,65,0,0,1054,1055,5,84,0,0,1055, - 1056,5,69,0,0,1056,1057,5,82,0,0,1057,1058,5,65,0,0,1058,1059,5,76,0,0, - 1059,114,1,0,0,0,1060,1061,5,87,0,0,1061,1062,5,73,0,0,1062,1063,5,78,0, - 0,1063,1064,5,68,0,0,1064,1065,5,79,0,0,1065,1066,5,87,0,0,1066,116,1,0, - 0,0,1067,1068,5,79,0,0,1068,1069,5,86,0,0,1069,1070,5,69,0,0,1070,1071, - 5,82,0,0,1071,118,1,0,0,0,1072,1073,5,80,0,0,1073,1074,5,65,0,0,1074,1075, - 5,82,0,0,1075,1076,5,84,0,0,1076,1077,5,73,0,0,1077,1078,5,84,0,0,1078, - 1079,5,73,0,0,1079,1080,5,79,0,0,1080,1081,5,78,0,0,1081,120,1,0,0,0,1082, - 1083,5,82,0,0,1083,1084,5,65,0,0,1084,1085,5,78,0,0,1085,1086,5,71,0,0, - 1086,1087,5,69,0,0,1087,122,1,0,0,0,1088,1089,5,82,0,0,1089,1090,5,79,0, - 0,1090,1091,5,87,0,0,1091,1092,5,83,0,0,1092,124,1,0,0,0,1093,1094,5,85, - 0,0,1094,1095,5,78,0,0,1095,1096,5,66,0,0,1096,1097,5,79,0,0,1097,1098, - 5,85,0,0,1098,1099,5,78,0,0,1099,1100,5,68,0,0,1100,1101,5,69,0,0,1101, - 1102,5,68,0,0,1102,126,1,0,0,0,1103,1104,5,80,0,0,1104,1105,5,82,0,0,1105, - 1106,5,69,0,0,1106,1107,5,67,0,0,1107,1108,5,69,0,0,1108,1109,5,68,0,0, - 1109,1110,5,73,0,0,1110,1111,5,78,0,0,1111,1112,5,71,0,0,1112,128,1,0,0, - 0,1113,1114,5,70,0,0,1114,1115,5,79,0,0,1115,1116,5,76,0,0,1116,1117,5, - 76,0,0,1117,1118,5,79,0,0,1118,1119,5,87,0,0,1119,1120,5,73,0,0,1120,1121, - 5,78,0,0,1121,1122,5,71,0,0,1122,130,1,0,0,0,1123,1124,5,67,0,0,1124,1125, - 5,85,0,0,1125,1126,5,82,0,0,1126,1127,5,82,0,0,1127,1128,5,69,0,0,1128, - 1129,5,78,0,0,1129,1130,5,84,0,0,1130,132,1,0,0,0,1131,1132,5,70,0,0,1132, - 1133,5,73,0,0,1133,1134,5,82,0,0,1134,1135,5,83,0,0,1135,1136,5,84,0,0, - 1136,134,1,0,0,0,1137,1138,5,65,0,0,1138,1139,5,70,0,0,1139,1140,5,84,0, - 0,1140,1141,5,69,0,0,1141,1142,5,82,0,0,1142,136,1,0,0,0,1143,1144,5,76, - 0,0,1144,1145,5,65,0,0,1145,1146,5,83,0,0,1146,1147,5,84,0,0,1147,138,1, - 0,0,0,1148,1149,5,87,0,0,1149,1150,5,73,0,0,1150,1151,5,84,0,0,1151,1152, - 5,72,0,0,1152,140,1,0,0,0,1153,1154,5,87,0,0,1154,1155,5,73,0,0,1155,1156, - 5,84,0,0,1156,1157,5,72,0,0,1157,1158,5,79,0,0,1158,1159,5,85,0,0,1159, - 1160,5,84,0,0,1160,142,1,0,0,0,1161,1162,5,86,0,0,1162,1163,5,65,0,0,1163, - 1164,5,76,0,0,1164,1165,5,85,0,0,1165,1166,5,69,0,0,1166,1167,5,83,0,0, - 1167,144,1,0,0,0,1168,1169,5,67,0,0,1169,1170,5,82,0,0,1170,1171,5,69,0, - 0,1171,1172,5,65,0,0,1172,1173,5,84,0,0,1173,1174,5,69,0,0,1174,146,1,0, - 0,0,1175,1176,5,84,0,0,1176,1177,5,65,0,0,1177,1178,5,66,0,0,1178,1179, - 5,76,0,0,1179,1180,5,69,0,0,1180,148,1,0,0,0,1181,1182,5,68,0,0,1182,1183, - 5,73,0,0,1183,1184,5,82,0,0,1184,1185,5,69,0,0,1185,1186,5,67,0,0,1186, - 1187,5,84,0,0,1187,1188,5,79,0,0,1188,1189,5,82,0,0,1189,1190,5,89,0,0, - 1190,150,1,0,0,0,1191,1192,5,86,0,0,1192,1193,5,73,0,0,1193,1194,5,69,0, - 0,1194,1195,5,87,0,0,1195,152,1,0,0,0,1196,1197,5,82,0,0,1197,1198,5,69, - 0,0,1198,1199,5,80,0,0,1199,1200,5,76,0,0,1200,1201,5,65,0,0,1201,1202, - 5,67,0,0,1202,1203,5,69,0,0,1203,154,1,0,0,0,1204,1205,5,69,0,0,1205,1206, - 5,88,0,0,1206,1207,5,69,0,0,1207,1208,5,67,0,0,1208,1209,5,85,0,0,1209, - 1210,5,84,0,0,1210,1211,5,69,0,0,1211,156,1,0,0,0,1212,1213,5,83,0,0,1213, - 1214,5,84,0,0,1214,1215,5,65,0,0,1215,1216,5,84,0,0,1216,1217,5,69,0,0, - 1217,1218,5,77,0,0,1218,1219,5,69,0,0,1219,1220,5,78,0,0,1220,1221,5,84, - 0,0,1221,158,1,0,0,0,1222,1223,5,73,0,0,1223,1224,5,78,0,0,1224,1225,5, - 83,0,0,1225,1226,5,69,0,0,1226,1227,5,82,0,0,1227,1228,5,84,0,0,1228,160, - 1,0,0,0,1229,1230,5,68,0,0,1230,1231,5,69,0,0,1231,1232,5,76,0,0,1232,1233, - 5,69,0,0,1233,1234,5,84,0,0,1234,1235,5,69,0,0,1235,162,1,0,0,0,1236,1237, - 5,82,0,0,1237,1238,5,69,0,0,1238,1239,5,77,0,0,1239,1240,5,79,0,0,1240, - 1241,5,86,0,0,1241,1242,5,69,0,0,1242,164,1,0,0,0,1243,1244,5,73,0,0,1244, - 1245,5,78,0,0,1245,1246,5,84,0,0,1246,1247,5,79,0,0,1247,166,1,0,0,0,1248, - 1249,5,68,0,0,1249,1250,5,69,0,0,1250,1251,5,83,0,0,1251,1252,5,67,0,0, - 1252,1253,5,82,0,0,1253,1254,5,73,0,0,1254,1255,5,66,0,0,1255,1256,5,69, - 0,0,1256,168,1,0,0,0,1257,1258,5,69,0,0,1258,1259,5,88,0,0,1259,1260,5, - 80,0,0,1260,1261,5,76,0,0,1261,1262,5,65,0,0,1262,1263,5,73,0,0,1263,1264, - 5,78,0,0,1264,170,1,0,0,0,1265,1266,5,80,0,0,1266,1267,5,76,0,0,1267,1268, - 5,65,0,0,1268,1269,5,78,0,0,1269,172,1,0,0,0,1270,1271,5,67,0,0,1271,1272, - 5,72,0,0,1272,1273,5,65,0,0,1273,1274,5,78,0,0,1274,1275,5,71,0,0,1275, - 1276,5,69,0,0,1276,1277,5,76,0,0,1277,1278,5,79,0,0,1278,1279,5,71,0,0, - 1279,1280,5,95,0,0,1280,1281,5,77,0,0,1281,1282,5,79,0,0,1282,1283,5,68, - 0,0,1283,1284,5,69,0,0,1284,174,1,0,0,0,1285,1286,5,74,0,0,1286,1287,5, - 83,0,0,1287,1288,5,79,0,0,1288,1289,5,78,0,0,1289,1290,5,95,0,0,1290,1291, - 5,69,0,0,1291,1292,5,88,0,0,1292,1293,5,69,0,0,1293,1294,5,67,0,0,1294, - 1295,5,85,0,0,1295,1296,5,84,0,0,1296,1297,5,73,0,0,1297,1298,5,79,0,0, - 1298,1299,5,78,0,0,1299,1300,5,95,0,0,1300,1301,5,80,0,0,1301,1302,5,76, - 0,0,1302,1303,5,65,0,0,1303,1304,5,78,0,0,1304,176,1,0,0,0,1305,1306,5, - 69,0,0,1306,1307,5,83,0,0,1307,1308,5,84,0,0,1308,1309,5,73,0,0,1309,1310, - 5,77,0,0,1310,1311,5,65,0,0,1311,1312,5,84,0,0,1312,1313,5,69,0,0,1313, - 1314,5,68,0,0,1314,1315,5,95,0,0,1315,1316,5,67,0,0,1316,1317,5,79,0,0, - 1317,1318,5,83,0,0,1318,1319,5,84,0,0,1319,178,1,0,0,0,1320,1321,5,70,0, - 0,1321,1322,5,79,0,0,1322,1323,5,82,0,0,1323,1324,5,77,0,0,1324,1325,5, - 65,0,0,1325,1326,5,84,0,0,1326,180,1,0,0,0,1327,1328,5,76,0,0,1328,1329, - 5,79,0,0,1329,1330,5,71,0,0,1330,1331,5,73,0,0,1331,1332,5,67,0,0,1332, - 1333,5,65,0,0,1333,1334,5,76,0,0,1334,182,1,0,0,0,1335,1336,5,67,0,0,1336, - 1337,5,79,0,0,1337,1338,5,68,0,0,1338,1339,5,69,0,0,1339,1340,5,71,0,0, - 1340,1341,5,69,0,0,1341,1342,5,78,0,0,1342,184,1,0,0,0,1343,1344,5,67,0, - 0,1344,1345,5,79,0,0,1345,1346,5,83,0,0,1346,1347,5,84,0,0,1347,186,1,0, - 0,0,1348,1349,5,67,0,0,1349,1350,5,65,0,0,1350,1351,5,83,0,0,1351,1352, - 5,84,0,0,1352,188,1,0,0,0,1353,1354,5,83,0,0,1354,1355,5,72,0,0,1355,1356, - 5,79,0,0,1356,1357,5,87,0,0,1357,190,1,0,0,0,1358,1359,5,84,0,0,1359,1360, - 5,65,0,0,1360,1361,5,66,0,0,1361,1362,5,76,0,0,1362,1363,5,69,0,0,1363, - 1364,5,83,0,0,1364,192,1,0,0,0,1365,1366,5,67,0,0,1366,1367,5,79,0,0,1367, - 1368,5,76,0,0,1368,1369,5,85,0,0,1369,1370,5,77,0,0,1370,1371,5,78,0,0, - 1371,1372,5,83,0,0,1372,194,1,0,0,0,1373,1374,5,67,0,0,1374,1375,5,79,0, - 0,1375,1376,5,76,0,0,1376,1377,5,85,0,0,1377,1378,5,77,0,0,1378,1379,5, - 78,0,0,1379,196,1,0,0,0,1380,1381,5,85,0,0,1381,1382,5,83,0,0,1382,1383, - 5,69,0,0,1383,198,1,0,0,0,1384,1385,5,77,0,0,1385,1386,5,79,0,0,1386,1387, - 5,68,0,0,1387,1388,5,85,0,0,1388,1389,5,76,0,0,1389,1390,5,69,0,0,1390, - 200,1,0,0,0,1391,1392,5,77,0,0,1392,1393,5,79,0,0,1393,1394,5,68,0,0,1394, - 1395,5,85,0,0,1395,1396,5,76,0,0,1396,1397,5,69,0,0,1397,1398,5,83,0,0, - 1398,202,1,0,0,0,1399,1400,5,80,0,0,1400,1401,5,65,0,0,1401,1402,5,82,0, - 0,1402,1403,5,84,0,0,1403,1404,5,73,0,0,1404,1405,5,84,0,0,1405,1406,5, - 73,0,0,1406,1407,5,79,0,0,1407,1408,5,78,0,0,1408,1409,5,83,0,0,1409,204, - 1,0,0,0,1410,1411,5,70,0,0,1411,1412,5,85,0,0,1412,1413,5,78,0,0,1413,1414, - 5,67,0,0,1414,1415,5,84,0,0,1415,1416,5,73,0,0,1416,1417,5,79,0,0,1417, - 1418,5,78,0,0,1418,1419,5,83,0,0,1419,206,1,0,0,0,1420,1421,5,68,0,0,1421, - 1422,5,82,0,0,1422,1423,5,79,0,0,1423,1424,5,80,0,0,1424,208,1,0,0,0,1425, - 1426,5,85,0,0,1426,1427,5,78,0,0,1427,1428,5,73,0,0,1428,1429,5,79,0,0, - 1429,1430,5,78,0,0,1430,210,1,0,0,0,1431,1432,5,69,0,0,1432,1433,5,88,0, - 0,1433,1434,5,67,0,0,1434,1435,5,69,0,0,1435,1436,5,80,0,0,1436,1437,5, - 84,0,0,1437,212,1,0,0,0,1438,1439,5,83,0,0,1439,1440,5,69,0,0,1440,1441, - 5,84,0,0,1441,1442,5,77,0,0,1442,1443,5,73,0,0,1443,1444,5,78,0,0,1444, - 1445,5,85,0,0,1445,1446,5,83,0,0,1446,214,1,0,0,0,1447,1448,5,73,0,0,1448, - 1449,5,78,0,0,1449,1450,5,84,0,0,1450,1451,5,69,0,0,1451,1452,5,82,0,0, - 1452,1453,5,83,0,0,1453,1454,5,69,0,0,1454,1455,5,67,0,0,1455,1456,5,84, - 0,0,1456,216,1,0,0,0,1457,1458,5,84,0,0,1458,1459,5,79,0,0,1459,218,1,0, - 0,0,1460,1461,5,84,0,0,1461,1462,5,65,0,0,1462,1463,5,66,0,0,1463,1464, - 5,76,0,0,1464,1465,5,69,0,0,1465,1466,5,83,0,0,1466,1467,5,65,0,0,1467, - 1468,5,77,0,0,1468,1469,5,80,0,0,1469,1470,5,76,0,0,1470,1471,5,69,0,0, - 1471,220,1,0,0,0,1472,1473,5,83,0,0,1473,1474,5,84,0,0,1474,1475,5,82,0, - 0,1475,1476,5,65,0,0,1476,1477,5,84,0,0,1477,1478,5,73,0,0,1478,1479,5, - 70,0,0,1479,1480,5,89,0,0,1480,222,1,0,0,0,1481,1482,5,65,0,0,1482,1483, - 5,76,0,0,1483,1484,5,84,0,0,1484,1485,5,69,0,0,1485,1486,5,82,0,0,1486, - 224,1,0,0,0,1487,1488,5,82,0,0,1488,1489,5,69,0,0,1489,1490,5,78,0,0,1490, - 1491,5,65,0,0,1491,1492,5,77,0,0,1492,1493,5,69,0,0,1493,226,1,0,0,0,1494, - 1495,5,83,0,0,1495,1496,5,84,0,0,1496,1497,5,82,0,0,1497,1498,5,85,0,0, - 1498,1499,5,67,0,0,1499,1500,5,84,0,0,1500,228,1,0,0,0,1501,1502,5,67,0, - 0,1502,1503,5,79,0,0,1503,1504,5,77,0,0,1504,1505,5,77,0,0,1505,1506,5, - 69,0,0,1506,1507,5,78,0,0,1507,1508,5,84,0,0,1508,230,1,0,0,0,1509,1510, - 5,83,0,0,1510,1511,5,69,0,0,1511,1512,5,84,0,0,1512,232,1,0,0,0,1513,1514, - 5,82,0,0,1514,1515,5,69,0,0,1515,1516,5,83,0,0,1516,1517,5,69,0,0,1517, - 1518,5,84,0,0,1518,234,1,0,0,0,1519,1520,5,68,0,0,1520,1521,5,65,0,0,1521, - 1522,5,84,0,0,1522,1523,5,65,0,0,1523,236,1,0,0,0,1524,1525,5,83,0,0,1525, - 1526,5,84,0,0,1526,1527,5,65,0,0,1527,1528,5,82,0,0,1528,1529,5,84,0,0, - 1529,238,1,0,0,0,1530,1531,5,84,0,0,1531,1532,5,82,0,0,1532,1533,5,65,0, - 0,1533,1534,5,78,0,0,1534,1535,5,83,0,0,1535,1536,5,65,0,0,1536,1537,5, - 67,0,0,1537,1538,5,84,0,0,1538,1539,5,73,0,0,1539,1540,5,79,0,0,1540,1541, - 5,78,0,0,1541,240,1,0,0,0,1542,1543,5,67,0,0,1543,1544,5,79,0,0,1544,1545, - 5,77,0,0,1545,1546,5,77,0,0,1546,1547,5,73,0,0,1547,1548,5,84,0,0,1548, - 242,1,0,0,0,1549,1550,5,82,0,0,1550,1551,5,79,0,0,1551,1552,5,76,0,0,1552, - 1553,5,76,0,0,1553,1554,5,66,0,0,1554,1555,5,65,0,0,1555,1556,5,67,0,0, - 1556,1557,5,75,0,0,1557,244,1,0,0,0,1558,1559,5,77,0,0,1559,1560,5,65,0, - 0,1560,1561,5,67,0,0,1561,1562,5,82,0,0,1562,1563,5,79,0,0,1563,246,1,0, - 0,0,1564,1565,5,73,0,0,1565,1566,5,71,0,0,1566,1567,5,78,0,0,1567,1568, - 5,79,0,0,1568,1569,5,82,0,0,1569,1570,5,69,0,0,1570,248,1,0,0,0,1571,1572, - 5,66,0,0,1572,1573,5,79,0,0,1573,1574,5,84,0,0,1574,1575,5,72,0,0,1575, - 250,1,0,0,0,1576,1577,5,76,0,0,1577,1578,5,69,0,0,1578,1579,5,65,0,0,1579, - 1580,5,68,0,0,1580,1581,5,73,0,0,1581,1582,5,78,0,0,1582,1583,5,71,0,0, - 1583,252,1,0,0,0,1584,1585,5,84,0,0,1585,1586,5,82,0,0,1586,1587,5,65,0, - 0,1587,1588,5,73,0,0,1588,1589,5,76,0,0,1589,1590,5,73,0,0,1590,1591,5, - 78,0,0,1591,1592,5,71,0,0,1592,254,1,0,0,0,1593,1594,5,73,0,0,1594,1595, - 5,70,0,0,1595,256,1,0,0,0,1596,1597,5,80,0,0,1597,1598,5,79,0,0,1598,1599, - 5,83,0,0,1599,1600,5,73,0,0,1600,1601,5,84,0,0,1601,1602,5,73,0,0,1602, - 1603,5,79,0,0,1603,1604,5,78,0,0,1604,258,1,0,0,0,1605,1606,5,69,0,0,1606, - 1607,5,88,0,0,1607,1608,5,84,0,0,1608,1609,5,82,0,0,1609,1610,5,65,0,0, - 1610,1611,5,67,0,0,1611,1612,5,84,0,0,1612,260,1,0,0,0,1613,1614,5,77,0, - 0,1614,1615,5,73,0,0,1615,1616,5,78,0,0,1616,1617,5,85,0,0,1617,1618,5, - 83,0,0,1618,262,1,0,0,0,1619,1620,5,68,0,0,1620,1621,5,73,0,0,1621,1622, - 5,86,0,0,1622,264,1,0,0,0,1623,1624,5,80,0,0,1624,1625,5,69,0,0,1625,1626, - 5,82,0,0,1626,1627,5,67,0,0,1627,1628,5,69,0,0,1628,1629,5,78,0,0,1629, - 1630,5,84,0,0,1630,1631,5,76,0,0,1631,1632,5,73,0,0,1632,1633,5,84,0,0, - 1633,266,1,0,0,0,1634,1635,5,66,0,0,1635,1636,5,85,0,0,1636,1637,5,67,0, - 0,1637,1638,5,75,0,0,1638,1639,5,69,0,0,1639,1640,5,84,0,0,1640,268,1,0, - 0,0,1641,1642,5,79,0,0,1642,1643,5,85,0,0,1643,1644,5,84,0,0,1644,270,1, - 0,0,0,1645,1646,5,79,0,0,1646,1647,5,70,0,0,1647,272,1,0,0,0,1648,1649, - 5,83,0,0,1649,1650,5,79,0,0,1650,1651,5,82,0,0,1651,1652,5,84,0,0,1652, - 274,1,0,0,0,1653,1654,5,67,0,0,1654,1655,5,76,0,0,1655,1656,5,85,0,0,1656, - 1657,5,83,0,0,1657,1658,5,84,0,0,1658,1659,5,69,0,0,1659,1660,5,82,0,0, - 1660,276,1,0,0,0,1661,1662,5,68,0,0,1662,1663,5,73,0,0,1663,1664,5,83,0, - 0,1664,1665,5,84,0,0,1665,1666,5,82,0,0,1666,1667,5,73,0,0,1667,1668,5, - 66,0,0,1668,1669,5,85,0,0,1669,1670,5,84,0,0,1670,1671,5,69,0,0,1671,278, - 1,0,0,0,1672,1673,5,79,0,0,1673,1674,5,86,0,0,1674,1675,5,69,0,0,1675,1676, - 5,82,0,0,1676,1677,5,87,0,0,1677,1678,5,82,0,0,1678,1679,5,73,0,0,1679, - 1680,5,84,0,0,1680,1681,5,69,0,0,1681,280,1,0,0,0,1682,1683,5,84,0,0,1683, - 1684,5,82,0,0,1684,1685,5,65,0,0,1685,1686,5,78,0,0,1686,1687,5,83,0,0, - 1687,1688,5,70,0,0,1688,1689,5,79,0,0,1689,1690,5,82,0,0,1690,1691,5,77, - 0,0,1691,282,1,0,0,0,1692,1693,5,82,0,0,1693,1694,5,69,0,0,1694,1695,5, - 68,0,0,1695,1696,5,85,0,0,1696,1697,5,67,0,0,1697,1698,5,69,0,0,1698,284, - 1,0,0,0,1699,1700,5,85,0,0,1700,1701,5,83,0,0,1701,1702,5,73,0,0,1702,1703, - 5,78,0,0,1703,1704,5,71,0,0,1704,286,1,0,0,0,1705,1706,5,83,0,0,1706,1707, - 5,69,0,0,1707,1708,5,82,0,0,1708,1709,5,68,0,0,1709,1710,5,69,0,0,1710, - 288,1,0,0,0,1711,1712,5,83,0,0,1712,1713,5,69,0,0,1713,1714,5,82,0,0,1714, - 1715,5,68,0,0,1715,1716,5,69,0,0,1716,1717,5,80,0,0,1717,1718,5,82,0,0, - 1718,1719,5,79,0,0,1719,1720,5,80,0,0,1720,1721,5,69,0,0,1721,1722,5,82, - 0,0,1722,1723,5,84,0,0,1723,1724,5,73,0,0,1724,1725,5,69,0,0,1725,1726, - 5,83,0,0,1726,290,1,0,0,0,1727,1728,5,82,0,0,1728,1729,5,69,0,0,1729,1730, - 5,67,0,0,1730,1731,5,79,0,0,1731,1732,5,82,0,0,1732,1733,5,68,0,0,1733, - 1734,5,82,0,0,1734,1735,5,69,0,0,1735,1736,5,65,0,0,1736,1737,5,68,0,0, - 1737,1738,5,69,0,0,1738,1739,5,82,0,0,1739,292,1,0,0,0,1740,1741,5,82,0, - 0,1741,1742,5,69,0,0,1742,1743,5,67,0,0,1743,1744,5,79,0,0,1744,1745,5, - 82,0,0,1745,1746,5,68,0,0,1746,1747,5,87,0,0,1747,1748,5,82,0,0,1748,1749, - 5,73,0,0,1749,1750,5,84,0,0,1750,1751,5,69,0,0,1751,1752,5,82,0,0,1752, - 294,1,0,0,0,1753,1754,5,68,0,0,1754,1755,5,69,0,0,1755,1756,5,76,0,0,1756, - 1757,5,73,0,0,1757,1758,5,77,0,0,1758,1759,5,73,0,0,1759,1760,5,84,0,0, - 1760,1761,5,69,0,0,1761,1762,5,68,0,0,1762,296,1,0,0,0,1763,1764,5,70,0, - 0,1764,1765,5,73,0,0,1765,1766,5,69,0,0,1766,1767,5,76,0,0,1767,1768,5, - 68,0,0,1768,1769,5,83,0,0,1769,298,1,0,0,0,1770,1771,5,84,0,0,1771,1772, - 5,69,0,0,1772,1773,5,82,0,0,1773,1774,5,77,0,0,1774,1775,5,73,0,0,1775, - 1776,5,78,0,0,1776,1777,5,65,0,0,1777,1778,5,84,0,0,1778,1779,5,69,0,0, - 1779,1780,5,68,0,0,1780,300,1,0,0,0,1781,1782,5,67,0,0,1782,1783,5,79,0, - 0,1783,1784,5,76,0,0,1784,1785,5,76,0,0,1785,1786,5,69,0,0,1786,1787,5, - 67,0,0,1787,1788,5,84,0,0,1788,1789,5,73,0,0,1789,1790,5,79,0,0,1790,1791, - 5,78,0,0,1791,302,1,0,0,0,1792,1793,5,73,0,0,1793,1794,5,84,0,0,1794,1795, - 5,69,0,0,1795,1796,5,77,0,0,1796,1797,5,83,0,0,1797,304,1,0,0,0,1798,1799, - 5,75,0,0,1799,1800,5,69,0,0,1800,1801,5,89,0,0,1801,1802,5,83,0,0,1802, - 306,1,0,0,0,1803,1804,5,69,0,0,1804,1805,5,83,0,0,1805,1806,5,67,0,0,1806, - 1807,5,65,0,0,1807,1808,5,80,0,0,1808,1809,5,69,0,0,1809,1810,5,68,0,0, - 1810,308,1,0,0,0,1811,1812,5,76,0,0,1812,1813,5,73,0,0,1813,1814,5,78,0, - 0,1814,1815,5,69,0,0,1815,1816,5,83,0,0,1816,310,1,0,0,0,1817,1818,5,83, - 0,0,1818,1819,5,69,0,0,1819,1820,5,80,0,0,1820,1821,5,65,0,0,1821,1822, - 5,82,0,0,1822,1823,5,65,0,0,1823,1824,5,84,0,0,1824,1825,5,69,0,0,1825, - 1826,5,68,0,0,1826,312,1,0,0,0,1827,1828,5,70,0,0,1828,1829,5,85,0,0,1829, - 1830,5,78,0,0,1830,1831,5,67,0,0,1831,1832,5,84,0,0,1832,1833,5,73,0,0, - 1833,1834,5,79,0,0,1834,1835,5,78,0,0,1835,314,1,0,0,0,1836,1837,5,69,0, - 0,1837,1838,5,88,0,0,1838,1839,5,84,0,0,1839,1840,5,69,0,0,1840,1841,5, - 78,0,0,1841,1842,5,68,0,0,1842,1843,5,69,0,0,1843,1844,5,68,0,0,1844,316, - 1,0,0,0,1845,1846,5,82,0,0,1846,1847,5,69,0,0,1847,1848,5,70,0,0,1848,1849, - 5,82,0,0,1849,1850,5,69,0,0,1850,1851,5,83,0,0,1851,1852,5,72,0,0,1852, - 318,1,0,0,0,1853,1854,5,67,0,0,1854,1855,5,76,0,0,1855,1856,5,69,0,0,1856, - 1857,5,65,0,0,1857,1858,5,82,0,0,1858,320,1,0,0,0,1859,1860,5,67,0,0,1860, - 1861,5,65,0,0,1861,1862,5,67,0,0,1862,1863,5,72,0,0,1863,1864,5,69,0,0, - 1864,322,1,0,0,0,1865,1866,5,85,0,0,1866,1867,5,78,0,0,1867,1868,5,67,0, - 0,1868,1869,5,65,0,0,1869,1870,5,67,0,0,1870,1871,5,72,0,0,1871,1872,5, - 69,0,0,1872,324,1,0,0,0,1873,1874,5,76,0,0,1874,1875,5,65,0,0,1875,1876, - 5,90,0,0,1876,1877,5,89,0,0,1877,326,1,0,0,0,1878,1879,5,70,0,0,1879,1880, - 5,79,0,0,1880,1881,5,82,0,0,1881,1882,5,77,0,0,1882,1883,5,65,0,0,1883, - 1884,5,84,0,0,1884,1885,5,84,0,0,1885,1886,5,69,0,0,1886,1887,5,68,0,0, - 1887,328,1,0,0,0,1888,1889,5,71,0,0,1889,1890,5,76,0,0,1890,1891,5,79,0, - 0,1891,1892,5,66,0,0,1892,1893,5,65,0,0,1893,1894,5,76,0,0,1894,330,1,0, - 0,0,1895,1896,5,84,0,0,1896,1897,5,69,0,0,1897,1898,5,77,0,0,1898,1899, - 5,80,0,0,1899,1900,5,79,0,0,1900,1901,5,82,0,0,1901,1902,5,65,0,0,1902, - 1903,5,82,0,0,1903,1904,5,89,0,0,1904,332,1,0,0,0,1905,1906,5,79,0,0,1906, - 1907,5,80,0,0,1907,1908,5,84,0,0,1908,1909,5,73,0,0,1909,1910,5,79,0,0, - 1910,1911,5,78,0,0,1911,1912,5,83,0,0,1912,334,1,0,0,0,1913,1914,5,85,0, - 0,1914,1915,5,78,0,0,1915,1916,5,83,0,0,1916,1917,5,69,0,0,1917,1918,5, - 84,0,0,1918,336,1,0,0,0,1919,1920,5,84,0,0,1920,1921,5,66,0,0,1921,1922, - 5,76,0,0,1922,1923,5,80,0,0,1923,1924,5,82,0,0,1924,1925,5,79,0,0,1925, - 1926,5,80,0,0,1926,1927,5,69,0,0,1927,1928,5,82,0,0,1928,1929,5,84,0,0, - 1929,1930,5,73,0,0,1930,1931,5,69,0,0,1931,1932,5,83,0,0,1932,338,1,0,0, - 0,1933,1934,5,68,0,0,1934,1935,5,66,0,0,1935,1936,5,80,0,0,1936,1937,5, - 82,0,0,1937,1938,5,79,0,0,1938,1939,5,80,0,0,1939,1940,5,69,0,0,1940,1941, - 5,82,0,0,1941,1942,5,84,0,0,1942,1943,5,73,0,0,1943,1944,5,69,0,0,1944, - 1945,5,83,0,0,1945,340,1,0,0,0,1946,1947,5,66,0,0,1947,1948,5,85,0,0,1948, - 1949,5,67,0,0,1949,1950,5,75,0,0,1950,1951,5,69,0,0,1951,1952,5,84,0,0, - 1952,1953,5,83,0,0,1953,342,1,0,0,0,1954,1955,5,83,0,0,1955,1956,5,75,0, - 0,1956,1957,5,69,0,0,1957,1958,5,87,0,0,1958,1959,5,69,0,0,1959,1960,5, - 68,0,0,1960,344,1,0,0,0,1961,1962,5,83,0,0,1962,1963,5,84,0,0,1963,1964, - 5,79,0,0,1964,1965,5,82,0,0,1965,1966,5,69,0,0,1966,1967,5,68,0,0,1967, - 346,1,0,0,0,1968,1969,5,68,0,0,1969,1970,5,73,0,0,1970,1971,5,82,0,0,1971, - 1972,5,69,0,0,1972,1973,5,67,0,0,1973,1974,5,84,0,0,1974,1975,5,79,0,0, - 1975,1976,5,82,0,0,1976,1977,5,73,0,0,1977,1978,5,69,0,0,1978,1979,5,83, - 0,0,1979,348,1,0,0,0,1980,1981,5,76,0,0,1981,1982,5,79,0,0,1982,1983,5, - 67,0,0,1983,1984,5,65,0,0,1984,1985,5,84,0,0,1985,1986,5,73,0,0,1986,1987, - 5,79,0,0,1987,1988,5,78,0,0,1988,350,1,0,0,0,1989,1990,5,69,0,0,1990,1991, - 5,88,0,0,1991,1992,5,67,0,0,1992,1993,5,72,0,0,1993,1994,5,65,0,0,1994, - 1995,5,78,0,0,1995,1996,5,71,0,0,1996,1997,5,69,0,0,1997,352,1,0,0,0,1998, - 1999,5,65,0,0,1999,2000,5,82,0,0,2000,2001,5,67,0,0,2001,2002,5,72,0,0, - 2002,2003,5,73,0,0,2003,2004,5,86,0,0,2004,2005,5,69,0,0,2005,354,1,0,0, - 0,2006,2007,5,85,0,0,2007,2008,5,78,0,0,2008,2009,5,65,0,0,2009,2010,5, - 82,0,0,2010,2011,5,67,0,0,2011,2012,5,72,0,0,2012,2013,5,73,0,0,2013,2014, - 5,86,0,0,2014,2015,5,69,0,0,2015,356,1,0,0,0,2016,2017,5,70,0,0,2017,2018, - 5,73,0,0,2018,2019,5,76,0,0,2019,2020,5,69,0,0,2020,2021,5,70,0,0,2021, - 2022,5,79,0,0,2022,2023,5,82,0,0,2023,2024,5,77,0,0,2024,2025,5,65,0,0, - 2025,2026,5,84,0,0,2026,358,1,0,0,0,2027,2028,5,84,0,0,2028,2029,5,79,0, - 0,2029,2030,5,85,0,0,2030,2031,5,67,0,0,2031,2032,5,72,0,0,2032,360,1,0, - 0,0,2033,2034,5,67,0,0,2034,2035,5,79,0,0,2035,2036,5,77,0,0,2036,2037, - 5,80,0,0,2037,2038,5,65,0,0,2038,2039,5,67,0,0,2039,2040,5,84,0,0,2040, - 362,1,0,0,0,2041,2042,5,67,0,0,2042,2043,5,79,0,0,2043,2044,5,78,0,0,2044, - 2045,5,67,0,0,2045,2046,5,65,0,0,2046,2047,5,84,0,0,2047,2048,5,69,0,0, - 2048,2049,5,78,0,0,2049,2050,5,65,0,0,2050,2051,5,84,0,0,2051,2052,5,69, - 0,0,2052,364,1,0,0,0,2053,2054,5,67,0,0,2054,2055,5,72,0,0,2055,2056,5, - 65,0,0,2056,2057,5,78,0,0,2057,2058,5,71,0,0,2058,2059,5,69,0,0,2059,366, - 1,0,0,0,2060,2061,5,67,0,0,2061,2062,5,65,0,0,2062,2063,5,83,0,0,2063,2064, - 5,67,0,0,2064,2065,5,65,0,0,2065,2066,5,68,0,0,2066,2067,5,69,0,0,2067, - 368,1,0,0,0,2068,2069,5,67,0,0,2069,2070,5,79,0,0,2070,2071,5,78,0,0,2071, - 2072,5,83,0,0,2072,2073,5,84,0,0,2073,2074,5,82,0,0,2074,2075,5,65,0,0, - 2075,2076,5,73,0,0,2076,2077,5,78,0,0,2077,2078,5,84,0,0,2078,370,1,0,0, - 0,2079,2080,5,82,0,0,2080,2081,5,69,0,0,2081,2082,5,83,0,0,2082,2083,5, - 84,0,0,2083,2084,5,82,0,0,2084,2085,5,73,0,0,2085,2086,5,67,0,0,2086,2087, - 5,84,0,0,2087,372,1,0,0,0,2088,2089,5,67,0,0,2089,2090,5,76,0,0,2090,2091, - 5,85,0,0,2091,2092,5,83,0,0,2092,2093,5,84,0,0,2093,2094,5,69,0,0,2094, - 2095,5,82,0,0,2095,2096,5,69,0,0,2096,2097,5,68,0,0,2097,374,1,0,0,0,2098, - 2099,5,83,0,0,2099,2100,5,79,0,0,2100,2101,5,82,0,0,2101,2102,5,84,0,0, - 2102,2103,5,69,0,0,2103,2104,5,68,0,0,2104,376,1,0,0,0,2105,2106,5,80,0, - 0,2106,2107,5,85,0,0,2107,2108,5,82,0,0,2108,2109,5,71,0,0,2109,2110,5, - 69,0,0,2110,378,1,0,0,0,2111,2112,5,73,0,0,2112,2113,5,78,0,0,2113,2114, - 5,80,0,0,2114,2115,5,85,0,0,2115,2116,5,84,0,0,2116,2117,5,70,0,0,2117, - 2118,5,79,0,0,2118,2119,5,82,0,0,2119,2120,5,77,0,0,2120,2121,5,65,0,0, - 2121,2122,5,84,0,0,2122,380,1,0,0,0,2123,2124,5,79,0,0,2124,2125,5,85,0, - 0,2125,2126,5,84,0,0,2126,2127,5,80,0,0,2127,2128,5,85,0,0,2128,2129,5, - 84,0,0,2129,2130,5,70,0,0,2130,2131,5,79,0,0,2131,2132,5,82,0,0,2132,2133, - 5,77,0,0,2133,2134,5,65,0,0,2134,2135,5,84,0,0,2135,382,1,0,0,0,2136,2137, - 5,68,0,0,2137,2138,5,65,0,0,2138,2139,5,84,0,0,2139,2140,5,65,0,0,2140, - 2141,5,66,0,0,2141,2142,5,65,0,0,2142,2143,5,83,0,0,2143,2144,5,69,0,0, - 2144,384,1,0,0,0,2145,2146,5,68,0,0,2146,2147,5,65,0,0,2147,2148,5,84,0, - 0,2148,2149,5,65,0,0,2149,2150,5,66,0,0,2150,2151,5,65,0,0,2151,2152,5, - 83,0,0,2152,2153,5,69,0,0,2153,2154,5,83,0,0,2154,386,1,0,0,0,2155,2156, - 5,68,0,0,2156,2157,5,70,0,0,2157,2158,5,83,0,0,2158,388,1,0,0,0,2159,2160, - 5,84,0,0,2160,2161,5,82,0,0,2161,2162,5,85,0,0,2162,2163,5,78,0,0,2163, - 2164,5,67,0,0,2164,2165,5,65,0,0,2165,2166,5,84,0,0,2166,2167,5,69,0,0, - 2167,390,1,0,0,0,2168,2169,5,65,0,0,2169,2170,5,78,0,0,2170,2171,5,65,0, - 0,2171,2172,5,76,0,0,2172,2173,5,89,0,0,2173,2174,5,90,0,0,2174,2175,5, - 69,0,0,2175,392,1,0,0,0,2176,2177,5,67,0,0,2177,2178,5,79,0,0,2178,2179, - 5,77,0,0,2179,2180,5,80,0,0,2180,2181,5,85,0,0,2181,2182,5,84,0,0,2182, - 2183,5,69,0,0,2183,394,1,0,0,0,2184,2185,5,76,0,0,2185,2186,5,73,0,0,2186, - 2187,5,83,0,0,2187,2188,5,84,0,0,2188,396,1,0,0,0,2189,2190,5,83,0,0,2190, - 2191,5,84,0,0,2191,2192,5,65,0,0,2192,2193,5,84,0,0,2193,2194,5,73,0,0, - 2194,2195,5,83,0,0,2195,2196,5,84,0,0,2196,2197,5,73,0,0,2197,2198,5,67, - 0,0,2198,2199,5,83,0,0,2199,398,1,0,0,0,2200,2201,5,80,0,0,2201,2202,5, - 65,0,0,2202,2203,5,82,0,0,2203,2204,5,84,0,0,2204,2205,5,73,0,0,2205,2206, - 5,84,0,0,2206,2207,5,73,0,0,2207,2208,5,79,0,0,2208,2209,5,78,0,0,2209, - 2210,5,69,0,0,2210,2211,5,68,0,0,2211,400,1,0,0,0,2212,2213,5,69,0,0,2213, - 2214,5,88,0,0,2214,2215,5,84,0,0,2215,2216,5,69,0,0,2216,2217,5,82,0,0, - 2217,2218,5,78,0,0,2218,2219,5,65,0,0,2219,2220,5,76,0,0,2220,402,1,0,0, - 0,2221,2222,5,68,0,0,2222,2223,5,69,0,0,2223,2224,5,70,0,0,2224,2225,5, - 73,0,0,2225,2226,5,78,0,0,2226,2227,5,69,0,0,2227,2228,5,68,0,0,2228,404, - 1,0,0,0,2229,2230,5,82,0,0,2230,2231,5,69,0,0,2231,2232,5,86,0,0,2232,2233, - 5,79,0,0,2233,2234,5,75,0,0,2234,2235,5,69,0,0,2235,406,1,0,0,0,2236,2237, - 5,71,0,0,2237,2238,5,82,0,0,2238,2239,5,65,0,0,2239,2240,5,78,0,0,2240, - 2241,5,84,0,0,2241,408,1,0,0,0,2242,2243,5,76,0,0,2243,2244,5,79,0,0,2244, - 2245,5,67,0,0,2245,2246,5,75,0,0,2246,410,1,0,0,0,2247,2248,5,85,0,0,2248, - 2249,5,78,0,0,2249,2250,5,76,0,0,2250,2251,5,79,0,0,2251,2252,5,67,0,0, - 2252,2253,5,75,0,0,2253,412,1,0,0,0,2254,2255,5,77,0,0,2255,2256,5,83,0, - 0,2256,2257,5,67,0,0,2257,2258,5,75,0,0,2258,414,1,0,0,0,2259,2260,5,82, - 0,0,2260,2261,5,69,0,0,2261,2262,5,80,0,0,2262,2263,5,65,0,0,2263,2264, - 5,73,0,0,2264,2265,5,82,0,0,2265,416,1,0,0,0,2266,2267,5,82,0,0,2267,2268, - 5,69,0,0,2268,2269,5,67,0,0,2269,2270,5,79,0,0,2270,2271,5,86,0,0,2271, - 2272,5,69,0,0,2272,2273,5,82,0,0,2273,418,1,0,0,0,2274,2275,5,69,0,0,2275, - 2276,5,88,0,0,2276,2277,5,80,0,0,2277,2278,5,79,0,0,2278,2279,5,82,0,0, - 2279,2280,5,84,0,0,2280,420,1,0,0,0,2281,2282,5,73,0,0,2282,2283,5,77,0, - 0,2283,2284,5,80,0,0,2284,2285,5,79,0,0,2285,2286,5,82,0,0,2286,2287,5, - 84,0,0,2287,422,1,0,0,0,2288,2289,5,76,0,0,2289,2290,5,79,0,0,2290,2291, - 5,65,0,0,2291,2292,5,68,0,0,2292,424,1,0,0,0,2293,2294,5,85,0,0,2294,2295, - 5,78,0,0,2295,2296,5,76,0,0,2296,2297,5,79,0,0,2297,2298,5,65,0,0,2298, - 2299,5,68,0,0,2299,426,1,0,0,0,2300,2301,5,82,0,0,2301,2302,5,79,0,0,2302, - 2303,5,76,0,0,2303,2304,5,69,0,0,2304,428,1,0,0,0,2305,2306,5,82,0,0,2306, - 2307,5,79,0,0,2307,2308,5,76,0,0,2308,2309,5,69,0,0,2309,2310,5,83,0,0, - 2310,430,1,0,0,0,2311,2312,5,67,0,0,2312,2313,5,79,0,0,2313,2314,5,77,0, - 0,2314,2315,5,80,0,0,2315,2316,5,65,0,0,2316,2317,5,67,0,0,2317,2318,5, - 84,0,0,2318,2319,5,73,0,0,2319,2320,5,79,0,0,2320,2321,5,78,0,0,2321,2322, - 5,83,0,0,2322,432,1,0,0,0,2323,2324,5,80,0,0,2324,2325,5,82,0,0,2325,2326, - 5,73,0,0,2326,2327,5,78,0,0,2327,2328,5,67,0,0,2328,2329,5,73,0,0,2329, - 2330,5,80,0,0,2330,2331,5,65,0,0,2331,2332,5,76,0,0,2332,2333,5,83,0,0, - 2333,434,1,0,0,0,2334,2335,5,84,0,0,2335,2336,5,82,0,0,2336,2337,5,65,0, - 0,2337,2338,5,78,0,0,2338,2339,5,83,0,0,2339,2340,5,65,0,0,2340,2341,5, - 67,0,0,2341,2342,5,84,0,0,2342,2343,5,73,0,0,2343,2344,5,79,0,0,2344,2345, - 5,78,0,0,2345,2346,5,83,0,0,2346,436,1,0,0,0,2347,2348,5,73,0,0,2348,2349, - 5,78,0,0,2349,2350,5,68,0,0,2350,2351,5,69,0,0,2351,2352,5,88,0,0,2352, - 438,1,0,0,0,2353,2354,5,73,0,0,2354,2355,5,78,0,0,2355,2356,5,68,0,0,2356, - 2357,5,69,0,0,2357,2358,5,88,0,0,2358,2359,5,69,0,0,2359,2360,5,83,0,0, - 2360,440,1,0,0,0,2361,2362,5,76,0,0,2362,2363,5,79,0,0,2363,2364,5,67,0, - 0,2364,2365,5,75,0,0,2365,2366,5,83,0,0,2366,442,1,0,0,0,2367,2368,5,79, - 0,0,2368,2369,5,80,0,0,2369,2370,5,84,0,0,2370,2371,5,73,0,0,2371,2372, - 5,79,0,0,2372,2373,5,78,0,0,2373,444,1,0,0,0,2374,2375,5,65,0,0,2375,2376, - 5,78,0,0,2376,2377,5,84,0,0,2377,2378,5,73,0,0,2378,446,1,0,0,0,2379,2380, - 5,76,0,0,2380,2381,5,79,0,0,2381,2382,5,67,0,0,2382,2383,5,65,0,0,2383, - 2384,5,76,0,0,2384,448,1,0,0,0,2385,2386,5,73,0,0,2386,2387,5,78,0,0,2387, - 2388,5,80,0,0,2388,2389,5,65,0,0,2389,2390,5,84,0,0,2390,2391,5,72,0,0, - 2391,450,1,0,0,0,2392,2393,5,87,0,0,2393,2394,5,65,0,0,2394,2395,5,84,0, - 0,2395,2396,5,69,0,0,2396,2397,5,82,0,0,2397,2398,5,77,0,0,2398,2399,5, - 65,0,0,2399,2400,5,82,0,0,2400,2401,5,75,0,0,2401,452,1,0,0,0,2402,2403, - 5,85,0,0,2403,2404,5,78,0,0,2404,2405,5,78,0,0,2405,2406,5,69,0,0,2406, - 2407,5,83,0,0,2407,2408,5,84,0,0,2408,454,1,0,0,0,2409,2410,5,77,0,0,2410, - 2411,5,65,0,0,2411,2412,5,84,0,0,2412,2413,5,67,0,0,2413,2414,5,72,0,0, - 2414,456,1,0,0,0,2415,2416,5,78,0,0,2416,2417,5,69,0,0,2417,2418,5,88,0, - 0,2418,2419,5,84,0,0,2419,458,1,0,0,0,2420,2421,5,87,0,0,2421,2422,5,73, - 0,0,2422,2423,5,84,0,0,2423,2424,5,72,0,0,2424,2425,5,73,0,0,2425,2426, - 5,78,0,0,2426,460,1,0,0,0,2427,2428,5,87,0,0,2428,2429,5,83,0,0,2429,462, - 1,0,0,0,2430,2431,5,83,0,0,2431,2432,5,89,0,0,2432,2433,5,83,0,0,2433,2434, - 5,84,0,0,2434,2435,5,69,0,0,2435,2436,5,77,0,0,2436,464,1,0,0,0,2437,2438, - 5,73,0,0,2438,2439,5,78,0,0,2439,2440,5,67,0,0,2440,2441,5,76,0,0,2441, - 2442,5,85,0,0,2442,2443,5,68,0,0,2443,2444,5,73,0,0,2444,2445,5,78,0,0, - 2445,2446,5,71,0,0,2446,466,1,0,0,0,2447,2448,5,69,0,0,2448,2449,5,88,0, - 0,2449,2450,5,67,0,0,2450,2451,5,76,0,0,2451,2452,5,85,0,0,2452,2453,5, - 68,0,0,2453,2454,5,73,0,0,2454,2455,5,78,0,0,2455,2456,5,71,0,0,2456,468, - 1,0,0,0,2457,2458,5,79,0,0,2458,2459,5,86,0,0,2459,2460,5,69,0,0,2460,2461, - 5,82,0,0,2461,2462,5,87,0,0,2462,2463,5,82,0,0,2463,2464,5,73,0,0,2464, - 2465,5,84,0,0,2465,2466,5,73,0,0,2466,2467,5,78,0,0,2467,2468,5,71,0,0, - 2468,470,1,0,0,0,2469,2470,5,67,0,0,2470,2471,5,79,0,0,2471,2472,5,78,0, - 0,2472,2473,5,83,0,0,2473,2474,5,84,0,0,2474,2475,5,82,0,0,2475,2476,5, - 65,0,0,2476,2477,5,73,0,0,2477,2478,5,78,0,0,2478,2479,5,84,0,0,2479,2480, - 5,83,0,0,2480,472,1,0,0,0,2481,2482,5,71,0,0,2482,2483,5,69,0,0,2483,2484, - 5,78,0,0,2484,2485,5,69,0,0,2485,2486,5,82,0,0,2486,2487,5,65,0,0,2487, - 2488,5,84,0,0,2488,2489,5,69,0,0,2489,2490,5,68,0,0,2490,474,1,0,0,0,2491, - 2492,5,87,0,0,2492,2493,5,65,0,0,2493,2494,5,84,0,0,2494,2495,5,69,0,0, - 2495,2496,5,82,0,0,2496,2497,5,77,0,0,2497,2498,5,65,0,0,2498,2499,5,82, - 0,0,2499,2500,5,75,0,0,2500,2501,5,83,0,0,2501,476,1,0,0,0,2502,2503,5, - 67,0,0,2503,2504,5,65,0,0,2504,2505,5,84,0,0,2505,2506,5,65,0,0,2506,2507, - 5,76,0,0,2507,2508,5,79,0,0,2508,2509,5,71,0,0,2509,478,1,0,0,0,2510,2511, - 5,76,0,0,2511,2512,5,65,0,0,2512,2513,5,78,0,0,2513,2514,5,71,0,0,2514, - 2515,5,85,0,0,2515,2516,5,65,0,0,2516,2517,5,71,0,0,2517,2518,5,69,0,0, - 2518,480,1,0,0,0,2519,2520,5,74,0,0,2520,2521,5,65,0,0,2521,2522,5,86,0, - 0,2522,2523,5,65,0,0,2523,482,1,0,0,0,2524,2525,5,83,0,0,2525,2526,5,67, - 0,0,2526,2527,5,65,0,0,2527,2528,5,76,0,0,2528,2529,5,65,0,0,2529,484,1, - 0,0,0,2530,2531,5,80,0,0,2531,2532,5,89,0,0,2532,2533,5,84,0,0,2533,2534, - 5,72,0,0,2534,2535,5,79,0,0,2535,2536,5,78,0,0,2536,486,1,0,0,0,2537,2538, - 5,74,0,0,2538,2539,5,65,0,0,2539,2540,5,82,0,0,2540,488,1,0,0,0,2541,2542, - 5,70,0,0,2542,2543,5,73,0,0,2543,2544,5,76,0,0,2544,2545,5,69,0,0,2545, - 490,1,0,0,0,2546,2547,5,80,0,0,2547,2548,5,89,0,0,2548,2549,5,84,0,0,2549, - 2550,5,72,0,0,2550,2551,5,79,0,0,2551,2552,5,78,0,0,2552,2553,5,95,0,0, - 2553,2554,5,70,0,0,2554,2555,5,73,0,0,2555,2556,5,76,0,0,2556,2557,5,69, - 0,0,2557,2558,5,83,0,0,2558,492,1,0,0,0,2559,2560,5,80,0,0,2560,2561,5, - 89,0,0,2561,2562,5,84,0,0,2562,2563,5,72,0,0,2563,2564,5,79,0,0,2564,2565, - 5,78,0,0,2565,2566,5,95,0,0,2566,2567,5,82,0,0,2567,2568,5,69,0,0,2568, - 2569,5,81,0,0,2569,2570,5,85,0,0,2570,2571,5,73,0,0,2571,2572,5,82,0,0, - 2572,2573,5,69,0,0,2573,2574,5,77,0,0,2574,2575,5,69,0,0,2575,2576,5,78, - 0,0,2576,2577,5,84,0,0,2577,2578,5,83,0,0,2578,494,1,0,0,0,2579,2580,5, - 80,0,0,2580,2581,5,89,0,0,2581,2582,5,84,0,0,2582,2583,5,72,0,0,2583,2584, - 5,79,0,0,2584,2585,5,78,0,0,2585,2586,5,95,0,0,2586,2587,5,68,0,0,2587, - 2588,5,69,0,0,2588,2589,5,80,0,0,2589,2590,5,69,0,0,2590,2591,5,78,0,0, - 2591,2592,5,68,0,0,2592,2593,5,69,0,0,2593,2594,5,78,0,0,2594,2595,5,67, - 0,0,2595,2596,5,73,0,0,2596,2597,5,69,0,0,2597,2598,5,83,0,0,2598,496,1, - 0,0,0,2599,2600,5,80,0,0,2600,2601,5,89,0,0,2601,2602,5,84,0,0,2602,2603, - 5,72,0,0,2603,2604,5,79,0,0,2604,2605,5,78,0,0,2605,2606,5,95,0,0,2606, - 2607,5,74,0,0,2607,2608,5,65,0,0,2608,2609,5,82,0,0,2609,498,1,0,0,0,2610, - 2611,5,80,0,0,2611,2612,5,89,0,0,2612,2613,5,84,0,0,2613,2614,5,72,0,0, - 2614,2615,5,79,0,0,2615,2616,5,78,0,0,2616,2617,5,95,0,0,2617,2618,5,65, - 0,0,2618,2619,5,82,0,0,2619,2620,5,67,0,0,2620,2621,5,72,0,0,2621,2622, - 5,73,0,0,2622,2623,5,86,0,0,2623,2624,5,69,0,0,2624,2625,5,83,0,0,2625, - 500,1,0,0,0,2626,2627,5,80,0,0,2627,2628,5,89,0,0,2628,2629,5,84,0,0,2629, - 2630,5,72,0,0,2630,2631,5,79,0,0,2631,2632,5,78,0,0,2632,2633,5,95,0,0, - 2633,2634,5,80,0,0,2634,2635,5,65,0,0,2635,2636,5,82,0,0,2636,2637,5,65, - 0,0,2637,2638,5,77,0,0,2638,2639,5,69,0,0,2639,2640,5,84,0,0,2640,2641, - 5,69,0,0,2641,2642,5,82,0,0,2642,502,1,0,0,0,2643,2644,5,69,0,0,2644,2645, - 5,78,0,0,2645,2646,5,71,0,0,2646,2647,5,73,0,0,2647,2648,5,78,0,0,2648, - 2649,5,69,0,0,2649,504,1,0,0,0,2650,2651,5,67,0,0,2651,2652,5,65,0,0,2652, - 2653,5,84,0,0,2653,2654,5,65,0,0,2654,2655,5,76,0,0,2655,2656,5,79,0,0, - 2656,2657,5,71,0,0,2657,2658,5,83,0,0,2658,506,1,0,0,0,2659,2660,5,86,0, - 0,2660,2661,5,73,0,0,2661,2662,5,69,0,0,2662,2663,5,87,0,0,2663,2664,5, - 83,0,0,2664,508,1,0,0,0,2665,2666,5,74,0,0,2666,2667,5,65,0,0,2667,2668, - 5,82,0,0,2668,2669,5,83,0,0,2669,510,1,0,0,0,2670,2671,5,80,0,0,2671,2672, - 5,82,0,0,2672,2673,5,73,0,0,2673,2674,5,77,0,0,2674,2675,5,65,0,0,2675, - 2676,5,82,0,0,2676,2677,5,89,0,0,2677,512,1,0,0,0,2678,2679,5,85,0,0,2679, - 2680,5,78,0,0,2680,2681,5,73,0,0,2681,2682,5,81,0,0,2682,2683,5,85,0,0, - 2683,2684,5,69,0,0,2684,514,1,0,0,0,2685,2686,5,75,0,0,2686,2687,5,69,0, - 0,2687,2688,5,89,0,0,2688,516,1,0,0,0,2689,2690,5,80,0,0,2690,2691,5,69, - 0,0,2691,2692,5,82,0,0,2692,2693,5,73,0,0,2693,2694,5,79,0,0,2694,2695, - 5,68,0,0,2695,518,1,0,0,0,2696,2697,5,83,0,0,2697,2698,5,89,0,0,2698,2699, - 5,83,0,0,2699,2700,5,84,0,0,2700,2701,5,69,0,0,2701,2702,5,77,0,0,2702, - 2703,5,95,0,0,2703,2704,5,84,0,0,2704,2705,5,73,0,0,2705,2706,5,77,0,0, - 2706,2707,5,69,0,0,2707,520,1,0,0,0,2708,2709,5,69,0,0,2709,2710,5,78,0, - 0,2710,2711,5,70,0,0,2711,2712,5,79,0,0,2712,2713,5,82,0,0,2713,2714,5, - 67,0,0,2714,2715,5,69,0,0,2715,2716,5,68,0,0,2716,522,1,0,0,0,2717,2718, - 5,77,0,0,2718,2719,5,69,0,0,2719,2720,5,84,0,0,2720,2721,5,65,0,0,2721, - 2722,5,68,0,0,2722,2723,5,65,0,0,2723,2724,5,84,0,0,2724,2725,5,65,0,0, - 2725,524,1,0,0,0,2726,2727,5,86,0,0,2727,2728,5,73,0,0,2728,2729,5,82,0, - 0,2729,2730,5,84,0,0,2730,2731,5,85,0,0,2731,2732,5,65,0,0,2732,2733,5, - 76,0,0,2733,526,1,0,0,0,2734,2735,5,90,0,0,2735,2736,5,79,0,0,2736,2737, - 5,78,0,0,2737,2738,5,69,0,0,2738,528,1,0,0,0,2739,2740,5,84,0,0,2740,2741, - 5,85,0,0,2741,2742,5,77,0,0,2742,2743,5,66,0,0,2743,2744,5,76,0,0,2744, - 2745,5,69,0,0,2745,530,1,0,0,0,2746,2747,5,72,0,0,2747,2748,5,79,0,0,2748, - 2749,5,80,0,0,2749,532,1,0,0,0,2750,2751,5,67,0,0,2751,2752,5,85,0,0,2752, - 2753,5,77,0,0,2753,2754,5,85,0,0,2754,2755,5,76,0,0,2755,2756,5,65,0,0, - 2756,2757,5,84,0,0,2757,2758,5,69,0,0,2758,534,1,0,0,0,2759,2760,5,68,0, - 0,2760,2761,5,69,0,0,2761,2762,5,83,0,0,2762,2763,5,67,0,0,2763,2764,5, - 82,0,0,2764,2765,5,73,0,0,2765,2766,5,80,0,0,2766,2767,5,84,0,0,2767,2768, - 5,79,0,0,2768,2769,5,82,0,0,2769,536,1,0,0,0,2770,2771,5,84,0,0,2771,2772, - 5,73,0,0,2772,2773,5,77,0,0,2773,2774,5,69,0,0,2774,2775,5,67,0,0,2775, - 2776,5,79,0,0,2776,2777,5,76,0,0,2777,538,1,0,0,0,2778,2779,5,83,0,0,2779, - 2780,5,73,0,0,2780,2781,5,90,0,0,2781,2782,5,69,0,0,2782,540,1,0,0,0,2783, - 2784,5,79,0,0,2784,2785,5,70,0,0,2785,2786,5,70,0,0,2786,2787,5,83,0,0, - 2787,2788,5,69,0,0,2788,2789,5,84,0,0,2789,542,1,0,0,0,2790,2791,5,83,0, - 0,2791,2792,5,84,0,0,2792,2793,5,69,0,0,2793,2794,5,80,0,0,2794,544,1,0, - 0,0,2795,2796,5,83,0,0,2796,2797,5,76,0,0,2797,2798,5,73,0,0,2798,2799, - 5,68,0,0,2799,2800,5,69,0,0,2800,546,1,0,0,0,2801,2802,5,83,0,0,2802,2803, - 5,69,0,0,2803,2804,5,83,0,0,2804,2805,5,83,0,0,2805,2806,5,73,0,0,2806, - 2807,5,79,0,0,2807,2808,5,78,0,0,2808,548,1,0,0,0,2809,2810,5,77,0,0,2810, - 2811,5,65,0,0,2811,2812,5,84,0,0,2812,2813,5,67,0,0,2813,2814,5,72,0,0, - 2814,2815,5,95,0,0,2815,2816,5,82,0,0,2816,2817,5,69,0,0,2817,2818,5,67, - 0,0,2818,2819,5,79,0,0,2819,2820,5,71,0,0,2820,2821,5,78,0,0,2821,2822, - 5,73,0,0,2822,2823,5,90,0,0,2823,2824,5,69,0,0,2824,550,1,0,0,0,2825,2826, - 5,77,0,0,2826,2827,5,69,0,0,2827,2828,5,65,0,0,2828,2829,5,83,0,0,2829, - 2830,5,85,0,0,2830,2831,5,82,0,0,2831,2832,5,69,0,0,2832,2833,5,83,0,0, - 2833,552,1,0,0,0,2834,2835,5,80,0,0,2835,2836,5,65,0,0,2836,2837,5,84,0, - 0,2837,2838,5,84,0,0,2838,2839,5,69,0,0,2839,2840,5,82,0,0,2840,2841,5, - 78,0,0,2841,554,1,0,0,0,2842,2843,5,79,0,0,2843,2844,5,78,0,0,2844,2845, - 5,69,0,0,2845,556,1,0,0,0,2846,2847,5,80,0,0,2847,2848,5,69,0,0,2848,2849, - 5,82,0,0,2849,558,1,0,0,0,2850,2851,5,83,0,0,2851,2852,5,75,0,0,2852,2853, - 5,73,0,0,2853,2854,5,80,0,0,2854,560,1,0,0,0,2855,2856,5,80,0,0,2856,2857, - 5,65,0,0,2857,2858,5,83,0,0,2858,2859,5,84,0,0,2859,562,1,0,0,0,2860,2861, - 5,68,0,0,2861,2862,5,69,0,0,2862,2863,5,70,0,0,2863,2864,5,73,0,0,2864, - 2865,5,78,0,0,2865,2866,5,69,0,0,2866,564,1,0,0,0,2867,2868,5,83,0,0,2868, - 2869,5,84,0,0,2869,2870,5,82,0,0,2870,2871,5,73,0,0,2871,2872,5,78,0,0, - 2872,2873,5,71,0,0,2873,566,1,0,0,0,2874,2875,5,65,0,0,2875,2876,5,82,0, - 0,2876,2877,5,82,0,0,2877,2878,5,65,0,0,2878,2879,5,89,0,0,2879,568,1,0, - 0,0,2880,2881,5,77,0,0,2881,2882,5,65,0,0,2882,2883,5,80,0,0,2883,570,1, - 0,0,0,2884,2885,5,67,0,0,2885,2886,5,72,0,0,2886,2887,5,65,0,0,2887,2888, - 5,82,0,0,2888,572,1,0,0,0,2889,2890,5,86,0,0,2890,2891,5,65,0,0,2891,2892, - 5,82,0,0,2892,2893,5,67,0,0,2893,2894,5,72,0,0,2894,2895,5,65,0,0,2895, - 2896,5,82,0,0,2896,574,1,0,0,0,2897,2898,5,66,0,0,2898,2899,5,73,0,0,2899, - 2900,5,78,0,0,2900,2901,5,65,0,0,2901,2902,5,82,0,0,2902,2903,5,89,0,0, - 2903,576,1,0,0,0,2904,2905,5,86,0,0,2905,2906,5,65,0,0,2906,2907,5,82,0, - 0,2907,2908,5,66,0,0,2908,2909,5,73,0,0,2909,2910,5,78,0,0,2910,2911,5, - 65,0,0,2911,2912,5,82,0,0,2912,2913,5,89,0,0,2913,578,1,0,0,0,2914,2915, - 5,66,0,0,2915,2916,5,89,0,0,2916,2917,5,84,0,0,2917,2918,5,69,0,0,2918, - 2919,5,83,0,0,2919,580,1,0,0,0,2920,2921,5,68,0,0,2921,2922,5,69,0,0,2922, - 2923,5,67,0,0,2923,2924,5,73,0,0,2924,2925,5,77,0,0,2925,2926,5,65,0,0, - 2926,2927,5,76,0,0,2927,582,1,0,0,0,2928,2929,5,68,0,0,2929,2930,5,69,0, - 0,2930,2931,5,67,0,0,2931,584,1,0,0,0,2932,2933,5,78,0,0,2933,2934,5,85, - 0,0,2934,2935,5,77,0,0,2935,2936,5,69,0,0,2936,2937,5,82,0,0,2937,2938, - 5,73,0,0,2938,2939,5,67,0,0,2939,586,1,0,0,0,2940,2941,5,84,0,0,2941,2942, - 5,73,0,0,2942,2943,5,78,0,0,2943,2944,5,89,0,0,2944,2945,5,73,0,0,2945, - 2946,5,78,0,0,2946,2947,5,84,0,0,2947,588,1,0,0,0,2948,2949,5,83,0,0,2949, - 2950,5,77,0,0,2950,2951,5,65,0,0,2951,2952,5,76,0,0,2952,2953,5,76,0,0, - 2953,2954,5,73,0,0,2954,2955,5,78,0,0,2955,2956,5,84,0,0,2956,590,1,0,0, - 0,2957,2958,5,73,0,0,2958,2959,5,78,0,0,2959,2960,5,84,0,0,2960,592,1,0, - 0,0,2961,2962,5,73,0,0,2962,2963,5,78,0,0,2963,2964,5,84,0,0,2964,2965, - 5,69,0,0,2965,2966,5,71,0,0,2966,2967,5,69,0,0,2967,2968,5,82,0,0,2968, - 594,1,0,0,0,2969,2970,5,66,0,0,2970,2971,5,73,0,0,2971,2972,5,71,0,0,2972, - 2973,5,73,0,0,2973,2974,5,78,0,0,2974,2975,5,84,0,0,2975,596,1,0,0,0,2976, - 2977,5,70,0,0,2977,2978,5,76,0,0,2978,2979,5,79,0,0,2979,2980,5,65,0,0, - 2980,2981,5,84,0,0,2981,598,1,0,0,0,2982,2983,5,68,0,0,2983,2984,5,79,0, - 0,2984,2985,5,85,0,0,2985,2986,5,66,0,0,2986,2987,5,76,0,0,2987,2988,5, - 69,0,0,2988,600,1,0,0,0,2989,2990,5,68,0,0,2990,2991,5,65,0,0,2991,2992, - 5,84,0,0,2992,2993,5,69,0,0,2993,602,1,0,0,0,2994,2995,5,84,0,0,2995,2996, - 5,73,0,0,2996,2997,5,77,0,0,2997,2998,5,69,0,0,2998,604,1,0,0,0,2999,3000, - 5,84,0,0,3000,3001,5,73,0,0,3001,3002,5,77,0,0,3002,3003,5,69,0,0,3003, - 3004,5,83,0,0,3004,3005,5,84,0,0,3005,3006,5,65,0,0,3006,3007,5,77,0,0, - 3007,3008,5,80,0,0,3008,606,1,0,0,0,3009,3010,5,84,0,0,3010,3011,5,73,0, - 0,3011,3012,5,77,0,0,3012,3013,5,69,0,0,3013,3014,5,83,0,0,3014,3015,5, - 84,0,0,3015,3016,5,65,0,0,3016,3017,5,77,0,0,3017,3018,5,80,0,0,3018,3019, - 5,95,0,0,3019,3020,5,76,0,0,3020,3021,5,84,0,0,3021,3022,5,90,0,0,3022, - 608,1,0,0,0,3023,3024,5,77,0,0,3024,3025,5,85,0,0,3025,3026,5,76,0,0,3026, - 3027,5,84,0,0,3027,3028,5,73,0,0,3028,3029,5,83,0,0,3029,3030,5,69,0,0, - 3030,3031,5,84,0,0,3031,610,1,0,0,0,3032,3033,5,66,0,0,3033,3034,5,79,0, - 0,3034,3035,5,79,0,0,3035,3036,5,76,0,0,3036,3037,5,69,0,0,3037,3038,5, - 65,0,0,3038,3039,5,78,0,0,3039,612,1,0,0,0,3040,3041,5,82,0,0,3041,3042, - 5,65,0,0,3042,3043,5,87,0,0,3043,614,1,0,0,0,3044,3045,5,82,0,0,3045,3046, - 5,79,0,0,3046,3047,5,87,0,0,3047,616,1,0,0,0,3048,3049,5,78,0,0,3049,3050, - 5,85,0,0,3050,3051,5,76,0,0,3051,3052,5,76,0,0,3052,618,1,0,0,0,3053,3054, - 5,68,0,0,3054,3055,5,65,0,0,3055,3056,5,84,0,0,3056,3057,5,69,0,0,3057, - 3058,5,84,0,0,3058,3059,5,73,0,0,3059,3060,5,77,0,0,3060,3061,5,69,0,0, - 3061,620,1,0,0,0,3062,3063,5,61,0,0,3063,622,1,0,0,0,3064,3065,5,62,0,0, - 3065,624,1,0,0,0,3066,3067,5,60,0,0,3067,626,1,0,0,0,3068,3069,5,33,0,0, - 3069,628,1,0,0,0,3070,3071,5,126,0,0,3071,630,1,0,0,0,3072,3073,5,124,0, - 0,3073,632,1,0,0,0,3074,3075,5,38,0,0,3075,634,1,0,0,0,3076,3077,5,94,0, - 0,3077,636,1,0,0,0,3078,3079,5,46,0,0,3079,638,1,0,0,0,3080,3081,5,91,0, - 0,3081,640,1,0,0,0,3082,3083,5,93,0,0,3083,642,1,0,0,0,3084,3085,5,40,0, - 0,3085,644,1,0,0,0,3086,3087,5,41,0,0,3087,646,1,0,0,0,3088,3089,5,123, - 0,0,3089,648,1,0,0,0,3090,3091,5,125,0,0,3091,650,1,0,0,0,3092,3093,5,44, - 0,0,3093,652,1,0,0,0,3094,3095,5,59,0,0,3095,654,1,0,0,0,3096,3097,5,64, - 0,0,3097,656,1,0,0,0,3098,3099,5,39,0,0,3099,658,1,0,0,0,3100,3101,5,34, - 0,0,3101,660,1,0,0,0,3102,3103,5,96,0,0,3103,662,1,0,0,0,3104,3105,5,58, - 0,0,3105,664,1,0,0,0,3106,3107,5,42,0,0,3107,666,1,0,0,0,3108,3109,5,95, - 0,0,3109,668,1,0,0,0,3110,3111,5,45,0,0,3111,670,1,0,0,0,3112,3113,5,43, - 0,0,3113,672,1,0,0,0,3114,3115,5,37,0,0,3115,674,1,0,0,0,3116,3117,5,124, - 0,0,3117,3118,5,124,0,0,3118,676,1,0,0,0,3119,3120,5,45,0,0,3120,3121,5, - 45,0,0,3121,678,1,0,0,0,3122,3123,5,47,0,0,3123,680,1,0,0,0,3124,3125,5, - 63,0,0,3125,682,1,0,0,0,3126,3127,5,46,0,0,3127,3128,3,705,352,0,3128,684, - 1,0,0,0,3129,3133,3,711,355,0,3130,3133,3,713,356,0,3131,3133,3,717,358, - 0,3132,3129,1,0,0,0,3132,3130,1,0,0,0,3132,3131,1,0,0,0,3133,686,1,0,0, - 0,3134,3136,3,707,353,0,3135,3134,1,0,0,0,3136,3137,1,0,0,0,3137,3135,1, - 0,0,0,3137,3138,1,0,0,0,3138,688,1,0,0,0,3139,3141,3,707,353,0,3140,3139, - 1,0,0,0,3141,3142,1,0,0,0,3142,3140,1,0,0,0,3142,3143,1,0,0,0,3143,3145, - 1,0,0,0,3144,3140,1,0,0,0,3144,3145,1,0,0,0,3145,3146,1,0,0,0,3146,3148, - 5,46,0,0,3147,3149,3,707,353,0,3148,3147,1,0,0,0,3149,3150,1,0,0,0,3150, - 3148,1,0,0,0,3150,3151,1,0,0,0,3151,3183,1,0,0,0,3152,3154,3,707,353,0, - 3153,3152,1,0,0,0,3154,3155,1,0,0,0,3155,3153,1,0,0,0,3155,3156,1,0,0,0, - 3156,3157,1,0,0,0,3157,3158,5,46,0,0,3158,3159,3,703,351,0,3159,3183,1, - 0,0,0,3160,3162,3,707,353,0,3161,3160,1,0,0,0,3162,3163,1,0,0,0,3163,3161, - 1,0,0,0,3163,3164,1,0,0,0,3164,3166,1,0,0,0,3165,3161,1,0,0,0,3165,3166, - 1,0,0,0,3166,3167,1,0,0,0,3167,3169,5,46,0,0,3168,3170,3,707,353,0,3169, - 3168,1,0,0,0,3170,3171,1,0,0,0,3171,3169,1,0,0,0,3171,3172,1,0,0,0,3172, - 3173,1,0,0,0,3173,3174,3,703,351,0,3174,3183,1,0,0,0,3175,3177,3,707,353, - 0,3176,3175,1,0,0,0,3177,3178,1,0,0,0,3178,3176,1,0,0,0,3178,3179,1,0,0, - 0,3179,3180,1,0,0,0,3180,3181,3,703,351,0,3181,3183,1,0,0,0,3182,3144,1, - 0,0,0,3182,3153,1,0,0,0,3182,3165,1,0,0,0,3182,3176,1,0,0,0,3183,690,1, - 0,0,0,3184,3185,3,715,357,0,3185,692,1,0,0,0,3186,3187,3,705,352,0,3187, - 694,1,0,0,0,3188,3189,3,699,349,0,3189,696,1,0,0,0,3190,3191,5,61,0,0,3191, - 3192,5,62,0,0,3192,698,1,0,0,0,3193,3197,7,2,0,0,3194,3196,8,3,0,0,3195, - 3194,1,0,0,0,3196,3199,1,0,0,0,3197,3195,1,0,0,0,3197,3198,1,0,0,0,3198, - 3201,1,0,0,0,3199,3197,1,0,0,0,3200,3193,1,0,0,0,3201,3202,1,0,0,0,3202, - 3200,1,0,0,0,3202,3203,1,0,0,0,3203,700,1,0,0,0,3204,3212,5,96,0,0,3205, - 3206,5,92,0,0,3206,3211,9,0,0,0,3207,3208,5,96,0,0,3208,3211,5,96,0,0,3209, - 3211,8,4,0,0,3210,3205,1,0,0,0,3210,3207,1,0,0,0,3210,3209,1,0,0,0,3211, - 3214,1,0,0,0,3212,3210,1,0,0,0,3212,3213,1,0,0,0,3213,3215,1,0,0,0,3214, - 3212,1,0,0,0,3215,3216,5,96,0,0,3216,702,1,0,0,0,3217,3219,5,69,0,0,3218, - 3220,7,5,0,0,3219,3218,1,0,0,0,3219,3220,1,0,0,0,3220,3222,1,0,0,0,3221, - 3223,3,707,353,0,3222,3221,1,0,0,0,3223,3224,1,0,0,0,3224,3222,1,0,0,0, - 3224,3225,1,0,0,0,3225,704,1,0,0,0,3226,3228,7,6,0,0,3227,3226,1,0,0,0, - 3228,3231,1,0,0,0,3229,3230,1,0,0,0,3229,3227,1,0,0,0,3230,3233,1,0,0,0, - 3231,3229,1,0,0,0,3232,3234,7,7,0,0,3233,3232,1,0,0,0,3234,3235,1,0,0,0, - 3235,3236,1,0,0,0,3235,3233,1,0,0,0,3236,3240,1,0,0,0,3237,3239,7,6,0,0, - 3238,3237,1,0,0,0,3239,3242,1,0,0,0,3240,3238,1,0,0,0,3240,3241,1,0,0,0, - 3241,706,1,0,0,0,3242,3240,1,0,0,0,3243,3244,7,8,0,0,3244,708,1,0,0,0,3245, - 3246,7,9,0,0,3246,710,1,0,0,0,3247,3255,5,34,0,0,3248,3249,5,92,0,0,3249, - 3254,9,0,0,0,3250,3251,5,34,0,0,3251,3254,5,34,0,0,3252,3254,8,10,0,0,3253, - 3248,1,0,0,0,3253,3250,1,0,0,0,3253,3252,1,0,0,0,3254,3257,1,0,0,0,3255, - 3253,1,0,0,0,3255,3256,1,0,0,0,3256,3258,1,0,0,0,3257,3255,1,0,0,0,3258, - 3259,5,34,0,0,3259,712,1,0,0,0,3260,3268,5,39,0,0,3261,3262,5,92,0,0,3262, - 3267,9,0,0,0,3263,3264,5,39,0,0,3264,3267,5,39,0,0,3265,3267,8,11,0,0,3266, - 3261,1,0,0,0,3266,3263,1,0,0,0,3266,3265,1,0,0,0,3267,3270,1,0,0,0,3268, - 3266,1,0,0,0,3268,3269,1,0,0,0,3269,3271,1,0,0,0,3270,3268,1,0,0,0,3271, - 3272,5,39,0,0,3272,714,1,0,0,0,3273,3274,5,66,0,0,3274,3276,5,39,0,0,3275, - 3277,7,12,0,0,3276,3275,1,0,0,0,3277,3278,1,0,0,0,3278,3276,1,0,0,0,3278, - 3279,1,0,0,0,3279,3280,1,0,0,0,3280,3281,5,39,0,0,3281,716,1,0,0,0,3282, - 3290,5,96,0,0,3283,3284,5,92,0,0,3284,3289,9,0,0,0,3285,3286,5,96,0,0,3286, - 3289,5,96,0,0,3287,3289,8,4,0,0,3288,3283,1,0,0,0,3288,3285,1,0,0,0,3288, - 3287,1,0,0,0,3289,3292,1,0,0,0,3290,3288,1,0,0,0,3290,3291,1,0,0,0,3291, - 3293,1,0,0,0,3292,3290,1,0,0,0,3293,3294,5,96,0,0,3294,718,1,0,0,0,37,0, - 722,732,743,748,752,756,762,766,768,3132,3137,3142,3144,3150,3155,3163, - 3165,3171,3178,3182,3197,3202,3210,3212,3219,3224,3229,3235,3240,3253,3255, - 3266,3268,3278,3288,3290,1,0,1,0]; + 253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,253,1,254,1,254,1,254,1, + 254,1,254,1,254,1,254,1,255,1,255,1,255,1,255,1,255,1,255,1,255,1,256,1, + 256,1,256,1,256,1,256,1,257,1,257,1,257,1,257,1,257,1,257,1,257,1,258,1, + 258,1,258,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1,259,1, + 260,1,260,1,260,1,260,1,260,1,260,1,261,1,261,1,261,1,261,1,261,1,261,1, + 262,1,262,1,262,1,262,1,262,1,262,1,262,1,263,1,263,1,263,1,263,1,264,1, + 264,1,264,1,264,1,264,1,264,1,264,1,264,1,265,1,265,1,265,1,265,1,265,1, + 265,1,265,1,265,1,265,1,265,1,266,1,266,1,266,1,266,1,266,1,266,1,266,1, + 266,1,266,1,267,1,267,1,267,1,267,1,267,1,268,1,268,1,268,1,269,1,269,1, + 269,1,269,1,269,1,270,1,270,1,270,1,270,1,271,1,271,1,271,1,271,1,271,1, + 271,1,271,1,271,1,271,1,272,1,272,1,272,1,272,1,272,1,272,1,272,1,272,1, + 273,1,273,1,273,1,273,1,273,1,273,1,273,1,273,1,274,1,274,1,274,1,274,1, + 274,1,275,1,275,1,275,1,275,1,275,1,276,1,276,1,276,1,276,1,276,1,276,1, + 277,1,277,1,277,1,277,1,277,1,277,1,278,1,278,1,278,1,278,1,278,1,278,1, + 279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1,279,1, + 279,1,279,1,279,1,279,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1,280,1, + 280,1,281,1,281,1,281,1,281,1,281,1,281,1,282,1,282,1,282,1,282,1,282,1, + 282,1,282,1,282,1,282,1,283,1,283,1,283,1,283,1,283,1,283,1,284,1,284,1, + 284,1,284,1,284,1,284,1,284,1,285,1,285,1,285,1,285,1,285,1,285,1,285,1, + 285,1,285,1,286,1,286,1,286,1,286,1,286,1,286,1,286,1,287,1,287,1,287,1, + 287,1,287,1,287,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1,288,1, + 289,1,289,1,289,1,289,1,289,1,289,1,289,1,289,1,290,1,290,1,290,1,290,1, + 290,1,291,1,291,1,291,1,292,1,292,1,292,1,292,1,292,1,293,1,293,1,293,1, + 293,1,294,1,294,1,294,1,294,1,294,1,295,1,295,1,295,1,295,1,295,1,295,1, + 295,1,295,1,296,1,296,1,296,1,297,1,297,1,297,1,297,1,297,1,297,1,297,1, + 298,1,298,1,298,1,299,1,299,1,299,1,299,1,300,1,300,1,300,1,301,1,301,1, + 301,1,301,1,301,1,301,1,302,1,302,1,302,1,302,1,303,1,303,1,303,1,303,1, + 303,1,303,1,304,1,304,1,304,1,304,1,304,1,305,1,305,1,305,1,305,1,305,1, + 305,1,305,1,305,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1,306,1, + 306,1,307,1,307,1,307,1,307,1,307,1,307,1,307,1,307,1,308,1,308,1,308,1, + 308,1,309,1,309,1,309,1,309,1,309,1,309,1,309,1,309,1,310,1,310,1,310,1, + 310,1,310,1,310,1,310,1,311,1,311,1,311,1,311,1,311,1,311,1,311,1,311,1, + 311,1,312,1,312,1,312,1,312,1,312,1,312,1,312,1,312,1,313,1,313,1,313,1, + 313,1,313,1,313,1,314,1,314,1,314,1,314,1,314,1,315,1,315,1,315,1,315,1, + 315,1,315,1,316,1,316,1,316,1,316,1,316,1,316,1,316,1,317,1,317,1,317,1, + 317,1,317,1,317,1,318,1,318,1,318,1,318,1,318,1,318,1,319,1,319,1,319,1, + 319,1,319,1,319,1,319,1,319,1,319,1,320,1,320,1,320,1,320,1,320,1,320,1, + 320,1,321,1,321,1,321,1,321,1,322,1,322,1,322,1,322,1,322,1,323,1,323,1, + 323,1,323,1,323,1,323,1,323,1,324,1,324,1,324,1,324,1,324,1,324,1,324,1, + 325,1,325,1,325,1,325,1,326,1,326,1,326,1,326,1,326,1,327,1,327,1,327,1, + 327,1,327,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,328,1,329,1, + 329,1,329,1,329,1,329,1,329,1,330,1,330,1,330,1,330,1,330,1,330,1,330,1, + 331,1,331,1,331,1,331,1,331,1,331,1,331,1,331,1,331,1,331,1,332,1,332,1, + 332,1,332,1,333,1,333,1,333,1,333,1,333,1,333,1,333,1,334,1,334,1,334,1, + 334,1,334,1,334,1,334,1,334,1,334,1,334,1,334,1,334,1,335,1,335,1,335,1, + 335,1,335,1,335,1,335,1,335,1,335,1,335,1,335,1,335,1,336,1,336,1,336,1, + 336,1,336,1,336,1,337,1,337,1,337,1,337,1,337,1,337,1,337,1,337,1,337,1, + 337,1,337,1,337,1,338,1,338,1,338,1,338,1,338,1,339,1,339,1,339,1,339,1, + 339,1,340,1,340,1,340,1,340,1,340,1,340,1,340,1,340,1,340,1,340,1,341,1, + 341,1,341,1,341,1,341,1,341,1,341,1,341,1,342,1,342,1,342,1,343,1,343,1, + 343,1,343,1,343,1,344,1,344,1,344,1,344,1,344,1,344,1,344,1,344,1,344,1, + 345,1,345,1,345,1,345,1,345,1,345,1,346,1,346,1,346,1,346,1,346,1,346,1, + 346,1,347,1,347,1,347,1,347,1,347,1,347,1,347,1,347,1,348,1,348,1,348,1, + 348,1,348,1,348,1,348,1,349,1,349,1,349,1,349,1,349,1,349,1,350,1,350,1, + 350,1,350,1,350,1,350,1,350,1,351,1,351,1,351,1,351,1,351,1,352,1,352,1, + 352,1,352,1,352,1,352,1,353,1,353,1,353,1,353,1,353,1,353,1,354,1,354,1, + 354,1,354,1,354,1,354,1,354,1,355,1,355,1,355,1,355,1,355,1,355,1,355,1, + 355,1,355,1,355,1,356,1,356,1,356,1,356,1,356,1,356,1,356,1,356,1,357,1, + 357,1,357,1,357,1,357,1,358,1,358,1,358,1,358,1,358,1,358,1,359,1,359,1, + 359,1,359,1,359,1,359,1,359,1,360,1,360,1,360,1,360,1,360,1,361,1,361,1, + 361,1,361,1,361,1,361,1,361,1,362,1,362,1,362,1,362,1,362,1,362,1,362,1, + 362,1,363,1,363,1,363,1,363,1,363,1,364,1,364,1,365,1,365,1,366,1,366,1, + 367,1,367,1,368,1,368,1,369,1,369,1,370,1,370,1,371,1,371,1,372,1,372,1, + 373,1,373,1,374,1,374,1,375,1,375,1,376,1,376,1,377,1,377,1,378,1,378,1, + 379,1,379,1,380,1,380,1,381,1,381,1,382,1,382,1,383,1,383,1,384,1,384,1, + 385,1,385,1,386,1,386,1,387,1,387,1,388,1,388,1,389,1,389,1,390,1,390,1, + 391,1,391,1,391,1,392,1,392,1,392,1,393,1,393,1,394,1,394,1,395,1,395,1, + 395,1,396,1,396,1,396,3,396,3550,8,396,1,397,4,397,3553,8,397,11,397,12, + 397,3554,1,398,4,398,3558,8,398,11,398,12,398,3559,3,398,3562,8,398,1,398, + 1,398,4,398,3566,8,398,11,398,12,398,3567,1,398,4,398,3571,8,398,11,398, + 12,398,3572,1,398,1,398,1,398,1,398,4,398,3579,8,398,11,398,12,398,3580, + 3,398,3583,8,398,1,398,1,398,4,398,3587,8,398,11,398,12,398,3588,1,398, + 1,398,1,398,4,398,3594,8,398,11,398,12,398,3595,1,398,1,398,3,398,3600, + 8,398,1,399,1,399,1,400,1,400,1,401,1,401,1,402,1,402,5,402,3610,8,402, + 10,402,12,402,3613,9,402,4,402,3615,8,402,11,402,12,402,3616,1,403,1,403, + 1,403,1,403,1,403,1,403,5,403,3625,8,403,10,403,12,403,3628,9,403,1,403, + 1,403,1,404,1,404,3,404,3634,8,404,1,404,4,404,3637,8,404,11,404,12,404, + 3638,1,405,5,405,3642,8,405,10,405,12,405,3645,9,405,1,405,4,405,3648,8, + 405,11,405,12,405,3649,1,405,5,405,3653,8,405,10,405,12,405,3656,9,405, + 1,406,1,406,1,407,1,407,1,408,1,408,1,408,1,408,1,408,1,408,5,408,3668, + 8,408,10,408,12,408,3671,9,408,1,408,1,408,1,409,1,409,1,409,1,409,1,409, + 1,409,5,409,3681,8,409,10,409,12,409,3684,9,409,1,409,1,409,1,410,1,410, + 1,410,4,410,3691,8,410,11,410,12,410,3692,1,410,1,410,1,411,1,411,1,411, + 1,411,1,411,1,411,5,411,3703,8,411,10,411,12,411,3706,9,411,1,411,1,411, + 3,838,3643,3649,0,412,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21, + 11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45, + 23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34,69, + 35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93, + 47,95,48,97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115, + 58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68, + 137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157, + 79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89, + 179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199, + 100,201,101,203,102,205,103,207,104,209,105,211,106,213,107,215,108,217, + 109,219,110,221,111,223,112,225,113,227,114,229,115,231,116,233,117,235, + 118,237,119,239,120,241,121,243,122,245,123,247,124,249,125,251,126,253, + 127,255,128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271, + 136,273,137,275,138,277,139,279,140,281,141,283,142,285,143,287,144,289, + 145,291,146,293,147,295,148,297,149,299,150,301,151,303,152,305,153,307, + 154,309,155,311,156,313,157,315,158,317,159,319,160,321,161,323,162,325, + 163,327,164,329,165,331,166,333,167,335,168,337,169,339,170,341,171,343, + 172,345,173,347,174,349,175,351,176,353,177,355,178,357,179,359,180,361, + 181,363,182,365,183,367,184,369,185,371,186,373,187,375,188,377,189,379, + 190,381,191,383,192,385,193,387,194,389,195,391,196,393,197,395,198,397, + 199,399,200,401,201,403,202,405,203,407,204,409,205,411,206,413,207,415, + 208,417,209,419,210,421,211,423,212,425,213,427,214,429,215,431,216,433, + 217,435,218,437,219,439,220,441,221,443,222,445,223,447,224,449,225,451, + 226,453,227,455,228,457,229,459,230,461,231,463,232,465,233,467,234,469, + 235,471,236,473,237,475,238,477,239,479,240,481,241,483,242,485,243,487, + 244,489,245,491,246,493,247,495,248,497,249,499,250,501,251,503,252,505, + 253,507,254,509,255,511,256,513,257,515,258,517,259,519,260,521,261,523, + 262,525,263,527,264,529,265,531,266,533,267,535,268,537,269,539,270,541, + 271,543,272,545,273,547,274,549,275,551,276,553,277,555,278,557,279,559, + 280,561,281,563,282,565,283,567,284,569,285,571,286,573,287,575,288,577, + 289,579,290,581,291,583,292,585,293,587,294,589,295,591,296,593,297,595, + 298,597,299,599,300,601,301,603,302,605,303,607,304,609,305,611,306,613, + 307,615,308,617,309,619,310,621,311,623,312,625,313,627,314,629,315,631, + 316,633,317,635,318,637,319,639,320,641,321,643,322,645,323,647,324,649, + 325,651,326,653,327,655,328,657,329,659,330,661,331,663,332,665,333,667, + 334,669,335,671,336,673,337,675,338,677,339,679,340,681,341,683,342,685, + 343,687,344,689,345,691,346,693,347,695,348,697,349,699,350,701,351,703, + 352,705,353,707,354,709,355,711,356,713,357,715,358,717,359,719,360,721, + 361,723,362,725,363,727,364,729,365,731,366,733,367,735,368,737,369,739, + 370,741,371,743,372,745,373,747,374,749,375,751,376,753,377,755,378,757, + 379,759,380,761,381,763,382,765,383,767,384,769,385,771,386,773,387,775, + 388,777,389,779,390,781,391,783,392,785,393,787,394,789,395,791,396,793, + 397,795,398,797,399,799,400,801,401,803,402,805,0,807,0,809,0,811,0,813, + 0,815,0,817,0,819,0,821,0,823,0,1,0,13,3,0,9,10,13,13,32,32,2,0,10,10,13, + 13,2,0,47,47,92,92,3,0,32,32,47,47,92,92,2,0,92,92,96,96,2,0,43,43,45,45, + 4,0,48,57,65,90,95,95,97,122,3,0,65,90,95,95,97,122,1,0,48,57,2,0,65,90, + 97,122,2,0,34,34,92,92,2,0,39,39,92,92,1,0,48,49,3741,0,1,1,0,0,0,0,3,1, + 0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15, + 1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0, + 0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37, + 1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0, + 0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59, + 1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0, + 0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81, + 1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0, + 0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103, + 1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1, + 0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0, + 0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0, + 0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0, + 0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0, + 155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165, + 1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1, + 0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0, + 0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0, + 0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0, + 0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0, + 217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227, + 1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1, + 0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0, + 0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0, + 0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0, + 0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,0,0,0,0, + 279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289, + 1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1, + 0,0,0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0, + 0,0,0,311,1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0, + 0,0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0, + 0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0, + 341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0,0,351, + 1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0,0,0,361,1, + 0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0, + 0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0, + 0,0,383,1,0,0,0,0,385,1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0, + 0,393,1,0,0,0,0,395,1,0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,401,1,0,0,0,0, + 403,1,0,0,0,0,405,1,0,0,0,0,407,1,0,0,0,0,409,1,0,0,0,0,411,1,0,0,0,0,413, + 1,0,0,0,0,415,1,0,0,0,0,417,1,0,0,0,0,419,1,0,0,0,0,421,1,0,0,0,0,423,1, + 0,0,0,0,425,1,0,0,0,0,427,1,0,0,0,0,429,1,0,0,0,0,431,1,0,0,0,0,433,1,0, + 0,0,0,435,1,0,0,0,0,437,1,0,0,0,0,439,1,0,0,0,0,441,1,0,0,0,0,443,1,0,0, + 0,0,445,1,0,0,0,0,447,1,0,0,0,0,449,1,0,0,0,0,451,1,0,0,0,0,453,1,0,0,0, + 0,455,1,0,0,0,0,457,1,0,0,0,0,459,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0, + 465,1,0,0,0,0,467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475, + 1,0,0,0,0,477,1,0,0,0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1, + 0,0,0,0,487,1,0,0,0,0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0, + 0,0,0,497,1,0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0, + 0,0,507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0,0,0, + 0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525,1,0,0,0,0, + 527,1,0,0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0,0,0,535,1,0,0,0,0,537, + 1,0,0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1,0,0,0,0,545,1,0,0,0,0,547,1, + 0,0,0,0,549,1,0,0,0,0,551,1,0,0,0,0,553,1,0,0,0,0,555,1,0,0,0,0,557,1,0, + 0,0,0,559,1,0,0,0,0,561,1,0,0,0,0,563,1,0,0,0,0,565,1,0,0,0,0,567,1,0,0, + 0,0,569,1,0,0,0,0,571,1,0,0,0,0,573,1,0,0,0,0,575,1,0,0,0,0,577,1,0,0,0, + 0,579,1,0,0,0,0,581,1,0,0,0,0,583,1,0,0,0,0,585,1,0,0,0,0,587,1,0,0,0,0, + 589,1,0,0,0,0,591,1,0,0,0,0,593,1,0,0,0,0,595,1,0,0,0,0,597,1,0,0,0,0,599, + 1,0,0,0,0,601,1,0,0,0,0,603,1,0,0,0,0,605,1,0,0,0,0,607,1,0,0,0,0,609,1, + 0,0,0,0,611,1,0,0,0,0,613,1,0,0,0,0,615,1,0,0,0,0,617,1,0,0,0,0,619,1,0, + 0,0,0,621,1,0,0,0,0,623,1,0,0,0,0,625,1,0,0,0,0,627,1,0,0,0,0,629,1,0,0, + 0,0,631,1,0,0,0,0,633,1,0,0,0,0,635,1,0,0,0,0,637,1,0,0,0,0,639,1,0,0,0, + 0,641,1,0,0,0,0,643,1,0,0,0,0,645,1,0,0,0,0,647,1,0,0,0,0,649,1,0,0,0,0, + 651,1,0,0,0,0,653,1,0,0,0,0,655,1,0,0,0,0,657,1,0,0,0,0,659,1,0,0,0,0,661, + 1,0,0,0,0,663,1,0,0,0,0,665,1,0,0,0,0,667,1,0,0,0,0,669,1,0,0,0,0,671,1, + 0,0,0,0,673,1,0,0,0,0,675,1,0,0,0,0,677,1,0,0,0,0,679,1,0,0,0,0,681,1,0, + 0,0,0,683,1,0,0,0,0,685,1,0,0,0,0,687,1,0,0,0,0,689,1,0,0,0,0,691,1,0,0, + 0,0,693,1,0,0,0,0,695,1,0,0,0,0,697,1,0,0,0,0,699,1,0,0,0,0,701,1,0,0,0, + 0,703,1,0,0,0,0,705,1,0,0,0,0,707,1,0,0,0,0,709,1,0,0,0,0,711,1,0,0,0,0, + 713,1,0,0,0,0,715,1,0,0,0,0,717,1,0,0,0,0,719,1,0,0,0,0,721,1,0,0,0,0,723, + 1,0,0,0,0,725,1,0,0,0,0,727,1,0,0,0,0,729,1,0,0,0,0,731,1,0,0,0,0,733,1, + 0,0,0,0,735,1,0,0,0,0,737,1,0,0,0,0,739,1,0,0,0,0,741,1,0,0,0,0,743,1,0, + 0,0,0,745,1,0,0,0,0,747,1,0,0,0,0,749,1,0,0,0,0,751,1,0,0,0,0,753,1,0,0, + 0,0,755,1,0,0,0,0,757,1,0,0,0,0,759,1,0,0,0,0,761,1,0,0,0,0,763,1,0,0,0, + 0,765,1,0,0,0,0,767,1,0,0,0,0,769,1,0,0,0,0,771,1,0,0,0,0,773,1,0,0,0,0, + 775,1,0,0,0,0,777,1,0,0,0,0,779,1,0,0,0,0,781,1,0,0,0,0,783,1,0,0,0,0,785, + 1,0,0,0,0,787,1,0,0,0,0,789,1,0,0,0,0,791,1,0,0,0,0,793,1,0,0,0,0,795,1, + 0,0,0,0,797,1,0,0,0,0,799,1,0,0,0,0,801,1,0,0,0,0,803,1,0,0,0,1,826,1,0, + 0,0,3,832,1,0,0,0,5,874,1,0,0,0,7,878,1,0,0,0,9,882,1,0,0,0,11,888,1,0, + 0,0,13,894,1,0,0,0,15,902,1,0,0,0,17,906,1,0,0,0,19,913,1,0,0,0,21,919, + 1,0,0,0,23,927,1,0,0,0,25,935,1,0,0,0,27,944,1,0,0,0,29,952,1,0,0,0,31, + 958,1,0,0,0,33,973,1,0,0,0,35,984,1,0,0,0,37,992,1,0,0,0,39,1000,1,0,0, + 0,41,1008,1,0,0,0,43,1020,1,0,0,0,45,1032,1,0,0,0,47,1041,1,0,0,0,49,1046, + 1,0,0,0,51,1055,1,0,0,0,53,1065,1,0,0,0,55,1070,1,0,0,0,57,1077,1,0,0,0, + 59,1085,1,0,0,0,61,1090,1,0,0,0,63,1101,1,0,0,0,65,1105,1,0,0,0,67,1114, + 1,0,0,0,69,1123,1,0,0,0,71,1130,1,0,0,0,73,1136,1,0,0,0,75,1151,1,0,0,0, + 77,1161,1,0,0,0,79,1169,1,0,0,0,81,1179,1,0,0,0,83,1188,1,0,0,0,85,1193, + 1,0,0,0,87,1199,1,0,0,0,89,1205,1,0,0,0,91,1215,1,0,0,0,93,1222,1,0,0,0, + 95,1230,1,0,0,0,97,1236,1,0,0,0,99,1248,1,0,0,0,101,1258,1,0,0,0,103,1266, + 1,0,0,0,105,1276,1,0,0,0,107,1279,1,0,0,0,109,1284,1,0,0,0,111,1292,1,0, + 0,0,113,1296,1,0,0,0,115,1302,1,0,0,0,117,1305,1,0,0,0,119,1312,1,0,0,0, + 121,1322,1,0,0,0,123,1328,1,0,0,0,125,1336,1,0,0,0,127,1340,1,0,0,0,129, + 1345,1,0,0,0,131,1350,1,0,0,0,133,1355,1,0,0,0,135,1375,1,0,0,0,137,1379, + 1,0,0,0,139,1390,1,0,0,0,141,1399,1,0,0,0,143,1405,1,0,0,0,145,1410,1,0, + 0,0,147,1417,1,0,0,0,149,1423,1,0,0,0,151,1428,1,0,0,0,153,1432,1,0,0,0, + 155,1444,1,0,0,0,157,1455,1,0,0,0,159,1467,1,0,0,0,161,1475,1,0,0,0,163, + 1484,1,0,0,0,165,1491,1,0,0,0,167,1499,1,0,0,0,169,1506,1,0,0,0,171,1517, + 1,0,0,0,173,1523,1,0,0,0,175,1530,1,0,0,0,177,1537,1,0,0,0,179,1545,1,0, + 0,0,181,1554,1,0,0,0,183,1561,1,0,0,0,185,1571,1,0,0,0,187,1583,1,0,0,0, + 189,1595,1,0,0,0,191,1606,1,0,0,0,193,1614,1,0,0,0,195,1619,1,0,0,0,197, + 1624,1,0,0,0,199,1632,1,0,0,0,201,1637,1,0,0,0,203,1647,1,0,0,0,205,1656, + 1,0,0,0,207,1662,1,0,0,0,209,1673,1,0,0,0,211,1680,1,0,0,0,213,1687,1,0, + 0,0,215,1700,1,0,0,0,217,1720,1,0,0,0,219,1740,1,0,0,0,221,1751,1,0,0,0, + 223,1767,1,0,0,0,225,1784,1,0,0,0,227,1792,1,0,0,0,229,1796,1,0,0,0,231, + 1801,1,0,0,0,233,1810,1,0,0,0,235,1817,1,0,0,0,237,1824,1,0,0,0,239,1832, + 1,0,0,0,241,1840,1,0,0,0,243,1848,1,0,0,0,245,1857,1,0,0,0,247,1862,1,0, + 0,0,249,1872,1,0,0,0,251,1878,1,0,0,0,253,1885,1,0,0,0,255,1891,1,0,0,0, + 257,1898,1,0,0,0,259,1906,1,0,0,0,261,1914,1,0,0,0,263,1923,1,0,0,0,265, + 1928,1,0,0,0,267,1935,1,0,0,0,269,1947,1,0,0,0,271,1955,1,0,0,0,273,1960, + 1,0,0,0,275,1967,1,0,0,0,277,1972,1,0,0,0,279,1978,1,0,0,0,281,1985,1,0, + 0,0,283,1991,1,0,0,0,285,1997,1,0,0,0,287,2007,1,0,0,0,289,2012,1,0,0,0, + 291,2019,1,0,0,0,293,2029,1,0,0,0,295,2035,1,0,0,0,297,2042,1,0,0,0,299, + 2052,1,0,0,0,301,2060,1,0,0,0,303,2074,1,0,0,0,305,2087,1,0,0,0,307,2101, + 1,0,0,0,309,2111,1,0,0,0,311,2118,1,0,0,0,313,2123,1,0,0,0,315,2129,1,0, + 0,0,317,2136,1,0,0,0,319,2142,1,0,0,0,321,2146,1,0,0,0,323,2152,1,0,0,0, + 325,2158,1,0,0,0,327,2163,1,0,0,0,329,2171,1,0,0,0,331,2176,1,0,0,0,333, + 2182,1,0,0,0,335,2190,1,0,0,0,337,2200,1,0,0,0,339,2211,1,0,0,0,341,2216, + 1,0,0,0,343,2221,1,0,0,0,345,2229,1,0,0,0,347,2235,1,0,0,0,349,2240,1,0, + 0,0,351,2244,1,0,0,0,353,2248,1,0,0,0,355,2254,1,0,0,0,357,2260,1,0,0,0, + 359,2264,1,0,0,0,361,2268,1,0,0,0,363,2272,1,0,0,0,365,2278,1,0,0,0,367, + 2281,1,0,0,0,369,2284,1,0,0,0,371,2288,1,0,0,0,373,2294,1,0,0,0,375,2302, + 1,0,0,0,377,2309,1,0,0,0,379,2316,1,0,0,0,381,2320,1,0,0,0,383,2325,1,0, + 0,0,385,2333,1,0,0,0,387,2338,1,0,0,0,389,2341,1,0,0,0,391,2346,1,0,0,0, + 393,2353,1,0,0,0,395,2362,1,0,0,0,397,2367,1,0,0,0,399,2372,1,0,0,0,401, + 2377,1,0,0,0,403,2382,1,0,0,0,405,2392,1,0,0,0,407,2398,1,0,0,0,409,2403, + 1,0,0,0,411,2409,1,0,0,0,413,2418,1,0,0,0,415,2426,1,0,0,0,417,2434,1,0, + 0,0,419,2441,1,0,0,0,421,2448,1,0,0,0,423,2456,1,0,0,0,425,2467,1,0,0,0, + 427,2476,1,0,0,0,429,2484,1,0,0,0,431,2490,1,0,0,0,433,2497,1,0,0,0,435, + 2503,1,0,0,0,437,2508,1,0,0,0,439,2516,1,0,0,0,441,2523,1,0,0,0,443,2529, + 1,0,0,0,445,2534,1,0,0,0,447,2543,1,0,0,0,449,2547,1,0,0,0,451,2551,1,0, + 0,0,453,2559,1,0,0,0,455,2567,1,0,0,0,457,2575,1,0,0,0,459,2582,1,0,0,0, + 461,2589,1,0,0,0,463,2598,1,0,0,0,465,2607,1,0,0,0,467,2614,1,0,0,0,469, + 2619,1,0,0,0,471,2624,1,0,0,0,473,2629,1,0,0,0,475,2633,1,0,0,0,477,2640, + 1,0,0,0,479,2647,1,0,0,0,481,2655,1,0,0,0,483,2662,1,0,0,0,485,2670,1,0, + 0,0,487,2679,1,0,0,0,489,2687,1,0,0,0,491,2693,1,0,0,0,493,2699,1,0,0,0, + 495,2703,1,0,0,0,497,2708,1,0,0,0,499,2713,1,0,0,0,501,2722,1,0,0,0,503, + 2729,1,0,0,0,505,2735,1,0,0,0,507,2741,1,0,0,0,509,2750,1,0,0,0,511,2757, + 1,0,0,0,513,2764,1,0,0,0,515,2769,1,0,0,0,517,2776,1,0,0,0,519,2779,1,0, + 0,0,521,2789,1,0,0,0,523,2795,1,0,0,0,525,2801,1,0,0,0,527,2808,1,0,0,0, + 529,2812,1,0,0,0,531,2820,1,0,0,0,533,2830,1,0,0,0,535,2839,1,0,0,0,537, + 2844,1,0,0,0,539,2847,1,0,0,0,541,2852,1,0,0,0,543,2856,1,0,0,0,545,2865, + 1,0,0,0,547,2873,1,0,0,0,549,2881,1,0,0,0,551,2886,1,0,0,0,553,2891,1,0, + 0,0,555,2897,1,0,0,0,557,2903,1,0,0,0,559,2909,1,0,0,0,561,2925,1,0,0,0, + 563,2934,1,0,0,0,565,2940,1,0,0,0,567,2949,1,0,0,0,569,2955,1,0,0,0,571, + 2962,1,0,0,0,573,2971,1,0,0,0,575,2978,1,0,0,0,577,2984,1,0,0,0,579,2993, + 1,0,0,0,581,3001,1,0,0,0,583,3006,1,0,0,0,585,3009,1,0,0,0,587,3014,1,0, + 0,0,589,3018,1,0,0,0,591,3023,1,0,0,0,593,3031,1,0,0,0,595,3034,1,0,0,0, + 597,3041,1,0,0,0,599,3044,1,0,0,0,601,3048,1,0,0,0,603,3051,1,0,0,0,605, + 3057,1,0,0,0,607,3061,1,0,0,0,609,3067,1,0,0,0,611,3072,1,0,0,0,613,3080, + 1,0,0,0,615,3090,1,0,0,0,617,3098,1,0,0,0,619,3102,1,0,0,0,621,3110,1,0, + 0,0,623,3117,1,0,0,0,625,3126,1,0,0,0,627,3134,1,0,0,0,629,3140,1,0,0,0, + 631,3145,1,0,0,0,633,3151,1,0,0,0,635,3158,1,0,0,0,637,3164,1,0,0,0,639, + 3170,1,0,0,0,641,3179,1,0,0,0,643,3186,1,0,0,0,645,3190,1,0,0,0,647,3195, + 1,0,0,0,649,3202,1,0,0,0,651,3209,1,0,0,0,653,3213,1,0,0,0,655,3218,1,0, + 0,0,657,3223,1,0,0,0,659,3232,1,0,0,0,661,3238,1,0,0,0,663,3245,1,0,0,0, + 665,3255,1,0,0,0,667,3259,1,0,0,0,669,3266,1,0,0,0,671,3278,1,0,0,0,673, + 3290,1,0,0,0,675,3296,1,0,0,0,677,3308,1,0,0,0,679,3313,1,0,0,0,681,3318, + 1,0,0,0,683,3328,1,0,0,0,685,3336,1,0,0,0,687,3339,1,0,0,0,689,3344,1,0, + 0,0,691,3353,1,0,0,0,693,3359,1,0,0,0,695,3366,1,0,0,0,697,3374,1,0,0,0, + 699,3381,1,0,0,0,701,3387,1,0,0,0,703,3394,1,0,0,0,705,3399,1,0,0,0,707, + 3405,1,0,0,0,709,3411,1,0,0,0,711,3418,1,0,0,0,713,3428,1,0,0,0,715,3436, + 1,0,0,0,717,3441,1,0,0,0,719,3447,1,0,0,0,721,3454,1,0,0,0,723,3459,1,0, + 0,0,725,3466,1,0,0,0,727,3474,1,0,0,0,729,3479,1,0,0,0,731,3481,1,0,0,0, + 733,3483,1,0,0,0,735,3485,1,0,0,0,737,3487,1,0,0,0,739,3489,1,0,0,0,741, + 3491,1,0,0,0,743,3493,1,0,0,0,745,3495,1,0,0,0,747,3497,1,0,0,0,749,3499, + 1,0,0,0,751,3501,1,0,0,0,753,3503,1,0,0,0,755,3505,1,0,0,0,757,3507,1,0, + 0,0,759,3509,1,0,0,0,761,3511,1,0,0,0,763,3513,1,0,0,0,765,3515,1,0,0,0, + 767,3517,1,0,0,0,769,3519,1,0,0,0,771,3521,1,0,0,0,773,3523,1,0,0,0,775, + 3525,1,0,0,0,777,3527,1,0,0,0,779,3529,1,0,0,0,781,3531,1,0,0,0,783,3533, + 1,0,0,0,785,3536,1,0,0,0,787,3539,1,0,0,0,789,3541,1,0,0,0,791,3543,1,0, + 0,0,793,3549,1,0,0,0,795,3552,1,0,0,0,797,3599,1,0,0,0,799,3601,1,0,0,0, + 801,3603,1,0,0,0,803,3605,1,0,0,0,805,3614,1,0,0,0,807,3618,1,0,0,0,809, + 3631,1,0,0,0,811,3643,1,0,0,0,813,3657,1,0,0,0,815,3659,1,0,0,0,817,3661, + 1,0,0,0,819,3674,1,0,0,0,821,3687,1,0,0,0,823,3696,1,0,0,0,825,827,7,0, + 0,0,826,825,1,0,0,0,827,828,1,0,0,0,828,826,1,0,0,0,828,829,1,0,0,0,829, + 830,1,0,0,0,830,831,6,0,0,0,831,2,1,0,0,0,832,833,5,47,0,0,833,834,5,42, + 0,0,834,838,1,0,0,0,835,837,9,0,0,0,836,835,1,0,0,0,837,840,1,0,0,0,838, + 839,1,0,0,0,838,836,1,0,0,0,839,841,1,0,0,0,840,838,1,0,0,0,841,842,5,42, + 0,0,842,843,5,47,0,0,843,844,1,0,0,0,844,845,6,1,0,0,845,4,1,0,0,0,846, + 847,5,45,0,0,847,850,5,45,0,0,848,850,5,35,0,0,849,846,1,0,0,0,849,848, + 1,0,0,0,850,854,1,0,0,0,851,853,8,1,0,0,852,851,1,0,0,0,853,856,1,0,0,0, + 854,852,1,0,0,0,854,855,1,0,0,0,855,862,1,0,0,0,856,854,1,0,0,0,857,859, + 5,13,0,0,858,857,1,0,0,0,858,859,1,0,0,0,859,860,1,0,0,0,860,863,5,10,0, + 0,861,863,5,0,0,1,862,858,1,0,0,0,862,861,1,0,0,0,863,875,1,0,0,0,864,865, + 5,45,0,0,865,866,5,45,0,0,866,872,1,0,0,0,867,869,5,13,0,0,868,867,1,0, + 0,0,868,869,1,0,0,0,869,870,1,0,0,0,870,873,5,10,0,0,871,873,5,0,0,1,872, + 868,1,0,0,0,872,871,1,0,0,0,873,875,1,0,0,0,874,849,1,0,0,0,874,864,1,0, + 0,0,875,876,1,0,0,0,876,877,6,2,0,0,877,6,1,0,0,0,878,879,5,65,0,0,879, + 880,5,68,0,0,880,881,5,68,0,0,881,8,1,0,0,0,882,883,5,65,0,0,883,884,5, + 68,0,0,884,885,5,77,0,0,885,886,5,73,0,0,886,887,5,78,0,0,887,10,1,0,0, + 0,888,889,5,65,0,0,889,890,5,70,0,0,890,891,5,84,0,0,891,892,5,69,0,0,892, + 893,5,82,0,0,893,12,1,0,0,0,894,895,5,65,0,0,895,896,5,78,0,0,896,897,5, + 65,0,0,897,898,5,76,0,0,898,899,5,89,0,0,899,900,5,90,0,0,900,901,5,69, + 0,0,901,14,1,0,0,0,902,903,5,65,0,0,903,904,5,83,0,0,904,905,5,67,0,0,905, + 16,1,0,0,0,906,907,5,66,0,0,907,908,5,69,0,0,908,909,5,70,0,0,909,910,5, + 79,0,0,910,911,5,82,0,0,911,912,5,69,0,0,912,18,1,0,0,0,913,914,5,66,0, + 0,914,915,5,89,0,0,915,916,5,84,0,0,916,917,5,69,0,0,917,918,5,83,0,0,918, + 20,1,0,0,0,919,920,5,67,0,0,920,921,5,65,0,0,921,922,5,83,0,0,922,923,5, + 67,0,0,923,924,5,65,0,0,924,925,5,68,0,0,925,926,5,69,0,0,926,22,1,0,0, + 0,927,928,5,67,0,0,928,929,5,65,0,0,929,930,5,84,0,0,930,931,5,65,0,0,931, + 932,5,76,0,0,932,933,5,79,0,0,933,934,5,71,0,0,934,24,1,0,0,0,935,936,5, + 67,0,0,936,937,5,65,0,0,937,938,5,84,0,0,938,939,5,65,0,0,939,940,5,76, + 0,0,940,941,5,79,0,0,941,942,5,71,0,0,942,943,5,83,0,0,943,26,1,0,0,0,944, + 945,5,67,0,0,945,946,5,69,0,0,946,947,5,78,0,0,947,948,5,84,0,0,948,949, + 5,85,0,0,949,950,5,82,0,0,950,951,5,89,0,0,951,28,1,0,0,0,952,953,5,67, + 0,0,953,954,5,72,0,0,954,955,5,65,0,0,955,956,5,73,0,0,956,957,5,78,0,0, + 957,30,1,0,0,0,958,959,5,67,0,0,959,960,5,72,0,0,960,961,5,65,0,0,961,962, + 5,78,0,0,962,963,5,71,0,0,963,964,5,69,0,0,964,965,5,76,0,0,965,966,5,79, + 0,0,966,967,5,71,0,0,967,968,5,95,0,0,968,969,5,77,0,0,969,970,5,79,0,0, + 970,971,5,68,0,0,971,972,5,69,0,0,972,32,1,0,0,0,973,974,5,67,0,0,974,975, + 5,72,0,0,975,976,5,65,0,0,976,977,5,82,0,0,977,978,5,65,0,0,978,979,5,67, + 0,0,979,980,5,84,0,0,980,981,5,69,0,0,981,982,5,82,0,0,982,983,5,83,0,0, + 983,34,1,0,0,0,984,985,5,67,0,0,985,986,5,79,0,0,986,987,5,77,0,0,987,988, + 5,77,0,0,988,989,5,69,0,0,989,990,5,78,0,0,990,991,5,84,0,0,991,36,1,0, + 0,0,992,993,5,67,0,0,993,994,5,79,0,0,994,995,5,77,0,0,995,996,5,80,0,0, + 996,997,5,65,0,0,997,998,5,67,0,0,998,999,5,84,0,0,999,38,1,0,0,0,1000, + 1001,5,67,0,0,1001,1002,5,79,0,0,1002,1003,5,76,0,0,1003,1004,5,85,0,0, + 1004,1005,5,77,0,0,1005,1006,5,78,0,0,1006,1007,5,83,0,0,1007,40,1,0,0, + 0,1008,1009,5,67,0,0,1009,1010,5,79,0,0,1010,1011,5,78,0,0,1011,1012,5, + 83,0,0,1012,1013,5,84,0,0,1013,1014,5,82,0,0,1014,1015,5,65,0,0,1015,1016, + 5,73,0,0,1016,1017,5,78,0,0,1017,1018,5,84,0,0,1018,1019,5,83,0,0,1019, + 42,1,0,0,0,1020,1021,5,67,0,0,1021,1022,5,79,0,0,1022,1023,5,78,0,0,1023, + 1024,5,83,0,0,1024,1025,5,84,0,0,1025,1026,5,82,0,0,1026,1027,5,85,0,0, + 1027,1028,5,67,0,0,1028,1029,5,84,0,0,1029,1030,5,79,0,0,1030,1031,5,82, + 0,0,1031,44,1,0,0,0,1032,1033,5,67,0,0,1033,1034,5,85,0,0,1034,1035,5,77, + 0,0,1035,1036,5,85,0,0,1036,1037,5,76,0,0,1037,1038,5,65,0,0,1038,1039, + 5,84,0,0,1039,1040,5,69,0,0,1040,46,1,0,0,0,1041,1042,5,68,0,0,1042,1043, + 5,65,0,0,1043,1044,5,84,0,0,1044,1045,5,65,0,0,1045,48,1,0,0,0,1046,1047, + 5,68,0,0,1047,1048,5,65,0,0,1048,1049,5,84,0,0,1049,1050,5,65,0,0,1050, + 1051,5,66,0,0,1051,1052,5,65,0,0,1052,1053,5,83,0,0,1053,1054,5,69,0,0, + 1054,50,1,0,0,0,1055,1056,5,68,0,0,1056,1057,5,65,0,0,1057,1058,5,84,0, + 0,1058,1059,5,65,0,0,1059,1060,5,66,0,0,1060,1061,5,65,0,0,1061,1062,5, + 83,0,0,1062,1063,5,69,0,0,1063,1064,5,83,0,0,1064,52,1,0,0,0,1065,1066, + 5,68,0,0,1066,1067,5,65,0,0,1067,1068,5,89,0,0,1068,1069,5,83,0,0,1069, + 54,1,0,0,0,1070,1071,5,68,0,0,1071,1072,5,69,0,0,1072,1073,5,67,0,0,1073, + 1074,5,65,0,0,1074,1075,5,68,0,0,1075,1076,5,69,0,0,1076,56,1,0,0,0,1077, + 1078,5,68,0,0,1078,1079,5,69,0,0,1079,1080,5,70,0,0,1080,1081,5,73,0,0, + 1081,1082,5,78,0,0,1082,1083,5,69,0,0,1083,1084,5,68,0,0,1084,58,1,0,0, + 0,1085,1086,5,68,0,0,1086,1087,5,69,0,0,1087,1088,5,83,0,0,1088,1089,5, + 67,0,0,1089,60,1,0,0,0,1090,1091,5,68,0,0,1091,1092,5,69,0,0,1092,1093, + 5,83,0,0,1093,1094,5,67,0,0,1094,1095,5,82,0,0,1095,1096,5,73,0,0,1096, + 1097,5,80,0,0,1097,1098,5,84,0,0,1098,1099,5,79,0,0,1099,1100,5,82,0,0, + 1100,62,1,0,0,0,1101,1102,5,68,0,0,1102,1103,5,73,0,0,1103,1104,5,86,0, + 0,1104,64,1,0,0,0,1105,1106,5,69,0,0,1106,1107,5,78,0,0,1107,1108,5,67, + 0,0,1108,1109,5,79,0,0,1109,1110,5,68,0,0,1110,1111,5,73,0,0,1111,1112, + 5,78,0,0,1112,1113,5,71,0,0,1113,66,1,0,0,0,1114,1115,5,69,0,0,1115,1116, + 5,78,0,0,1116,1117,5,70,0,0,1117,1118,5,79,0,0,1118,1119,5,82,0,0,1119, + 1120,5,67,0,0,1120,1121,5,69,0,0,1121,1122,5,68,0,0,1122,68,1,0,0,0,1123, + 1124,5,69,0,0,1124,1125,5,78,0,0,1125,1126,5,71,0,0,1126,1127,5,73,0,0, + 1127,1128,5,78,0,0,1128,1129,5,69,0,0,1129,70,1,0,0,0,1130,1131,5,69,0, + 0,1131,1132,5,82,0,0,1132,1133,5,82,0,0,1133,1134,5,79,0,0,1134,1135,5, + 82,0,0,1135,72,1,0,0,0,1136,1137,5,69,0,0,1137,1138,5,83,0,0,1138,1139, + 5,84,0,0,1139,1140,5,73,0,0,1140,1141,5,77,0,0,1141,1142,5,65,0,0,1142, + 1143,5,84,0,0,1143,1144,5,69,0,0,1144,1145,5,68,0,0,1145,1146,5,95,0,0, + 1146,1147,5,67,0,0,1147,1148,5,79,0,0,1148,1149,5,83,0,0,1149,1150,5,84, + 0,0,1150,74,1,0,0,0,1151,1152,5,69,0,0,1152,1153,5,88,0,0,1153,1154,5,67, + 0,0,1154,1155,5,69,0,0,1155,1156,5,80,0,0,1156,1157,5,84,0,0,1157,1158, + 5,73,0,0,1158,1159,5,79,0,0,1159,1160,5,78,0,0,1160,76,1,0,0,0,1161,1162, + 5,69,0,0,1162,1163,5,88,0,0,1163,1164,5,67,0,0,1164,1165,5,76,0,0,1165, + 1166,5,85,0,0,1166,1167,5,68,0,0,1167,1168,5,69,0,0,1168,78,1,0,0,0,1169, + 1170,5,69,0,0,1170,1171,5,88,0,0,1171,1172,5,67,0,0,1172,1173,5,76,0,0, + 1173,1174,5,85,0,0,1174,1175,5,68,0,0,1175,1176,5,73,0,0,1176,1177,5,78, + 0,0,1177,1178,5,71,0,0,1178,80,1,0,0,0,1179,1180,5,69,0,0,1180,1181,5,88, + 0,0,1181,1182,5,84,0,0,1182,1183,5,69,0,0,1183,1184,5,78,0,0,1184,1185, + 5,68,0,0,1185,1186,5,69,0,0,1186,1187,5,68,0,0,1187,82,1,0,0,0,1188,1189, + 5,70,0,0,1189,1190,5,73,0,0,1190,1191,5,76,0,0,1191,1192,5,69,0,0,1192, + 84,1,0,0,0,1193,1194,5,70,0,0,1194,1195,5,73,0,0,1195,1196,5,78,0,0,1196, + 1197,5,65,0,0,1197,1198,5,76,0,0,1198,86,1,0,0,0,1199,1200,5,70,0,0,1200, + 1201,5,73,0,0,1201,1202,5,82,0,0,1202,1203,5,83,0,0,1203,1204,5,84,0,0, + 1204,88,1,0,0,0,1205,1206,5,70,0,0,1206,1207,5,79,0,0,1207,1208,5,76,0, + 0,1208,1209,5,76,0,0,1209,1210,5,79,0,0,1210,1211,5,87,0,0,1211,1212,5, + 73,0,0,1212,1213,5,78,0,0,1213,1214,5,71,0,0,1214,90,1,0,0,0,1215,1216, + 5,70,0,0,1216,1217,5,79,0,0,1217,1218,5,82,0,0,1218,1219,5,77,0,0,1219, + 1220,5,65,0,0,1220,1221,5,84,0,0,1221,92,1,0,0,0,1222,1223,5,70,0,0,1223, + 1224,5,79,0,0,1224,1225,5,82,0,0,1225,1226,5,84,0,0,1226,1227,5,82,0,0, + 1227,1228,5,65,0,0,1228,1229,5,78,0,0,1229,94,1,0,0,0,1230,1231,5,70,0, + 0,1231,1232,5,79,0,0,1232,1233,5,85,0,0,1233,1234,5,78,0,0,1234,1235,5, + 68,0,0,1235,96,1,0,0,0,1236,1237,5,70,0,0,1237,1238,5,82,0,0,1238,1239, + 5,65,0,0,1239,1240,5,67,0,0,1240,1241,5,95,0,0,1241,1242,5,83,0,0,1242, + 1243,5,69,0,0,1243,1244,5,67,0,0,1244,1245,5,79,0,0,1245,1246,5,78,0,0, + 1246,1247,5,68,0,0,1247,98,1,0,0,0,1248,1249,5,70,0,0,1249,1250,5,85,0, + 0,1250,1251,5,78,0,0,1251,1252,5,67,0,0,1252,1253,5,84,0,0,1253,1254,5, + 73,0,0,1254,1255,5,79,0,0,1255,1256,5,78,0,0,1256,1257,5,83,0,0,1257,100, + 1,0,0,0,1258,1259,5,71,0,0,1259,1260,5,69,0,0,1260,1261,5,78,0,0,1261,1262, + 5,69,0,0,1262,1263,5,82,0,0,1263,1264,5,65,0,0,1264,1265,5,76,0,0,1265, + 102,1,0,0,0,1266,1267,5,71,0,0,1267,1268,5,69,0,0,1268,1269,5,78,0,0,1269, + 1270,5,69,0,0,1270,1271,5,82,0,0,1271,1272,5,65,0,0,1272,1273,5,84,0,0, + 1273,1274,5,69,0,0,1274,1275,5,68,0,0,1275,104,1,0,0,0,1276,1277,5,71,0, + 0,1277,1278,5,79,0,0,1278,106,1,0,0,0,1279,1280,5,71,0,0,1280,1281,5,79, + 0,0,1281,1282,5,84,0,0,1282,1283,5,79,0,0,1283,108,1,0,0,0,1284,1285,5, + 71,0,0,1285,1286,5,82,0,0,1286,1287,5,65,0,0,1287,1288,5,78,0,0,1288,1289, + 5,84,0,0,1289,1290,5,69,0,0,1290,1291,5,68,0,0,1291,110,1,0,0,0,1292,1293, + 5,72,0,0,1293,1294,5,79,0,0,1294,1295,5,80,0,0,1295,112,1,0,0,0,1296,1297, + 5,72,0,0,1297,1298,5,79,0,0,1298,1299,5,85,0,0,1299,1300,5,82,0,0,1300, + 1301,5,83,0,0,1301,114,1,0,0,0,1302,1303,5,73,0,0,1303,1304,5,70,0,0,1304, + 116,1,0,0,0,1305,1306,5,73,0,0,1306,1307,5,71,0,0,1307,1308,5,78,0,0,1308, + 1309,5,79,0,0,1309,1310,5,82,0,0,1310,1311,5,69,0,0,1311,118,1,0,0,0,1312, + 1313,5,73,0,0,1313,1314,5,78,0,0,1314,1315,5,67,0,0,1315,1316,5,82,0,0, + 1316,1317,5,69,0,0,1317,1318,5,77,0,0,1318,1319,5,69,0,0,1319,1320,5,78, + 0,0,1320,1321,5,84,0,0,1321,120,1,0,0,0,1322,1323,5,73,0,0,1323,1324,5, + 78,0,0,1324,1325,5,80,0,0,1325,1326,5,85,0,0,1326,1327,5,84,0,0,1327,122, + 1,0,0,0,1328,1329,5,73,0,0,1329,1330,5,78,0,0,1330,1331,5,86,0,0,1331,1332, + 5,79,0,0,1332,1333,5,75,0,0,1333,1334,5,69,0,0,1334,1335,5,82,0,0,1335, + 124,1,0,0,0,1336,1337,5,74,0,0,1337,1338,5,65,0,0,1338,1339,5,82,0,0,1339, + 126,1,0,0,0,1340,1341,5,74,0,0,1341,1342,5,65,0,0,1342,1343,5,82,0,0,1343, + 1344,5,83,0,0,1344,128,1,0,0,0,1345,1346,5,74,0,0,1346,1347,5,65,0,0,1347, + 1348,5,86,0,0,1348,1349,5,65,0,0,1349,130,1,0,0,0,1350,1351,5,74,0,0,1351, + 1352,5,83,0,0,1352,1353,5,79,0,0,1353,1354,5,78,0,0,1354,132,1,0,0,0,1355, + 1356,5,74,0,0,1356,1357,5,83,0,0,1357,1358,5,79,0,0,1358,1359,5,78,0,0, + 1359,1360,5,95,0,0,1360,1361,5,69,0,0,1361,1362,5,88,0,0,1362,1363,5,69, + 0,0,1363,1364,5,67,0,0,1364,1365,5,85,0,0,1365,1366,5,84,0,0,1366,1367, + 5,73,0,0,1367,1368,5,79,0,0,1368,1369,5,78,0,0,1369,1370,5,95,0,0,1370, + 1371,5,80,0,0,1371,1372,5,76,0,0,1372,1373,5,65,0,0,1373,1374,5,78,0,0, + 1374,134,1,0,0,0,1375,1376,5,75,0,0,1376,1377,5,69,0,0,1377,1378,5,89,0, + 0,1378,136,1,0,0,0,1379,1380,5,75,0,0,1380,1381,5,69,0,0,1381,1382,5,89, + 0,0,1382,1383,5,95,0,0,1383,1384,5,77,0,0,1384,1385,5,69,0,0,1385,1386, + 5,77,0,0,1386,1387,5,66,0,0,1387,1388,5,69,0,0,1388,1389,5,82,0,0,1389, + 138,1,0,0,0,1390,1391,5,75,0,0,1391,1392,5,69,0,0,1392,1393,5,89,0,0,1393, + 1394,5,95,0,0,1394,1395,5,84,0,0,1395,1396,5,89,0,0,1396,1397,5,80,0,0, + 1397,1398,5,69,0,0,1398,140,1,0,0,0,1399,1400,5,76,0,0,1400,1401,5,65,0, + 0,1401,1402,5,66,0,0,1402,1403,5,69,0,0,1403,1404,5,76,0,0,1404,142,1,0, + 0,0,1405,1406,5,76,0,0,1406,1407,5,65,0,0,1407,1408,5,83,0,0,1408,1409, + 5,84,0,0,1409,144,1,0,0,0,1410,1411,5,76,0,0,1411,1412,5,69,0,0,1412,1413, + 5,78,0,0,1413,1414,5,71,0,0,1414,1415,5,84,0,0,1415,1416,5,72,0,0,1416, + 146,1,0,0,0,1417,1418,5,76,0,0,1418,1419,5,69,0,0,1419,1420,5,86,0,0,1420, + 1421,5,69,0,0,1421,1422,5,76,0,0,1422,148,1,0,0,0,1423,1424,5,76,0,0,1424, + 1425,5,79,0,0,1425,1426,5,65,0,0,1426,1427,5,68,0,0,1427,150,1,0,0,0,1428, + 1429,5,77,0,0,1429,1430,5,65,0,0,1430,1431,5,80,0,0,1431,152,1,0,0,0,1432, + 1433,5,77,0,0,1433,1434,5,73,0,0,1434,1435,5,67,0,0,1435,1436,5,82,0,0, + 1436,1437,5,79,0,0,1437,1438,5,83,0,0,1438,1439,5,69,0,0,1439,1440,5,67, + 0,0,1440,1441,5,79,0,0,1441,1442,5,78,0,0,1442,1443,5,68,0,0,1443,154,1, + 0,0,0,1444,1445,5,77,0,0,1445,1446,5,73,0,0,1446,1447,5,76,0,0,1447,1448, + 5,76,0,0,1448,1449,5,69,0,0,1449,1450,5,78,0,0,1450,1451,5,78,0,0,1451, + 1452,5,73,0,0,1452,1453,5,85,0,0,1453,1454,5,77,0,0,1454,156,1,0,0,0,1455, + 1456,5,77,0,0,1456,1457,5,73,0,0,1457,1458,5,76,0,0,1458,1459,5,76,0,0, + 1459,1460,5,73,0,0,1460,1461,5,83,0,0,1461,1462,5,69,0,0,1462,1463,5,67, + 0,0,1463,1464,5,79,0,0,1464,1465,5,78,0,0,1465,1466,5,68,0,0,1466,158,1, + 0,0,0,1467,1468,5,77,0,0,1468,1469,5,73,0,0,1469,1470,5,78,0,0,1470,1471, + 5,85,0,0,1471,1472,5,84,0,0,1472,1473,5,69,0,0,1473,1474,5,83,0,0,1474, + 160,1,0,0,0,1475,1476,5,77,0,0,1476,1477,5,73,0,0,1477,1478,5,78,0,0,1478, + 1479,5,86,0,0,1479,1480,5,65,0,0,1480,1481,5,76,0,0,1481,1482,5,85,0,0, + 1482,1483,5,69,0,0,1483,162,1,0,0,0,1484,1485,5,77,0,0,1485,1486,5,79,0, + 0,1486,1487,5,68,0,0,1487,1488,5,73,0,0,1488,1489,5,70,0,0,1489,1490,5, + 89,0,0,1490,164,1,0,0,0,1491,1492,5,77,0,0,1492,1493,5,79,0,0,1493,1494, + 5,68,0,0,1494,1495,5,85,0,0,1495,1496,5,76,0,0,1496,1497,5,69,0,0,1497, + 1498,5,83,0,0,1498,166,1,0,0,0,1499,1500,5,77,0,0,1500,1501,5,79,0,0,1501, + 1502,5,78,0,0,1502,1503,5,84,0,0,1503,1504,5,72,0,0,1504,1505,5,83,0,0, + 1505,168,1,0,0,0,1506,1507,5,78,0,0,1507,1508,5,65,0,0,1508,1509,5,78,0, + 0,1509,1510,5,79,0,0,1510,1511,5,83,0,0,1511,1512,5,69,0,0,1512,1513,5, + 67,0,0,1513,1514,5,79,0,0,1514,1515,5,78,0,0,1515,1516,5,68,0,0,1516,170, + 1,0,0,0,1517,1518,5,78,0,0,1518,1519,5,85,0,0,1519,1520,5,76,0,0,1520,1521, + 5,76,0,0,1521,1522,5,83,0,0,1522,172,1,0,0,0,1523,1524,5,78,0,0,1524,1525, + 5,85,0,0,1525,1526,5,77,0,0,1526,1527,5,66,0,0,1527,1528,5,69,0,0,1528, + 1529,5,82,0,0,1529,174,1,0,0,0,1530,1531,5,79,0,0,1531,1532,5,80,0,0,1532, + 1533,5,84,0,0,1533,1534,5,73,0,0,1534,1535,5,79,0,0,1535,1536,5,78,0,0, + 1536,176,1,0,0,0,1537,1538,5,79,0,0,1538,1539,5,80,0,0,1539,1540,5,84,0, + 0,1540,1541,5,73,0,0,1541,1542,5,79,0,0,1542,1543,5,78,0,0,1543,1544,5, + 83,0,0,1544,178,1,0,0,0,1545,1546,5,79,0,0,1546,1547,5,82,0,0,1547,1548, + 5,68,0,0,1548,1549,5,69,0,0,1549,1550,5,82,0,0,1550,1551,5,73,0,0,1551, + 1552,5,78,0,0,1552,1553,5,71,0,0,1553,180,1,0,0,0,1554,1555,5,79,0,0,1555, + 1556,5,85,0,0,1556,1557,5,84,0,0,1557,1558,5,80,0,0,1558,1559,5,85,0,0, + 1559,1560,5,84,0,0,1560,182,1,0,0,0,1561,1562,5,79,0,0,1562,1563,5,86,0, + 0,1563,1564,5,69,0,0,1564,1565,5,82,0,0,1565,1566,5,87,0,0,1566,1567,5, + 82,0,0,1567,1568,5,73,0,0,1568,1569,5,84,0,0,1569,1570,5,69,0,0,1570,184, + 1,0,0,0,1571,1572,5,79,0,0,1572,1573,5,86,0,0,1573,1574,5,69,0,0,1574,1575, + 5,82,0,0,1575,1576,5,87,0,0,1576,1577,5,82,0,0,1577,1578,5,73,0,0,1578, + 1579,5,84,0,0,1579,1580,5,73,0,0,1580,1581,5,78,0,0,1581,1582,5,71,0,0, + 1582,186,1,0,0,0,1583,1584,5,80,0,0,1584,1585,5,65,0,0,1585,1586,5,82,0, + 0,1586,1587,5,84,0,0,1587,1588,5,73,0,0,1588,1589,5,84,0,0,1589,1590,5, + 73,0,0,1590,1591,5,79,0,0,1591,1592,5,78,0,0,1592,1593,5,69,0,0,1593,1594, + 5,68,0,0,1594,188,1,0,0,0,1595,1596,5,80,0,0,1596,1597,5,65,0,0,1597,1598, + 5,82,0,0,1598,1599,5,84,0,0,1599,1600,5,73,0,0,1600,1601,5,84,0,0,1601, + 1602,5,73,0,0,1602,1603,5,79,0,0,1603,1604,5,78,0,0,1604,1605,5,83,0,0, + 1605,190,1,0,0,0,1606,1607,5,80,0,0,1607,1608,5,65,0,0,1608,1609,5,83,0, + 0,1609,1610,5,83,0,0,1610,1611,5,73,0,0,1611,1612,5,78,0,0,1612,1613,5, + 71,0,0,1613,192,1,0,0,0,1614,1615,5,80,0,0,1615,1616,5,65,0,0,1616,1617, + 5,83,0,0,1617,1618,5,84,0,0,1618,194,1,0,0,0,1619,1620,5,80,0,0,1620,1621, + 5,65,0,0,1621,1622,5,84,0,0,1622,1623,5,72,0,0,1623,196,1,0,0,0,1624,1625, + 5,80,0,0,1625,1626,5,76,0,0,1626,1627,5,65,0,0,1627,1628,5,67,0,0,1628, + 1629,5,73,0,0,1629,1630,5,78,0,0,1630,1631,5,71,0,0,1631,198,1,0,0,0,1632, + 1633,5,80,0,0,1633,1634,5,76,0,0,1634,1635,5,65,0,0,1635,1636,5,78,0,0, + 1636,200,1,0,0,0,1637,1638,5,80,0,0,1638,1639,5,82,0,0,1639,1640,5,69,0, + 0,1640,1641,5,67,0,0,1641,1642,5,69,0,0,1642,1643,5,68,0,0,1643,1644,5, + 73,0,0,1644,1645,5,78,0,0,1645,1646,5,71,0,0,1646,202,1,0,0,0,1647,1648, + 5,80,0,0,1648,1649,5,82,0,0,1649,1650,5,69,0,0,1650,1651,5,83,0,0,1651, + 1652,5,69,0,0,1652,1653,5,82,0,0,1653,1654,5,86,0,0,1654,1655,5,69,0,0, + 1655,204,1,0,0,0,1656,1657,5,80,0,0,1657,1658,5,82,0,0,1658,1659,5,73,0, + 0,1659,1660,5,79,0,0,1660,1661,5,82,0,0,1661,206,1,0,0,0,1662,1663,5,80, + 0,0,1663,1664,5,82,0,0,1664,1665,5,73,0,0,1665,1666,5,86,0,0,1666,1667, + 5,73,0,0,1667,1668,5,76,0,0,1668,1669,5,69,0,0,1669,1670,5,71,0,0,1670, + 1671,5,69,0,0,1671,1672,5,83,0,0,1672,208,1,0,0,0,1673,1674,5,80,0,0,1674, + 1675,5,85,0,0,1675,1676,5,66,0,0,1676,1677,5,76,0,0,1677,1678,5,73,0,0, + 1678,1679,5,67,0,0,1679,210,1,0,0,0,1680,1681,5,80,0,0,1681,1682,5,89,0, + 0,1682,1683,5,84,0,0,1683,1684,5,72,0,0,1684,1685,5,79,0,0,1685,1686,5, + 78,0,0,1686,212,1,0,0,0,1687,1688,5,80,0,0,1688,1689,5,89,0,0,1689,1690, + 5,84,0,0,1690,1691,5,72,0,0,1691,1692,5,79,0,0,1692,1693,5,78,0,0,1693, + 1694,5,95,0,0,1694,1695,5,70,0,0,1695,1696,5,73,0,0,1696,1697,5,76,0,0, + 1697,1698,5,69,0,0,1698,1699,5,83,0,0,1699,214,1,0,0,0,1700,1701,5,80,0, + 0,1701,1702,5,89,0,0,1702,1703,5,84,0,0,1703,1704,5,72,0,0,1704,1705,5, + 79,0,0,1705,1706,5,78,0,0,1706,1707,5,95,0,0,1707,1708,5,82,0,0,1708,1709, + 5,69,0,0,1709,1710,5,81,0,0,1710,1711,5,85,0,0,1711,1712,5,73,0,0,1712, + 1713,5,82,0,0,1713,1714,5,69,0,0,1714,1715,5,77,0,0,1715,1716,5,69,0,0, + 1716,1717,5,78,0,0,1717,1718,5,84,0,0,1718,1719,5,83,0,0,1719,216,1,0,0, + 0,1720,1721,5,80,0,0,1721,1722,5,89,0,0,1722,1723,5,84,0,0,1723,1724,5, + 72,0,0,1724,1725,5,79,0,0,1725,1726,5,78,0,0,1726,1727,5,95,0,0,1727,1728, + 5,68,0,0,1728,1729,5,69,0,0,1729,1730,5,80,0,0,1730,1731,5,69,0,0,1731, + 1732,5,78,0,0,1732,1733,5,68,0,0,1733,1734,5,69,0,0,1734,1735,5,78,0,0, + 1735,1736,5,67,0,0,1736,1737,5,73,0,0,1737,1738,5,69,0,0,1738,1739,5,83, + 0,0,1739,218,1,0,0,0,1740,1741,5,80,0,0,1741,1742,5,89,0,0,1742,1743,5, + 84,0,0,1743,1744,5,72,0,0,1744,1745,5,79,0,0,1745,1746,5,78,0,0,1746,1747, + 5,95,0,0,1747,1748,5,74,0,0,1748,1749,5,65,0,0,1749,1750,5,82,0,0,1750, + 220,1,0,0,0,1751,1752,5,80,0,0,1752,1753,5,89,0,0,1753,1754,5,84,0,0,1754, + 1755,5,72,0,0,1755,1756,5,79,0,0,1756,1757,5,78,0,0,1757,1758,5,95,0,0, + 1758,1759,5,65,0,0,1759,1760,5,82,0,0,1760,1761,5,67,0,0,1761,1762,5,72, + 0,0,1762,1763,5,73,0,0,1763,1764,5,86,0,0,1764,1765,5,69,0,0,1765,1766, + 5,83,0,0,1766,222,1,0,0,0,1767,1768,5,80,0,0,1768,1769,5,89,0,0,1769,1770, + 5,84,0,0,1770,1771,5,72,0,0,1771,1772,5,79,0,0,1772,1773,5,78,0,0,1773, + 1774,5,95,0,0,1774,1775,5,80,0,0,1775,1776,5,65,0,0,1776,1777,5,82,0,0, + 1777,1778,5,65,0,0,1778,1779,5,77,0,0,1779,1780,5,69,0,0,1780,1781,5,84, + 0,0,1781,1782,5,69,0,0,1782,1783,5,82,0,0,1783,224,1,0,0,0,1784,1785,5, + 81,0,0,1785,1786,5,85,0,0,1786,1787,5,65,0,0,1787,1788,5,82,0,0,1788,1789, + 5,84,0,0,1789,1790,5,69,0,0,1790,1791,5,82,0,0,1791,226,1,0,0,0,1792,1793, + 5,82,0,0,1793,1794,5,65,0,0,1794,1795,5,87,0,0,1795,228,1,0,0,0,1796,1797, + 5,82,0,0,1797,1798,5,69,0,0,1798,1799,5,65,0,0,1799,1800,5,68,0,0,1800, + 230,1,0,0,0,1801,1802,5,82,0,0,1802,1803,5,69,0,0,1803,1804,5,76,0,0,1804, + 1805,5,65,0,0,1805,1806,5,84,0,0,1806,1807,5,73,0,0,1807,1808,5,86,0,0, + 1808,1809,5,69,0,0,1809,232,1,0,0,0,1810,1811,5,82,0,0,1811,1812,5,69,0, + 0,1812,1813,5,77,0,0,1813,1814,5,79,0,0,1814,1815,5,86,0,0,1815,1816,5, + 69,0,0,1816,234,1,0,0,0,1817,1818,5,82,0,0,1818,1819,5,69,0,0,1819,1820, + 5,78,0,0,1820,1821,5,65,0,0,1821,1822,5,77,0,0,1822,1823,5,69,0,0,1823, + 236,1,0,0,0,1824,1825,5,82,0,0,1825,1826,5,69,0,0,1826,1827,5,80,0,0,1827, + 1828,5,76,0,0,1828,1829,5,65,0,0,1829,1830,5,67,0,0,1830,1831,5,69,0,0, + 1831,238,1,0,0,0,1832,1833,5,82,0,0,1833,1834,5,69,0,0,1834,1835,5,83,0, + 0,1835,1836,5,80,0,0,1836,1837,5,69,0,0,1837,1838,5,67,0,0,1838,1839,5, + 84,0,0,1839,240,1,0,0,0,1840,1841,5,82,0,0,1841,1842,5,69,0,0,1842,1843, + 5,83,0,0,1843,1844,5,84,0,0,1844,1845,5,65,0,0,1845,1846,5,82,0,0,1846, + 1847,5,84,0,0,1847,242,1,0,0,0,1848,1849,5,82,0,0,1849,1850,5,69,0,0,1850, + 1851,5,83,0,0,1851,1852,5,84,0,0,1852,1853,5,82,0,0,1853,1854,5,73,0,0, + 1854,1855,5,67,0,0,1855,1856,5,84,0,0,1856,244,1,0,0,0,1857,1858,5,82,0, + 0,1858,1859,5,79,0,0,1859,1860,5,76,0,0,1860,1861,5,69,0,0,1861,246,1,0, + 0,0,1862,1863,5,82,0,0,1863,1864,5,79,0,0,1864,1865,5,87,0,0,1865,1866, + 5,95,0,0,1866,1867,5,67,0,0,1867,1868,5,79,0,0,1868,1869,5,85,0,0,1869, + 1870,5,78,0,0,1870,1871,5,84,0,0,1871,248,1,0,0,0,1872,1873,5,83,0,0,1873, + 1874,5,67,0,0,1874,1875,5,65,0,0,1875,1876,5,76,0,0,1876,1877,5,65,0,0, + 1877,250,1,0,0,0,1878,1879,5,83,0,0,1879,1880,5,67,0,0,1880,1881,5,65,0, + 0,1881,1882,5,76,0,0,1882,1883,5,65,0,0,1883,1884,5,82,0,0,1884,252,1,0, + 0,0,1885,1886,5,83,0,0,1886,1887,5,67,0,0,1887,1888,5,65,0,0,1888,1889, + 5,76,0,0,1889,1890,5,69,0,0,1890,254,1,0,0,0,1891,1892,5,83,0,0,1892,1893, + 5,67,0,0,1893,1894,5,72,0,0,1894,1895,5,69,0,0,1895,1896,5,77,0,0,1896, + 1897,5,65,0,0,1897,256,1,0,0,0,1898,1899,5,83,0,0,1899,1900,5,69,0,0,1900, + 1901,5,67,0,0,1901,1902,5,79,0,0,1902,1903,5,78,0,0,1903,1904,5,68,0,0, + 1904,1905,5,83,0,0,1905,258,1,0,0,0,1906,1907,5,83,0,0,1907,1908,5,69,0, + 0,1908,1909,5,67,0,0,1909,1910,5,84,0,0,1910,1911,5,73,0,0,1911,1912,5, + 79,0,0,1912,1913,5,78,0,0,1913,260,1,0,0,0,1914,1915,5,83,0,0,1915,1916, + 5,69,0,0,1916,1917,5,67,0,0,1917,1918,5,85,0,0,1918,1919,5,82,0,0,1919, + 1920,5,73,0,0,1920,1921,5,84,0,0,1921,1922,5,89,0,0,1922,262,1,0,0,0,1923, + 1924,5,83,0,0,1924,1925,5,69,0,0,1925,1926,5,76,0,0,1926,1927,5,70,0,0, + 1927,264,1,0,0,0,1928,1929,5,83,0,0,1929,1930,5,69,0,0,1930,1931,5,82,0, + 0,1931,1932,5,86,0,0,1932,1933,5,69,0,0,1933,1934,5,82,0,0,1934,266,1,0, + 0,0,1935,1936,5,83,0,0,1936,1937,5,69,0,0,1937,1938,5,82,0,0,1938,1939, + 5,86,0,0,1939,1940,5,69,0,0,1940,1941,5,82,0,0,1941,1942,5,95,0,0,1942, + 1943,5,78,0,0,1943,1944,5,65,0,0,1944,1945,5,77,0,0,1945,1946,5,69,0,0, + 1946,268,1,0,0,0,1947,1948,5,83,0,0,1948,1949,5,69,0,0,1949,1950,5,83,0, + 0,1950,1951,5,83,0,0,1951,1952,5,73,0,0,1952,1953,5,79,0,0,1953,1954,5, + 78,0,0,1954,270,1,0,0,0,1955,1956,5,83,0,0,1956,1957,5,69,0,0,1957,1958, + 5,84,0,0,1958,1959,5,83,0,0,1959,272,1,0,0,0,1960,1961,5,83,0,0,1961,1962, + 5,73,0,0,1962,1963,5,77,0,0,1963,1964,5,80,0,0,1964,1965,5,76,0,0,1965, + 1966,5,69,0,0,1966,274,1,0,0,0,1967,1968,5,83,0,0,1968,1969,5,73,0,0,1969, + 1970,5,90,0,0,1970,1971,5,69,0,0,1971,276,1,0,0,0,1972,1973,5,83,0,0,1973, + 1974,5,76,0,0,1974,1975,5,73,0,0,1975,1976,5,68,0,0,1976,1977,5,69,0,0, + 1977,278,1,0,0,0,1978,1979,5,83,0,0,1979,1980,5,79,0,0,1980,1981,5,85,0, + 0,1981,1982,5,82,0,0,1982,1983,5,67,0,0,1983,1984,5,69,0,0,1984,280,1,0, + 0,0,1985,1986,5,83,0,0,1986,1987,5,80,0,0,1987,1988,5,65,0,0,1988,1989, + 5,67,0,0,1989,1990,5,69,0,0,1990,282,1,0,0,0,1991,1992,5,83,0,0,1992,1993, + 5,84,0,0,1993,1994,5,65,0,0,1994,1995,5,84,0,0,1995,1996,5,69,0,0,1996, + 284,1,0,0,0,1997,1998,5,83,0,0,1998,1999,5,84,0,0,1999,2000,5,65,0,0,2000, + 2001,5,84,0,0,2001,2002,5,69,0,0,2002,2003,5,77,0,0,2003,2004,5,69,0,0, + 2004,2005,5,78,0,0,2005,2006,5,84,0,0,2006,286,1,0,0,0,2007,2008,5,83,0, + 0,2008,2009,5,84,0,0,2009,2010,5,69,0,0,2010,2011,5,80,0,0,2011,288,1,0, + 0,0,2012,2013,5,83,0,0,2013,2014,5,84,0,0,2014,2015,5,82,0,0,2015,2016, + 5,73,0,0,2016,2017,5,78,0,0,2017,2018,5,71,0,0,2018,290,1,0,0,0,2019,2020, + 5,83,0,0,2020,2021,5,84,0,0,2021,2022,5,82,0,0,2022,2023,5,85,0,0,2023, + 2024,5,67,0,0,2024,2025,5,84,0,0,2025,2026,5,85,0,0,2026,2027,5,82,0,0, + 2027,2028,5,69,0,0,2028,292,1,0,0,0,2029,2030,5,83,0,0,2030,2031,5,84,0, + 0,2031,2032,5,89,0,0,2032,2033,5,76,0,0,2033,2034,5,69,0,0,2034,294,1,0, + 0,0,2035,2036,5,84,0,0,2036,2037,5,65,0,0,2037,2038,5,66,0,0,2038,2039, + 5,76,0,0,2039,2040,5,69,0,0,2040,2041,5,83,0,0,2041,296,1,0,0,0,2042,2043, + 5,84,0,0,2043,2044,5,69,0,0,2044,2045,5,77,0,0,2045,2046,5,80,0,0,2046, + 2047,5,79,0,0,2047,2048,5,82,0,0,2048,2049,5,65,0,0,2049,2050,5,82,0,0, + 2050,2051,5,89,0,0,2051,298,1,0,0,0,2052,2053,5,84,0,0,2053,2054,5,73,0, + 0,2054,2055,5,77,0,0,2055,2056,5,69,0,0,2056,2057,5,67,0,0,2057,2058,5, + 79,0,0,2058,2059,5,76,0,0,2059,300,1,0,0,0,2060,2061,5,84,0,0,2061,2062, + 5,73,0,0,2062,2063,5,77,0,0,2063,2064,5,69,0,0,2064,2065,5,83,0,0,2065, + 2066,5,84,0,0,2066,2067,5,65,0,0,2067,2068,5,77,0,0,2068,2069,5,80,0,0, + 2069,2070,5,95,0,0,2070,2071,5,76,0,0,2071,2072,5,84,0,0,2072,2073,5,90, + 0,0,2073,302,1,0,0,0,2074,2075,5,84,0,0,2075,2076,5,73,0,0,2076,2077,5, + 77,0,0,2077,2078,5,69,0,0,2078,2079,5,83,0,0,2079,2080,5,84,0,0,2080,2081, + 5,65,0,0,2081,2082,5,77,0,0,2082,2083,5,80,0,0,2083,2084,5,65,0,0,2084, + 2085,5,68,0,0,2085,2086,5,68,0,0,2086,304,1,0,0,0,2087,2088,5,84,0,0,2088, + 2089,5,73,0,0,2089,2090,5,77,0,0,2090,2091,5,69,0,0,2091,2092,5,83,0,0, + 2092,2093,5,84,0,0,2093,2094,5,65,0,0,2094,2095,5,77,0,0,2095,2096,5,80, + 0,0,2096,2097,5,68,0,0,2097,2098,5,73,0,0,2098,2099,5,70,0,0,2099,2100, + 5,70,0,0,2100,306,1,0,0,0,2101,2102,5,84,0,0,2102,2103,5,82,0,0,2103,2104, + 5,65,0,0,2104,2105,5,78,0,0,2105,2106,5,83,0,0,2106,2107,5,70,0,0,2107, + 2108,5,79,0,0,2108,2109,5,82,0,0,2109,2110,5,77,0,0,2110,308,1,0,0,0,2111, + 2112,5,84,0,0,2112,2113,5,85,0,0,2113,2114,5,77,0,0,2114,2115,5,66,0,0, + 2115,2116,5,76,0,0,2116,2117,5,69,0,0,2117,310,1,0,0,0,2118,2119,5,84,0, + 0,2119,2120,5,89,0,0,2120,2121,5,80,0,0,2121,2122,5,69,0,0,2122,312,1,0, + 0,0,2123,2124,5,85,0,0,2124,2125,5,78,0,0,2125,2126,5,68,0,0,2126,2127, + 5,69,0,0,2127,2128,5,82,0,0,2128,314,1,0,0,0,2129,2130,5,85,0,0,2130,2131, + 5,78,0,0,2131,2132,5,76,0,0,2132,2133,5,79,0,0,2133,2134,5,65,0,0,2134, + 2135,5,68,0,0,2135,316,1,0,0,0,2136,2137,5,85,0,0,2137,2138,5,83,0,0,2138, + 2139,5,65,0,0,2139,2140,5,71,0,0,2140,2141,5,69,0,0,2141,318,1,0,0,0,2142, + 2143,5,85,0,0,2143,2144,5,83,0,0,2144,2145,5,69,0,0,2145,320,1,0,0,0,2146, + 2147,5,85,0,0,2147,2148,5,84,0,0,2148,2149,5,70,0,0,2149,2150,5,49,0,0, + 2150,2151,5,54,0,0,2151,322,1,0,0,0,2152,2153,5,85,0,0,2153,2154,5,84,0, + 0,2154,2155,5,70,0,0,2155,2156,5,51,0,0,2156,2157,5,50,0,0,2157,324,1,0, + 0,0,2158,2159,5,85,0,0,2159,2160,5,84,0,0,2160,2161,5,70,0,0,2161,2162, + 5,56,0,0,2162,326,1,0,0,0,2163,2164,5,86,0,0,2164,2165,5,69,0,0,2165,2166, + 5,82,0,0,2166,2167,5,83,0,0,2167,2168,5,73,0,0,2168,2169,5,79,0,0,2169, + 2170,5,78,0,0,2170,328,1,0,0,0,2171,2172,5,86,0,0,2172,2173,5,73,0,0,2173, + 2174,5,69,0,0,2174,2175,5,87,0,0,2175,330,1,0,0,0,2176,2177,5,86,0,0,2177, + 2178,5,73,0,0,2178,2179,5,69,0,0,2179,2180,5,87,0,0,2180,2181,5,83,0,0, + 2181,332,1,0,0,0,2182,2183,5,86,0,0,2183,2184,5,73,0,0,2184,2185,5,82,0, + 0,2185,2186,5,84,0,0,2186,2187,5,85,0,0,2187,2188,5,65,0,0,2188,2189,5, + 76,0,0,2189,334,1,0,0,0,2190,2191,5,87,0,0,2191,2192,5,65,0,0,2192,2193, + 5,84,0,0,2193,2194,5,69,0,0,2194,2195,5,82,0,0,2195,2196,5,77,0,0,2196, + 2197,5,65,0,0,2197,2198,5,82,0,0,2198,2199,5,75,0,0,2199,336,1,0,0,0,2200, + 2201,5,87,0,0,2201,2202,5,65,0,0,2202,2203,5,84,0,0,2203,2204,5,69,0,0, + 2204,2205,5,82,0,0,2205,2206,5,77,0,0,2206,2207,5,65,0,0,2207,2208,5,82, + 0,0,2208,2209,5,75,0,0,2209,2210,5,83,0,0,2210,338,1,0,0,0,2211,2212,5, + 87,0,0,2212,2213,5,69,0,0,2213,2214,5,69,0,0,2214,2215,5,75,0,0,2215,340, + 1,0,0,0,2216,2217,5,87,0,0,2217,2218,5,79,0,0,2218,2219,5,82,0,0,2219,2220, + 5,75,0,0,2220,342,1,0,0,0,2221,2222,5,87,0,0,2222,2223,5,82,0,0,2223,2224, + 5,65,0,0,2224,2225,5,80,0,0,2225,2226,5,80,0,0,2226,2227,5,69,0,0,2227, + 2228,5,82,0,0,2228,344,1,0,0,0,2229,2230,5,89,0,0,2230,2231,5,69,0,0,2231, + 2232,5,65,0,0,2232,2233,5,82,0,0,2233,2234,5,83,0,0,2234,346,1,0,0,0,2235, + 2236,5,90,0,0,2236,2237,5,79,0,0,2237,2238,5,78,0,0,2238,2239,5,69,0,0, + 2239,348,1,0,0,0,2240,2241,5,65,0,0,2241,2242,5,66,0,0,2242,2243,5,83,0, + 0,2243,350,1,0,0,0,2244,2245,5,65,0,0,2245,2246,5,76,0,0,2246,2247,5,76, + 0,0,2247,352,1,0,0,0,2248,2249,5,65,0,0,2249,2250,5,76,0,0,2250,2251,5, + 76,0,0,2251,2252,5,79,0,0,2252,2253,5,87,0,0,2253,354,1,0,0,0,2254,2255, + 5,65,0,0,2255,2256,5,76,0,0,2256,2257,5,84,0,0,2257,2258,5,69,0,0,2258, + 2259,5,82,0,0,2259,356,1,0,0,0,2260,2261,5,65,0,0,2261,2262,5,78,0,0,2262, + 2263,5,68,0,0,2263,358,1,0,0,0,2264,2265,5,65,0,0,2265,2266,5,78,0,0,2266, + 2267,5,89,0,0,2267,360,1,0,0,0,2268,2269,5,65,0,0,2269,2270,5,82,0,0,2270, + 2271,5,69,0,0,2271,362,1,0,0,0,2272,2273,5,65,0,0,2273,2274,5,82,0,0,2274, + 2275,5,82,0,0,2275,2276,5,65,0,0,2276,2277,5,89,0,0,2277,364,1,0,0,0,2278, + 2279,5,65,0,0,2279,2280,5,83,0,0,2280,366,1,0,0,0,2281,2282,5,65,0,0,2282, + 2283,5,84,0,0,2283,368,1,0,0,0,2284,2285,5,65,0,0,2285,2286,5,86,0,0,2286, + 2287,5,71,0,0,2287,370,1,0,0,0,2288,2289,5,66,0,0,2289,2290,5,69,0,0,2290, + 2291,5,71,0,0,2291,2292,5,73,0,0,2292,2293,5,78,0,0,2293,372,1,0,0,0,2294, + 2295,5,66,0,0,2295,2296,5,69,0,0,2296,2297,5,84,0,0,2297,2298,5,87,0,0, + 2298,2299,5,69,0,0,2299,2300,5,69,0,0,2300,2301,5,78,0,0,2301,374,1,0,0, + 0,2302,2303,5,66,0,0,2303,2304,5,73,0,0,2304,2305,5,71,0,0,2305,2306,5, + 73,0,0,2306,2307,5,78,0,0,2307,2308,5,84,0,0,2308,376,1,0,0,0,2309,2310, + 5,66,0,0,2310,2311,5,73,0,0,2311,2312,5,78,0,0,2312,2313,5,65,0,0,2313, + 2314,5,82,0,0,2314,2315,5,89,0,0,2315,378,1,0,0,0,2316,2317,5,66,0,0,2317, + 2318,5,73,0,0,2318,2319,5,84,0,0,2319,380,1,0,0,0,2320,2321,5,66,0,0,2321, + 2322,5,76,0,0,2322,2323,5,79,0,0,2323,2324,5,66,0,0,2324,382,1,0,0,0,2325, + 2326,5,66,0,0,2326,2327,5,79,0,0,2327,2328,5,79,0,0,2328,2329,5,76,0,0, + 2329,2330,5,69,0,0,2330,2331,5,65,0,0,2331,2332,5,78,0,0,2332,384,1,0,0, + 0,2333,2334,5,66,0,0,2334,2335,5,79,0,0,2335,2336,5,84,0,0,2336,2337,5, + 72,0,0,2337,386,1,0,0,0,2338,2339,5,66,0,0,2339,2340,5,89,0,0,2340,388, + 1,0,0,0,2341,2342,5,67,0,0,2342,2343,5,65,0,0,2343,2344,5,76,0,0,2344,2345, + 5,76,0,0,2345,390,1,0,0,0,2346,2347,5,67,0,0,2347,2348,5,65,0,0,2348,2349, + 5,76,0,0,2349,2350,5,76,0,0,2350,2351,5,69,0,0,2351,2352,5,68,0,0,2352, + 392,1,0,0,0,2353,2354,5,67,0,0,2354,2355,5,65,0,0,2355,2356,5,83,0,0,2356, + 2357,5,67,0,0,2357,2358,5,65,0,0,2358,2359,5,68,0,0,2359,2360,5,69,0,0, + 2360,2361,5,68,0,0,2361,394,1,0,0,0,2362,2363,5,67,0,0,2363,2364,5,65,0, + 0,2364,2365,5,83,0,0,2365,2366,5,69,0,0,2366,396,1,0,0,0,2367,2368,5,67, + 0,0,2368,2369,5,65,0,0,2369,2370,5,83,0,0,2370,2371,5,84,0,0,2371,398,1, + 0,0,0,2372,2373,5,67,0,0,2373,2374,5,69,0,0,2374,2375,5,73,0,0,2375,2376, + 5,76,0,0,2376,400,1,0,0,0,2377,2378,5,67,0,0,2378,2379,5,72,0,0,2379,2380, + 5,65,0,0,2380,2381,5,82,0,0,2381,402,1,0,0,0,2382,2383,5,67,0,0,2383,2384, + 5,72,0,0,2384,2385,5,65,0,0,2385,2386,5,82,0,0,2386,2387,5,65,0,0,2387, + 2388,5,67,0,0,2388,2389,5,84,0,0,2389,2390,5,69,0,0,2390,2391,5,82,0,0, + 2391,404,1,0,0,0,2392,2393,5,67,0,0,2393,2394,5,72,0,0,2394,2395,5,69,0, + 0,2395,2396,5,67,0,0,2396,2397,5,75,0,0,2397,406,1,0,0,0,2398,2399,5,67, + 0,0,2399,2400,5,76,0,0,2400,2401,5,79,0,0,2401,2402,5,66,0,0,2402,408,1, + 0,0,0,2403,2404,5,67,0,0,2404,2405,5,76,0,0,2405,2406,5,79,0,0,2406,2407, + 5,83,0,0,2407,2408,5,69,0,0,2408,410,1,0,0,0,2409,2410,5,67,0,0,2410,2411, + 5,79,0,0,2411,2412,5,65,0,0,2412,2413,5,76,0,0,2413,2414,5,69,0,0,2414, + 2415,5,83,0,0,2415,2416,5,67,0,0,2416,2417,5,69,0,0,2417,412,1,0,0,0,2418, + 2419,5,67,0,0,2419,2420,5,79,0,0,2420,2421,5,76,0,0,2421,2422,5,76,0,0, + 2422,2423,5,65,0,0,2423,2424,5,84,0,0,2424,2425,5,69,0,0,2425,414,1,0,0, + 0,2426,2427,5,67,0,0,2427,2428,5,79,0,0,2428,2429,5,76,0,0,2429,2430,5, + 76,0,0,2430,2431,5,69,0,0,2431,2432,5,67,0,0,2432,2433,5,84,0,0,2433,416, + 1,0,0,0,2434,2435,5,67,0,0,2435,2436,5,79,0,0,2436,2437,5,76,0,0,2437,2438, + 5,85,0,0,2438,2439,5,77,0,0,2439,2440,5,78,0,0,2440,418,1,0,0,0,2441,2442, + 5,67,0,0,2442,2443,5,79,0,0,2443,2444,5,77,0,0,2444,2445,5,77,0,0,2445, + 2446,5,73,0,0,2446,2447,5,84,0,0,2447,420,1,0,0,0,2448,2449,5,67,0,0,2449, + 2450,5,79,0,0,2450,2451,5,78,0,0,2451,2452,5,78,0,0,2452,2453,5,69,0,0, + 2453,2454,5,67,0,0,2454,2455,5,84,0,0,2455,422,1,0,0,0,2456,2457,5,67,0, + 0,2457,2458,5,79,0,0,2458,2459,5,78,0,0,2459,2460,5,83,0,0,2460,2461,5, + 84,0,0,2461,2462,5,82,0,0,2462,2463,5,65,0,0,2463,2464,5,73,0,0,2464,2465, + 5,78,0,0,2465,2466,5,84,0,0,2466,424,1,0,0,0,2467,2468,5,67,0,0,2468,2469, + 5,79,0,0,2469,2470,5,78,0,0,2470,2471,5,84,0,0,2471,2472,5,65,0,0,2472, + 2473,5,73,0,0,2473,2474,5,78,0,0,2474,2475,5,83,0,0,2475,426,1,0,0,0,2476, + 2477,5,67,0,0,2477,2478,5,79,0,0,2478,2479,5,78,0,0,2479,2480,5,86,0,0, + 2480,2481,5,69,0,0,2481,2482,5,82,0,0,2482,2483,5,84,0,0,2483,428,1,0,0, + 0,2484,2485,5,67,0,0,2485,2486,5,79,0,0,2486,2487,5,85,0,0,2487,2488,5, + 78,0,0,2488,2489,5,84,0,0,2489,430,1,0,0,0,2490,2491,5,67,0,0,2491,2492, + 5,82,0,0,2492,2493,5,69,0,0,2493,2494,5,65,0,0,2494,2495,5,84,0,0,2495, + 2496,5,69,0,0,2496,432,1,0,0,0,2497,2498,5,67,0,0,2498,2499,5,82,0,0,2499, + 2500,5,79,0,0,2500,2501,5,83,0,0,2501,2502,5,83,0,0,2502,434,1,0,0,0,2503, + 2504,5,67,0,0,2504,2505,5,85,0,0,2505,2506,5,66,0,0,2506,2507,5,69,0,0, + 2507,436,1,0,0,0,2508,2509,5,67,0,0,2509,2510,5,85,0,0,2510,2511,5,82,0, + 0,2511,2512,5,82,0,0,2512,2513,5,69,0,0,2513,2514,5,78,0,0,2514,2515,5, + 84,0,0,2515,438,1,0,0,0,2516,2517,5,67,0,0,2517,2518,5,85,0,0,2518,2519, + 5,82,0,0,2519,2520,5,83,0,0,2520,2521,5,79,0,0,2521,2522,5,82,0,0,2522, + 440,1,0,0,0,2523,2524,5,67,0,0,2524,2525,5,89,0,0,2525,2526,5,67,0,0,2526, + 2527,5,76,0,0,2527,2528,5,69,0,0,2528,442,1,0,0,0,2529,2530,5,68,0,0,2530, + 2531,5,65,0,0,2531,2532,5,84,0,0,2532,2533,5,69,0,0,2533,444,1,0,0,0,2534, + 2535,5,68,0,0,2535,2536,5,65,0,0,2536,2537,5,84,0,0,2537,2538,5,69,0,0, + 2538,2539,5,84,0,0,2539,2540,5,73,0,0,2540,2541,5,77,0,0,2541,2542,5,69, + 0,0,2542,446,1,0,0,0,2543,2544,5,68,0,0,2544,2545,5,65,0,0,2545,2546,5, + 89,0,0,2546,448,1,0,0,0,2547,2548,5,68,0,0,2548,2549,5,69,0,0,2549,2550, + 5,67,0,0,2550,450,1,0,0,0,2551,2552,5,68,0,0,2552,2553,5,69,0,0,2553,2554, + 5,67,0,0,2554,2555,5,73,0,0,2555,2556,5,77,0,0,2556,2557,5,65,0,0,2557, + 2558,5,76,0,0,2558,452,1,0,0,0,2559,2560,5,68,0,0,2560,2561,5,69,0,0,2561, + 2562,5,67,0,0,2562,2563,5,76,0,0,2563,2564,5,65,0,0,2564,2565,5,82,0,0, + 2565,2566,5,69,0,0,2566,454,1,0,0,0,2567,2568,5,68,0,0,2568,2569,5,69,0, + 0,2569,2570,5,70,0,0,2570,2571,5,65,0,0,2571,2572,5,85,0,0,2572,2573,5, + 76,0,0,2573,2574,5,84,0,0,2574,456,1,0,0,0,2575,2576,5,68,0,0,2576,2577, + 5,69,0,0,2577,2578,5,70,0,0,2578,2579,5,73,0,0,2579,2580,5,78,0,0,2580, + 2581,5,69,0,0,2581,458,1,0,0,0,2582,2583,5,68,0,0,2583,2584,5,69,0,0,2584, + 2585,5,76,0,0,2585,2586,5,69,0,0,2586,2587,5,84,0,0,2587,2588,5,69,0,0, + 2588,460,1,0,0,0,2589,2590,5,68,0,0,2590,2591,5,69,0,0,2591,2592,5,83,0, + 0,2592,2593,5,67,0,0,2593,2594,5,82,0,0,2594,2595,5,73,0,0,2595,2596,5, + 66,0,0,2596,2597,5,69,0,0,2597,462,1,0,0,0,2598,2599,5,68,0,0,2599,2600, + 5,73,0,0,2600,2601,5,83,0,0,2601,2602,5,84,0,0,2602,2603,5,73,0,0,2603, + 2604,5,78,0,0,2604,2605,5,67,0,0,2605,2606,5,84,0,0,2606,464,1,0,0,0,2607, + 2608,5,68,0,0,2608,2609,5,79,0,0,2609,2610,5,85,0,0,2610,2611,5,66,0,0, + 2611,2612,5,76,0,0,2612,2613,5,69,0,0,2613,466,1,0,0,0,2614,2615,5,68,0, + 0,2615,2616,5,82,0,0,2616,2617,5,79,0,0,2617,2618,5,80,0,0,2618,468,1,0, + 0,0,2619,2620,5,69,0,0,2620,2621,5,65,0,0,2621,2622,5,67,0,0,2622,2623, + 5,72,0,0,2623,470,1,0,0,0,2624,2625,5,69,0,0,2625,2626,5,76,0,0,2626,2627, + 5,83,0,0,2627,2628,5,69,0,0,2628,472,1,0,0,0,2629,2630,5,69,0,0,2630,2631, + 5,78,0,0,2631,2632,5,68,0,0,2632,474,1,0,0,0,2633,2634,5,69,0,0,2634,2635, + 5,81,0,0,2635,2636,5,85,0,0,2636,2637,5,65,0,0,2637,2638,5,76,0,0,2638, + 2639,5,83,0,0,2639,476,1,0,0,0,2640,2641,5,69,0,0,2641,2642,5,88,0,0,2642, + 2643,5,67,0,0,2643,2644,5,69,0,0,2644,2645,5,80,0,0,2645,2646,5,84,0,0, + 2646,478,1,0,0,0,2647,2648,5,69,0,0,2648,2649,5,88,0,0,2649,2650,5,69,0, + 0,2650,2651,5,67,0,0,2651,2652,5,85,0,0,2652,2653,5,84,0,0,2653,2654,5, + 69,0,0,2654,480,1,0,0,0,2655,2656,5,69,0,0,2656,2657,5,88,0,0,2657,2658, + 5,73,0,0,2658,2659,5,83,0,0,2659,2660,5,84,0,0,2660,2661,5,83,0,0,2661, + 482,1,0,0,0,2662,2663,5,69,0,0,2663,2664,5,88,0,0,2664,2665,5,80,0,0,2665, + 2666,5,76,0,0,2666,2667,5,65,0,0,2667,2668,5,73,0,0,2668,2669,5,78,0,0, + 2669,484,1,0,0,0,2670,2671,5,69,0,0,2671,2672,5,88,0,0,2672,2673,5,84,0, + 0,2673,2674,5,69,0,0,2674,2675,5,82,0,0,2675,2676,5,78,0,0,2676,2677,5, + 65,0,0,2677,2678,5,76,0,0,2678,486,1,0,0,0,2679,2680,5,69,0,0,2680,2681, + 5,88,0,0,2681,2682,5,84,0,0,2682,2683,5,82,0,0,2683,2684,5,65,0,0,2684, + 2685,5,67,0,0,2685,2686,5,84,0,0,2686,488,1,0,0,0,2687,2688,5,70,0,0,2688, + 2689,5,65,0,0,2689,2690,5,76,0,0,2690,2691,5,83,0,0,2691,2692,5,69,0,0, + 2692,490,1,0,0,0,2693,2694,5,70,0,0,2694,2695,5,76,0,0,2695,2696,5,79,0, + 0,2696,2697,5,65,0,0,2697,2698,5,84,0,0,2698,492,1,0,0,0,2699,2700,5,70, + 0,0,2700,2701,5,79,0,0,2701,2702,5,82,0,0,2702,494,1,0,0,0,2703,2704,5, + 70,0,0,2704,2705,5,82,0,0,2705,2706,5,79,0,0,2706,2707,5,77,0,0,2707,496, + 1,0,0,0,2708,2709,5,70,0,0,2709,2710,5,85,0,0,2710,2711,5,76,0,0,2711,2712, + 5,76,0,0,2712,498,1,0,0,0,2713,2714,5,70,0,0,2714,2715,5,85,0,0,2715,2716, + 5,78,0,0,2716,2717,5,67,0,0,2717,2718,5,84,0,0,2718,2719,5,73,0,0,2719, + 2720,5,79,0,0,2720,2721,5,78,0,0,2721,500,1,0,0,0,2722,2723,5,71,0,0,2723, + 2724,5,76,0,0,2724,2725,5,79,0,0,2725,2726,5,66,0,0,2726,2727,5,65,0,0, + 2727,2728,5,76,0,0,2728,502,1,0,0,0,2729,2730,5,71,0,0,2730,2731,5,82,0, + 0,2731,2732,5,65,0,0,2732,2733,5,78,0,0,2733,2734,5,84,0,0,2734,504,1,0, + 0,0,2735,2736,5,71,0,0,2736,2737,5,82,0,0,2737,2738,5,79,0,0,2738,2739, + 5,85,0,0,2739,2740,5,80,0,0,2740,506,1,0,0,0,2741,2742,5,71,0,0,2742,2743, + 5,82,0,0,2743,2744,5,79,0,0,2744,2745,5,85,0,0,2745,2746,5,80,0,0,2746, + 2747,5,73,0,0,2747,2748,5,78,0,0,2748,2749,5,71,0,0,2749,508,1,0,0,0,2750, + 2751,5,71,0,0,2751,2752,5,82,0,0,2752,2753,5,79,0,0,2753,2754,5,85,0,0, + 2754,2755,5,80,0,0,2755,2756,5,83,0,0,2756,510,1,0,0,0,2757,2758,5,72,0, + 0,2758,2759,5,65,0,0,2759,2760,5,86,0,0,2760,2761,5,73,0,0,2761,2762,5, + 78,0,0,2762,2763,5,71,0,0,2763,512,1,0,0,0,2764,2765,5,72,0,0,2765,2766, + 5,79,0,0,2766,2767,5,85,0,0,2767,2768,5,82,0,0,2768,514,1,0,0,0,2769,2770, + 5,73,0,0,2770,2771,5,77,0,0,2771,2772,5,80,0,0,2772,2773,5,79,0,0,2773, + 2774,5,82,0,0,2774,2775,5,84,0,0,2775,516,1,0,0,0,2776,2777,5,73,0,0,2777, + 2778,5,78,0,0,2778,518,1,0,0,0,2779,2780,5,73,0,0,2780,2781,5,78,0,0,2781, + 2782,5,67,0,0,2782,2783,5,76,0,0,2783,2784,5,85,0,0,2784,2785,5,68,0,0, + 2785,2786,5,73,0,0,2786,2787,5,78,0,0,2787,2788,5,71,0,0,2788,520,1,0,0, + 0,2789,2790,5,73,0,0,2790,2791,5,78,0,0,2791,2792,5,78,0,0,2792,2793,5, + 69,0,0,2793,2794,5,82,0,0,2794,522,1,0,0,0,2795,2796,5,73,0,0,2796,2797, + 5,78,0,0,2797,2798,5,79,0,0,2798,2799,5,85,0,0,2799,2800,5,84,0,0,2800, + 524,1,0,0,0,2801,2802,5,73,0,0,2802,2803,5,78,0,0,2803,2804,5,83,0,0,2804, + 2805,5,69,0,0,2805,2806,5,82,0,0,2806,2807,5,84,0,0,2807,526,1,0,0,0,2808, + 2809,5,73,0,0,2809,2810,5,78,0,0,2810,2811,5,84,0,0,2811,528,1,0,0,0,2812, + 2813,5,73,0,0,2813,2814,5,78,0,0,2814,2815,5,84,0,0,2815,2816,5,69,0,0, + 2816,2817,5,71,0,0,2817,2818,5,69,0,0,2818,2819,5,82,0,0,2819,530,1,0,0, + 0,2820,2821,5,73,0,0,2821,2822,5,78,0,0,2822,2823,5,84,0,0,2823,2824,5, + 69,0,0,2824,2825,5,82,0,0,2825,2826,5,83,0,0,2826,2827,5,69,0,0,2827,2828, + 5,67,0,0,2828,2829,5,84,0,0,2829,532,1,0,0,0,2830,2831,5,73,0,0,2831,2832, + 5,78,0,0,2832,2833,5,84,0,0,2833,2834,5,69,0,0,2834,2835,5,82,0,0,2835, + 2836,5,86,0,0,2836,2837,5,65,0,0,2837,2838,5,76,0,0,2838,534,1,0,0,0,2839, + 2840,5,73,0,0,2840,2841,5,78,0,0,2841,2842,5,84,0,0,2842,2843,5,79,0,0, + 2843,536,1,0,0,0,2844,2845,5,73,0,0,2845,2846,5,83,0,0,2846,538,1,0,0,0, + 2847,2848,5,74,0,0,2848,2849,5,79,0,0,2849,2850,5,73,0,0,2850,2851,5,78, + 0,0,2851,540,1,0,0,0,2852,2853,5,76,0,0,2853,2854,5,65,0,0,2854,2855,5, + 71,0,0,2855,542,1,0,0,0,2856,2857,5,76,0,0,2857,2858,5,65,0,0,2858,2859, + 5,78,0,0,2859,2860,5,71,0,0,2860,2861,5,85,0,0,2861,2862,5,65,0,0,2862, + 2863,5,71,0,0,2863,2864,5,69,0,0,2864,544,1,0,0,0,2865,2866,5,76,0,0,2866, + 2867,5,65,0,0,2867,2868,5,84,0,0,2868,2869,5,69,0,0,2869,2870,5,82,0,0, + 2870,2871,5,65,0,0,2871,2872,5,76,0,0,2872,546,1,0,0,0,2873,2874,5,76,0, + 0,2874,2875,5,69,0,0,2875,2876,5,65,0,0,2876,2877,5,68,0,0,2877,2878,5, + 73,0,0,2878,2879,5,78,0,0,2879,2880,5,71,0,0,2880,548,1,0,0,0,2881,2882, + 5,76,0,0,2882,2883,5,69,0,0,2883,2884,5,70,0,0,2884,2885,5,84,0,0,2885, + 550,1,0,0,0,2886,2887,5,76,0,0,2887,2888,5,73,0,0,2888,2889,5,75,0,0,2889, + 2890,5,69,0,0,2890,552,1,0,0,0,2891,2892,5,76,0,0,2892,2893,5,73,0,0,2893, + 2894,5,77,0,0,2894,2895,5,73,0,0,2895,2896,5,84,0,0,2896,554,1,0,0,0,2897, + 2898,5,76,0,0,2898,2899,5,79,0,0,2899,2900,5,67,0,0,2900,2901,5,65,0,0, + 2901,2902,5,76,0,0,2902,556,1,0,0,0,2903,2904,5,77,0,0,2904,2905,5,65,0, + 0,2905,2906,5,84,0,0,2906,2907,5,67,0,0,2907,2908,5,72,0,0,2908,558,1,0, + 0,0,2909,2910,5,77,0,0,2910,2911,5,65,0,0,2911,2912,5,84,0,0,2912,2913, + 5,67,0,0,2913,2914,5,72,0,0,2914,2915,5,95,0,0,2915,2916,5,82,0,0,2916, + 2917,5,69,0,0,2917,2918,5,67,0,0,2918,2919,5,79,0,0,2919,2920,5,71,0,0, + 2920,2921,5,78,0,0,2921,2922,5,73,0,0,2922,2923,5,90,0,0,2923,2924,5,69, + 0,0,2924,560,1,0,0,0,2925,2926,5,77,0,0,2926,2927,5,69,0,0,2927,2928,5, + 65,0,0,2928,2929,5,83,0,0,2929,2930,5,85,0,0,2930,2931,5,82,0,0,2931,2932, + 5,69,0,0,2932,2933,5,83,0,0,2933,562,1,0,0,0,2934,2935,5,77,0,0,2935,2936, + 5,69,0,0,2936,2937,5,82,0,0,2937,2938,5,71,0,0,2938,2939,5,69,0,0,2939, + 564,1,0,0,0,2940,2941,5,77,0,0,2941,2942,5,69,0,0,2942,2943,5,84,0,0,2943, + 2944,5,65,0,0,2944,2945,5,68,0,0,2945,2946,5,65,0,0,2946,2947,5,84,0,0, + 2947,2948,5,65,0,0,2948,566,1,0,0,0,2949,2950,5,77,0,0,2950,2951,5,73,0, + 0,2951,2952,5,78,0,0,2952,2953,5,85,0,0,2953,2954,5,83,0,0,2954,568,1,0, + 0,0,2955,2956,5,77,0,0,2956,2957,5,73,0,0,2957,2958,5,78,0,0,2958,2959, + 5,85,0,0,2959,2960,5,84,0,0,2960,2961,5,69,0,0,2961,570,1,0,0,0,2962,2963, + 5,77,0,0,2963,2964,5,79,0,0,2964,2965,5,68,0,0,2965,2966,5,73,0,0,2966, + 2967,5,70,0,0,2967,2968,5,73,0,0,2968,2969,5,69,0,0,2969,2970,5,83,0,0, + 2970,572,1,0,0,0,2971,2972,5,77,0,0,2972,2973,5,79,0,0,2973,2974,5,68,0, + 0,2974,2975,5,85,0,0,2975,2976,5,76,0,0,2976,2977,5,69,0,0,2977,574,1,0, + 0,0,2978,2979,5,77,0,0,2979,2980,5,79,0,0,2980,2981,5,78,0,0,2981,2982, + 5,84,0,0,2982,2983,5,72,0,0,2983,576,1,0,0,0,2984,2985,5,77,0,0,2985,2986, + 5,85,0,0,2986,2987,5,76,0,0,2987,2988,5,84,0,0,2988,2989,5,73,0,0,2989, + 2990,5,83,0,0,2990,2991,5,69,0,0,2991,2992,5,84,0,0,2992,578,1,0,0,0,2993, + 2994,5,78,0,0,2994,2995,5,65,0,0,2995,2996,5,84,0,0,2996,2997,5,85,0,0, + 2997,2998,5,82,0,0,2998,2999,5,65,0,0,2999,3000,5,76,0,0,3000,580,1,0,0, + 0,3001,3002,5,78,0,0,3002,3003,5,69,0,0,3003,3004,5,88,0,0,3004,3005,5, + 84,0,0,3005,582,1,0,0,0,3006,3007,5,78,0,0,3007,3008,5,79,0,0,3008,584, + 1,0,0,0,3009,3010,5,78,0,0,3010,3011,5,79,0,0,3011,3012,5,78,0,0,3012,3013, + 5,69,0,0,3013,586,1,0,0,0,3014,3015,5,78,0,0,3015,3016,5,79,0,0,3016,3017, + 5,84,0,0,3017,588,1,0,0,0,3018,3019,5,78,0,0,3019,3020,5,85,0,0,3020,3021, + 5,76,0,0,3021,3022,5,76,0,0,3022,590,1,0,0,0,3023,3024,5,78,0,0,3024,3025, + 5,85,0,0,3025,3026,5,77,0,0,3026,3027,5,69,0,0,3027,3028,5,82,0,0,3028, + 3029,5,73,0,0,3029,3030,5,67,0,0,3030,592,1,0,0,0,3031,3032,5,79,0,0,3032, + 3033,5,70,0,0,3033,594,1,0,0,0,3034,3035,5,79,0,0,3035,3036,5,70,0,0,3036, + 3037,5,70,0,0,3037,3038,5,83,0,0,3038,3039,5,69,0,0,3039,3040,5,84,0,0, + 3040,596,1,0,0,0,3041,3042,5,79,0,0,3042,3043,5,78,0,0,3043,598,1,0,0,0, + 3044,3045,5,79,0,0,3045,3046,5,78,0,0,3046,3047,5,69,0,0,3047,600,1,0,0, + 0,3048,3049,5,79,0,0,3049,3050,5,82,0,0,3050,602,1,0,0,0,3051,3052,5,79, + 0,0,3052,3053,5,82,0,0,3053,3054,5,68,0,0,3054,3055,5,69,0,0,3055,3056, + 5,82,0,0,3056,604,1,0,0,0,3057,3058,5,79,0,0,3058,3059,5,85,0,0,3059,3060, + 5,84,0,0,3060,606,1,0,0,0,3061,3062,5,79,0,0,3062,3063,5,85,0,0,3063,3064, + 5,84,0,0,3064,3065,5,69,0,0,3065,3066,5,82,0,0,3066,608,1,0,0,0,3067,3068, + 5,79,0,0,3068,3069,5,86,0,0,3069,3070,5,69,0,0,3070,3071,5,82,0,0,3071, + 610,1,0,0,0,3072,3073,5,79,0,0,3073,3074,5,86,0,0,3074,3075,5,69,0,0,3075, + 3076,5,82,0,0,3076,3077,5,76,0,0,3077,3078,5,65,0,0,3078,3079,5,89,0,0, + 3079,612,1,0,0,0,3080,3081,5,80,0,0,3081,3082,5,65,0,0,3082,3083,5,82,0, + 0,3083,3084,5,84,0,0,3084,3085,5,73,0,0,3085,3086,5,84,0,0,3086,3087,5, + 73,0,0,3087,3088,5,79,0,0,3088,3089,5,78,0,0,3089,614,1,0,0,0,3090,3091, + 5,80,0,0,3091,3092,5,65,0,0,3092,3093,5,84,0,0,3093,3094,5,84,0,0,3094, + 3095,5,69,0,0,3095,3096,5,82,0,0,3096,3097,5,78,0,0,3097,616,1,0,0,0,3098, + 3099,5,80,0,0,3099,3100,5,69,0,0,3100,3101,5,82,0,0,3101,618,1,0,0,0,3102, + 3103,5,80,0,0,3103,3104,5,69,0,0,3104,3105,5,82,0,0,3105,3106,5,67,0,0, + 3106,3107,5,69,0,0,3107,3108,5,78,0,0,3108,3109,5,84,0,0,3109,620,1,0,0, + 0,3110,3111,5,80,0,0,3111,3112,5,69,0,0,3112,3113,5,82,0,0,3113,3114,5, + 73,0,0,3114,3115,5,79,0,0,3115,3116,5,68,0,0,3116,622,1,0,0,0,3117,3118, + 5,80,0,0,3118,3119,5,79,0,0,3119,3120,5,83,0,0,3120,3121,5,73,0,0,3121, + 3122,5,84,0,0,3122,3123,5,73,0,0,3123,3124,5,79,0,0,3124,3125,5,78,0,0, + 3125,624,1,0,0,0,3126,3127,5,80,0,0,3127,3128,5,82,0,0,3128,3129,5,73,0, + 0,3129,3130,5,77,0,0,3130,3131,5,65,0,0,3131,3132,5,82,0,0,3132,3133,5, + 89,0,0,3133,626,1,0,0,0,3134,3135,5,82,0,0,3135,3136,5,65,0,0,3136,3137, + 5,78,0,0,3137,3138,5,71,0,0,3138,3139,5,69,0,0,3139,628,1,0,0,0,3140,3141, + 5,82,0,0,3141,3142,5,65,0,0,3142,3143,5,78,0,0,3143,3144,5,75,0,0,3144, + 630,1,0,0,0,3145,3146,5,82,0,0,3146,3147,5,69,0,0,3147,3148,5,83,0,0,3148, + 3149,5,69,0,0,3149,3150,5,84,0,0,3150,632,1,0,0,0,3151,3152,5,82,0,0,3152, + 3153,5,69,0,0,3153,3154,5,86,0,0,3154,3155,5,79,0,0,3155,3156,5,75,0,0, + 3156,3157,5,69,0,0,3157,634,1,0,0,0,3158,3159,5,82,0,0,3159,3160,5,73,0, + 0,3160,3161,5,71,0,0,3161,3162,5,72,0,0,3162,3163,5,84,0,0,3163,636,1,0, + 0,0,3164,3165,5,82,0,0,3165,3166,5,76,0,0,3166,3167,5,73,0,0,3167,3168, + 5,75,0,0,3168,3169,5,69,0,0,3169,638,1,0,0,0,3170,3171,5,82,0,0,3171,3172, + 5,79,0,0,3172,3173,5,76,0,0,3173,3174,5,76,0,0,3174,3175,5,66,0,0,3175, + 3176,5,65,0,0,3176,3177,5,67,0,0,3177,3178,5,75,0,0,3178,640,1,0,0,0,3179, + 3180,5,82,0,0,3180,3181,5,79,0,0,3181,3182,5,76,0,0,3182,3183,5,76,0,0, + 3183,3184,5,85,0,0,3184,3185,5,80,0,0,3185,642,1,0,0,0,3186,3187,5,82,0, + 0,3187,3188,5,79,0,0,3188,3189,5,87,0,0,3189,644,1,0,0,0,3190,3191,5,82, + 0,0,3191,3192,5,79,0,0,3192,3193,5,87,0,0,3193,3194,5,83,0,0,3194,646,1, + 0,0,0,3195,3196,5,83,0,0,3196,3197,5,69,0,0,3197,3198,5,67,0,0,3198,3199, + 5,79,0,0,3199,3200,5,78,0,0,3200,3201,5,68,0,0,3201,648,1,0,0,0,3202,3203, + 5,83,0,0,3203,3204,5,69,0,0,3204,3205,5,76,0,0,3205,3206,5,69,0,0,3206, + 3207,5,67,0,0,3207,3208,5,84,0,0,3208,650,1,0,0,0,3209,3210,5,83,0,0,3210, + 3211,5,69,0,0,3211,3212,5,84,0,0,3212,652,1,0,0,0,3213,3214,5,83,0,0,3214, + 3215,5,72,0,0,3215,3216,5,79,0,0,3216,3217,5,87,0,0,3217,654,1,0,0,0,3218, + 3219,5,83,0,0,3219,3220,5,75,0,0,3220,3221,5,73,0,0,3221,3222,5,80,0,0, + 3222,656,1,0,0,0,3223,3224,5,83,0,0,3224,3225,5,77,0,0,3225,3226,5,65,0, + 0,3226,3227,5,76,0,0,3227,3228,5,76,0,0,3228,3229,5,73,0,0,3229,3230,5, + 78,0,0,3230,3231,5,84,0,0,3231,658,1,0,0,0,3232,3233,5,83,0,0,3233,3234, + 5,84,0,0,3234,3235,5,65,0,0,3235,3236,5,82,0,0,3236,3237,5,84,0,0,3237, + 660,1,0,0,0,3238,3239,5,83,0,0,3239,3240,5,84,0,0,3240,3241,5,65,0,0,3241, + 3242,5,84,0,0,3242,3243,5,73,0,0,3243,3244,5,67,0,0,3244,662,1,0,0,0,3245, + 3246,5,83,0,0,3246,3247,5,85,0,0,3247,3248,5,66,0,0,3248,3249,5,83,0,0, + 3249,3250,5,84,0,0,3250,3251,5,82,0,0,3251,3252,5,73,0,0,3252,3253,5,78, + 0,0,3253,3254,5,71,0,0,3254,664,1,0,0,0,3255,3256,5,83,0,0,3256,3257,5, + 85,0,0,3257,3258,5,77,0,0,3258,666,1,0,0,0,3259,3260,5,83,0,0,3260,3261, + 5,89,0,0,3261,3262,5,83,0,0,3262,3263,5,84,0,0,3263,3264,5,69,0,0,3264, + 3265,5,77,0,0,3265,668,1,0,0,0,3266,3267,5,83,0,0,3267,3268,5,89,0,0,3268, + 3269,5,83,0,0,3269,3270,5,84,0,0,3270,3271,5,69,0,0,3271,3272,5,77,0,0, + 3272,3273,5,95,0,0,3273,3274,5,84,0,0,3274,3275,5,73,0,0,3275,3276,5,77, + 0,0,3276,3277,5,69,0,0,3277,670,1,0,0,0,3278,3279,5,83,0,0,3279,3280,5, + 89,0,0,3280,3281,5,83,0,0,3281,3282,5,84,0,0,3282,3283,5,69,0,0,3283,3284, + 5,77,0,0,3284,3285,5,95,0,0,3285,3286,5,85,0,0,3286,3287,5,83,0,0,3287, + 3288,5,69,0,0,3288,3289,5,82,0,0,3289,672,1,0,0,0,3290,3291,5,84,0,0,3291, + 3292,5,65,0,0,3292,3293,5,66,0,0,3293,3294,5,76,0,0,3294,3295,5,69,0,0, + 3295,674,1,0,0,0,3296,3297,5,84,0,0,3297,3298,5,65,0,0,3298,3299,5,66,0, + 0,3299,3300,5,76,0,0,3300,3301,5,69,0,0,3301,3302,5,83,0,0,3302,3303,5, + 65,0,0,3303,3304,5,77,0,0,3304,3305,5,80,0,0,3305,3306,5,76,0,0,3306,3307, + 5,69,0,0,3307,676,1,0,0,0,3308,3309,5,84,0,0,3309,3310,5,72,0,0,3310,3311, + 5,69,0,0,3311,3312,5,78,0,0,3312,678,1,0,0,0,3313,3314,5,84,0,0,3314,3315, + 5,73,0,0,3315,3316,5,77,0,0,3316,3317,5,69,0,0,3317,680,1,0,0,0,3318,3319, + 5,84,0,0,3319,3320,5,73,0,0,3320,3321,5,77,0,0,3321,3322,5,69,0,0,3322, + 3323,5,83,0,0,3323,3324,5,84,0,0,3324,3325,5,65,0,0,3325,3326,5,77,0,0, + 3326,3327,5,80,0,0,3327,682,1,0,0,0,3328,3329,5,84,0,0,3329,3330,5,73,0, + 0,3330,3331,5,78,0,0,3331,3332,5,89,0,0,3332,3333,5,73,0,0,3333,3334,5, + 78,0,0,3334,3335,5,84,0,0,3335,684,1,0,0,0,3336,3337,5,84,0,0,3337,3338, + 5,79,0,0,3338,686,1,0,0,0,3339,3340,5,84,0,0,3340,3341,5,82,0,0,3341,3342, + 5,85,0,0,3342,3343,5,69,0,0,3343,688,1,0,0,0,3344,3345,5,84,0,0,3345,3346, + 5,82,0,0,3346,3347,5,85,0,0,3347,3348,5,78,0,0,3348,3349,5,67,0,0,3349, + 3350,5,65,0,0,3350,3351,5,84,0,0,3351,3352,5,69,0,0,3352,690,1,0,0,0,3353, + 3354,5,85,0,0,3354,3355,5,78,0,0,3355,3356,5,73,0,0,3356,3357,5,79,0,0, + 3357,3358,5,78,0,0,3358,692,1,0,0,0,3359,3360,5,85,0,0,3360,3361,5,78,0, + 0,3361,3362,5,73,0,0,3362,3363,5,81,0,0,3363,3364,5,85,0,0,3364,3365,5, + 69,0,0,3365,694,1,0,0,0,3366,3367,5,85,0,0,3367,3368,5,78,0,0,3368,3369, + 5,75,0,0,3369,3370,5,78,0,0,3370,3371,5,79,0,0,3371,3372,5,87,0,0,3372, + 3373,5,78,0,0,3373,696,1,0,0,0,3374,3375,5,85,0,0,3375,3376,5,78,0,0,3376, + 3377,5,78,0,0,3377,3378,5,69,0,0,3378,3379,5,83,0,0,3379,3380,5,84,0,0, + 3380,698,1,0,0,0,3381,3382,5,85,0,0,3382,3383,5,80,0,0,3383,3384,5,80,0, + 0,3384,3385,5,69,0,0,3385,3386,5,82,0,0,3386,700,1,0,0,0,3387,3388,5,85, + 0,0,3388,3389,5,80,0,0,3389,3390,5,83,0,0,3390,3391,5,69,0,0,3391,3392, + 5,82,0,0,3392,3393,5,84,0,0,3393,702,1,0,0,0,3394,3395,5,85,0,0,3395,3396, + 5,83,0,0,3396,3397,5,69,0,0,3397,3398,5,82,0,0,3398,704,1,0,0,0,3399,3400, + 5,85,0,0,3400,3401,5,83,0,0,3401,3402,5,73,0,0,3402,3403,5,78,0,0,3403, + 3404,5,71,0,0,3404,706,1,0,0,0,3405,3406,5,86,0,0,3406,3407,5,65,0,0,3407, + 3408,5,76,0,0,3408,3409,5,85,0,0,3409,3410,5,69,0,0,3410,708,1,0,0,0,3411, + 3412,5,86,0,0,3412,3413,5,65,0,0,3413,3414,5,76,0,0,3414,3415,5,85,0,0, + 3415,3416,5,69,0,0,3416,3417,5,83,0,0,3417,710,1,0,0,0,3418,3419,5,86,0, + 0,3419,3420,5,65,0,0,3420,3421,5,82,0,0,3421,3422,5,66,0,0,3422,3423,5, + 73,0,0,3423,3424,5,78,0,0,3424,3425,5,65,0,0,3425,3426,5,82,0,0,3426,3427, + 5,89,0,0,3427,712,1,0,0,0,3428,3429,5,86,0,0,3429,3430,5,65,0,0,3430,3431, + 5,82,0,0,3431,3432,5,67,0,0,3432,3433,5,72,0,0,3433,3434,5,65,0,0,3434, + 3435,5,82,0,0,3435,714,1,0,0,0,3436,3437,5,87,0,0,3437,3438,5,72,0,0,3438, + 3439,5,69,0,0,3439,3440,5,78,0,0,3440,716,1,0,0,0,3441,3442,5,87,0,0,3442, + 3443,5,72,0,0,3443,3444,5,69,0,0,3444,3445,5,82,0,0,3445,3446,5,69,0,0, + 3446,718,1,0,0,0,3447,3448,5,87,0,0,3448,3449,5,73,0,0,3449,3450,5,78,0, + 0,3450,3451,5,68,0,0,3451,3452,5,79,0,0,3452,3453,5,87,0,0,3453,720,1,0, + 0,0,3454,3455,5,87,0,0,3455,3456,5,73,0,0,3456,3457,5,84,0,0,3457,3458, + 5,72,0,0,3458,722,1,0,0,0,3459,3460,5,87,0,0,3460,3461,5,73,0,0,3461,3462, + 5,84,0,0,3462,3463,5,72,0,0,3463,3464,5,73,0,0,3464,3465,5,78,0,0,3465, + 724,1,0,0,0,3466,3467,5,87,0,0,3467,3468,5,73,0,0,3468,3469,5,84,0,0,3469, + 3470,5,72,0,0,3470,3471,5,79,0,0,3471,3472,5,85,0,0,3472,3473,5,84,0,0, + 3473,726,1,0,0,0,3474,3475,5,89,0,0,3475,3476,5,69,0,0,3476,3477,5,65,0, + 0,3477,3478,5,82,0,0,3478,728,1,0,0,0,3479,3480,5,61,0,0,3480,730,1,0,0, + 0,3481,3482,5,62,0,0,3482,732,1,0,0,0,3483,3484,5,60,0,0,3484,734,1,0,0, + 0,3485,3486,5,33,0,0,3486,736,1,0,0,0,3487,3488,5,126,0,0,3488,738,1,0, + 0,0,3489,3490,5,124,0,0,3490,740,1,0,0,0,3491,3492,5,38,0,0,3492,742,1, + 0,0,0,3493,3494,5,94,0,0,3494,744,1,0,0,0,3495,3496,5,46,0,0,3496,746,1, + 0,0,0,3497,3498,5,91,0,0,3498,748,1,0,0,0,3499,3500,5,93,0,0,3500,750,1, + 0,0,0,3501,3502,5,40,0,0,3502,752,1,0,0,0,3503,3504,5,41,0,0,3504,754,1, + 0,0,0,3505,3506,5,123,0,0,3506,756,1,0,0,0,3507,3508,5,125,0,0,3508,758, + 1,0,0,0,3509,3510,5,44,0,0,3510,760,1,0,0,0,3511,3512,5,59,0,0,3512,762, + 1,0,0,0,3513,3514,5,64,0,0,3514,764,1,0,0,0,3515,3516,5,39,0,0,3516,766, + 1,0,0,0,3517,3518,5,34,0,0,3518,768,1,0,0,0,3519,3520,5,96,0,0,3520,770, + 1,0,0,0,3521,3522,5,58,0,0,3522,772,1,0,0,0,3523,3524,5,42,0,0,3524,774, + 1,0,0,0,3525,3526,5,95,0,0,3526,776,1,0,0,0,3527,3528,5,45,0,0,3528,778, + 1,0,0,0,3529,3530,5,43,0,0,3530,780,1,0,0,0,3531,3532,5,37,0,0,3532,782, + 1,0,0,0,3533,3534,5,124,0,0,3534,3535,5,124,0,0,3535,784,1,0,0,0,3536,3537, + 5,45,0,0,3537,3538,5,45,0,0,3538,786,1,0,0,0,3539,3540,5,47,0,0,3540,788, + 1,0,0,0,3541,3542,5,63,0,0,3542,790,1,0,0,0,3543,3544,5,61,0,0,3544,3545, + 5,62,0,0,3545,792,1,0,0,0,3546,3550,3,817,408,0,3547,3550,3,819,409,0,3548, + 3550,3,823,411,0,3549,3546,1,0,0,0,3549,3547,1,0,0,0,3549,3548,1,0,0,0, + 3550,794,1,0,0,0,3551,3553,3,813,406,0,3552,3551,1,0,0,0,3553,3554,1,0, + 0,0,3554,3552,1,0,0,0,3554,3555,1,0,0,0,3555,796,1,0,0,0,3556,3558,3,813, + 406,0,3557,3556,1,0,0,0,3558,3559,1,0,0,0,3559,3557,1,0,0,0,3559,3560,1, + 0,0,0,3560,3562,1,0,0,0,3561,3557,1,0,0,0,3561,3562,1,0,0,0,3562,3563,1, + 0,0,0,3563,3565,5,46,0,0,3564,3566,3,813,406,0,3565,3564,1,0,0,0,3566,3567, + 1,0,0,0,3567,3565,1,0,0,0,3567,3568,1,0,0,0,3568,3600,1,0,0,0,3569,3571, + 3,813,406,0,3570,3569,1,0,0,0,3571,3572,1,0,0,0,3572,3570,1,0,0,0,3572, + 3573,1,0,0,0,3573,3574,1,0,0,0,3574,3575,5,46,0,0,3575,3576,3,809,404,0, + 3576,3600,1,0,0,0,3577,3579,3,813,406,0,3578,3577,1,0,0,0,3579,3580,1,0, + 0,0,3580,3578,1,0,0,0,3580,3581,1,0,0,0,3581,3583,1,0,0,0,3582,3578,1,0, + 0,0,3582,3583,1,0,0,0,3583,3584,1,0,0,0,3584,3586,5,46,0,0,3585,3587,3, + 813,406,0,3586,3585,1,0,0,0,3587,3588,1,0,0,0,3588,3586,1,0,0,0,3588,3589, + 1,0,0,0,3589,3590,1,0,0,0,3590,3591,3,809,404,0,3591,3600,1,0,0,0,3592, + 3594,3,813,406,0,3593,3592,1,0,0,0,3594,3595,1,0,0,0,3595,3593,1,0,0,0, + 3595,3596,1,0,0,0,3596,3597,1,0,0,0,3597,3598,3,809,404,0,3598,3600,1,0, + 0,0,3599,3561,1,0,0,0,3599,3570,1,0,0,0,3599,3582,1,0,0,0,3599,3593,1,0, + 0,0,3600,798,1,0,0,0,3601,3602,3,821,410,0,3602,800,1,0,0,0,3603,3604,3, + 811,405,0,3604,802,1,0,0,0,3605,3606,3,805,402,0,3606,804,1,0,0,0,3607, + 3611,7,2,0,0,3608,3610,8,3,0,0,3609,3608,1,0,0,0,3610,3613,1,0,0,0,3611, + 3609,1,0,0,0,3611,3612,1,0,0,0,3612,3615,1,0,0,0,3613,3611,1,0,0,0,3614, + 3607,1,0,0,0,3615,3616,1,0,0,0,3616,3614,1,0,0,0,3616,3617,1,0,0,0,3617, + 806,1,0,0,0,3618,3626,5,96,0,0,3619,3620,5,92,0,0,3620,3625,9,0,0,0,3621, + 3622,5,96,0,0,3622,3625,5,96,0,0,3623,3625,8,4,0,0,3624,3619,1,0,0,0,3624, + 3621,1,0,0,0,3624,3623,1,0,0,0,3625,3628,1,0,0,0,3626,3624,1,0,0,0,3626, + 3627,1,0,0,0,3627,3629,1,0,0,0,3628,3626,1,0,0,0,3629,3630,5,96,0,0,3630, + 808,1,0,0,0,3631,3633,5,69,0,0,3632,3634,7,5,0,0,3633,3632,1,0,0,0,3633, + 3634,1,0,0,0,3634,3636,1,0,0,0,3635,3637,3,813,406,0,3636,3635,1,0,0,0, + 3637,3638,1,0,0,0,3638,3636,1,0,0,0,3638,3639,1,0,0,0,3639,810,1,0,0,0, + 3640,3642,7,6,0,0,3641,3640,1,0,0,0,3642,3645,1,0,0,0,3643,3644,1,0,0,0, + 3643,3641,1,0,0,0,3644,3647,1,0,0,0,3645,3643,1,0,0,0,3646,3648,7,7,0,0, + 3647,3646,1,0,0,0,3648,3649,1,0,0,0,3649,3650,1,0,0,0,3649,3647,1,0,0,0, + 3650,3654,1,0,0,0,3651,3653,7,6,0,0,3652,3651,1,0,0,0,3653,3656,1,0,0,0, + 3654,3652,1,0,0,0,3654,3655,1,0,0,0,3655,812,1,0,0,0,3656,3654,1,0,0,0, + 3657,3658,7,8,0,0,3658,814,1,0,0,0,3659,3660,7,9,0,0,3660,816,1,0,0,0,3661, + 3669,5,34,0,0,3662,3663,5,92,0,0,3663,3668,9,0,0,0,3664,3665,5,34,0,0,3665, + 3668,5,34,0,0,3666,3668,8,10,0,0,3667,3662,1,0,0,0,3667,3664,1,0,0,0,3667, + 3666,1,0,0,0,3668,3671,1,0,0,0,3669,3667,1,0,0,0,3669,3670,1,0,0,0,3670, + 3672,1,0,0,0,3671,3669,1,0,0,0,3672,3673,5,34,0,0,3673,818,1,0,0,0,3674, + 3682,5,39,0,0,3675,3676,5,92,0,0,3676,3681,9,0,0,0,3677,3678,5,39,0,0,3678, + 3681,5,39,0,0,3679,3681,8,11,0,0,3680,3675,1,0,0,0,3680,3677,1,0,0,0,3680, + 3679,1,0,0,0,3681,3684,1,0,0,0,3682,3680,1,0,0,0,3682,3683,1,0,0,0,3683, + 3685,1,0,0,0,3684,3682,1,0,0,0,3685,3686,5,39,0,0,3686,820,1,0,0,0,3687, + 3688,5,66,0,0,3688,3690,5,39,0,0,3689,3691,7,12,0,0,3690,3689,1,0,0,0,3691, + 3692,1,0,0,0,3692,3690,1,0,0,0,3692,3693,1,0,0,0,3693,3694,1,0,0,0,3694, + 3695,5,39,0,0,3695,822,1,0,0,0,3696,3704,5,96,0,0,3697,3698,5,92,0,0,3698, + 3703,9,0,0,0,3699,3700,5,96,0,0,3700,3703,5,96,0,0,3701,3703,8,4,0,0,3702, + 3697,1,0,0,0,3702,3699,1,0,0,0,3702,3701,1,0,0,0,3703,3706,1,0,0,0,3704, + 3702,1,0,0,0,3704,3705,1,0,0,0,3705,3707,1,0,0,0,3706,3704,1,0,0,0,3707, + 3708,5,96,0,0,3708,824,1,0,0,0,37,0,828,838,849,854,858,862,868,872,874, + 3549,3554,3559,3561,3567,3572,3580,3582,3588,3595,3599,3611,3616,3624,3626, + 3633,3638,3643,3649,3654,3667,3669,3680,3682,3692,3702,3704,1,0,1,0]; private static __ATN: ATN; public static get _ATN(): ATN { diff --git a/src/lib/flinksql/FlinkSqlParser.interp b/src/lib/flinksql/FlinkSqlParser.interp index 1e42df8..b7b72fa 100644 --- a/src/lib/flinksql/FlinkSqlParser.interp +++ b/src/lib/flinksql/FlinkSqlParser.interp @@ -3,313 +3,367 @@ null null null null -'SELECT' -'FROM' 'ADD' -'AS' -'ALL' -'ANY' -'DISTINCT' -'WHERE' -'GROUP' -'BY' -'GROUPING' -'SETS' -'CUBE' -'ROLLUP' -'ORDER' -'HAVING' -'LIMIT' -'AT' -'OR' -'AND' -'IN' -'NOT' -'NO' -'EXISTS' -'BETWEEN' -'LIKE' -'RLIKE' -'IS' -'TRUE' -'FALSE' -'NULLS' -'ASC' -'DESC' -'FOR' -'INTERVAL' -'CASE' -'WHEN' -'THEN' -'ELSE' -'BEGIN' -'END' -'JOIN' -'CROSS' -'OUTER' -'INNER' -'LEFT' -'SEMI' -'RIGHT' -'FULL' -'USER' -'NATURAL' -'ON' -'PIVOT' -'LATERAL' -'WINDOW' -'OVER' -'PARTITION' -'RANGE' -'ROWS' -'UNBOUNDED' -'PRECEDING' -'FOLLOWING' -'CURRENT' -'FIRST' +'ADMIN' 'AFTER' -'LAST' -'WITH' -'WITHOUT' -'VALUES' -'CREATE' -'TABLE' -'DIRECTORY' -'VIEW' -'REPLACE' -'EXECUTE' -'STATEMENT' -'INSERT' -'DELETE' -'REMOVE' -'INTO' -'DESCRIBE' -'EXPLAIN' -'PLAN' -'CHANGELOG_MODE' -'JSON_EXECUTION_PLAN' -'ESTIMATED_COST' -'FORMAT' -'LOGICAL' -'CODEGEN' -'COST' -'CAST' -'SHOW' -'TABLES' -'COLUMNS' -'COLUMN' -'USE' -'MODULE' -'MODULES' -'PARTITIONS' -'FUNCTIONS' -'DROP' -'UNION' -'EXCEPT' -'SETMINUS' -'INTERSECT' -'TO' -'TABLESAMPLE' -'STRATIFY' -'ALTER' -'RENAME' -'STRUCT' -'COMMENT' -'SET' -'RESET' -'DATA' -'START' -'TRANSACTION' -'COMMIT' -'ROLLBACK' -'MACRO' -'IGNORE' -'BOTH' -'LEADING' -'TRAILING' -'IF' -'POSITION' -'EXTRACT' -'MINUS' -'DIV' -'PERCENTLIT' -'BUCKET' -'OUT' -'OF' -'SORT' -'CLUSTER' -'DISTRIBUTE' -'OVERWRITE' -'TRANSFORM' -'REDUCE' -'USING' -'SERDE' -'SERDEPROPERTIES' -'RECORDREADER' -'RECORDWRITER' -'DELIMITED' -'FIELDS' -'TERMINATED' -'COLLECTION' -'ITEMS' -'KEYS' -'ESCAPED' -'LINES' -'SEPARATED' -'FUNCTION' -'EXTENDED' -'REFRESH' -'CLEAR' -'CACHE' -'UNCACHE' -'LAZY' -'FORMATTED' -'GLOBAL' -'TEMPORARY' -'OPTIONS' -'UNSET' -'TBLPROPERTIES' -'DBPROPERTIES' -'BUCKETS' -'SKEWED' -'STORED' -'DIRECTORIES' -'LOCATION' -'EXCHANGE' -'ARCHIVE' -'UNARCHIVE' -'FILEFORMAT' -'TOUCH' -'COMPACT' -'CONCATENATE' -'CHANGE' +'ANALYZE' +'ASC' +'BEFORE' +'BYTES' 'CASCADE' -'CONSTRAINT' -'RESTRICT' -'CLUSTERED' -'SORTED' -'PURGE' -'INPUTFORMAT' -'OUTPUTFORMAT' +'CATALOG' +'CATALOGS' +'CENTURY' +'CHAIN' +'CHANGELOG_MODE' +'CHARACTERS' +'COMMENT' +'COMPACT' +'COLUMNS' +'CONSTRAINTS' +'CONSTRUCTOR' +'CUMULATE' +'DATA' 'DATABASE' 'DATABASES' -'DFS' -'TRUNCATE' -'ANALYZE' -'COMPUTE' -'LIST' -'STATISTICS' -'PARTITIONED' -'EXTERNAL' +'DAYS' +'DECADE' 'DEFINED' -'REVOKE' -'GRANT' -'LOCK' -'UNLOCK' -'MSCK' -'REPAIR' -'RECOVER' -'EXPORT' -'IMPORT' -'LOAD' -'UNLOAD' -'ROLE' -'ROLES' -'COMPACTIONS' -'PRINCIPALS' -'TRANSACTIONS' -'INDEX' -'INDEXES' -'LOCKS' -'OPTION' -'ANTI' -'LOCAL' -'INPATH' -'WATERMARK' -'UNNEST' -'MATCH' -'NEXT' -'WITHIN' -'WS' -'SYSTEM' -'INCLUDING' +'DESC' +'DESCRIPTOR' +'DIV' +'ENCODING' +'ENFORCED' +'ENGINE' +'ERROR' +'ESTIMATED_COST' +'EXCEPTION' +'EXCLUDE' 'EXCLUDING' -'OVERWRITING' -'CONSTRAINTS' -'GENERATED' -'WATERMARKS' -'CATALOG' -'LANGUAGE' -'JAVA' -'SCALA' -'PYTHON' -'JAR' +'EXTENDED' 'FILE' +'FINAL' +'FIRST' +'FOLLOWING' +'FORMAT' +'FORTRAN' +'FOUND' +'FRAC_SECOND' +'FUNCTIONS' +'GENERAL' +'GENERATED' +'GO' +'GOTO' +'GRANTED' +'HOP' +'HOURS' +'IF' +'IGNORE' +'INCREMENT' +'INPUT' +'INVOKER' +'JAR' +'JARS' +'JAVA' +'JSON' +'JSON_EXECUTION_PLAN' +'KEY' +'KEY_MEMBER' +'KEY_TYPE' +'LABEL' +'LAST' +'LENGTH' +'LEVEL' +'LOAD' +'MAP' +'MICROSECOND' +'MILLENNIUM' +'MILLISECOND' +'MINUTES' +'MINVALUE' +'MODIFY' +'MODULES' +'MONTHS' +'NANOSECOND' +'NULLS' +'NUMBER' +'OPTION' +'OPTIONS' +'ORDERING' +'OUTPUT' +'OVERWRITE' +'OVERWRITING' +'PARTITIONED' +'PARTITIONS' +'PASSING' +'PAST' +'PATH' +'PLACING' +'PLAN' +'PRECEDING' +'PRESERVE' +'PRIOR' +'PRIVILEGES' +'PUBLIC' +'PYTHON' 'PYTHON_FILES' 'PYTHON_REQUIREMENTS' 'PYTHON_DEPENDENCIES' 'PYTHON_JAR' 'PYTHON_ARCHIVES' 'PYTHON_PARAMETER' -'ENGINE' -'CATALOGS' -'VIEWS' -'JARS' -'PRIMARY' -'UNIQUE' -'KEY' -'PERIOD' -'SYSTEM_TIME' -'ENFORCED' -'METADATA' -'VIRTUAL' -'ZONE' -'TUMBLE' -'HOP' -'CUMULATE' -'DESCRIPTOR' -'TIMECOL' -'SIZE' -'OFFSET' -'STEP' -'SLIDE' +'QUARTER' +'RAW' +'READ' +'RELATIVE' +'REMOVE' +'RENAME' +'REPLACE' +'RESPECT' +'RESTART' +'RESTRICT' +'ROLE' +'ROW_COUNT' +'SCALA' +'SCALAR' +'SCALE' +'SCHEMA' +'SECONDS' +'SECTION' +'SECURITY' +'SELF' +'SERVER' +'SERVER_NAME' 'SESSION' -'MATCH_RECOGNIZE' -'MEASURES' -'PATTERN' -'ONE' -'PER' -'SKIP' -'PAST' -'DEFINE' +'SETS' +'SIMPLE' +'SIZE' +'SLIDE' +'SOURCE' +'SPACE' +'STATE' +'STATEMENT' +'STEP' 'STRING' +'STRUCTURE' +'STYLE' +'TABLES' +'TEMPORARY' +'TIMECOL' +'TIMESTAMP_LTZ' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TRANSFORM' +'TUMBLE' +'TYPE' +'UNDER' +'UNLOAD' +'USAGE' +'USE' +'UTF16' +'UTF32' +'UTF8' +'VERSION' +'VIEW' +'VIEWS' +'VIRTUAL' +'WATERMARK' +'WATERMARKS' +'WEEK' +'WORK' +'WRAPPER' +'YEARS' +'ZONE' +'ABS' +'ALL' +'ALLOW' +'ALTER' +'AND' +'ANY' +'ARE' 'ARRAY' -'MAP' -'CHAR' -'VARCHAR' +'AS' +'AT' +'AVG' +'BEGIN' +'BETWEEN' +'BIGINT' 'BINARY' -'VARBINARY' -'BYTES' -'DECIMAL' +'BIT' +'BLOB' +'BOOLEAN' +'BOTH' +'BY' +'CALL' +'CALLED' +'CASCADED' +'CASE' +'CAST' +'CEIL' +'CHAR' +'CHARACTER' +'CHECK' +'CLOB' +'CLOSE' +'COALESCE' +'COLLATE' +'COLLECT' +'COLUMN' +'COMMIT' +'CONNECT' +'CONSTRAINT' +'CONTAINS' +'CONVERT' +'COUNT' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURSOR' +'CYCLE' +'DATE' +'DATETIME' +'DAY' 'DEC' -'NUMERIC' -'TINYINT' -'SMALLINT' +'DECIMAL' +'DECLARE' +'DEFAULT' +'DEFINE' +'DELETE' +'DESCRIBE' +'DISTINCT' +'DOUBLE' +'DROP' +'EACH' +'ELSE' +'END' +'EQUALS' +'EXCEPT' +'EXECUTE' +'EXISTS' +'EXPLAIN' +'EXTERNAL' +'EXTRACT' +'FALSE' +'FLOAT' +'FOR' +'FROM' +'FULL' +'FUNCTION' +'GLOBAL' +'GRANT' +'GROUP' +'GROUPING' +'GROUPS' +'HAVING' +'HOUR' +'IMPORT' +'IN' +'INCLUDING' +'INNER' +'INOUT' +'INSERT' 'INT' 'INTEGER' -'BIGINT' -'FLOAT' -'DOUBLE' -'DATE' +'INTERSECT' +'INTERVAL' +'INTO' +'IS' +'JOIN' +'LAG' +'LANGUAGE' +'LATERAL' +'LEADING' +'LEFT' +'LIKE' +'LIMIT' +'LOCAL' +'MATCH' +'MATCH_RECOGNIZE' +'MEASURES' +'MERGE' +'METADATA' +'MINUS' +'MINUTE' +'MODIFIES' +'MODULE' +'MONTH' +'MULTISET' +'NATURAL' +'NEXT' +'NO' +'NONE' +'NOT' +'NULL' +'NUMERIC' +'OF' +'OFFSET' +'ON' +'ONE' +'OR' +'ORDER' +'OUT' +'OUTER' +'OVER' +'OVERLAY' +'PARTITION' +'PATTERN' +'PER' +'PERCENT' +'PERIOD' +'POSITION' +'PRIMARY' +'RANGE' +'RANK' +'RESET' +'REVOKE' +'RIGHT' +'RLIKE' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'SECOND' +'SELECT' +'SET' +'SHOW' +'SKIP' +'SMALLINT' +'START' +'STATIC' +'SUBSTRING' +'SUM' +'SYSTEM' +'SYSTEM_TIME' +'SYSTEM_USER' +'TABLE' +'TABLESAMPLE' +'THEN' 'TIME' 'TIMESTAMP' -'TIMESTAMP_LTZ' -'MULTISET' -'BOOLEAN' -'RAW' -'ROW' -'NULL' -'DATETIME' +'TINYINT' +'TO' +'TRUE' +'TRUNCATE' +'UNION' +'UNIQUE' +'UNKNOWN' +'UNNEST' +'UPPER' +'UPSERT' +'USER' +'USING' +'VALUE' +'VALUES' +'VARBINARY' +'VARCHAR' +'WHEN' +'WHERE' +'WINDOW' +'WITH' +'WITHIN' +'WITHOUT' +'YEAR' '=' '>' '<' @@ -341,327 +395,380 @@ null '--' '/' '?' -null -null -null -null -null -null -null '=>' +null +null +null +null +null +null token symbolic names: null SPACE COMMENT_INPUT LINE_COMMENT -SELECT -FROM -ADD -AS -ALL -ANY -DISTINCT -WHERE -GROUP -BY -GROUPING -SETS -CUBE -ROLLUP -ORDER -HAVING -LIMIT -AT -OR -AND -IN -NOT -NO -EXISTS -BETWEEN -LIKE -RLIKE -IS -TRUE -FALSE -NULLS -ASC -DESC -FOR -INTERVAL -CASE -WHEN -THEN -ELSE -BEGIN -END -JOIN -CROSS -OUTER -INNER -LEFT -SEMI -RIGHT -FULL -USER -NATURAL -ON -PIVOT -LATERAL -WINDOW -OVER -PARTITION -RANGE -ROWS -UNBOUNDED -PRECEDING -FOLLOWING -CURRENT -FIRST -AFTER -LAST -WITH -WITHOUT -VALUES -CREATE -TABLE -DIRECTORY -VIEW -REPLACE -EXECUTE -STATEMENT -INSERT -DELETE -REMOVE -INTO -DESCRIBE -EXPLAIN -PLAN -CHANGELOG_MODE -JSON_EXECUTION_PLAN -ESTIMATED_COST -FORMAT -LOGICAL -CODEGEN -COST -CAST -SHOW -TABLES -COLUMNS -COLUMN -USE -MODULE -MODULES -PARTITIONS -FUNCTIONS -DROP -UNION -EXCEPT -SETMINUS -INTERSECT -TO -TABLESAMPLE -STRATIFY -ALTER -RENAME -STRUCT -COMMENT -SET -RESET -DATA -START -TRANSACTION -COMMIT -ROLLBACK -MACRO -IGNORE -BOTH -LEADING -TRAILING -IF -POSITION -EXTRACT -MINUS -DIV -PERCENTLIT -BUCKET -OUT -OF -SORT -CLUSTER -DISTRIBUTE -OVERWRITE -TRANSFORM -REDUCE -USING -SERDE -SERDEPROPERTIES -RECORDREADER -RECORDWRITER -DELIMITED -FIELDS -TERMINATED -COLLECTION -ITEMS -KEYS -ESCAPED -LINES -SEPARATED -FUNCTION -EXTENDED -REFRESH -CLEAR -CACHE -UNCACHE -LAZY -FORMATTED -GLOBAL -TEMPORARY -OPTIONS -UNSET -TBLPROPERTIES -DBPROPERTIES -BUCKETS -SKEWED -STORED -DIRECTORIES -LOCATION -EXCHANGE -ARCHIVE -UNARCHIVE -FILEFORMAT -TOUCH -COMPACT -CONCATENATE -CHANGE -CASCADE -CONSTRAINT -RESTRICT -CLUSTERED -SORTED -PURGE -INPUTFORMAT -OUTPUTFORMAT -DATABASE -DATABASES -DFS -TRUNCATE -ANALYZE -COMPUTE -LIST -STATISTICS -PARTITIONED -EXTERNAL -DEFINED -REVOKE -GRANT -LOCK -UNLOCK -MSCK -REPAIR -RECOVER -EXPORT -IMPORT -LOAD -UNLOAD -ROLE -ROLES -COMPACTIONS -PRINCIPALS -TRANSACTIONS -INDEX -INDEXES -LOCKS -OPTION -ANTI -LOCAL -INPATH -WATERMARK -UNNEST -MATCH -NEXT -WITHIN -WS -SYSTEM -INCLUDING -EXCLUDING -OVERWRITING -CONSTRAINTS -GENERATED -WATERMARKS -CATALOG -LANGUAGE -JAVA -SCALA -PYTHON -JAR -FILE -PYTHON_FILES -PYTHON_REQUIREMENTS -PYTHON_DEPENDENCIES -PYTHON_JAR -PYTHON_ARCHIVES -PYTHON_PARAMETER -ENGINE -CATALOGS -VIEWS -JARS -PRIMARY -UNIQUE -KEY -PERIOD -SYSTEM_TIME -ENFORCED -METADATA -VIRTUAL -ZONE -TUMBLE -HOP -CUMULATE -DESCRIPTOR -TIMECOL -SIZE -OFFSET -STEP -SLIDE -SESSION -MATCH_RECOGNIZE -MEASURES -PATTERN -ONE -PER +KW_ADD +KW_ADMIN +KW_AFTER +KW_ANALYZE +KW_ASC +KW_BEFORE +KW_BYTES +KW_CASCADE +KW_CATALOG +KW_CATALOGS +KW_CENTURY +KW_CHAIN +KW_CHANGELOG_MODE +KW_CHARACTERS +KW_COMMENT +KW_COMPACT +KW_COLUMNS +KW_CONSTRAINTS +KW_CONSTRUCTOR +KW_CUMULATE +KW_DATA +KW_DATABASE +KW_DATABASES +KW_DAYS +KW_DECADE +KW_DEFINED +KW_DESC +KW_DESCRIPTOR +KW_DIV +KW_ENCODING +KW_ENFORCED +KW_ENGINE +KW_ERROR +KW_ESTIMATED_COST +KW_EXCEPTION +KW_EXCLUDE +KW_EXCLUDING +KW_EXTENDED +KW_FILE +KW_FINAL +KW_FIRST +KW_FOLLOWING +KW_FORMAT +KW_FORTRAN +KW_FOUND +KW_FRAC_SECOND +KW_FUNCTIONS +KW_GENERAL +KW_GENERATED +KW_GO +KW_GOTO +KW_GRANTED +KW_HOP +KW_HOURS +KW_IF +KW_IGNORE +KW_INCREMENT +KW_INPUT +KW_INVOKER +KW_JAR +KW_JARS +KW_JAVA +KW_JSON +KW_JSON_EXECUTION_PLAN +KW_KEY +KW_KEY_MEMBER +KW_KEY_TYPE +KW_LABEL +KW_LAST +KW_LENGTH +KW_LEVEL +KW_LOAD +KW_MAP +KW_MICROSECOND +KW_MILLENNIUM +KW_MILLISECOND +KW_MINUTES +KW_MINVALUE +KW_MODIFY +KW_MODULES +KW_MONTHS +KW_NANOSECOND +KW_NULLS +KW_NUMBER +KW_OPTION +KW_OPTIONS +KW_ORDERING +KW_OUTPUT +KW_OVERWRITE +KW_OVERWRITING +KW_PARTITIONED +KW_PARTITIONS +KW_PASSING +KW_PAST +KW_PATH +KW_PLACING +KW_PLAN +KW_PRECEDING +KW_PRESERVE +KW_PRIOR +KW_PRIVILEGES +KW_PUBLIC +KW_PYTHON +KW_PYTHON_FILES +KW_PYTHON_REQUIREMENTS +KW_PYTHON_DEPENDENCIES +KW_PYTHON_JAR +KW_PYTHON_ARCHIVES +KW_PYTHON_PARAMETER +KW_QUARTER +KW_RAW +KW_READ +KW_RELATIVE +KW_REMOVE +KW_RENAME +KW_REPLACE +KW_RESPECT +KW_RESTART +KW_RESTRICT +KW_ROLE +KW_ROW_COUNT +KW_SCALA +KW_SCALAR +KW_SCALE +KW_SCHEMA +KW_SECONDS +KW_SECTION +KW_SECURITY +KW_SELF +KW_SERVER +KW_SERVER_NAME +KW_SESSION +KW_SETS +KW_SIMPLE +KW_SIZE +KW_SLIDE +KW_SOURCE +KW_SPACE +KW_STATE +KW_STATEMENT +KW_STEP +KW_STRING +KW_STRUCTURE +KW_STYLE +KW_TABLES +KW_TEMPORARY +KW_TIMECOL +KW_TIMESTAMP_LTZ +KW_TIMESTAMPADD +KW_TIMESTAMPDIFF +KW_TRANSFORM +KW_TUMBLE +KW_TYPE +KW_UNDER +KW_UNLOAD +KW_USAGE +KW_USE +KW_UTF16 +KW_UTF32 +KW_UTF8 +KW_VERSION +KW_VIEW +KW_VIEWS +KW_VIRTUAL +KW_WATERMARK +KW_WATERMARKS +KW_WEEK +KW_WORK +KW_WRAPPER +KW_YEARS +KW_ZONE +KW_ABS +KW_ALL +ALLOW +KW_ALTER +KW_AND +KW_ANY +KW_ARE +KW_ARRAY +KW_AS +KW_AT +KW_AVG +KW_BEGIN +KW_BETWEEN +KW_BIGINT +KW_BINARY +KW_BIT +KW_BLOB +KW_BOOLEAN +KW_BOTH +KW_BY +KW_CALL +KW_CALLED +KW_CASCADED +KW_CASE +KW_CAST +KW_CEIL +KW_CHAR +KW_CHARACTER +KW_CHECK +KW_CLOB +KW_CLOSE +KW_COALESCE +KW_COLLATE +KW_COLLECT +KW_COLUMN +KW_COMMIT +KW_CONNECT +KW_CONSTRAINT +KW_CONTAINS +KW_CONVERT +KW_COUNT +KW_CREATE +KW_CROSS +KW_CUBE +KW_CURRENT +KW_CURSOR +KW_CYCLE +KW_DATE +KW_DATETIME +KW_DAY +KW_DEC +KW_DECIMAL +KW_DECLARE +KW_DEFAULT +KW_DEFINE +KW_DELETE +KW_DESCRIBE +KW_DISTINCT +KW_DOUBLE +KW_DROP +KW_EACH +KW_ELSE +KW_END +KW_EQUALS +KW_EXCEPT +KW_EXECUTE +KW_EXISTS +KW_EXPLAIN +KW_EXTERNAL +KW_EXTRACT +KW_FALSE +KW_FLOAT +KW_FOR +KW_FROM +KW_FULL +KW_FUNCTION +KW_GLOBAL +KW_GRANT +KW_GROUP +KW_GROUPING +KW_GROUPS +KW_HAVING +KW_HOUR +KW_IMPORT +KW_IN +KW_INCLUDING +KW_INNER +KW_INOUT +KW_INSERT +KW_INT +KW_INTEGER +KW_INTERSECT +KW_INTERVAL +KW_INTO +KW_IS +KW_JOIN +KW_LAG +KW_LANGUAGE +KW_LATERAL +KW_LEADING +KW_LEFT +KW_LIKE +KW_LIMIT +KW_LOCAL +KW_MATCH +KW_MATCH_RECOGNIZE +KW_MEASURES +KW_MERGE +KW_METADATA +KW_MINUS +KW_MINUTE +KW_MODIFIES +KW_MODULE +KW_MONTH +KW_MULTISET +KW_NATURAL +KW_NEXT +KW_NO +KW_NONE +KW_NOT +KW_NULL +KW_NUMERIC +KW_OF +KW_OFFSET +KW_ON +KW_ONE +KW_OR +KW_ORDER +KW_OUT +KW_OUTER +KW_OVER +KW_OVERLAY +KW_PARTITION +KW_PATTERN +KW_PER +KW_PERCENT +KW_PERIOD +KW_POSITION +KW_PRIMARY +KW_RANGE +KW_RANK +KW_RESET +KW_REVOKE +KW_RIGHT +KW_RLIKE +KW_ROLLBACK +KW_ROLLUP +KW_ROW +KW_ROWS +KW_SECOND +KW_SELECT +KW_SET +KW_SHOW KW_SKIP -PAST -DEFINE -STRING -ARRAY -MAP -CHAR -VARCHAR -BINARY -VARBINARY -BYTES -DECIMAL -DEC -NUMERIC -TINYINT -SMALLINT -INT -INTEGER -BIGINT -FLOAT -DOUBLE -DATE -TIME -TIMESTAMP -TIMESTAMP_LTZ -MULTISET -BOOLEAN -RAW -ROW -NULL -DATETIME +KW_SMALLINT +KW_START +KW_STATIC +KW_SUBSTRING +KW_SUM +KW_SYSTEM +KW_SYSTEM_TIME +KW_SYSTEM_USER +KW_TABLE +KW_TABLESAMPLE +KW_THEN +KW_TIME +KW_TIMESTAMP +KW_TINYINT +KW_TO +KW_TRUE +KW_TRUNCATE +KW_UNION +KW_UNIQUE +KW_UNKNOWN +KW_UNNEST +KW_UPPER +KW_UPSERT +KW_USER +KW_USING +KW_VALUE +KW_VALUES +KW_VARBINARY +KW_VARCHAR +KW_WHEN +KW_WHERE +KW_WINDOW +KW_WITH +KW_WITHIN +KW_WITHOUT +KW_YEAR EQUAL_SYMBOL GREATER_SYMBOL LESS_SYMBOL @@ -693,14 +800,13 @@ DOUBLE_VERTICAL_SIGN DOUBLE_HYPNEN_SIGN SLASH_SIGN QUESTION_MARK_SIGN -DOT_ID +DOUBLE_RIGHT_ARROW STRING_LITERAL DIG_LITERAL REAL_LITERAL BIT_STRING ID_LITERAL FILE_PATH -DOUBLE_ARROW rule names: program @@ -832,7 +938,6 @@ patternVariablesDefination windowFrame frameBound withinClause -timeIntervalExpression expression booleanExpression predicate @@ -843,12 +948,13 @@ functionName dereferenceDefinition correlationName qualifiedName -interval +timeIntervalExpression errorCapturingMultiUnitsInterval multiUnitsInterval errorCapturingUnitToUnitInterval unitToUnitInterval intervalValue +intervalTimeUnit columnAlias tableAlias errorCapturingIdentifier @@ -856,11 +962,9 @@ errorCapturingIdentifierExtra identifierList identifierSeq identifier -strictIdentifier unquotedIdentifier quotedIdentifier whenClause -uidList uid withOption ifNotExists @@ -874,16 +978,14 @@ comparisonOperator bitOperator mathOperator unaryOperator -fullColumnName constant stringLiteral decimalLiteral booleanLiteral setQuantifier -ansiNonReserved -strictNonReserved -nonReserved +reservedKeywords +nonReservedKeywords atn: -[4, 1, 349, 2142, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 369, 8, 2, 1, 2, 5, 2, 372, 8, 2, 10, 2, 12, 2, 375, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 389, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 407, 8, 5, 1, 6, 1, 6, 3, 6, 411, 8, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 420, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 425, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 430, 8, 9, 10, 9, 12, 9, 433, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 439, 8, 11, 1, 11, 1, 11, 3, 11, 443, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 450, 8, 12, 10, 12, 12, 12, 453, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 464, 8, 13, 1, 13, 3, 13, 467, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 474, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 482, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 487, 8, 13, 1, 13, 3, 13, 490, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 497, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 505, 8, 16, 1, 17, 1, 17, 3, 17, 509, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 521, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 529, 8, 19, 1, 19, 1, 19, 3, 19, 533, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 554, 8, 19, 1, 20, 1, 20, 3, 20, 558, 8, 20, 1, 21, 1, 21, 3, 21, 562, 8, 21, 1, 21, 1, 21, 3, 21, 566, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 573, 8, 21, 10, 21, 12, 21, 576, 9, 21, 1, 21, 1, 21, 3, 21, 580, 8, 21, 1, 21, 1, 21, 3, 21, 584, 8, 21, 1, 21, 1, 21, 3, 21, 588, 8, 21, 1, 21, 1, 21, 3, 21, 592, 8, 21, 1, 21, 3, 21, 595, 8, 21, 1, 21, 1, 21, 3, 21, 599, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 604, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 610, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 615, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 620, 8, 24, 1, 24, 3, 24, 623, 8, 24, 1, 25, 1, 25, 3, 25, 627, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 633, 8, 26, 10, 26, 12, 26, 636, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 643, 8, 27, 1, 27, 1, 27, 3, 27, 647, 8, 27, 1, 27, 1, 27, 3, 27, 651, 8, 27, 1, 27, 1, 27, 3, 27, 655, 8, 27, 1, 27, 1, 27, 3, 27, 659, 8, 27, 1, 27, 1, 27, 3, 27, 663, 8, 27, 1, 27, 1, 27, 3, 27, 667, 8, 27, 1, 27, 1, 27, 3, 27, 671, 8, 27, 1, 27, 1, 27, 3, 27, 675, 8, 27, 3, 27, 677, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 687, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 695, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 717, 8, 33, 10, 33, 12, 33, 720, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 726, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 741, 8, 36, 1, 36, 3, 36, 744, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 752, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 764, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 786, 8, 45, 10, 45, 12, 45, 789, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 799, 8, 46, 10, 46, 12, 46, 802, 9, 46, 1, 46, 1, 46, 3, 46, 806, 8, 46, 1, 47, 1, 47, 3, 47, 810, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 816, 8, 48, 10, 48, 12, 48, 819, 9, 48, 1, 48, 3, 48, 822, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 830, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 3, 52, 840, 8, 52, 1, 52, 1, 52, 3, 52, 844, 8, 52, 1, 52, 1, 52, 1, 53, 1, 53, 3, 53, 850, 8, 53, 1, 53, 1, 53, 3, 53, 854, 8, 53, 1, 53, 1, 53, 3, 53, 858, 8, 53, 1, 53, 3, 53, 861, 8, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 870, 8, 54, 1, 54, 1, 54, 3, 54, 874, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 881, 8, 54, 1, 54, 3, 54, 884, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 892, 8, 55, 10, 55, 12, 55, 895, 9, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 3, 57, 902, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 910, 8, 57, 1, 58, 1, 58, 3, 58, 914, 8, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 929, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 948, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 959, 8, 66, 1, 66, 1, 66, 3, 66, 963, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 970, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 975, 8, 67, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 981, 8, 68, 1, 68, 1, 68, 3, 68, 985, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 3, 69, 992, 8, 69, 1, 69, 1, 69, 3, 69, 996, 8, 69, 1, 70, 1, 70, 3, 70, 1000, 8, 70, 1, 70, 1, 70, 3, 70, 1004, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1012, 8, 71, 1, 71, 1, 71, 3, 71, 1016, 8, 71, 1, 71, 1, 71, 1, 72, 3, 72, 1021, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1026, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1032, 8, 73, 1, 73, 3, 73, 1035, 8, 73, 1, 73, 1, 73, 3, 73, 1039, 8, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 1048, 8, 75, 10, 75, 12, 75, 1051, 9, 75, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 1057, 8, 76, 10, 76, 12, 76, 1060, 9, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 4, 77, 1070, 8, 77, 11, 77, 12, 77, 1071, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1087, 8, 78, 1, 78, 3, 78, 1090, 8, 78, 1, 78, 1, 78, 3, 78, 1094, 8, 78, 1, 78, 3, 78, 1097, 8, 78, 3, 78, 1099, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1104, 8, 78, 1, 78, 1, 78, 3, 78, 1108, 8, 78, 1, 78, 3, 78, 1111, 8, 78, 5, 78, 1113, 8, 78, 10, 78, 12, 78, 1116, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 1122, 8, 79, 10, 79, 12, 79, 1125, 9, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 1131, 8, 80, 10, 80, 12, 80, 1134, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1141, 8, 81, 10, 81, 12, 81, 1144, 9, 81, 1, 81, 1, 81, 3, 81, 1148, 8, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 3, 83, 1160, 8, 83, 1, 83, 3, 83, 1163, 8, 83, 1, 83, 3, 83, 1166, 8, 83, 1, 83, 3, 83, 1169, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1175, 8, 83, 1, 84, 1, 84, 3, 84, 1179, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 5, 84, 1185, 8, 84, 10, 84, 12, 84, 1188, 9, 84, 3, 84, 1190, 8, 84, 1, 85, 1, 85, 1, 85, 3, 85, 1195, 8, 85, 1, 85, 3, 85, 1198, 8, 85, 3, 85, 1200, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1214, 8, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1223, 8, 88, 10, 88, 12, 88, 1226, 9, 88, 1, 88, 1, 88, 3, 88, 1230, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1238, 8, 88, 1, 88, 3, 88, 1241, 8, 88, 1, 88, 3, 88, 1244, 8, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1249, 8, 88, 5, 88, 1251, 8, 88, 10, 88, 12, 88, 1254, 9, 88, 1, 89, 1, 89, 3, 89, 1258, 8, 89, 1, 90, 3, 90, 1261, 8, 90, 1, 90, 1, 90, 3, 90, 1265, 8, 90, 1, 90, 3, 90, 1268, 8, 90, 1, 90, 3, 90, 1271, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 1281, 8, 90, 10, 90, 12, 90, 1284, 9, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1290, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1301, 8, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 5, 96, 1328, 8, 96, 10, 96, 12, 96, 1331, 9, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1352, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 1368, 8, 101, 10, 101, 12, 101, 1371, 9, 101, 1, 101, 1, 101, 3, 101, 1375, 8, 101, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1385, 8, 103, 10, 103, 12, 103, 1388, 9, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1398, 8, 104, 10, 104, 12, 104, 1401, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1410, 8, 104, 10, 104, 12, 104, 1413, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1422, 8, 104, 10, 104, 12, 104, 1425, 9, 104, 1, 104, 1, 104, 3, 104, 1429, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1454, 8, 111, 10, 111, 12, 111, 1457, 9, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 3, 113, 1464, 8, 113, 1, 113, 1, 113, 3, 113, 1468, 8, 113, 1, 113, 3, 113, 1471, 8, 113, 1, 113, 3, 113, 1474, 8, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 1481, 8, 114, 1, 114, 3, 114, 1484, 8, 114, 1, 114, 3, 114, 1487, 8, 114, 1, 114, 3, 114, 1490, 8, 114, 1, 114, 3, 114, 1493, 8, 114, 1, 114, 3, 114, 1496, 8, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1501, 8, 114, 1, 114, 3, 114, 1504, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1511, 8, 115, 10, 115, 12, 115, 1514, 9, 115, 1, 116, 1, 116, 3, 116, 1518, 8, 116, 1, 116, 1, 116, 3, 116, 1522, 8, 116, 1, 117, 1, 117, 1, 117, 3, 117, 1527, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1534, 8, 118, 10, 118, 12, 118, 1537, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1555, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 5, 120, 1561, 8, 120, 10, 120, 12, 120, 1564, 9, 120, 1, 121, 1, 121, 1, 121, 4, 121, 1569, 8, 121, 11, 121, 12, 121, 1570, 1, 121, 1, 121, 3, 121, 1575, 8, 121, 1, 122, 1, 122, 3, 122, 1579, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1589, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1615, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 5, 125, 1621, 8, 125, 10, 125, 12, 125, 1624, 9, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1635, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1661, 8, 131, 3, 131, 1663, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1671, 8, 131, 10, 131, 12, 131, 1674, 9, 131, 1, 132, 3, 132, 1677, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1685, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1692, 8, 132, 10, 132, 12, 132, 1695, 9, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1700, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1713, 8, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1718, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1728, 8, 132, 10, 132, 12, 132, 1731, 9, 132, 1, 132, 1, 132, 3, 132, 1735, 8, 132, 1, 132, 3, 132, 1738, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1744, 8, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1749, 8, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1754, 8, 132, 1, 132, 1, 132, 1, 132, 3, 132, 1759, 8, 132, 1, 133, 3, 133, 1762, 8, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1772, 8, 133, 10, 133, 12, 133, 1775, 9, 133, 1, 133, 1, 133, 3, 133, 1779, 8, 133, 1, 133, 3, 133, 1782, 8, 133, 1, 133, 1, 133, 3, 133, 1786, 8, 133, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1792, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1813, 8, 134, 10, 134, 12, 134, 1816, 9, 134, 1, 135, 1, 135, 1, 135, 4, 135, 1821, 8, 135, 11, 135, 12, 135, 1822, 1, 135, 1, 135, 3, 135, 1827, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 4, 135, 1834, 8, 135, 11, 135, 12, 135, 1835, 1, 135, 1, 135, 3, 135, 1840, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1856, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1865, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1889, 8, 135, 1, 135, 1, 135, 1, 135, 5, 135, 1894, 8, 135, 10, 135, 12, 135, 1897, 9, 135, 3, 135, 1899, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 3, 135, 1909, 8, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 5, 135, 1916, 8, 135, 10, 135, 12, 135, 1919, 9, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 1, 139, 1, 139, 3, 139, 1929, 8, 139, 1, 140, 1, 140, 1, 140, 3, 140, 1934, 8, 140, 1, 141, 1, 141, 3, 141, 1938, 8, 141, 1, 142, 1, 142, 1, 142, 4, 142, 1943, 8, 142, 11, 142, 12, 142, 1944, 1, 143, 1, 143, 1, 143, 3, 143, 1950, 8, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 3, 145, 1958, 8, 145, 1, 145, 1, 145, 3, 145, 1962, 8, 145, 1, 146, 3, 146, 1965, 8, 146, 1, 146, 1, 146, 3, 146, 1969, 8, 146, 1, 147, 3, 147, 1972, 8, 147, 1, 147, 1, 147, 3, 147, 1976, 8, 147, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1983, 8, 149, 11, 149, 12, 149, 1984, 1, 149, 3, 149, 1988, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 5, 151, 1997, 8, 151, 10, 151, 12, 151, 2000, 9, 151, 1, 152, 1, 152, 3, 152, 2004, 8, 152, 1, 153, 1, 153, 1, 153, 1, 153, 3, 153, 2010, 8, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 5, 157, 2024, 8, 157, 10, 157, 12, 157, 2027, 9, 157, 1, 158, 1, 158, 5, 158, 2031, 8, 158, 10, 158, 12, 158, 2034, 9, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 5, 162, 2050, 8, 162, 10, 162, 12, 162, 2053, 9, 162, 1, 162, 1, 162, 1, 163, 1, 163, 3, 163, 2059, 8, 163, 1, 163, 3, 163, 2062, 8, 163, 1, 164, 1, 164, 1, 164, 3, 164, 2067, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2073, 8, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 2081, 8, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 1, 167, 3, 167, 2097, 8, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 3, 168, 2106, 8, 168, 1, 169, 1, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 1, 172, 3, 172, 2123, 8, 172, 1, 172, 3, 172, 2126, 8, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 175, 1, 175, 1, 176, 1, 176, 1, 177, 1, 177, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 2032, 5, 156, 176, 262, 268, 270, 180, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 0, 42, 2, 0, 36, 36, 84, 84, 1, 0, 87, 89, 2, 0, 193, 193, 253, 255, 2, 0, 192, 192, 239, 239, 2, 0, 5, 5, 24, 24, 2, 0, 74, 74, 76, 76, 2, 0, 6, 6, 82, 82, 1, 0, 246, 250, 3, 0, 301, 301, 306, 306, 309, 309, 6, 0, 283, 283, 286, 290, 294, 298, 302, 302, 304, 304, 310, 310, 1, 0, 70, 71, 2, 0, 291, 293, 299, 300, 2, 0, 284, 284, 305, 305, 1, 0, 233, 234, 3, 0, 8, 8, 102, 102, 236, 236, 1, 0, 233, 235, 2, 0, 167, 167, 237, 238, 1, 0, 241, 243, 2, 0, 184, 184, 186, 186, 2, 0, 83, 83, 140, 140, 2, 0, 105, 106, 108, 108, 2, 0, 48, 49, 51, 52, 1, 0, 265, 267, 2, 0, 118, 118, 269, 273, 1, 0, 16, 17, 2, 0, 265, 266, 274, 274, 1, 0, 35, 36, 2, 0, 67, 67, 69, 69, 1, 0, 8, 9, 1, 0, 32, 33, 2, 0, 315, 315, 335, 336, 4, 0, 132, 132, 333, 333, 337, 337, 340, 340, 2, 0, 335, 336, 338, 338, 1, 0, 335, 336, 1, 0, 344, 345, 2, 0, 344, 344, 347, 347, 4, 0, 132, 132, 333, 333, 335, 337, 339, 340, 3, 0, 25, 25, 314, 315, 335, 336, 2, 0, 8, 8, 10, 10, 32, 0, 6, 6, 13, 17, 20, 21, 26, 30, 32, 32, 34, 36, 38, 38, 50, 50, 56, 69, 72, 72, 75, 77, 80, 81, 84, 85, 90, 93, 95, 97, 99, 99, 102, 104, 107, 107, 110, 124, 128, 142, 144, 184, 186, 203, 205, 212, 214, 234, 236, 237, 239, 240, 253, 254, 258, 260, 283, 291, 294, 296, 298, 303, 305, 310, 6, 0, 45, 46, 48, 52, 54, 55, 105, 108, 143, 143, 223, 223, 24, 0, 4, 42, 44, 44, 47, 47, 53, 53, 56, 70, 72, 77, 80, 81, 83, 85, 90, 99, 102, 104, 109, 142, 144, 176, 178, 212, 214, 222, 224, 234, 236, 237, 239, 240, 253, 254, 256, 256, 258, 260, 283, 291, 294, 296, 298, 303, 305, 310, 2319, 0, 360, 1, 0, 0, 0, 2, 363, 1, 0, 0, 0, 4, 373, 1, 0, 0, 0, 6, 388, 1, 0, 0, 0, 8, 390, 1, 0, 0, 0, 10, 406, 1, 0, 0, 0, 12, 410, 1, 0, 0, 0, 14, 412, 1, 0, 0, 0, 16, 415, 1, 0, 0, 0, 18, 426, 1, 0, 0, 0, 20, 434, 1, 0, 0, 0, 22, 442, 1, 0, 0, 0, 24, 444, 1, 0, 0, 0, 26, 489, 1, 0, 0, 0, 28, 491, 1, 0, 0, 0, 30, 498, 1, 0, 0, 0, 32, 502, 1, 0, 0, 0, 34, 506, 1, 0, 0, 0, 36, 510, 1, 0, 0, 0, 38, 553, 1, 0, 0, 0, 40, 557, 1, 0, 0, 0, 42, 559, 1, 0, 0, 0, 44, 600, 1, 0, 0, 0, 46, 614, 1, 0, 0, 0, 48, 616, 1, 0, 0, 0, 50, 626, 1, 0, 0, 0, 52, 628, 1, 0, 0, 0, 54, 676, 1, 0, 0, 0, 56, 678, 1, 0, 0, 0, 58, 682, 1, 0, 0, 0, 60, 690, 1, 0, 0, 0, 62, 698, 1, 0, 0, 0, 64, 702, 1, 0, 0, 0, 66, 709, 1, 0, 0, 0, 68, 725, 1, 0, 0, 0, 70, 732, 1, 0, 0, 0, 72, 735, 1, 0, 0, 0, 74, 745, 1, 0, 0, 0, 76, 747, 1, 0, 0, 0, 78, 753, 1, 0, 0, 0, 80, 755, 1, 0, 0, 0, 82, 763, 1, 0, 0, 0, 84, 771, 1, 0, 0, 0, 86, 773, 1, 0, 0, 0, 88, 777, 1, 0, 0, 0, 90, 781, 1, 0, 0, 0, 92, 805, 1, 0, 0, 0, 94, 809, 1, 0, 0, 0, 96, 811, 1, 0, 0, 0, 98, 823, 1, 0, 0, 0, 100, 829, 1, 0, 0, 0, 102, 831, 1, 0, 0, 0, 104, 836, 1, 0, 0, 0, 106, 847, 1, 0, 0, 0, 108, 865, 1, 0, 0, 0, 110, 885, 1, 0, 0, 0, 112, 896, 1, 0, 0, 0, 114, 898, 1, 0, 0, 0, 116, 911, 1, 0, 0, 0, 118, 918, 1, 0, 0, 0, 120, 921, 1, 0, 0, 0, 122, 930, 1, 0, 0, 0, 124, 934, 1, 0, 0, 0, 126, 938, 1, 0, 0, 0, 128, 941, 1, 0, 0, 0, 130, 949, 1, 0, 0, 0, 132, 954, 1, 0, 0, 0, 134, 971, 1, 0, 0, 0, 136, 978, 1, 0, 0, 0, 138, 988, 1, 0, 0, 0, 140, 997, 1, 0, 0, 0, 142, 1007, 1, 0, 0, 0, 144, 1025, 1, 0, 0, 0, 146, 1027, 1, 0, 0, 0, 148, 1040, 1, 0, 0, 0, 150, 1043, 1, 0, 0, 0, 152, 1052, 1, 0, 0, 0, 154, 1063, 1, 0, 0, 0, 156, 1098, 1, 0, 0, 0, 158, 1117, 1, 0, 0, 0, 160, 1126, 1, 0, 0, 0, 162, 1135, 1, 0, 0, 0, 164, 1154, 1, 0, 0, 0, 166, 1174, 1, 0, 0, 0, 168, 1176, 1, 0, 0, 0, 170, 1199, 1, 0, 0, 0, 172, 1213, 1, 0, 0, 0, 174, 1215, 1, 0, 0, 0, 176, 1229, 1, 0, 0, 0, 178, 1255, 1, 0, 0, 0, 180, 1300, 1, 0, 0, 0, 182, 1302, 1, 0, 0, 0, 184, 1304, 1, 0, 0, 0, 186, 1310, 1, 0, 0, 0, 188, 1312, 1, 0, 0, 0, 190, 1317, 1, 0, 0, 0, 192, 1322, 1, 0, 0, 0, 194, 1334, 1, 0, 0, 0, 196, 1351, 1, 0, 0, 0, 198, 1353, 1, 0, 0, 0, 200, 1355, 1, 0, 0, 0, 202, 1374, 1, 0, 0, 0, 204, 1376, 1, 0, 0, 0, 206, 1379, 1, 0, 0, 0, 208, 1428, 1, 0, 0, 0, 210, 1430, 1, 0, 0, 0, 212, 1433, 1, 0, 0, 0, 214, 1435, 1, 0, 0, 0, 216, 1442, 1, 0, 0, 0, 218, 1444, 1, 0, 0, 0, 220, 1446, 1, 0, 0, 0, 222, 1449, 1, 0, 0, 0, 224, 1458, 1, 0, 0, 0, 226, 1463, 1, 0, 0, 0, 228, 1477, 1, 0, 0, 0, 230, 1505, 1, 0, 0, 0, 232, 1515, 1, 0, 0, 0, 234, 1523, 1, 0, 0, 0, 236, 1528, 1, 0, 0, 0, 238, 1554, 1, 0, 0, 0, 240, 1556, 1, 0, 0, 0, 242, 1565, 1, 0, 0, 0, 244, 1576, 1, 0, 0, 0, 246, 1588, 1, 0, 0, 0, 248, 1614, 1, 0, 0, 0, 250, 1616, 1, 0, 0, 0, 252, 1634, 1, 0, 0, 0, 254, 1636, 1, 0, 0, 0, 256, 1641, 1, 0, 0, 0, 258, 1644, 1, 0, 0, 0, 260, 1648, 1, 0, 0, 0, 262, 1662, 1, 0, 0, 0, 264, 1758, 1, 0, 0, 0, 266, 1785, 1, 0, 0, 0, 268, 1791, 1, 0, 0, 0, 270, 1908, 1, 0, 0, 0, 272, 1920, 1, 0, 0, 0, 274, 1922, 1, 0, 0, 0, 276, 1924, 1, 0, 0, 0, 278, 1928, 1, 0, 0, 0, 280, 1930, 1, 0, 0, 0, 282, 1935, 1, 0, 0, 0, 284, 1942, 1, 0, 0, 0, 286, 1946, 1, 0, 0, 0, 288, 1951, 1, 0, 0, 0, 290, 1961, 1, 0, 0, 0, 292, 1964, 1, 0, 0, 0, 294, 1971, 1, 0, 0, 0, 296, 1977, 1, 0, 0, 0, 298, 1987, 1, 0, 0, 0, 300, 1989, 1, 0, 0, 0, 302, 1993, 1, 0, 0, 0, 304, 2003, 1, 0, 0, 0, 306, 2009, 1, 0, 0, 0, 308, 2011, 1, 0, 0, 0, 310, 2013, 1, 0, 0, 0, 312, 2015, 1, 0, 0, 0, 314, 2020, 1, 0, 0, 0, 316, 2028, 1, 0, 0, 0, 318, 2035, 1, 0, 0, 0, 320, 2038, 1, 0, 0, 0, 322, 2042, 1, 0, 0, 0, 324, 2045, 1, 0, 0, 0, 326, 2056, 1, 0, 0, 0, 328, 2066, 1, 0, 0, 0, 330, 2072, 1, 0, 0, 0, 332, 2080, 1, 0, 0, 0, 334, 2096, 1, 0, 0, 0, 336, 2105, 1, 0, 0, 0, 338, 2107, 1, 0, 0, 0, 340, 2109, 1, 0, 0, 0, 342, 2111, 1, 0, 0, 0, 344, 2125, 1, 0, 0, 0, 346, 2127, 1, 0, 0, 0, 348, 2129, 1, 0, 0, 0, 350, 2131, 1, 0, 0, 0, 352, 2133, 1, 0, 0, 0, 354, 2135, 1, 0, 0, 0, 356, 2137, 1, 0, 0, 0, 358, 2139, 1, 0, 0, 0, 360, 361, 3, 2, 1, 0, 361, 362, 5, 0, 0, 1, 362, 1, 1, 0, 0, 0, 363, 364, 3, 4, 2, 0, 364, 365, 5, 0, 0, 1, 365, 3, 1, 0, 0, 0, 366, 368, 3, 6, 3, 0, 367, 369, 5, 327, 0, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 372, 1, 0, 0, 0, 370, 372, 3, 8, 4, 0, 371, 366, 1, 0, 0, 0, 371, 370, 1, 0, 0, 0, 372, 375, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 5, 1, 0, 0, 0, 375, 373, 1, 0, 0, 0, 376, 389, 3, 10, 5, 0, 377, 389, 3, 12, 6, 0, 378, 389, 3, 14, 7, 0, 379, 389, 3, 16, 8, 0, 380, 389, 3, 22, 11, 0, 381, 389, 3, 26, 13, 0, 382, 389, 3, 28, 14, 0, 383, 389, 3, 30, 15, 0, 384, 389, 3, 32, 16, 0, 385, 389, 3, 34, 17, 0, 386, 389, 3, 36, 18, 0, 387, 389, 3, 38, 19, 0, 388, 376, 1, 0, 0, 0, 388, 377, 1, 0, 0, 0, 388, 378, 1, 0, 0, 0, 388, 379, 1, 0, 0, 0, 388, 380, 1, 0, 0, 0, 388, 381, 1, 0, 0, 0, 388, 382, 1, 0, 0, 0, 388, 383, 1, 0, 0, 0, 388, 384, 1, 0, 0, 0, 388, 385, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 388, 387, 1, 0, 0, 0, 389, 7, 1, 0, 0, 0, 390, 391, 5, 327, 0, 0, 391, 9, 1, 0, 0, 0, 392, 407, 3, 40, 20, 0, 393, 407, 3, 104, 52, 0, 394, 407, 3, 106, 53, 0, 395, 407, 3, 108, 54, 0, 396, 407, 3, 102, 51, 0, 397, 407, 3, 114, 57, 0, 398, 407, 3, 128, 64, 0, 399, 407, 3, 130, 65, 0, 400, 407, 3, 132, 66, 0, 401, 407, 3, 134, 67, 0, 402, 407, 3, 136, 68, 0, 403, 407, 3, 138, 69, 0, 404, 407, 3, 140, 70, 0, 405, 407, 3, 142, 71, 0, 406, 392, 1, 0, 0, 0, 406, 393, 1, 0, 0, 0, 406, 394, 1, 0, 0, 0, 406, 395, 1, 0, 0, 0, 406, 396, 1, 0, 0, 0, 406, 397, 1, 0, 0, 0, 406, 398, 1, 0, 0, 0, 406, 399, 1, 0, 0, 0, 406, 400, 1, 0, 0, 0, 406, 401, 1, 0, 0, 0, 406, 402, 1, 0, 0, 0, 406, 403, 1, 0, 0, 0, 406, 404, 1, 0, 0, 0, 406, 405, 1, 0, 0, 0, 407, 11, 1, 0, 0, 0, 408, 411, 3, 156, 78, 0, 409, 411, 3, 144, 72, 0, 410, 408, 1, 0, 0, 0, 410, 409, 1, 0, 0, 0, 411, 13, 1, 0, 0, 0, 412, 413, 7, 0, 0, 0, 413, 414, 3, 316, 158, 0, 414, 15, 1, 0, 0, 0, 415, 419, 5, 85, 0, 0, 416, 420, 3, 18, 9, 0, 417, 418, 5, 86, 0, 0, 418, 420, 5, 37, 0, 0, 419, 416, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 424, 1, 0, 0, 0, 421, 425, 3, 12, 6, 0, 422, 425, 3, 146, 73, 0, 423, 425, 3, 154, 77, 0, 424, 421, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 424, 423, 1, 0, 0, 0, 425, 17, 1, 0, 0, 0, 426, 431, 3, 20, 10, 0, 427, 428, 5, 326, 0, 0, 428, 430, 3, 20, 10, 0, 429, 427, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 19, 1, 0, 0, 0, 433, 431, 1, 0, 0, 0, 434, 435, 7, 1, 0, 0, 435, 21, 1, 0, 0, 0, 436, 438, 5, 99, 0, 0, 437, 439, 5, 239, 0, 0, 438, 437, 1, 0, 0, 0, 438, 439, 1, 0, 0, 0, 439, 440, 1, 0, 0, 0, 440, 443, 3, 316, 158, 0, 441, 443, 3, 24, 12, 0, 442, 436, 1, 0, 0, 0, 442, 441, 1, 0, 0, 0, 443, 23, 1, 0, 0, 0, 444, 445, 5, 99, 0, 0, 445, 446, 5, 101, 0, 0, 446, 451, 3, 316, 158, 0, 447, 448, 5, 326, 0, 0, 448, 450, 3, 316, 158, 0, 449, 447, 1, 0, 0, 0, 450, 453, 1, 0, 0, 0, 451, 449, 1, 0, 0, 0, 451, 452, 1, 0, 0, 0, 452, 25, 1, 0, 0, 0, 453, 451, 1, 0, 0, 0, 454, 455, 5, 95, 0, 0, 455, 490, 7, 2, 0, 0, 456, 457, 5, 95, 0, 0, 457, 458, 5, 66, 0, 0, 458, 490, 7, 3, 0, 0, 459, 460, 5, 95, 0, 0, 460, 463, 5, 96, 0, 0, 461, 462, 7, 4, 0, 0, 462, 464, 3, 316, 158, 0, 463, 461, 1, 0, 0, 0, 463, 464, 1, 0, 0, 0, 464, 466, 1, 0, 0, 0, 465, 467, 3, 266, 133, 0, 466, 465, 1, 0, 0, 0, 466, 467, 1, 0, 0, 0, 467, 490, 1, 0, 0, 0, 468, 469, 5, 95, 0, 0, 469, 470, 5, 97, 0, 0, 470, 471, 7, 4, 0, 0, 471, 473, 3, 316, 158, 0, 472, 474, 3, 266, 133, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 490, 1, 0, 0, 0, 475, 476, 5, 95, 0, 0, 476, 477, 5, 73, 0, 0, 477, 478, 7, 5, 0, 0, 478, 490, 3, 316, 158, 0, 479, 481, 5, 95, 0, 0, 480, 482, 5, 53, 0, 0, 481, 480, 1, 0, 0, 0, 481, 482, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 490, 5, 103, 0, 0, 484, 486, 5, 95, 0, 0, 485, 487, 5, 52, 0, 0, 486, 485, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 488, 1, 0, 0, 0, 488, 490, 5, 101, 0, 0, 489, 454, 1, 0, 0, 0, 489, 456, 1, 0, 0, 0, 489, 459, 1, 0, 0, 0, 489, 468, 1, 0, 0, 0, 489, 475, 1, 0, 0, 0, 489, 479, 1, 0, 0, 0, 489, 484, 1, 0, 0, 0, 490, 27, 1, 0, 0, 0, 491, 492, 5, 212, 0, 0, 492, 493, 5, 100, 0, 0, 493, 496, 3, 316, 158, 0, 494, 495, 5, 70, 0, 0, 495, 497, 3, 324, 162, 0, 496, 494, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 29, 1, 0, 0, 0, 498, 499, 5, 213, 0, 0, 499, 500, 5, 100, 0, 0, 500, 501, 3, 316, 158, 0, 501, 31, 1, 0, 0, 0, 502, 504, 5, 116, 0, 0, 503, 505, 3, 326, 163, 0, 504, 503, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 33, 1, 0, 0, 0, 506, 508, 5, 117, 0, 0, 507, 509, 3, 328, 164, 0, 508, 507, 1, 0, 0, 0, 508, 509, 1, 0, 0, 0, 509, 35, 1, 0, 0, 0, 510, 511, 7, 6, 0, 0, 511, 512, 5, 244, 0, 0, 512, 513, 3, 112, 56, 0, 513, 37, 1, 0, 0, 0, 514, 515, 5, 6, 0, 0, 515, 516, 5, 244, 0, 0, 516, 517, 5, 70, 0, 0, 517, 520, 5, 348, 0, 0, 518, 519, 5, 7, 0, 0, 519, 521, 3, 316, 158, 0, 520, 518, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 554, 1, 0, 0, 0, 522, 523, 5, 6, 0, 0, 523, 524, 5, 245, 0, 0, 524, 525, 5, 70, 0, 0, 525, 528, 5, 348, 0, 0, 526, 527, 5, 7, 0, 0, 527, 529, 3, 316, 158, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 532, 1, 0, 0, 0, 530, 531, 5, 113, 0, 0, 531, 533, 3, 316, 158, 0, 532, 530, 1, 0, 0, 0, 532, 533, 1, 0, 0, 0, 533, 554, 1, 0, 0, 0, 534, 535, 5, 6, 0, 0, 535, 536, 7, 7, 0, 0, 536, 537, 5, 70, 0, 0, 537, 538, 5, 348, 0, 0, 538, 539, 5, 113, 0, 0, 539, 554, 3, 316, 158, 0, 540, 541, 5, 6, 0, 0, 541, 542, 5, 251, 0, 0, 542, 554, 5, 348, 0, 0, 543, 544, 5, 6, 0, 0, 544, 545, 5, 252, 0, 0, 545, 546, 5, 245, 0, 0, 546, 547, 5, 70, 0, 0, 547, 548, 5, 348, 0, 0, 548, 549, 5, 113, 0, 0, 549, 550, 3, 316, 158, 0, 550, 551, 5, 258, 0, 0, 551, 552, 3, 316, 158, 0, 552, 554, 1, 0, 0, 0, 553, 514, 1, 0, 0, 0, 553, 522, 1, 0, 0, 0, 553, 534, 1, 0, 0, 0, 553, 540, 1, 0, 0, 0, 553, 543, 1, 0, 0, 0, 554, 39, 1, 0, 0, 0, 555, 558, 3, 42, 21, 0, 556, 558, 3, 44, 22, 0, 557, 555, 1, 0, 0, 0, 557, 556, 1, 0, 0, 0, 558, 41, 1, 0, 0, 0, 559, 561, 5, 73, 0, 0, 560, 562, 5, 166, 0, 0, 561, 560, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 563, 1, 0, 0, 0, 563, 565, 5, 74, 0, 0, 564, 566, 3, 320, 160, 0, 565, 564, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 3, 98, 49, 0, 568, 569, 5, 322, 0, 0, 569, 574, 3, 46, 23, 0, 570, 571, 5, 326, 0, 0, 571, 573, 3, 46, 23, 0, 572, 570, 1, 0, 0, 0, 573, 576, 1, 0, 0, 0, 574, 572, 1, 0, 0, 0, 574, 575, 1, 0, 0, 0, 575, 579, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 577, 578, 5, 326, 0, 0, 578, 580, 3, 80, 40, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 583, 1, 0, 0, 0, 581, 582, 5, 326, 0, 0, 582, 584, 3, 82, 41, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 587, 1, 0, 0, 0, 585, 586, 5, 326, 0, 0, 586, 588, 3, 86, 43, 0, 587, 585, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 591, 5, 323, 0, 0, 590, 592, 3, 70, 35, 0, 591, 590, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 1, 0, 0, 0, 593, 595, 3, 88, 44, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 598, 3, 318, 159, 0, 597, 599, 3, 96, 48, 0, 598, 597, 1, 0, 0, 0, 598, 599, 1, 0, 0, 0, 599, 43, 1, 0, 0, 0, 600, 601, 5, 73, 0, 0, 601, 603, 5, 74, 0, 0, 602, 604, 3, 320, 160, 0, 603, 602, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 1, 0, 0, 0, 605, 606, 3, 98, 49, 0, 606, 609, 3, 318, 159, 0, 607, 608, 5, 7, 0, 0, 608, 610, 3, 156, 78, 0, 609, 607, 1, 0, 0, 0, 609, 610, 1, 0, 0, 0, 610, 45, 1, 0, 0, 0, 611, 615, 3, 48, 24, 0, 612, 615, 3, 72, 36, 0, 613, 615, 3, 76, 38, 0, 614, 611, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 614, 613, 1, 0, 0, 0, 615, 47, 1, 0, 0, 0, 616, 617, 3, 50, 25, 0, 617, 619, 3, 54, 27, 0, 618, 620, 3, 68, 34, 0, 619, 618, 1, 0, 0, 0, 619, 620, 1, 0, 0, 0, 620, 622, 1, 0, 0, 0, 621, 623, 3, 70, 35, 0, 622, 621, 1, 0, 0, 0, 622, 623, 1, 0, 0, 0, 623, 49, 1, 0, 0, 0, 624, 627, 3, 316, 158, 0, 625, 627, 3, 260, 130, 0, 626, 624, 1, 0, 0, 0, 626, 625, 1, 0, 0, 0, 627, 51, 1, 0, 0, 0, 628, 629, 5, 322, 0, 0, 629, 634, 3, 50, 25, 0, 630, 631, 5, 326, 0, 0, 631, 633, 3, 50, 25, 0, 632, 630, 1, 0, 0, 0, 633, 636, 1, 0, 0, 0, 634, 632, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 637, 1, 0, 0, 0, 636, 634, 1, 0, 0, 0, 637, 638, 5, 323, 0, 0, 638, 53, 1, 0, 0, 0, 639, 677, 7, 8, 0, 0, 640, 642, 7, 9, 0, 0, 641, 643, 3, 56, 28, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 677, 1, 0, 0, 0, 644, 646, 5, 303, 0, 0, 645, 647, 3, 56, 28, 0, 646, 645, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 654, 1, 0, 0, 0, 648, 650, 7, 10, 0, 0, 649, 651, 5, 224, 0, 0, 650, 649, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 652, 1, 0, 0, 0, 652, 653, 5, 302, 0, 0, 653, 655, 5, 264, 0, 0, 654, 648, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 677, 1, 0, 0, 0, 656, 658, 7, 11, 0, 0, 657, 659, 3, 58, 29, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 677, 1, 0, 0, 0, 660, 662, 7, 12, 0, 0, 661, 663, 3, 62, 31, 0, 662, 661, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 677, 1, 0, 0, 0, 664, 666, 5, 285, 0, 0, 665, 667, 3, 64, 32, 0, 666, 665, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 677, 1, 0, 0, 0, 668, 670, 5, 308, 0, 0, 669, 671, 3, 66, 33, 0, 670, 669, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 677, 1, 0, 0, 0, 672, 674, 5, 307, 0, 0, 673, 675, 3, 60, 30, 0, 674, 673, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 677, 1, 0, 0, 0, 676, 639, 1, 0, 0, 0, 676, 640, 1, 0, 0, 0, 676, 644, 1, 0, 0, 0, 676, 656, 1, 0, 0, 0, 676, 660, 1, 0, 0, 0, 676, 664, 1, 0, 0, 0, 676, 668, 1, 0, 0, 0, 676, 672, 1, 0, 0, 0, 677, 55, 1, 0, 0, 0, 678, 679, 5, 322, 0, 0, 679, 680, 3, 348, 174, 0, 680, 681, 5, 323, 0, 0, 681, 57, 1, 0, 0, 0, 682, 683, 5, 322, 0, 0, 683, 686, 3, 348, 174, 0, 684, 685, 5, 326, 0, 0, 685, 687, 3, 348, 174, 0, 686, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 5, 323, 0, 0, 689, 59, 1, 0, 0, 0, 690, 691, 5, 322, 0, 0, 691, 694, 3, 346, 173, 0, 692, 693, 5, 326, 0, 0, 693, 695, 3, 346, 173, 0, 694, 692, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 696, 1, 0, 0, 0, 696, 697, 5, 323, 0, 0, 697, 61, 1, 0, 0, 0, 698, 699, 5, 313, 0, 0, 699, 700, 3, 54, 27, 0, 700, 701, 5, 312, 0, 0, 701, 63, 1, 0, 0, 0, 702, 703, 5, 313, 0, 0, 703, 704, 3, 54, 27, 0, 704, 705, 5, 326, 0, 0, 705, 706, 3, 54, 27, 0, 706, 707, 1, 0, 0, 0, 707, 708, 5, 312, 0, 0, 708, 65, 1, 0, 0, 0, 709, 710, 5, 313, 0, 0, 710, 711, 3, 50, 25, 0, 711, 718, 3, 54, 27, 0, 712, 713, 5, 326, 0, 0, 713, 714, 3, 50, 25, 0, 714, 715, 3, 54, 27, 0, 715, 717, 1, 0, 0, 0, 716, 712, 1, 0, 0, 0, 717, 720, 1, 0, 0, 0, 718, 716, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 721, 1, 0, 0, 0, 720, 718, 1, 0, 0, 0, 721, 722, 5, 312, 0, 0, 722, 67, 1, 0, 0, 0, 723, 724, 5, 185, 0, 0, 724, 726, 3, 84, 42, 0, 725, 723, 1, 0, 0, 0, 725, 726, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 5, 256, 0, 0, 728, 729, 5, 258, 0, 0, 729, 730, 5, 25, 0, 0, 730, 731, 5, 261, 0, 0, 731, 69, 1, 0, 0, 0, 732, 733, 5, 115, 0, 0, 733, 734, 5, 343, 0, 0, 734, 71, 1, 0, 0, 0, 735, 736, 3, 50, 25, 0, 736, 737, 3, 54, 27, 0, 737, 740, 5, 262, 0, 0, 738, 739, 5, 5, 0, 0, 739, 741, 3, 74, 37, 0, 740, 738, 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 743, 1, 0, 0, 0, 742, 744, 5, 263, 0, 0, 743, 742, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 73, 1, 0, 0, 0, 745, 746, 5, 343, 0, 0, 746, 75, 1, 0, 0, 0, 747, 748, 3, 50, 25, 0, 748, 749, 5, 7, 0, 0, 749, 751, 3, 78, 39, 0, 750, 752, 3, 70, 35, 0, 751, 750, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 77, 1, 0, 0, 0, 753, 754, 3, 260, 130, 0, 754, 79, 1, 0, 0, 0, 755, 756, 5, 226, 0, 0, 756, 757, 5, 37, 0, 0, 757, 758, 3, 260, 130, 0, 758, 759, 5, 7, 0, 0, 759, 760, 3, 260, 130, 0, 760, 81, 1, 0, 0, 0, 761, 762, 5, 185, 0, 0, 762, 764, 3, 84, 42, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 1, 0, 0, 0, 765, 766, 5, 256, 0, 0, 766, 767, 5, 258, 0, 0, 767, 768, 3, 52, 26, 0, 768, 769, 5, 25, 0, 0, 769, 770, 5, 261, 0, 0, 770, 83, 1, 0, 0, 0, 771, 772, 3, 304, 152, 0, 772, 85, 1, 0, 0, 0, 773, 774, 5, 259, 0, 0, 774, 775, 5, 37, 0, 0, 775, 776, 5, 260, 0, 0, 776, 87, 1, 0, 0, 0, 777, 778, 5, 200, 0, 0, 778, 779, 5, 13, 0, 0, 779, 780, 3, 90, 45, 0, 780, 89, 1, 0, 0, 0, 781, 782, 5, 322, 0, 0, 782, 787, 3, 92, 46, 0, 783, 784, 5, 326, 0, 0, 784, 786, 3, 92, 46, 0, 785, 783, 1, 0, 0, 0, 786, 789, 1, 0, 0, 0, 787, 785, 1, 0, 0, 0, 787, 788, 1, 0, 0, 0, 788, 790, 1, 0, 0, 0, 789, 787, 1, 0, 0, 0, 790, 791, 5, 323, 0, 0, 791, 91, 1, 0, 0, 0, 792, 806, 3, 278, 139, 0, 793, 794, 3, 304, 152, 0, 794, 795, 5, 322, 0, 0, 795, 800, 3, 94, 47, 0, 796, 797, 5, 326, 0, 0, 797, 799, 3, 94, 47, 0, 798, 796, 1, 0, 0, 0, 799, 802, 1, 0, 0, 0, 800, 798, 1, 0, 0, 0, 800, 801, 1, 0, 0, 0, 801, 803, 1, 0, 0, 0, 802, 800, 1, 0, 0, 0, 803, 804, 5, 323, 0, 0, 804, 806, 1, 0, 0, 0, 805, 792, 1, 0, 0, 0, 805, 793, 1, 0, 0, 0, 806, 93, 1, 0, 0, 0, 807, 810, 3, 278, 139, 0, 808, 810, 3, 344, 172, 0, 809, 807, 1, 0, 0, 0, 809, 808, 1, 0, 0, 0, 810, 95, 1, 0, 0, 0, 811, 812, 5, 29, 0, 0, 812, 821, 3, 98, 49, 0, 813, 817, 5, 322, 0, 0, 814, 816, 3, 100, 50, 0, 815, 814, 1, 0, 0, 0, 816, 819, 1, 0, 0, 0, 817, 815, 1, 0, 0, 0, 817, 818, 1, 0, 0, 0, 818, 820, 1, 0, 0, 0, 819, 817, 1, 0, 0, 0, 820, 822, 5, 323, 0, 0, 821, 813, 1, 0, 0, 0, 821, 822, 1, 0, 0, 0, 822, 97, 1, 0, 0, 0, 823, 824, 3, 316, 158, 0, 824, 99, 1, 0, 0, 0, 825, 826, 7, 13, 0, 0, 826, 830, 7, 14, 0, 0, 827, 828, 7, 15, 0, 0, 828, 830, 7, 16, 0, 0, 829, 825, 1, 0, 0, 0, 829, 827, 1, 0, 0, 0, 830, 101, 1, 0, 0, 0, 831, 832, 5, 73, 0, 0, 832, 833, 5, 239, 0, 0, 833, 834, 3, 316, 158, 0, 834, 835, 3, 318, 159, 0, 835, 103, 1, 0, 0, 0, 836, 837, 5, 73, 0, 0, 837, 839, 5, 192, 0, 0, 838, 840, 3, 320, 160, 0, 839, 838, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, 843, 3, 316, 158, 0, 842, 844, 3, 70, 35, 0, 843, 842, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 1, 0, 0, 0, 845, 846, 3, 318, 159, 0, 846, 105, 1, 0, 0, 0, 847, 849, 5, 73, 0, 0, 848, 850, 5, 166, 0, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 853, 5, 76, 0, 0, 852, 854, 3, 320, 160, 0, 853, 852, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 1, 0, 0, 0, 855, 857, 3, 316, 158, 0, 856, 858, 3, 52, 26, 0, 857, 856, 1, 0, 0, 0, 857, 858, 1, 0, 0, 0, 858, 860, 1, 0, 0, 0, 859, 861, 3, 70, 35, 0, 860, 859, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 863, 5, 7, 0, 0, 863, 864, 3, 156, 78, 0, 864, 107, 1, 0, 0, 0, 865, 869, 5, 73, 0, 0, 866, 870, 5, 166, 0, 0, 867, 868, 5, 166, 0, 0, 868, 870, 5, 232, 0, 0, 869, 866, 1, 0, 0, 0, 869, 867, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 871, 1, 0, 0, 0, 871, 873, 5, 157, 0, 0, 872, 874, 3, 320, 160, 0, 873, 872, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 875, 1, 0, 0, 0, 875, 876, 3, 316, 158, 0, 876, 877, 5, 7, 0, 0, 877, 880, 3, 304, 152, 0, 878, 879, 5, 240, 0, 0, 879, 881, 7, 17, 0, 0, 880, 878, 1, 0, 0, 0, 880, 881, 1, 0, 0, 0, 881, 883, 1, 0, 0, 0, 882, 884, 3, 110, 55, 0, 883, 882, 1, 0, 0, 0, 883, 884, 1, 0, 0, 0, 884, 109, 1, 0, 0, 0, 885, 886, 5, 143, 0, 0, 886, 887, 5, 244, 0, 0, 887, 893, 3, 112, 56, 0, 888, 889, 5, 326, 0, 0, 889, 890, 5, 244, 0, 0, 890, 892, 3, 112, 56, 0, 891, 888, 1, 0, 0, 0, 892, 895, 1, 0, 0, 0, 893, 891, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 111, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 896, 897, 5, 343, 0, 0, 897, 113, 1, 0, 0, 0, 898, 899, 5, 112, 0, 0, 899, 901, 5, 74, 0, 0, 900, 902, 3, 322, 161, 0, 901, 900, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 903, 1, 0, 0, 0, 903, 909, 3, 316, 158, 0, 904, 910, 3, 116, 58, 0, 905, 910, 3, 118, 59, 0, 906, 910, 3, 120, 60, 0, 907, 910, 3, 122, 61, 0, 908, 910, 3, 124, 62, 0, 909, 904, 1, 0, 0, 0, 909, 905, 1, 0, 0, 0, 909, 906, 1, 0, 0, 0, 909, 907, 1, 0, 0, 0, 909, 908, 1, 0, 0, 0, 910, 115, 1, 0, 0, 0, 911, 913, 5, 113, 0, 0, 912, 914, 3, 316, 158, 0, 913, 912, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 915, 1, 0, 0, 0, 915, 916, 5, 109, 0, 0, 916, 917, 3, 316, 158, 0, 917, 117, 1, 0, 0, 0, 918, 919, 5, 116, 0, 0, 919, 920, 3, 324, 162, 0, 920, 119, 1, 0, 0, 0, 921, 922, 5, 6, 0, 0, 922, 923, 5, 185, 0, 0, 923, 924, 3, 84, 42, 0, 924, 925, 5, 256, 0, 0, 925, 926, 5, 258, 0, 0, 926, 928, 3, 52, 26, 0, 927, 929, 3, 126, 63, 0, 928, 927, 1, 0, 0, 0, 928, 929, 1, 0, 0, 0, 929, 121, 1, 0, 0, 0, 930, 931, 5, 104, 0, 0, 931, 932, 5, 185, 0, 0, 932, 933, 3, 84, 42, 0, 933, 123, 1, 0, 0, 0, 934, 935, 5, 6, 0, 0, 935, 936, 5, 257, 0, 0, 936, 937, 3, 52, 26, 0, 937, 125, 1, 0, 0, 0, 938, 939, 5, 25, 0, 0, 939, 940, 5, 261, 0, 0, 940, 127, 1, 0, 0, 0, 941, 942, 5, 112, 0, 0, 942, 943, 5, 76, 0, 0, 943, 947, 3, 316, 158, 0, 944, 948, 3, 116, 58, 0, 945, 946, 5, 7, 0, 0, 946, 948, 3, 156, 78, 0, 947, 944, 1, 0, 0, 0, 947, 945, 1, 0, 0, 0, 948, 129, 1, 0, 0, 0, 949, 950, 5, 112, 0, 0, 950, 951, 5, 192, 0, 0, 951, 952, 3, 316, 158, 0, 952, 953, 3, 118, 59, 0, 953, 131, 1, 0, 0, 0, 954, 958, 5, 112, 0, 0, 955, 959, 5, 166, 0, 0, 956, 957, 5, 166, 0, 0, 957, 959, 5, 232, 0, 0, 958, 955, 1, 0, 0, 0, 958, 956, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 960, 1, 0, 0, 0, 960, 962, 5, 157, 0, 0, 961, 963, 3, 322, 161, 0, 962, 961, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 964, 1, 0, 0, 0, 964, 965, 3, 316, 158, 0, 965, 966, 5, 7, 0, 0, 966, 969, 3, 304, 152, 0, 967, 968, 5, 240, 0, 0, 968, 970, 7, 17, 0, 0, 969, 967, 1, 0, 0, 0, 969, 970, 1, 0, 0, 0, 970, 133, 1, 0, 0, 0, 971, 972, 5, 104, 0, 0, 972, 974, 5, 239, 0, 0, 973, 975, 3, 322, 161, 0, 974, 973, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 976, 1, 0, 0, 0, 976, 977, 3, 316, 158, 0, 977, 135, 1, 0, 0, 0, 978, 980, 5, 104, 0, 0, 979, 981, 5, 166, 0, 0, 980, 979, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 982, 1, 0, 0, 0, 982, 984, 5, 74, 0, 0, 983, 985, 3, 322, 161, 0, 984, 983, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 986, 1, 0, 0, 0, 986, 987, 3, 316, 158, 0, 987, 137, 1, 0, 0, 0, 988, 989, 5, 104, 0, 0, 989, 991, 5, 192, 0, 0, 990, 992, 3, 322, 161, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 995, 3, 316, 158, 0, 994, 996, 7, 18, 0, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 139, 1, 0, 0, 0, 997, 999, 5, 104, 0, 0, 998, 1000, 5, 166, 0, 0, 999, 998, 1, 0, 0, 0, 999, 1000, 1, 0, 0, 0, 1000, 1001, 1, 0, 0, 0, 1001, 1003, 5, 76, 0, 0, 1002, 1004, 3, 322, 161, 0, 1003, 1002, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1006, 3, 316, 158, 0, 1006, 141, 1, 0, 0, 0, 1007, 1011, 5, 104, 0, 0, 1008, 1012, 5, 166, 0, 0, 1009, 1010, 5, 166, 0, 0, 1010, 1012, 5, 232, 0, 0, 1011, 1008, 1, 0, 0, 0, 1011, 1009, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1015, 5, 157, 0, 0, 1014, 1016, 3, 322, 161, 0, 1015, 1014, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 1017, 1, 0, 0, 0, 1017, 1018, 3, 316, 158, 0, 1018, 143, 1, 0, 0, 0, 1019, 1021, 5, 78, 0, 0, 1020, 1019, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1022, 1, 0, 0, 0, 1022, 1026, 3, 146, 73, 0, 1023, 1024, 5, 78, 0, 0, 1024, 1026, 3, 154, 77, 0, 1025, 1020, 1, 0, 0, 0, 1025, 1023, 1, 0, 0, 0, 1026, 145, 1, 0, 0, 0, 1027, 1028, 5, 80, 0, 0, 1028, 1029, 7, 19, 0, 0, 1029, 1038, 3, 316, 158, 0, 1030, 1032, 3, 148, 74, 0, 1031, 1030, 1, 0, 0, 0, 1031, 1032, 1, 0, 0, 0, 1032, 1034, 1, 0, 0, 0, 1033, 1035, 3, 52, 26, 0, 1034, 1033, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1036, 1, 0, 0, 0, 1036, 1039, 3, 156, 78, 0, 1037, 1039, 3, 150, 75, 0, 1038, 1031, 1, 0, 0, 0, 1038, 1037, 1, 0, 0, 0, 1039, 147, 1, 0, 0, 0, 1040, 1041, 5, 60, 0, 0, 1041, 1042, 3, 324, 162, 0, 1042, 149, 1, 0, 0, 0, 1043, 1044, 5, 72, 0, 0, 1044, 1049, 3, 152, 76, 0, 1045, 1046, 5, 326, 0, 0, 1046, 1048, 3, 152, 76, 0, 1047, 1045, 1, 0, 0, 0, 1048, 1051, 1, 0, 0, 0, 1049, 1047, 1, 0, 0, 0, 1049, 1050, 1, 0, 0, 0, 1050, 151, 1, 0, 0, 0, 1051, 1049, 1, 0, 0, 0, 1052, 1053, 5, 322, 0, 0, 1053, 1058, 3, 344, 172, 0, 1054, 1055, 5, 326, 0, 0, 1055, 1057, 3, 344, 172, 0, 1056, 1054, 1, 0, 0, 0, 1057, 1060, 1, 0, 0, 0, 1058, 1056, 1, 0, 0, 0, 1058, 1059, 1, 0, 0, 0, 1059, 1061, 1, 0, 0, 0, 1060, 1058, 1, 0, 0, 0, 1061, 1062, 5, 323, 0, 0, 1062, 153, 1, 0, 0, 0, 1063, 1064, 5, 79, 0, 0, 1064, 1065, 5, 116, 0, 0, 1065, 1069, 5, 43, 0, 0, 1066, 1067, 3, 146, 73, 0, 1067, 1068, 5, 327, 0, 0, 1068, 1070, 1, 0, 0, 0, 1069, 1066, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1069, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1073, 1, 0, 0, 0, 1073, 1074, 5, 44, 0, 0, 1074, 155, 1, 0, 0, 0, 1075, 1076, 6, 78, -1, 0, 1076, 1099, 3, 158, 79, 0, 1077, 1078, 3, 160, 80, 0, 1078, 1079, 3, 156, 78, 5, 1079, 1099, 1, 0, 0, 0, 1080, 1081, 5, 322, 0, 0, 1081, 1082, 3, 156, 78, 0, 1082, 1083, 5, 323, 0, 0, 1083, 1099, 1, 0, 0, 0, 1084, 1086, 3, 168, 84, 0, 1085, 1087, 3, 230, 115, 0, 1086, 1085, 1, 0, 0, 0, 1086, 1087, 1, 0, 0, 0, 1087, 1089, 1, 0, 0, 0, 1088, 1090, 3, 234, 117, 0, 1089, 1088, 1, 0, 0, 0, 1089, 1090, 1, 0, 0, 0, 1090, 1099, 1, 0, 0, 0, 1091, 1093, 3, 166, 83, 0, 1092, 1094, 3, 230, 115, 0, 1093, 1092, 1, 0, 0, 0, 1093, 1094, 1, 0, 0, 0, 1094, 1096, 1, 0, 0, 0, 1095, 1097, 3, 234, 117, 0, 1096, 1095, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1099, 1, 0, 0, 0, 1098, 1075, 1, 0, 0, 0, 1098, 1077, 1, 0, 0, 0, 1098, 1080, 1, 0, 0, 0, 1098, 1084, 1, 0, 0, 0, 1098, 1091, 1, 0, 0, 0, 1099, 1114, 1, 0, 0, 0, 1100, 1101, 10, 3, 0, 0, 1101, 1103, 7, 20, 0, 0, 1102, 1104, 5, 8, 0, 0, 1103, 1102, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1105, 1, 0, 0, 0, 1105, 1107, 3, 156, 78, 0, 1106, 1108, 3, 230, 115, 0, 1107, 1106, 1, 0, 0, 0, 1107, 1108, 1, 0, 0, 0, 1108, 1110, 1, 0, 0, 0, 1109, 1111, 3, 234, 117, 0, 1110, 1109, 1, 0, 0, 0, 1110, 1111, 1, 0, 0, 0, 1111, 1113, 1, 0, 0, 0, 1112, 1100, 1, 0, 0, 0, 1113, 1116, 1, 0, 0, 0, 1114, 1112, 1, 0, 0, 0, 1114, 1115, 1, 0, 0, 0, 1115, 157, 1, 0, 0, 0, 1116, 1114, 1, 0, 0, 0, 1117, 1118, 5, 72, 0, 0, 1118, 1123, 3, 260, 130, 0, 1119, 1120, 5, 326, 0, 0, 1120, 1122, 3, 260, 130, 0, 1121, 1119, 1, 0, 0, 0, 1122, 1125, 1, 0, 0, 0, 1123, 1121, 1, 0, 0, 0, 1123, 1124, 1, 0, 0, 0, 1124, 159, 1, 0, 0, 0, 1125, 1123, 1, 0, 0, 0, 1126, 1127, 5, 70, 0, 0, 1127, 1132, 3, 162, 81, 0, 1128, 1129, 5, 326, 0, 0, 1129, 1131, 3, 162, 81, 0, 1130, 1128, 1, 0, 0, 0, 1131, 1134, 1, 0, 0, 0, 1132, 1130, 1, 0, 0, 0, 1132, 1133, 1, 0, 0, 0, 1133, 161, 1, 0, 0, 0, 1134, 1132, 1, 0, 0, 0, 1135, 1147, 3, 164, 82, 0, 1136, 1137, 5, 322, 0, 0, 1137, 1142, 3, 50, 25, 0, 1138, 1139, 5, 326, 0, 0, 1139, 1141, 3, 50, 25, 0, 1140, 1138, 1, 0, 0, 0, 1141, 1144, 1, 0, 0, 0, 1142, 1140, 1, 0, 0, 0, 1142, 1143, 1, 0, 0, 0, 1143, 1145, 1, 0, 0, 0, 1144, 1142, 1, 0, 0, 0, 1145, 1146, 5, 323, 0, 0, 1146, 1148, 1, 0, 0, 0, 1147, 1136, 1, 0, 0, 0, 1147, 1148, 1, 0, 0, 0, 1148, 1149, 1, 0, 0, 0, 1149, 1150, 5, 7, 0, 0, 1150, 1151, 5, 322, 0, 0, 1151, 1152, 3, 156, 78, 0, 1152, 1153, 5, 323, 0, 0, 1153, 163, 1, 0, 0, 0, 1154, 1155, 3, 304, 152, 0, 1155, 165, 1, 0, 0, 0, 1156, 1157, 3, 168, 84, 0, 1157, 1159, 3, 174, 87, 0, 1158, 1160, 3, 204, 102, 0, 1159, 1158, 1, 0, 0, 0, 1159, 1160, 1, 0, 0, 0, 1160, 1162, 1, 0, 0, 0, 1161, 1163, 3, 206, 103, 0, 1162, 1161, 1, 0, 0, 0, 1162, 1163, 1, 0, 0, 0, 1163, 1165, 1, 0, 0, 0, 1164, 1166, 3, 220, 110, 0, 1165, 1164, 1, 0, 0, 0, 1165, 1166, 1, 0, 0, 0, 1166, 1168, 1, 0, 0, 0, 1167, 1169, 3, 222, 111, 0, 1168, 1167, 1, 0, 0, 0, 1168, 1169, 1, 0, 0, 0, 1169, 1175, 1, 0, 0, 0, 1170, 1171, 3, 168, 84, 0, 1171, 1172, 3, 174, 87, 0, 1172, 1173, 3, 228, 114, 0, 1173, 1175, 1, 0, 0, 0, 1174, 1156, 1, 0, 0, 0, 1174, 1170, 1, 0, 0, 0, 1175, 167, 1, 0, 0, 0, 1176, 1178, 5, 4, 0, 0, 1177, 1179, 3, 352, 176, 0, 1178, 1177, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1189, 1, 0, 0, 0, 1180, 1190, 5, 333, 0, 0, 1181, 1186, 3, 170, 85, 0, 1182, 1183, 5, 326, 0, 0, 1183, 1185, 3, 170, 85, 0, 1184, 1182, 1, 0, 0, 0, 1185, 1188, 1, 0, 0, 0, 1186, 1184, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 1190, 1, 0, 0, 0, 1188, 1186, 1, 0, 0, 0, 1189, 1180, 1, 0, 0, 0, 1189, 1181, 1, 0, 0, 0, 1190, 169, 1, 0, 0, 0, 1191, 1200, 3, 172, 86, 0, 1192, 1197, 3, 260, 130, 0, 1193, 1195, 5, 7, 0, 0, 1194, 1193, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1196, 1, 0, 0, 0, 1196, 1198, 3, 260, 130, 0, 1197, 1194, 1, 0, 0, 0, 1197, 1198, 1, 0, 0, 0, 1198, 1200, 1, 0, 0, 0, 1199, 1191, 1, 0, 0, 0, 1199, 1192, 1, 0, 0, 0, 1200, 171, 1, 0, 0, 0, 1201, 1202, 3, 270, 135, 0, 1202, 1203, 5, 59, 0, 0, 1203, 1204, 3, 226, 113, 0, 1204, 1205, 5, 7, 0, 0, 1205, 1206, 3, 306, 153, 0, 1206, 1214, 1, 0, 0, 0, 1207, 1208, 3, 270, 135, 0, 1208, 1209, 5, 59, 0, 0, 1209, 1210, 3, 296, 148, 0, 1210, 1211, 5, 7, 0, 0, 1211, 1212, 3, 306, 153, 0, 1212, 1214, 1, 0, 0, 0, 1213, 1201, 1, 0, 0, 0, 1213, 1207, 1, 0, 0, 0, 1214, 173, 1, 0, 0, 0, 1215, 1216, 5, 5, 0, 0, 1216, 1217, 3, 176, 88, 0, 1217, 175, 1, 0, 0, 0, 1218, 1219, 6, 88, -1, 0, 1219, 1224, 3, 178, 89, 0, 1220, 1221, 5, 326, 0, 0, 1221, 1223, 3, 178, 89, 0, 1222, 1220, 1, 0, 0, 0, 1223, 1226, 1, 0, 0, 0, 1224, 1222, 1, 0, 0, 0, 1224, 1225, 1, 0, 0, 0, 1225, 1230, 1, 0, 0, 0, 1226, 1224, 1, 0, 0, 0, 1227, 1230, 3, 188, 94, 0, 1228, 1230, 3, 190, 95, 0, 1229, 1218, 1, 0, 0, 0, 1229, 1227, 1, 0, 0, 0, 1229, 1228, 1, 0, 0, 0, 1230, 1252, 1, 0, 0, 0, 1231, 1232, 10, 3, 0, 0, 1232, 1233, 5, 46, 0, 0, 1233, 1234, 5, 45, 0, 0, 1234, 1251, 3, 176, 88, 4, 1235, 1237, 10, 4, 0, 0, 1236, 1238, 5, 54, 0, 0, 1237, 1236, 1, 0, 0, 0, 1237, 1238, 1, 0, 0, 0, 1238, 1240, 1, 0, 0, 0, 1239, 1241, 7, 21, 0, 0, 1240, 1239, 1, 0, 0, 0, 1240, 1241, 1, 0, 0, 0, 1241, 1243, 1, 0, 0, 0, 1242, 1244, 5, 47, 0, 0, 1243, 1242, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 1246, 5, 45, 0, 0, 1246, 1248, 3, 176, 88, 0, 1247, 1249, 3, 202, 101, 0, 1248, 1247, 1, 0, 0, 0, 1248, 1249, 1, 0, 0, 0, 1249, 1251, 1, 0, 0, 0, 1250, 1231, 1, 0, 0, 0, 1250, 1235, 1, 0, 0, 0, 1251, 1254, 1, 0, 0, 0, 1252, 1250, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 177, 1, 0, 0, 0, 1254, 1252, 1, 0, 0, 0, 1255, 1257, 3, 180, 90, 0, 1256, 1258, 3, 294, 147, 0, 1257, 1256, 1, 0, 0, 0, 1257, 1258, 1, 0, 0, 0, 1258, 179, 1, 0, 0, 0, 1259, 1261, 5, 74, 0, 0, 1260, 1259, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1262, 1, 0, 0, 0, 1262, 1264, 3, 182, 91, 0, 1263, 1265, 3, 184, 92, 0, 1264, 1263, 1, 0, 0, 0, 1264, 1265, 1, 0, 0, 0, 1265, 1270, 1, 0, 0, 0, 1266, 1268, 5, 7, 0, 0, 1267, 1266, 1, 0, 0, 0, 1267, 1268, 1, 0, 0, 0, 1268, 1269, 1, 0, 0, 0, 1269, 1271, 3, 276, 138, 0, 1270, 1267, 1, 0, 0, 0, 1270, 1271, 1, 0, 0, 0, 1271, 1301, 1, 0, 0, 0, 1272, 1273, 5, 57, 0, 0, 1273, 1274, 5, 74, 0, 0, 1274, 1275, 5, 322, 0, 0, 1275, 1276, 3, 272, 136, 0, 1276, 1277, 5, 322, 0, 0, 1277, 1282, 3, 260, 130, 0, 1278, 1279, 5, 326, 0, 0, 1279, 1281, 3, 260, 130, 0, 1280, 1278, 1, 0, 0, 0, 1281, 1284, 1, 0, 0, 0, 1282, 1280, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1285, 1, 0, 0, 0, 1284, 1282, 1, 0, 0, 0, 1285, 1286, 5, 323, 0, 0, 1286, 1287, 5, 323, 0, 0, 1287, 1301, 1, 0, 0, 0, 1288, 1290, 5, 57, 0, 0, 1289, 1288, 1, 0, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1291, 1, 0, 0, 0, 1291, 1292, 5, 322, 0, 0, 1292, 1293, 3, 156, 78, 0, 1293, 1294, 5, 323, 0, 0, 1294, 1301, 1, 0, 0, 0, 1295, 1296, 5, 227, 0, 0, 1296, 1297, 5, 322, 0, 0, 1297, 1298, 3, 260, 130, 0, 1298, 1299, 5, 323, 0, 0, 1299, 1301, 1, 0, 0, 0, 1300, 1260, 1, 0, 0, 0, 1300, 1272, 1, 0, 0, 0, 1300, 1289, 1, 0, 0, 0, 1300, 1295, 1, 0, 0, 0, 1301, 181, 1, 0, 0, 0, 1302, 1303, 3, 316, 158, 0, 1303, 183, 1, 0, 0, 0, 1304, 1305, 5, 37, 0, 0, 1305, 1306, 5, 260, 0, 0, 1306, 1307, 5, 7, 0, 0, 1307, 1308, 5, 136, 0, 0, 1308, 1309, 3, 186, 93, 0, 1309, 185, 1, 0, 0, 0, 1310, 1311, 3, 260, 130, 0, 1311, 187, 1, 0, 0, 0, 1312, 1313, 5, 322, 0, 0, 1313, 1314, 3, 150, 75, 0, 1314, 1315, 5, 323, 0, 0, 1315, 1316, 3, 294, 147, 0, 1316, 189, 1, 0, 0, 0, 1317, 1318, 5, 74, 0, 0, 1318, 1319, 5, 322, 0, 0, 1319, 1320, 3, 192, 96, 0, 1320, 1321, 5, 323, 0, 0, 1321, 191, 1, 0, 0, 0, 1322, 1323, 3, 194, 97, 0, 1323, 1324, 5, 322, 0, 0, 1324, 1329, 3, 196, 98, 0, 1325, 1326, 5, 326, 0, 0, 1326, 1328, 3, 196, 98, 0, 1327, 1325, 1, 0, 0, 0, 1328, 1331, 1, 0, 0, 0, 1329, 1327, 1, 0, 0, 0, 1329, 1330, 1, 0, 0, 0, 1330, 1332, 1, 0, 0, 0, 1331, 1329, 1, 0, 0, 0, 1332, 1333, 5, 323, 0, 0, 1333, 193, 1, 0, 0, 0, 1334, 1335, 7, 22, 0, 0, 1335, 195, 1, 0, 0, 0, 1336, 1337, 5, 74, 0, 0, 1337, 1352, 3, 218, 109, 0, 1338, 1352, 3, 200, 100, 0, 1339, 1352, 3, 258, 129, 0, 1340, 1341, 5, 118, 0, 0, 1341, 1342, 5, 349, 0, 0, 1342, 1343, 5, 74, 0, 0, 1343, 1352, 3, 218, 109, 0, 1344, 1345, 5, 269, 0, 0, 1345, 1346, 5, 349, 0, 0, 1346, 1352, 3, 200, 100, 0, 1347, 1348, 3, 198, 99, 0, 1348, 1349, 5, 349, 0, 0, 1349, 1350, 3, 258, 129, 0, 1350, 1352, 1, 0, 0, 0, 1351, 1336, 1, 0, 0, 0, 1351, 1338, 1, 0, 0, 0, 1351, 1339, 1, 0, 0, 0, 1351, 1340, 1, 0, 0, 0, 1351, 1344, 1, 0, 0, 0, 1351, 1347, 1, 0, 0, 0, 1352, 197, 1, 0, 0, 0, 1353, 1354, 7, 23, 0, 0, 1354, 199, 1, 0, 0, 0, 1355, 1356, 5, 268, 0, 0, 1356, 1357, 5, 322, 0, 0, 1357, 1358, 3, 316, 158, 0, 1358, 1359, 5, 323, 0, 0, 1359, 201, 1, 0, 0, 0, 1360, 1361, 5, 55, 0, 0, 1361, 1375, 3, 262, 131, 0, 1362, 1363, 5, 143, 0, 0, 1363, 1364, 5, 322, 0, 0, 1364, 1369, 3, 316, 158, 0, 1365, 1366, 5, 326, 0, 0, 1366, 1368, 3, 316, 158, 0, 1367, 1365, 1, 0, 0, 0, 1368, 1371, 1, 0, 0, 0, 1369, 1367, 1, 0, 0, 0, 1369, 1370, 1, 0, 0, 0, 1370, 1372, 1, 0, 0, 0, 1371, 1369, 1, 0, 0, 0, 1372, 1373, 5, 323, 0, 0, 1373, 1375, 1, 0, 0, 0, 1374, 1360, 1, 0, 0, 0, 1374, 1362, 1, 0, 0, 0, 1375, 203, 1, 0, 0, 0, 1376, 1377, 5, 11, 0, 0, 1377, 1378, 3, 262, 131, 0, 1378, 205, 1, 0, 0, 0, 1379, 1380, 5, 12, 0, 0, 1380, 1381, 5, 13, 0, 0, 1381, 1386, 3, 208, 104, 0, 1382, 1383, 5, 326, 0, 0, 1383, 1385, 3, 208, 104, 0, 1384, 1382, 1, 0, 0, 0, 1385, 1388, 1, 0, 0, 0, 1386, 1384, 1, 0, 0, 0, 1386, 1387, 1, 0, 0, 0, 1387, 207, 1, 0, 0, 0, 1388, 1386, 1, 0, 0, 0, 1389, 1429, 3, 260, 130, 0, 1390, 1429, 3, 214, 107, 0, 1391, 1392, 5, 322, 0, 0, 1392, 1429, 5, 323, 0, 0, 1393, 1394, 5, 322, 0, 0, 1394, 1399, 3, 260, 130, 0, 1395, 1396, 5, 326, 0, 0, 1396, 1398, 3, 260, 130, 0, 1397, 1395, 1, 0, 0, 0, 1398, 1401, 1, 0, 0, 0, 1399, 1397, 1, 0, 0, 0, 1399, 1400, 1, 0, 0, 0, 1400, 1402, 1, 0, 0, 0, 1401, 1399, 1, 0, 0, 0, 1402, 1403, 5, 323, 0, 0, 1403, 1429, 1, 0, 0, 0, 1404, 1405, 3, 212, 106, 0, 1405, 1406, 5, 322, 0, 0, 1406, 1411, 3, 260, 130, 0, 1407, 1408, 5, 326, 0, 0, 1408, 1410, 3, 260, 130, 0, 1409, 1407, 1, 0, 0, 0, 1410, 1413, 1, 0, 0, 0, 1411, 1409, 1, 0, 0, 0, 1411, 1412, 1, 0, 0, 0, 1412, 1414, 1, 0, 0, 0, 1413, 1411, 1, 0, 0, 0, 1414, 1415, 5, 323, 0, 0, 1415, 1429, 1, 0, 0, 0, 1416, 1417, 3, 210, 105, 0, 1417, 1418, 5, 322, 0, 0, 1418, 1423, 3, 208, 104, 0, 1419, 1420, 5, 326, 0, 0, 1420, 1422, 3, 208, 104, 0, 1421, 1419, 1, 0, 0, 0, 1422, 1425, 1, 0, 0, 0, 1423, 1421, 1, 0, 0, 0, 1423, 1424, 1, 0, 0, 0, 1424, 1426, 1, 0, 0, 0, 1425, 1423, 1, 0, 0, 0, 1426, 1427, 5, 323, 0, 0, 1427, 1429, 1, 0, 0, 0, 1428, 1389, 1, 0, 0, 0, 1428, 1390, 1, 0, 0, 0, 1428, 1391, 1, 0, 0, 0, 1428, 1393, 1, 0, 0, 0, 1428, 1404, 1, 0, 0, 0, 1428, 1416, 1, 0, 0, 0, 1429, 209, 1, 0, 0, 0, 1430, 1431, 5, 14, 0, 0, 1431, 1432, 5, 15, 0, 0, 1432, 211, 1, 0, 0, 0, 1433, 1434, 7, 24, 0, 0, 1434, 213, 1, 0, 0, 0, 1435, 1436, 3, 216, 108, 0, 1436, 1437, 5, 322, 0, 0, 1437, 1438, 3, 218, 109, 0, 1438, 1439, 5, 326, 0, 0, 1439, 1440, 3, 258, 129, 0, 1440, 1441, 5, 323, 0, 0, 1441, 215, 1, 0, 0, 0, 1442, 1443, 7, 25, 0, 0, 1443, 217, 1, 0, 0, 0, 1444, 1445, 3, 316, 158, 0, 1445, 219, 1, 0, 0, 0, 1446, 1447, 5, 19, 0, 0, 1447, 1448, 3, 262, 131, 0, 1448, 221, 1, 0, 0, 0, 1449, 1450, 5, 58, 0, 0, 1450, 1455, 3, 224, 112, 0, 1451, 1452, 5, 326, 0, 0, 1452, 1454, 3, 224, 112, 0, 1453, 1451, 1, 0, 0, 0, 1454, 1457, 1, 0, 0, 0, 1455, 1453, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 223, 1, 0, 0, 0, 1457, 1455, 1, 0, 0, 0, 1458, 1459, 3, 296, 148, 0, 1459, 1460, 5, 7, 0, 0, 1460, 1461, 3, 226, 113, 0, 1461, 225, 1, 0, 0, 0, 1462, 1464, 3, 296, 148, 0, 1463, 1462, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1465, 1, 0, 0, 0, 1465, 1467, 5, 322, 0, 0, 1466, 1468, 3, 236, 118, 0, 1467, 1466, 1, 0, 0, 0, 1467, 1468, 1, 0, 0, 0, 1468, 1470, 1, 0, 0, 0, 1469, 1471, 3, 230, 115, 0, 1470, 1469, 1, 0, 0, 0, 1470, 1471, 1, 0, 0, 0, 1471, 1473, 1, 0, 0, 0, 1472, 1474, 3, 252, 126, 0, 1473, 1472, 1, 0, 0, 0, 1473, 1474, 1, 0, 0, 0, 1474, 1475, 1, 0, 0, 0, 1475, 1476, 5, 323, 0, 0, 1476, 227, 1, 0, 0, 0, 1477, 1478, 5, 275, 0, 0, 1478, 1480, 5, 322, 0, 0, 1479, 1481, 3, 236, 118, 0, 1480, 1479, 1, 0, 0, 0, 1480, 1481, 1, 0, 0, 0, 1481, 1483, 1, 0, 0, 0, 1482, 1484, 3, 230, 115, 0, 1483, 1482, 1, 0, 0, 0, 1483, 1484, 1, 0, 0, 0, 1484, 1486, 1, 0, 0, 0, 1485, 1487, 3, 240, 120, 0, 1486, 1485, 1, 0, 0, 0, 1486, 1487, 1, 0, 0, 0, 1487, 1489, 1, 0, 0, 0, 1488, 1490, 3, 246, 123, 0, 1489, 1488, 1, 0, 0, 0, 1489, 1490, 1, 0, 0, 0, 1490, 1492, 1, 0, 0, 0, 1491, 1493, 3, 248, 124, 0, 1492, 1491, 1, 0, 0, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1495, 1, 0, 0, 0, 1494, 1496, 3, 242, 121, 0, 1495, 1494, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 1497, 1, 0, 0, 0, 1497, 1498, 3, 250, 125, 0, 1498, 1503, 5, 323, 0, 0, 1499, 1501, 5, 7, 0, 0, 1500, 1499, 1, 0, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1502, 1, 0, 0, 0, 1502, 1504, 3, 306, 153, 0, 1503, 1500, 1, 0, 0, 0, 1503, 1504, 1, 0, 0, 0, 1504, 229, 1, 0, 0, 0, 1505, 1506, 5, 18, 0, 0, 1506, 1507, 5, 13, 0, 0, 1507, 1512, 3, 232, 116, 0, 1508, 1509, 5, 326, 0, 0, 1509, 1511, 3, 232, 116, 0, 1510, 1508, 1, 0, 0, 0, 1511, 1514, 1, 0, 0, 0, 1512, 1510, 1, 0, 0, 0, 1512, 1513, 1, 0, 0, 0, 1513, 231, 1, 0, 0, 0, 1514, 1512, 1, 0, 0, 0, 1515, 1517, 3, 260, 130, 0, 1516, 1518, 7, 26, 0, 0, 1517, 1516, 1, 0, 0, 0, 1517, 1518, 1, 0, 0, 0, 1518, 1521, 1, 0, 0, 0, 1519, 1520, 5, 34, 0, 0, 1520, 1522, 7, 27, 0, 0, 1521, 1519, 1, 0, 0, 0, 1521, 1522, 1, 0, 0, 0, 1522, 233, 1, 0, 0, 0, 1523, 1526, 5, 20, 0, 0, 1524, 1527, 5, 8, 0, 0, 1525, 1527, 3, 260, 130, 0, 1526, 1524, 1, 0, 0, 0, 1526, 1525, 1, 0, 0, 0, 1527, 235, 1, 0, 0, 0, 1528, 1529, 5, 60, 0, 0, 1529, 1530, 5, 13, 0, 0, 1530, 1535, 3, 260, 130, 0, 1531, 1532, 5, 326, 0, 0, 1532, 1534, 3, 260, 130, 0, 1533, 1531, 1, 0, 0, 0, 1534, 1537, 1, 0, 0, 0, 1535, 1533, 1, 0, 0, 0, 1535, 1536, 1, 0, 0, 0, 1536, 237, 1, 0, 0, 0, 1537, 1535, 1, 0, 0, 0, 1538, 1555, 5, 333, 0, 0, 1539, 1555, 5, 336, 0, 0, 1540, 1555, 5, 341, 0, 0, 1541, 1542, 5, 324, 0, 0, 1542, 1543, 5, 344, 0, 0, 1543, 1544, 5, 326, 0, 0, 1544, 1545, 5, 344, 0, 0, 1545, 1555, 5, 325, 0, 0, 1546, 1547, 5, 324, 0, 0, 1547, 1548, 5, 344, 0, 0, 1548, 1549, 5, 326, 0, 0, 1549, 1555, 5, 325, 0, 0, 1550, 1551, 5, 324, 0, 0, 1551, 1552, 5, 326, 0, 0, 1552, 1553, 5, 344, 0, 0, 1553, 1555, 5, 325, 0, 0, 1554, 1538, 1, 0, 0, 0, 1554, 1539, 1, 0, 0, 0, 1554, 1540, 1, 0, 0, 0, 1554, 1541, 1, 0, 0, 0, 1554, 1546, 1, 0, 0, 0, 1554, 1550, 1, 0, 0, 0, 1555, 239, 1, 0, 0, 0, 1556, 1557, 5, 276, 0, 0, 1557, 1562, 3, 170, 85, 0, 1558, 1559, 5, 326, 0, 0, 1559, 1561, 3, 170, 85, 0, 1560, 1558, 1, 0, 0, 0, 1561, 1564, 1, 0, 0, 0, 1562, 1560, 1, 0, 0, 0, 1562, 1563, 1, 0, 0, 0, 1563, 241, 1, 0, 0, 0, 1564, 1562, 1, 0, 0, 0, 1565, 1566, 5, 277, 0, 0, 1566, 1568, 5, 322, 0, 0, 1567, 1569, 3, 244, 122, 0, 1568, 1567, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1568, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 1572, 1, 0, 0, 0, 1572, 1574, 5, 323, 0, 0, 1573, 1575, 3, 256, 128, 0, 1574, 1573, 1, 0, 0, 0, 1574, 1575, 1, 0, 0, 0, 1575, 243, 1, 0, 0, 0, 1576, 1578, 3, 308, 154, 0, 1577, 1579, 3, 238, 119, 0, 1578, 1577, 1, 0, 0, 0, 1578, 1579, 1, 0, 0, 0, 1579, 245, 1, 0, 0, 0, 1580, 1581, 5, 8, 0, 0, 1581, 1582, 5, 62, 0, 0, 1582, 1583, 5, 279, 0, 0, 1583, 1589, 5, 228, 0, 0, 1584, 1585, 5, 278, 0, 0, 1585, 1586, 5, 308, 0, 0, 1586, 1587, 5, 279, 0, 0, 1587, 1589, 5, 228, 0, 0, 1588, 1580, 1, 0, 0, 0, 1588, 1584, 1, 0, 0, 0, 1589, 247, 1, 0, 0, 0, 1590, 1591, 5, 68, 0, 0, 1591, 1592, 5, 228, 0, 0, 1592, 1593, 5, 280, 0, 0, 1593, 1594, 5, 281, 0, 0, 1594, 1595, 5, 69, 0, 0, 1595, 1615, 5, 308, 0, 0, 1596, 1597, 5, 68, 0, 0, 1597, 1598, 5, 228, 0, 0, 1598, 1599, 5, 280, 0, 0, 1599, 1600, 5, 109, 0, 0, 1600, 1601, 5, 229, 0, 0, 1601, 1615, 5, 308, 0, 0, 1602, 1603, 5, 68, 0, 0, 1603, 1604, 5, 228, 0, 0, 1604, 1605, 5, 280, 0, 0, 1605, 1606, 5, 109, 0, 0, 1606, 1607, 5, 69, 0, 0, 1607, 1615, 3, 308, 154, 0, 1608, 1609, 5, 68, 0, 0, 1609, 1610, 5, 228, 0, 0, 1610, 1611, 5, 280, 0, 0, 1611, 1612, 5, 109, 0, 0, 1612, 1613, 5, 67, 0, 0, 1613, 1615, 3, 308, 154, 0, 1614, 1590, 1, 0, 0, 0, 1614, 1596, 1, 0, 0, 0, 1614, 1602, 1, 0, 0, 0, 1614, 1608, 1, 0, 0, 0, 1615, 249, 1, 0, 0, 0, 1616, 1617, 5, 282, 0, 0, 1617, 1622, 3, 170, 85, 0, 1618, 1619, 5, 326, 0, 0, 1619, 1621, 3, 170, 85, 0, 1620, 1618, 1, 0, 0, 0, 1621, 1624, 1, 0, 0, 0, 1622, 1620, 1, 0, 0, 0, 1622, 1623, 1, 0, 0, 0, 1623, 251, 1, 0, 0, 0, 1624, 1622, 1, 0, 0, 0, 1625, 1626, 5, 61, 0, 0, 1626, 1627, 5, 28, 0, 0, 1627, 1628, 3, 258, 129, 0, 1628, 1629, 3, 254, 127, 0, 1629, 1635, 1, 0, 0, 0, 1630, 1631, 5, 62, 0, 0, 1631, 1632, 5, 28, 0, 0, 1632, 1633, 5, 344, 0, 0, 1633, 1635, 3, 254, 127, 0, 1634, 1625, 1, 0, 0, 0, 1634, 1630, 1, 0, 0, 0, 1635, 253, 1, 0, 0, 0, 1636, 1637, 5, 64, 0, 0, 1637, 1638, 5, 23, 0, 0, 1638, 1639, 5, 66, 0, 0, 1639, 1640, 5, 308, 0, 0, 1640, 255, 1, 0, 0, 0, 1641, 1642, 5, 230, 0, 0, 1642, 1643, 3, 258, 129, 0, 1643, 257, 1, 0, 0, 0, 1644, 1645, 5, 38, 0, 0, 1645, 1646, 5, 343, 0, 0, 1646, 1647, 5, 347, 0, 0, 1647, 259, 1, 0, 0, 0, 1648, 1649, 3, 262, 131, 0, 1649, 261, 1, 0, 0, 0, 1650, 1651, 6, 131, -1, 0, 1651, 1652, 5, 25, 0, 0, 1652, 1663, 3, 262, 131, 5, 1653, 1654, 5, 27, 0, 0, 1654, 1655, 5, 322, 0, 0, 1655, 1656, 3, 156, 78, 0, 1656, 1657, 5, 323, 0, 0, 1657, 1663, 1, 0, 0, 0, 1658, 1660, 3, 268, 134, 0, 1659, 1661, 3, 264, 132, 0, 1660, 1659, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 1663, 1, 0, 0, 0, 1662, 1650, 1, 0, 0, 0, 1662, 1653, 1, 0, 0, 0, 1662, 1658, 1, 0, 0, 0, 1663, 1672, 1, 0, 0, 0, 1664, 1665, 10, 2, 0, 0, 1665, 1666, 5, 23, 0, 0, 1666, 1671, 3, 262, 131, 3, 1667, 1668, 10, 1, 0, 0, 1668, 1669, 5, 22, 0, 0, 1669, 1671, 3, 262, 131, 2, 1670, 1664, 1, 0, 0, 0, 1670, 1667, 1, 0, 0, 0, 1671, 1674, 1, 0, 0, 0, 1672, 1670, 1, 0, 0, 0, 1672, 1673, 1, 0, 0, 0, 1673, 263, 1, 0, 0, 0, 1674, 1672, 1, 0, 0, 0, 1675, 1677, 5, 25, 0, 0, 1676, 1675, 1, 0, 0, 0, 1676, 1677, 1, 0, 0, 0, 1677, 1678, 1, 0, 0, 0, 1678, 1679, 5, 28, 0, 0, 1679, 1680, 3, 268, 134, 0, 1680, 1681, 5, 23, 0, 0, 1681, 1682, 3, 268, 134, 0, 1682, 1759, 1, 0, 0, 0, 1683, 1685, 5, 25, 0, 0, 1684, 1683, 1, 0, 0, 0, 1684, 1685, 1, 0, 0, 0, 1685, 1686, 1, 0, 0, 0, 1686, 1687, 5, 24, 0, 0, 1687, 1688, 5, 322, 0, 0, 1688, 1693, 3, 260, 130, 0, 1689, 1690, 5, 326, 0, 0, 1690, 1692, 3, 260, 130, 0, 1691, 1689, 1, 0, 0, 0, 1692, 1695, 1, 0, 0, 0, 1693, 1691, 1, 0, 0, 0, 1693, 1694, 1, 0, 0, 0, 1694, 1696, 1, 0, 0, 0, 1695, 1693, 1, 0, 0, 0, 1696, 1697, 5, 323, 0, 0, 1697, 1759, 1, 0, 0, 0, 1698, 1700, 5, 25, 0, 0, 1699, 1698, 1, 0, 0, 0, 1699, 1700, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1702, 5, 24, 0, 0, 1702, 1703, 5, 322, 0, 0, 1703, 1704, 3, 156, 78, 0, 1704, 1705, 5, 323, 0, 0, 1705, 1759, 1, 0, 0, 0, 1706, 1707, 5, 27, 0, 0, 1707, 1708, 5, 322, 0, 0, 1708, 1709, 3, 156, 78, 0, 1709, 1710, 5, 323, 0, 0, 1710, 1759, 1, 0, 0, 0, 1711, 1713, 5, 25, 0, 0, 1712, 1711, 1, 0, 0, 0, 1712, 1713, 1, 0, 0, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1715, 5, 30, 0, 0, 1715, 1759, 3, 268, 134, 0, 1716, 1718, 5, 25, 0, 0, 1717, 1716, 1, 0, 0, 0, 1717, 1718, 1, 0, 0, 0, 1718, 1719, 1, 0, 0, 0, 1719, 1720, 5, 29, 0, 0, 1720, 1734, 7, 28, 0, 0, 1721, 1722, 5, 322, 0, 0, 1722, 1735, 5, 323, 0, 0, 1723, 1724, 5, 322, 0, 0, 1724, 1729, 3, 260, 130, 0, 1725, 1726, 5, 326, 0, 0, 1726, 1728, 3, 260, 130, 0, 1727, 1725, 1, 0, 0, 0, 1728, 1731, 1, 0, 0, 0, 1729, 1727, 1, 0, 0, 0, 1729, 1730, 1, 0, 0, 0, 1730, 1732, 1, 0, 0, 0, 1731, 1729, 1, 0, 0, 0, 1732, 1733, 5, 323, 0, 0, 1733, 1735, 1, 0, 0, 0, 1734, 1721, 1, 0, 0, 0, 1734, 1723, 1, 0, 0, 0, 1735, 1759, 1, 0, 0, 0, 1736, 1738, 5, 25, 0, 0, 1737, 1736, 1, 0, 0, 0, 1737, 1738, 1, 0, 0, 0, 1738, 1739, 1, 0, 0, 0, 1739, 1740, 5, 29, 0, 0, 1740, 1759, 3, 268, 134, 0, 1741, 1743, 5, 31, 0, 0, 1742, 1744, 5, 25, 0, 0, 1743, 1742, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1759, 5, 309, 0, 0, 1746, 1748, 5, 31, 0, 0, 1747, 1749, 5, 25, 0, 0, 1748, 1747, 1, 0, 0, 0, 1748, 1749, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1759, 7, 29, 0, 0, 1751, 1753, 5, 31, 0, 0, 1752, 1754, 5, 25, 0, 0, 1753, 1752, 1, 0, 0, 0, 1753, 1754, 1, 0, 0, 0, 1754, 1755, 1, 0, 0, 0, 1755, 1756, 5, 10, 0, 0, 1756, 1757, 5, 5, 0, 0, 1757, 1759, 3, 268, 134, 0, 1758, 1676, 1, 0, 0, 0, 1758, 1684, 1, 0, 0, 0, 1758, 1699, 1, 0, 0, 0, 1758, 1706, 1, 0, 0, 0, 1758, 1712, 1, 0, 0, 0, 1758, 1717, 1, 0, 0, 0, 1758, 1737, 1, 0, 0, 0, 1758, 1741, 1, 0, 0, 0, 1758, 1746, 1, 0, 0, 0, 1758, 1751, 1, 0, 0, 0, 1759, 265, 1, 0, 0, 0, 1760, 1762, 5, 25, 0, 0, 1761, 1760, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1762, 1763, 1, 0, 0, 0, 1763, 1764, 5, 29, 0, 0, 1764, 1778, 7, 28, 0, 0, 1765, 1766, 5, 322, 0, 0, 1766, 1779, 5, 323, 0, 0, 1767, 1768, 5, 322, 0, 0, 1768, 1773, 3, 260, 130, 0, 1769, 1770, 5, 326, 0, 0, 1770, 1772, 3, 260, 130, 0, 1771, 1769, 1, 0, 0, 0, 1772, 1775, 1, 0, 0, 0, 1773, 1771, 1, 0, 0, 0, 1773, 1774, 1, 0, 0, 0, 1774, 1776, 1, 0, 0, 0, 1775, 1773, 1, 0, 0, 0, 1776, 1777, 5, 323, 0, 0, 1777, 1779, 1, 0, 0, 0, 1778, 1765, 1, 0, 0, 0, 1778, 1767, 1, 0, 0, 0, 1779, 1786, 1, 0, 0, 0, 1780, 1782, 5, 25, 0, 0, 1781, 1780, 1, 0, 0, 0, 1781, 1782, 1, 0, 0, 0, 1782, 1783, 1, 0, 0, 0, 1783, 1784, 5, 29, 0, 0, 1784, 1786, 3, 268, 134, 0, 1785, 1761, 1, 0, 0, 0, 1785, 1781, 1, 0, 0, 0, 1786, 267, 1, 0, 0, 0, 1787, 1788, 6, 134, -1, 0, 1788, 1792, 3, 270, 135, 0, 1789, 1790, 7, 30, 0, 0, 1790, 1792, 3, 268, 134, 7, 1791, 1787, 1, 0, 0, 0, 1791, 1789, 1, 0, 0, 0, 1792, 1814, 1, 0, 0, 0, 1793, 1794, 10, 6, 0, 0, 1794, 1795, 7, 31, 0, 0, 1795, 1813, 3, 268, 134, 7, 1796, 1797, 10, 5, 0, 0, 1797, 1798, 7, 32, 0, 0, 1798, 1813, 3, 268, 134, 6, 1799, 1800, 10, 4, 0, 0, 1800, 1801, 5, 317, 0, 0, 1801, 1813, 3, 268, 134, 5, 1802, 1803, 10, 3, 0, 0, 1803, 1804, 5, 318, 0, 0, 1804, 1813, 3, 268, 134, 4, 1805, 1806, 10, 2, 0, 0, 1806, 1807, 5, 316, 0, 0, 1807, 1813, 3, 268, 134, 3, 1808, 1809, 10, 1, 0, 0, 1809, 1810, 3, 334, 167, 0, 1810, 1811, 3, 268, 134, 2, 1811, 1813, 1, 0, 0, 0, 1812, 1793, 1, 0, 0, 0, 1812, 1796, 1, 0, 0, 0, 1812, 1799, 1, 0, 0, 0, 1812, 1802, 1, 0, 0, 0, 1812, 1805, 1, 0, 0, 0, 1812, 1808, 1, 0, 0, 0, 1813, 1816, 1, 0, 0, 0, 1814, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 269, 1, 0, 0, 0, 1816, 1814, 1, 0, 0, 0, 1817, 1818, 6, 135, -1, 0, 1818, 1820, 5, 39, 0, 0, 1819, 1821, 3, 312, 156, 0, 1820, 1819, 1, 0, 0, 0, 1821, 1822, 1, 0, 0, 0, 1822, 1820, 1, 0, 0, 0, 1822, 1823, 1, 0, 0, 0, 1823, 1826, 1, 0, 0, 0, 1824, 1825, 5, 42, 0, 0, 1825, 1827, 3, 260, 130, 0, 1826, 1824, 1, 0, 0, 0, 1826, 1827, 1, 0, 0, 0, 1827, 1828, 1, 0, 0, 0, 1828, 1829, 5, 44, 0, 0, 1829, 1909, 1, 0, 0, 0, 1830, 1831, 5, 39, 0, 0, 1831, 1833, 3, 260, 130, 0, 1832, 1834, 3, 312, 156, 0, 1833, 1832, 1, 0, 0, 0, 1834, 1835, 1, 0, 0, 0, 1835, 1833, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 1839, 1, 0, 0, 0, 1837, 1838, 5, 42, 0, 0, 1838, 1840, 3, 260, 130, 0, 1839, 1837, 1, 0, 0, 0, 1839, 1840, 1, 0, 0, 0, 1840, 1841, 1, 0, 0, 0, 1841, 1842, 5, 44, 0, 0, 1842, 1909, 1, 0, 0, 0, 1843, 1844, 5, 94, 0, 0, 1844, 1845, 5, 322, 0, 0, 1845, 1846, 3, 260, 130, 0, 1846, 1847, 5, 7, 0, 0, 1847, 1848, 3, 54, 27, 0, 1848, 1849, 5, 323, 0, 0, 1849, 1909, 1, 0, 0, 0, 1850, 1851, 5, 67, 0, 0, 1851, 1852, 5, 322, 0, 0, 1852, 1855, 3, 260, 130, 0, 1853, 1854, 5, 124, 0, 0, 1854, 1856, 5, 34, 0, 0, 1855, 1853, 1, 0, 0, 0, 1855, 1856, 1, 0, 0, 0, 1856, 1857, 1, 0, 0, 0, 1857, 1858, 5, 323, 0, 0, 1858, 1909, 1, 0, 0, 0, 1859, 1860, 5, 69, 0, 0, 1860, 1861, 5, 322, 0, 0, 1861, 1864, 3, 260, 130, 0, 1862, 1863, 5, 124, 0, 0, 1863, 1865, 5, 34, 0, 0, 1864, 1862, 1, 0, 0, 0, 1864, 1865, 1, 0, 0, 0, 1865, 1866, 1, 0, 0, 0, 1866, 1867, 5, 323, 0, 0, 1867, 1909, 1, 0, 0, 0, 1868, 1869, 5, 129, 0, 0, 1869, 1870, 5, 322, 0, 0, 1870, 1871, 3, 268, 134, 0, 1871, 1872, 5, 24, 0, 0, 1872, 1873, 3, 268, 134, 0, 1873, 1874, 5, 323, 0, 0, 1874, 1909, 1, 0, 0, 0, 1875, 1909, 3, 344, 172, 0, 1876, 1909, 5, 333, 0, 0, 1877, 1878, 3, 316, 158, 0, 1878, 1879, 5, 319, 0, 0, 1879, 1880, 5, 333, 0, 0, 1880, 1909, 1, 0, 0, 0, 1881, 1882, 5, 322, 0, 0, 1882, 1883, 3, 156, 78, 0, 1883, 1884, 5, 323, 0, 0, 1884, 1909, 1, 0, 0, 0, 1885, 1886, 3, 272, 136, 0, 1886, 1898, 5, 322, 0, 0, 1887, 1889, 3, 352, 176, 0, 1888, 1887, 1, 0, 0, 0, 1888, 1889, 1, 0, 0, 0, 1889, 1890, 1, 0, 0, 0, 1890, 1895, 3, 260, 130, 0, 1891, 1892, 5, 326, 0, 0, 1892, 1894, 3, 260, 130, 0, 1893, 1891, 1, 0, 0, 0, 1894, 1897, 1, 0, 0, 0, 1895, 1893, 1, 0, 0, 0, 1895, 1896, 1, 0, 0, 0, 1896, 1899, 1, 0, 0, 0, 1897, 1895, 1, 0, 0, 0, 1898, 1888, 1, 0, 0, 0, 1898, 1899, 1, 0, 0, 0, 1899, 1900, 1, 0, 0, 0, 1900, 1901, 5, 323, 0, 0, 1901, 1909, 1, 0, 0, 0, 1902, 1909, 3, 304, 152, 0, 1903, 1909, 3, 274, 137, 0, 1904, 1905, 5, 322, 0, 0, 1905, 1906, 3, 260, 130, 0, 1906, 1907, 5, 323, 0, 0, 1907, 1909, 1, 0, 0, 0, 1908, 1817, 1, 0, 0, 0, 1908, 1830, 1, 0, 0, 0, 1908, 1843, 1, 0, 0, 0, 1908, 1850, 1, 0, 0, 0, 1908, 1859, 1, 0, 0, 0, 1908, 1868, 1, 0, 0, 0, 1908, 1875, 1, 0, 0, 0, 1908, 1876, 1, 0, 0, 0, 1908, 1877, 1, 0, 0, 0, 1908, 1881, 1, 0, 0, 0, 1908, 1885, 1, 0, 0, 0, 1908, 1902, 1, 0, 0, 0, 1908, 1903, 1, 0, 0, 0, 1908, 1904, 1, 0, 0, 0, 1909, 1917, 1, 0, 0, 0, 1910, 1911, 10, 4, 0, 0, 1911, 1912, 5, 320, 0, 0, 1912, 1913, 3, 268, 134, 0, 1913, 1914, 5, 321, 0, 0, 1914, 1916, 1, 0, 0, 0, 1915, 1910, 1, 0, 0, 0, 1916, 1919, 1, 0, 0, 0, 1917, 1915, 1, 0, 0, 0, 1917, 1918, 1, 0, 0, 0, 1918, 271, 1, 0, 0, 0, 1919, 1917, 1, 0, 0, 0, 1920, 1921, 3, 316, 158, 0, 1921, 273, 1, 0, 0, 0, 1922, 1923, 3, 316, 158, 0, 1923, 275, 1, 0, 0, 0, 1924, 1925, 3, 304, 152, 0, 1925, 277, 1, 0, 0, 0, 1926, 1929, 3, 304, 152, 0, 1927, 1929, 3, 274, 137, 0, 1928, 1926, 1, 0, 0, 0, 1928, 1927, 1, 0, 0, 0, 1929, 279, 1, 0, 0, 0, 1930, 1933, 5, 38, 0, 0, 1931, 1934, 3, 282, 141, 0, 1932, 1934, 3, 286, 143, 0, 1933, 1931, 1, 0, 0, 0, 1933, 1932, 1, 0, 0, 0, 1933, 1934, 1, 0, 0, 0, 1934, 281, 1, 0, 0, 0, 1935, 1937, 3, 284, 142, 0, 1936, 1938, 3, 288, 144, 0, 1937, 1936, 1, 0, 0, 0, 1937, 1938, 1, 0, 0, 0, 1938, 283, 1, 0, 0, 0, 1939, 1940, 3, 290, 145, 0, 1940, 1941, 3, 304, 152, 0, 1941, 1943, 1, 0, 0, 0, 1942, 1939, 1, 0, 0, 0, 1943, 1944, 1, 0, 0, 0, 1944, 1942, 1, 0, 0, 0, 1944, 1945, 1, 0, 0, 0, 1945, 285, 1, 0, 0, 0, 1946, 1949, 3, 288, 144, 0, 1947, 1950, 3, 284, 142, 0, 1948, 1950, 3, 288, 144, 0, 1949, 1947, 1, 0, 0, 0, 1949, 1948, 1, 0, 0, 0, 1949, 1950, 1, 0, 0, 0, 1950, 287, 1, 0, 0, 0, 1951, 1952, 3, 290, 145, 0, 1952, 1953, 3, 304, 152, 0, 1953, 1954, 5, 109, 0, 0, 1954, 1955, 3, 304, 152, 0, 1955, 289, 1, 0, 0, 0, 1956, 1958, 7, 33, 0, 0, 1957, 1956, 1, 0, 0, 0, 1957, 1958, 1, 0, 0, 0, 1958, 1959, 1, 0, 0, 0, 1959, 1962, 7, 34, 0, 0, 1960, 1962, 5, 343, 0, 0, 1961, 1957, 1, 0, 0, 0, 1961, 1960, 1, 0, 0, 0, 1962, 291, 1, 0, 0, 0, 1963, 1965, 5, 7, 0, 0, 1964, 1963, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1966, 1, 0, 0, 0, 1966, 1968, 3, 306, 153, 0, 1967, 1969, 3, 300, 150, 0, 1968, 1967, 1, 0, 0, 0, 1968, 1969, 1, 0, 0, 0, 1969, 293, 1, 0, 0, 0, 1970, 1972, 5, 7, 0, 0, 1971, 1970, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1973, 1, 0, 0, 0, 1973, 1975, 3, 306, 153, 0, 1974, 1976, 3, 300, 150, 0, 1975, 1974, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1976, 295, 1, 0, 0, 0, 1977, 1978, 3, 304, 152, 0, 1978, 1979, 3, 298, 149, 0, 1979, 297, 1, 0, 0, 0, 1980, 1981, 5, 131, 0, 0, 1981, 1983, 3, 304, 152, 0, 1982, 1980, 1, 0, 0, 0, 1983, 1984, 1, 0, 0, 0, 1984, 1982, 1, 0, 0, 0, 1984, 1985, 1, 0, 0, 0, 1985, 1988, 1, 0, 0, 0, 1986, 1988, 1, 0, 0, 0, 1987, 1982, 1, 0, 0, 0, 1987, 1986, 1, 0, 0, 0, 1988, 299, 1, 0, 0, 0, 1989, 1990, 5, 322, 0, 0, 1990, 1991, 3, 302, 151, 0, 1991, 1992, 5, 323, 0, 0, 1992, 301, 1, 0, 0, 0, 1993, 1998, 3, 304, 152, 0, 1994, 1995, 5, 326, 0, 0, 1995, 1997, 3, 304, 152, 0, 1996, 1994, 1, 0, 0, 0, 1997, 2000, 1, 0, 0, 0, 1998, 1996, 1, 0, 0, 0, 1998, 1999, 1, 0, 0, 0, 1999, 303, 1, 0, 0, 0, 2000, 1998, 1, 0, 0, 0, 2001, 2004, 3, 306, 153, 0, 2002, 2004, 3, 356, 178, 0, 2003, 2001, 1, 0, 0, 0, 2003, 2002, 1, 0, 0, 0, 2004, 305, 1, 0, 0, 0, 2005, 2010, 3, 308, 154, 0, 2006, 2010, 3, 310, 155, 0, 2007, 2010, 3, 354, 177, 0, 2008, 2010, 3, 358, 179, 0, 2009, 2005, 1, 0, 0, 0, 2009, 2006, 1, 0, 0, 0, 2009, 2007, 1, 0, 0, 0, 2009, 2008, 1, 0, 0, 0, 2010, 307, 1, 0, 0, 0, 2011, 2012, 7, 35, 0, 0, 2012, 309, 1, 0, 0, 0, 2013, 2014, 5, 343, 0, 0, 2014, 311, 1, 0, 0, 0, 2015, 2016, 5, 40, 0, 0, 2016, 2017, 3, 260, 130, 0, 2017, 2018, 5, 41, 0, 0, 2018, 2019, 3, 260, 130, 0, 2019, 313, 1, 0, 0, 0, 2020, 2025, 3, 316, 158, 0, 2021, 2022, 5, 326, 0, 0, 2022, 2024, 3, 316, 158, 0, 2023, 2021, 1, 0, 0, 0, 2024, 2027, 1, 0, 0, 0, 2025, 2023, 1, 0, 0, 0, 2025, 2026, 1, 0, 0, 0, 2026, 315, 1, 0, 0, 0, 2027, 2025, 1, 0, 0, 0, 2028, 2032, 5, 347, 0, 0, 2029, 2031, 5, 342, 0, 0, 2030, 2029, 1, 0, 0, 0, 2031, 2034, 1, 0, 0, 0, 2032, 2033, 1, 0, 0, 0, 2032, 2030, 1, 0, 0, 0, 2033, 317, 1, 0, 0, 0, 2034, 2032, 1, 0, 0, 0, 2035, 2036, 5, 70, 0, 0, 2036, 2037, 3, 324, 162, 0, 2037, 319, 1, 0, 0, 0, 2038, 2039, 5, 128, 0, 0, 2039, 2040, 5, 25, 0, 0, 2040, 2041, 5, 27, 0, 0, 2041, 321, 1, 0, 0, 0, 2042, 2043, 5, 128, 0, 0, 2043, 2044, 5, 27, 0, 0, 2044, 323, 1, 0, 0, 0, 2045, 2046, 5, 322, 0, 0, 2046, 2051, 3, 326, 163, 0, 2047, 2048, 5, 326, 0, 0, 2048, 2050, 3, 326, 163, 0, 2049, 2047, 1, 0, 0, 0, 2050, 2053, 1, 0, 0, 0, 2051, 2049, 1, 0, 0, 0, 2051, 2052, 1, 0, 0, 0, 2052, 2054, 1, 0, 0, 0, 2053, 2051, 1, 0, 0, 0, 2054, 2055, 5, 323, 0, 0, 2055, 325, 1, 0, 0, 0, 2056, 2061, 3, 328, 164, 0, 2057, 2059, 5, 311, 0, 0, 2058, 2057, 1, 0, 0, 0, 2058, 2059, 1, 0, 0, 0, 2059, 2060, 1, 0, 0, 0, 2060, 2062, 3, 330, 165, 0, 2061, 2058, 1, 0, 0, 0, 2061, 2062, 1, 0, 0, 0, 2062, 327, 1, 0, 0, 0, 2063, 2067, 3, 304, 152, 0, 2064, 2067, 3, 274, 137, 0, 2065, 2067, 5, 343, 0, 0, 2066, 2063, 1, 0, 0, 0, 2066, 2064, 1, 0, 0, 0, 2066, 2065, 1, 0, 0, 0, 2067, 329, 1, 0, 0, 0, 2068, 2073, 5, 344, 0, 0, 2069, 2073, 5, 345, 0, 0, 2070, 2073, 3, 350, 175, 0, 2071, 2073, 5, 343, 0, 0, 2072, 2068, 1, 0, 0, 0, 2072, 2069, 1, 0, 0, 0, 2072, 2070, 1, 0, 0, 0, 2072, 2071, 1, 0, 0, 0, 2073, 331, 1, 0, 0, 0, 2074, 2081, 5, 23, 0, 0, 2075, 2076, 5, 317, 0, 0, 2076, 2081, 5, 317, 0, 0, 2077, 2081, 5, 22, 0, 0, 2078, 2079, 5, 316, 0, 0, 2079, 2081, 5, 316, 0, 0, 2080, 2074, 1, 0, 0, 0, 2080, 2075, 1, 0, 0, 0, 2080, 2077, 1, 0, 0, 0, 2080, 2078, 1, 0, 0, 0, 2081, 333, 1, 0, 0, 0, 2082, 2097, 5, 311, 0, 0, 2083, 2097, 5, 312, 0, 0, 2084, 2097, 5, 313, 0, 0, 2085, 2086, 5, 313, 0, 0, 2086, 2097, 5, 311, 0, 0, 2087, 2088, 5, 312, 0, 0, 2088, 2097, 5, 311, 0, 0, 2089, 2090, 5, 313, 0, 0, 2090, 2097, 5, 312, 0, 0, 2091, 2092, 5, 314, 0, 0, 2092, 2097, 5, 311, 0, 0, 2093, 2094, 5, 313, 0, 0, 2094, 2095, 5, 311, 0, 0, 2095, 2097, 5, 312, 0, 0, 2096, 2082, 1, 0, 0, 0, 2096, 2083, 1, 0, 0, 0, 2096, 2084, 1, 0, 0, 0, 2096, 2085, 1, 0, 0, 0, 2096, 2087, 1, 0, 0, 0, 2096, 2089, 1, 0, 0, 0, 2096, 2091, 1, 0, 0, 0, 2096, 2093, 1, 0, 0, 0, 2097, 335, 1, 0, 0, 0, 2098, 2099, 5, 313, 0, 0, 2099, 2106, 5, 313, 0, 0, 2100, 2101, 5, 312, 0, 0, 2101, 2106, 5, 312, 0, 0, 2102, 2106, 5, 317, 0, 0, 2103, 2106, 5, 318, 0, 0, 2104, 2106, 5, 316, 0, 0, 2105, 2098, 1, 0, 0, 0, 2105, 2100, 1, 0, 0, 0, 2105, 2102, 1, 0, 0, 0, 2105, 2103, 1, 0, 0, 0, 2105, 2104, 1, 0, 0, 0, 2106, 337, 1, 0, 0, 0, 2107, 2108, 7, 36, 0, 0, 2108, 339, 1, 0, 0, 0, 2109, 2110, 7, 37, 0, 0, 2110, 341, 1, 0, 0, 0, 2111, 2112, 3, 316, 158, 0, 2112, 343, 1, 0, 0, 0, 2113, 2126, 3, 346, 173, 0, 2114, 2126, 3, 348, 174, 0, 2115, 2126, 3, 280, 140, 0, 2116, 2117, 5, 335, 0, 0, 2117, 2126, 3, 348, 174, 0, 2118, 2126, 3, 350, 175, 0, 2119, 2126, 5, 345, 0, 0, 2120, 2126, 5, 346, 0, 0, 2121, 2123, 5, 25, 0, 0, 2122, 2121, 1, 0, 0, 0, 2122, 2123, 1, 0, 0, 0, 2123, 2124, 1, 0, 0, 0, 2124, 2126, 5, 309, 0, 0, 2125, 2113, 1, 0, 0, 0, 2125, 2114, 1, 0, 0, 0, 2125, 2115, 1, 0, 0, 0, 2125, 2116, 1, 0, 0, 0, 2125, 2118, 1, 0, 0, 0, 2125, 2119, 1, 0, 0, 0, 2125, 2120, 1, 0, 0, 0, 2125, 2122, 1, 0, 0, 0, 2126, 345, 1, 0, 0, 0, 2127, 2128, 5, 343, 0, 0, 2128, 347, 1, 0, 0, 0, 2129, 2130, 5, 344, 0, 0, 2130, 349, 1, 0, 0, 0, 2131, 2132, 7, 29, 0, 0, 2132, 351, 1, 0, 0, 0, 2133, 2134, 7, 38, 0, 0, 2134, 353, 1, 0, 0, 0, 2135, 2136, 7, 39, 0, 0, 2136, 355, 1, 0, 0, 0, 2137, 2138, 7, 40, 0, 0, 2138, 357, 1, 0, 0, 0, 2139, 2140, 7, 41, 0, 0, 2140, 359, 1, 0, 0, 0, 244, 368, 371, 373, 388, 406, 410, 419, 424, 431, 438, 442, 451, 463, 466, 473, 481, 486, 489, 496, 504, 508, 520, 528, 532, 553, 557, 561, 565, 574, 579, 583, 587, 591, 594, 598, 603, 609, 614, 619, 622, 626, 634, 642, 646, 650, 654, 658, 662, 666, 670, 674, 676, 686, 694, 718, 725, 740, 743, 751, 763, 787, 800, 805, 809, 817, 821, 829, 839, 843, 849, 853, 857, 860, 869, 873, 880, 883, 893, 901, 909, 913, 928, 947, 958, 962, 969, 974, 980, 984, 991, 995, 999, 1003, 1011, 1015, 1020, 1025, 1031, 1034, 1038, 1049, 1058, 1071, 1086, 1089, 1093, 1096, 1098, 1103, 1107, 1110, 1114, 1123, 1132, 1142, 1147, 1159, 1162, 1165, 1168, 1174, 1178, 1186, 1189, 1194, 1197, 1199, 1213, 1224, 1229, 1237, 1240, 1243, 1248, 1250, 1252, 1257, 1260, 1264, 1267, 1270, 1282, 1289, 1300, 1329, 1351, 1369, 1374, 1386, 1399, 1411, 1423, 1428, 1455, 1463, 1467, 1470, 1473, 1480, 1483, 1486, 1489, 1492, 1495, 1500, 1503, 1512, 1517, 1521, 1526, 1535, 1554, 1562, 1570, 1574, 1578, 1588, 1614, 1622, 1634, 1660, 1662, 1670, 1672, 1676, 1684, 1693, 1699, 1712, 1717, 1729, 1734, 1737, 1743, 1748, 1753, 1758, 1761, 1773, 1778, 1781, 1785, 1791, 1812, 1814, 1822, 1826, 1835, 1839, 1855, 1864, 1888, 1895, 1898, 1908, 1917, 1928, 1933, 1937, 1944, 1949, 1957, 1961, 1964, 1968, 1971, 1975, 1984, 1987, 1998, 2003, 2009, 2025, 2032, 2051, 2058, 2061, 2066, 2072, 2080, 2096, 2105, 2122, 2125] \ No newline at end of file +[4, 1, 402, 2121, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 361, 8, 2, 1, 2, 5, 2, 364, 8, 2, 10, 2, 12, 2, 367, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 381, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 399, 8, 5, 1, 6, 1, 6, 3, 6, 403, 8, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 412, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 417, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 422, 8, 9, 10, 9, 12, 9, 425, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 431, 8, 11, 1, 11, 1, 11, 3, 11, 435, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 442, 8, 12, 10, 12, 12, 12, 445, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 456, 8, 13, 1, 13, 3, 13, 459, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 466, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 474, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 479, 8, 13, 1, 13, 3, 13, 482, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 489, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 497, 8, 16, 1, 17, 1, 17, 3, 17, 501, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 513, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 521, 8, 19, 1, 19, 1, 19, 3, 19, 525, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 546, 8, 19, 1, 20, 1, 20, 3, 20, 550, 8, 20, 1, 21, 1, 21, 3, 21, 554, 8, 21, 1, 21, 1, 21, 3, 21, 558, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 565, 8, 21, 10, 21, 12, 21, 568, 9, 21, 1, 21, 1, 21, 3, 21, 572, 8, 21, 1, 21, 1, 21, 3, 21, 576, 8, 21, 1, 21, 1, 21, 3, 21, 580, 8, 21, 1, 21, 1, 21, 3, 21, 584, 8, 21, 1, 21, 3, 21, 587, 8, 21, 1, 21, 1, 21, 3, 21, 591, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 596, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 602, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 607, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 612, 8, 24, 1, 24, 3, 24, 615, 8, 24, 1, 25, 1, 25, 3, 25, 619, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 625, 8, 26, 10, 26, 12, 26, 628, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 635, 8, 27, 1, 27, 1, 27, 3, 27, 639, 8, 27, 1, 27, 1, 27, 3, 27, 643, 8, 27, 1, 27, 1, 27, 3, 27, 647, 8, 27, 1, 27, 1, 27, 3, 27, 651, 8, 27, 1, 27, 1, 27, 3, 27, 655, 8, 27, 1, 27, 1, 27, 3, 27, 659, 8, 27, 1, 27, 1, 27, 3, 27, 663, 8, 27, 1, 27, 1, 27, 3, 27, 667, 8, 27, 3, 27, 669, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 679, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 687, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 709, 8, 33, 10, 33, 12, 33, 712, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 718, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 733, 8, 36, 1, 36, 3, 36, 736, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 744, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 756, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 778, 8, 45, 10, 45, 12, 45, 781, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 791, 8, 46, 10, 46, 12, 46, 794, 9, 46, 1, 46, 1, 46, 3, 46, 798, 8, 46, 1, 47, 1, 47, 3, 47, 802, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 808, 8, 48, 10, 48, 12, 48, 811, 9, 48, 1, 48, 3, 48, 814, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 822, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 3, 52, 832, 8, 52, 1, 52, 1, 52, 3, 52, 836, 8, 52, 1, 52, 1, 52, 1, 53, 1, 53, 3, 53, 842, 8, 53, 1, 53, 1, 53, 3, 53, 846, 8, 53, 1, 53, 1, 53, 3, 53, 850, 8, 53, 1, 53, 3, 53, 853, 8, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 862, 8, 54, 1, 54, 1, 54, 3, 54, 866, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 873, 8, 54, 1, 54, 3, 54, 876, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 884, 8, 55, 10, 55, 12, 55, 887, 9, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 3, 57, 894, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 902, 8, 57, 1, 58, 1, 58, 3, 58, 906, 8, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 921, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 940, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 951, 8, 66, 1, 66, 1, 66, 3, 66, 955, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 962, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 967, 8, 67, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 973, 8, 68, 1, 68, 1, 68, 3, 68, 977, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 3, 69, 984, 8, 69, 1, 69, 1, 69, 3, 69, 988, 8, 69, 1, 70, 1, 70, 3, 70, 992, 8, 70, 1, 70, 1, 70, 3, 70, 996, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1004, 8, 71, 1, 71, 1, 71, 3, 71, 1008, 8, 71, 1, 71, 1, 71, 1, 72, 3, 72, 1013, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1018, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1024, 8, 73, 1, 73, 3, 73, 1027, 8, 73, 1, 73, 1, 73, 3, 73, 1031, 8, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 1040, 8, 75, 10, 75, 12, 75, 1043, 9, 75, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 1049, 8, 76, 10, 76, 12, 76, 1052, 9, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 4, 77, 1062, 8, 77, 11, 77, 12, 77, 1063, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1079, 8, 78, 1, 78, 3, 78, 1082, 8, 78, 1, 78, 1, 78, 3, 78, 1086, 8, 78, 1, 78, 3, 78, 1089, 8, 78, 3, 78, 1091, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1096, 8, 78, 1, 78, 1, 78, 3, 78, 1100, 8, 78, 1, 78, 3, 78, 1103, 8, 78, 5, 78, 1105, 8, 78, 10, 78, 12, 78, 1108, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 1114, 8, 79, 10, 79, 12, 79, 1117, 9, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 1123, 8, 80, 10, 80, 12, 80, 1126, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1133, 8, 81, 10, 81, 12, 81, 1136, 9, 81, 1, 81, 1, 81, 3, 81, 1140, 8, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 3, 83, 1152, 8, 83, 1, 83, 3, 83, 1155, 8, 83, 1, 83, 3, 83, 1158, 8, 83, 1, 83, 3, 83, 1161, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1167, 8, 83, 1, 84, 1, 84, 3, 84, 1171, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 5, 84, 1177, 8, 84, 10, 84, 12, 84, 1180, 9, 84, 3, 84, 1182, 8, 84, 1, 85, 1, 85, 1, 85, 3, 85, 1187, 8, 85, 1, 85, 3, 85, 1190, 8, 85, 3, 85, 1192, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1206, 8, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1215, 8, 88, 10, 88, 12, 88, 1218, 9, 88, 1, 88, 1, 88, 3, 88, 1222, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1230, 8, 88, 1, 88, 3, 88, 1233, 8, 88, 1, 88, 3, 88, 1236, 8, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1241, 8, 88, 5, 88, 1243, 8, 88, 10, 88, 12, 88, 1246, 9, 88, 1, 89, 1, 89, 3, 89, 1250, 8, 89, 1, 90, 3, 90, 1253, 8, 90, 1, 90, 1, 90, 3, 90, 1257, 8, 90, 1, 90, 3, 90, 1260, 8, 90, 1, 90, 3, 90, 1263, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 1273, 8, 90, 10, 90, 12, 90, 1276, 9, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1282, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1293, 8, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 5, 96, 1320, 8, 96, 10, 96, 12, 96, 1323, 9, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1344, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 1360, 8, 101, 10, 101, 12, 101, 1363, 9, 101, 1, 101, 1, 101, 3, 101, 1367, 8, 101, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1377, 8, 103, 10, 103, 12, 103, 1380, 9, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1390, 8, 104, 10, 104, 12, 104, 1393, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1402, 8, 104, 10, 104, 12, 104, 1405, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1414, 8, 104, 10, 104, 12, 104, 1417, 9, 104, 1, 104, 1, 104, 3, 104, 1421, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1446, 8, 111, 10, 111, 12, 111, 1449, 9, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 3, 113, 1456, 8, 113, 1, 113, 1, 113, 3, 113, 1460, 8, 113, 1, 113, 3, 113, 1463, 8, 113, 1, 113, 3, 113, 1466, 8, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 1473, 8, 114, 1, 114, 3, 114, 1476, 8, 114, 1, 114, 3, 114, 1479, 8, 114, 1, 114, 3, 114, 1482, 8, 114, 1, 114, 3, 114, 1485, 8, 114, 1, 114, 3, 114, 1488, 8, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1493, 8, 114, 1, 114, 3, 114, 1496, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1503, 8, 115, 10, 115, 12, 115, 1506, 9, 115, 1, 116, 1, 116, 3, 116, 1510, 8, 116, 1, 116, 1, 116, 3, 116, 1514, 8, 116, 1, 117, 1, 117, 1, 117, 3, 117, 1519, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1526, 8, 118, 10, 118, 12, 118, 1529, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1547, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 5, 120, 1553, 8, 120, 10, 120, 12, 120, 1556, 9, 120, 1, 121, 1, 121, 1, 121, 4, 121, 1561, 8, 121, 11, 121, 12, 121, 1562, 1, 121, 1, 121, 3, 121, 1567, 8, 121, 1, 122, 1, 122, 3, 122, 1571, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1581, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1607, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 5, 125, 1613, 8, 125, 10, 125, 12, 125, 1616, 9, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1627, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1649, 8, 130, 3, 130, 1651, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 5, 130, 1659, 8, 130, 10, 130, 12, 130, 1662, 9, 130, 1, 131, 3, 131, 1665, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1673, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1680, 8, 131, 10, 131, 12, 131, 1683, 9, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1688, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1701, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1706, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1716, 8, 131, 10, 131, 12, 131, 1719, 9, 131, 1, 131, 1, 131, 3, 131, 1723, 8, 131, 1, 131, 3, 131, 1726, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1732, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1737, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1742, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1747, 8, 131, 1, 132, 3, 132, 1750, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1760, 8, 132, 10, 132, 12, 132, 1763, 9, 132, 1, 132, 1, 132, 3, 132, 1767, 8, 132, 1, 132, 3, 132, 1770, 8, 132, 1, 132, 1, 132, 3, 132, 1774, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1780, 8, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1801, 8, 133, 10, 133, 12, 133, 1804, 9, 133, 1, 134, 1, 134, 1, 134, 4, 134, 1809, 8, 134, 11, 134, 12, 134, 1810, 1, 134, 1, 134, 3, 134, 1815, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 4, 134, 1822, 8, 134, 11, 134, 12, 134, 1823, 1, 134, 1, 134, 3, 134, 1828, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1844, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1853, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1877, 8, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1882, 8, 134, 10, 134, 12, 134, 1885, 9, 134, 3, 134, 1887, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1897, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1904, 8, 134, 10, 134, 12, 134, 1907, 9, 134, 1, 135, 1, 135, 1, 135, 3, 135, 1912, 8, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 3, 138, 1920, 8, 138, 1, 139, 1, 139, 1, 139, 3, 139, 1925, 8, 139, 1, 140, 1, 140, 3, 140, 1929, 8, 140, 1, 141, 1, 141, 1, 141, 4, 141, 1934, 8, 141, 11, 141, 12, 141, 1935, 1, 142, 1, 142, 1, 142, 3, 142, 1941, 8, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 3, 144, 1949, 8, 144, 1, 144, 1, 144, 3, 144, 1953, 8, 144, 1, 145, 1, 145, 3, 145, 1957, 8, 145, 1, 146, 3, 146, 1960, 8, 146, 1, 146, 1, 146, 3, 146, 1964, 8, 146, 1, 147, 3, 147, 1967, 8, 147, 1, 147, 1, 147, 3, 147, 1971, 8, 147, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1978, 8, 149, 11, 149, 12, 149, 1979, 1, 149, 3, 149, 1983, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 5, 151, 1992, 8, 151, 10, 151, 12, 151, 1995, 9, 151, 1, 152, 1, 152, 1, 152, 3, 152, 2000, 8, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 5, 156, 2014, 8, 156, 10, 156, 12, 156, 2017, 9, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 2033, 8, 160, 10, 160, 12, 160, 2036, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 3, 161, 2042, 8, 161, 1, 161, 3, 161, 2045, 8, 161, 1, 162, 1, 162, 1, 162, 3, 162, 2050, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 2056, 8, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 3, 164, 2064, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2080, 8, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 2089, 8, 166, 1, 167, 1, 167, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 2104, 8, 169, 1, 169, 3, 169, 2107, 8, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 2015, 5, 156, 176, 260, 266, 268, 176, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 0, 41, 2, 0, 30, 30, 231, 231, 3, 0, 16, 16, 37, 37, 67, 67, 4, 0, 13, 13, 26, 26, 64, 64, 166, 166, 2, 0, 12, 12, 25, 25, 2, 0, 248, 248, 259, 259, 2, 0, 165, 165, 337, 337, 2, 0, 4, 4, 117, 117, 1, 0, 107, 111, 3, 0, 192, 192, 222, 222, 295, 295, 11, 0, 10, 10, 145, 145, 151, 151, 188, 189, 201, 201, 223, 223, 264, 265, 329, 329, 340, 340, 342, 342, 356, 357, 2, 0, 361, 361, 363, 363, 4, 0, 225, 226, 233, 233, 246, 246, 296, 296, 2, 0, 182, 182, 289, 289, 2, 0, 40, 40, 260, 260, 3, 0, 21, 21, 95, 95, 176, 176, 3, 0, 40, 40, 93, 93, 260, 260, 3, 0, 52, 52, 89, 89, 169, 169, 3, 0, 65, 65, 106, 106, 125, 125, 2, 0, 11, 11, 122, 122, 2, 0, 92, 92, 268, 268, 3, 0, 239, 239, 266, 266, 346, 346, 4, 0, 249, 249, 261, 261, 275, 275, 318, 318, 3, 0, 23, 23, 56, 56, 155, 155, 5, 0, 24, 24, 138, 139, 144, 144, 150, 150, 298, 298, 2, 0, 218, 218, 321, 321, 3, 0, 56, 56, 135, 135, 155, 155, 2, 0, 8, 8, 30, 30, 2, 0, 44, 44, 72, 72, 2, 0, 176, 176, 180, 180, 2, 0, 245, 245, 344, 344, 2, 0, 369, 369, 389, 390, 4, 0, 32, 32, 387, 387, 391, 391, 394, 394, 2, 0, 389, 390, 392, 392, 1, 0, 389, 390, 1, 0, 398, 399, 2, 0, 398, 398, 401, 401, 4, 0, 32, 32, 387, 387, 389, 391, 393, 394, 3, 0, 294, 294, 368, 369, 389, 390, 2, 0, 176, 176, 232, 232, 1, 0, 175, 364, 1, 0, 4, 174, 2302, 0, 352, 1, 0, 0, 0, 2, 355, 1, 0, 0, 0, 4, 365, 1, 0, 0, 0, 6, 380, 1, 0, 0, 0, 8, 382, 1, 0, 0, 0, 10, 398, 1, 0, 0, 0, 12, 402, 1, 0, 0, 0, 14, 404, 1, 0, 0, 0, 16, 407, 1, 0, 0, 0, 18, 418, 1, 0, 0, 0, 20, 426, 1, 0, 0, 0, 22, 434, 1, 0, 0, 0, 24, 436, 1, 0, 0, 0, 26, 481, 1, 0, 0, 0, 28, 483, 1, 0, 0, 0, 30, 490, 1, 0, 0, 0, 32, 494, 1, 0, 0, 0, 34, 498, 1, 0, 0, 0, 36, 502, 1, 0, 0, 0, 38, 545, 1, 0, 0, 0, 40, 549, 1, 0, 0, 0, 42, 551, 1, 0, 0, 0, 44, 592, 1, 0, 0, 0, 46, 606, 1, 0, 0, 0, 48, 608, 1, 0, 0, 0, 50, 618, 1, 0, 0, 0, 52, 620, 1, 0, 0, 0, 54, 668, 1, 0, 0, 0, 56, 670, 1, 0, 0, 0, 58, 674, 1, 0, 0, 0, 60, 682, 1, 0, 0, 0, 62, 690, 1, 0, 0, 0, 64, 694, 1, 0, 0, 0, 66, 701, 1, 0, 0, 0, 68, 717, 1, 0, 0, 0, 70, 724, 1, 0, 0, 0, 72, 727, 1, 0, 0, 0, 74, 737, 1, 0, 0, 0, 76, 739, 1, 0, 0, 0, 78, 745, 1, 0, 0, 0, 80, 747, 1, 0, 0, 0, 82, 755, 1, 0, 0, 0, 84, 763, 1, 0, 0, 0, 86, 765, 1, 0, 0, 0, 88, 769, 1, 0, 0, 0, 90, 773, 1, 0, 0, 0, 92, 797, 1, 0, 0, 0, 94, 801, 1, 0, 0, 0, 96, 803, 1, 0, 0, 0, 98, 815, 1, 0, 0, 0, 100, 821, 1, 0, 0, 0, 102, 823, 1, 0, 0, 0, 104, 828, 1, 0, 0, 0, 106, 839, 1, 0, 0, 0, 108, 857, 1, 0, 0, 0, 110, 877, 1, 0, 0, 0, 112, 888, 1, 0, 0, 0, 114, 890, 1, 0, 0, 0, 116, 903, 1, 0, 0, 0, 118, 910, 1, 0, 0, 0, 120, 913, 1, 0, 0, 0, 122, 922, 1, 0, 0, 0, 124, 926, 1, 0, 0, 0, 126, 930, 1, 0, 0, 0, 128, 933, 1, 0, 0, 0, 130, 941, 1, 0, 0, 0, 132, 946, 1, 0, 0, 0, 134, 963, 1, 0, 0, 0, 136, 970, 1, 0, 0, 0, 138, 980, 1, 0, 0, 0, 140, 989, 1, 0, 0, 0, 142, 999, 1, 0, 0, 0, 144, 1017, 1, 0, 0, 0, 146, 1019, 1, 0, 0, 0, 148, 1032, 1, 0, 0, 0, 150, 1035, 1, 0, 0, 0, 152, 1044, 1, 0, 0, 0, 154, 1055, 1, 0, 0, 0, 156, 1090, 1, 0, 0, 0, 158, 1109, 1, 0, 0, 0, 160, 1118, 1, 0, 0, 0, 162, 1127, 1, 0, 0, 0, 164, 1146, 1, 0, 0, 0, 166, 1166, 1, 0, 0, 0, 168, 1168, 1, 0, 0, 0, 170, 1191, 1, 0, 0, 0, 172, 1205, 1, 0, 0, 0, 174, 1207, 1, 0, 0, 0, 176, 1221, 1, 0, 0, 0, 178, 1247, 1, 0, 0, 0, 180, 1292, 1, 0, 0, 0, 182, 1294, 1, 0, 0, 0, 184, 1296, 1, 0, 0, 0, 186, 1302, 1, 0, 0, 0, 188, 1304, 1, 0, 0, 0, 190, 1309, 1, 0, 0, 0, 192, 1314, 1, 0, 0, 0, 194, 1326, 1, 0, 0, 0, 196, 1343, 1, 0, 0, 0, 198, 1345, 1, 0, 0, 0, 200, 1347, 1, 0, 0, 0, 202, 1366, 1, 0, 0, 0, 204, 1368, 1, 0, 0, 0, 206, 1371, 1, 0, 0, 0, 208, 1420, 1, 0, 0, 0, 210, 1422, 1, 0, 0, 0, 212, 1425, 1, 0, 0, 0, 214, 1427, 1, 0, 0, 0, 216, 1434, 1, 0, 0, 0, 218, 1436, 1, 0, 0, 0, 220, 1438, 1, 0, 0, 0, 222, 1441, 1, 0, 0, 0, 224, 1450, 1, 0, 0, 0, 226, 1455, 1, 0, 0, 0, 228, 1469, 1, 0, 0, 0, 230, 1497, 1, 0, 0, 0, 232, 1507, 1, 0, 0, 0, 234, 1515, 1, 0, 0, 0, 236, 1520, 1, 0, 0, 0, 238, 1546, 1, 0, 0, 0, 240, 1548, 1, 0, 0, 0, 242, 1557, 1, 0, 0, 0, 244, 1568, 1, 0, 0, 0, 246, 1580, 1, 0, 0, 0, 248, 1606, 1, 0, 0, 0, 250, 1608, 1, 0, 0, 0, 252, 1626, 1, 0, 0, 0, 254, 1628, 1, 0, 0, 0, 256, 1633, 1, 0, 0, 0, 258, 1636, 1, 0, 0, 0, 260, 1650, 1, 0, 0, 0, 262, 1746, 1, 0, 0, 0, 264, 1773, 1, 0, 0, 0, 266, 1779, 1, 0, 0, 0, 268, 1896, 1, 0, 0, 0, 270, 1911, 1, 0, 0, 0, 272, 1913, 1, 0, 0, 0, 274, 1915, 1, 0, 0, 0, 276, 1919, 1, 0, 0, 0, 278, 1921, 1, 0, 0, 0, 280, 1926, 1, 0, 0, 0, 282, 1933, 1, 0, 0, 0, 284, 1937, 1, 0, 0, 0, 286, 1942, 1, 0, 0, 0, 288, 1952, 1, 0, 0, 0, 290, 1956, 1, 0, 0, 0, 292, 1959, 1, 0, 0, 0, 294, 1966, 1, 0, 0, 0, 296, 1972, 1, 0, 0, 0, 298, 1982, 1, 0, 0, 0, 300, 1984, 1, 0, 0, 0, 302, 1988, 1, 0, 0, 0, 304, 1999, 1, 0, 0, 0, 306, 2001, 1, 0, 0, 0, 308, 2003, 1, 0, 0, 0, 310, 2005, 1, 0, 0, 0, 312, 2010, 1, 0, 0, 0, 314, 2018, 1, 0, 0, 0, 316, 2021, 1, 0, 0, 0, 318, 2025, 1, 0, 0, 0, 320, 2028, 1, 0, 0, 0, 322, 2039, 1, 0, 0, 0, 324, 2049, 1, 0, 0, 0, 326, 2055, 1, 0, 0, 0, 328, 2063, 1, 0, 0, 0, 330, 2079, 1, 0, 0, 0, 332, 2088, 1, 0, 0, 0, 334, 2090, 1, 0, 0, 0, 336, 2092, 1, 0, 0, 0, 338, 2106, 1, 0, 0, 0, 340, 2108, 1, 0, 0, 0, 342, 2110, 1, 0, 0, 0, 344, 2112, 1, 0, 0, 0, 346, 2114, 1, 0, 0, 0, 348, 2116, 1, 0, 0, 0, 350, 2118, 1, 0, 0, 0, 352, 353, 3, 2, 1, 0, 353, 354, 5, 0, 0, 1, 354, 1, 1, 0, 0, 0, 355, 356, 3, 4, 2, 0, 356, 357, 5, 0, 0, 1, 357, 3, 1, 0, 0, 0, 358, 360, 3, 6, 3, 0, 359, 361, 5, 381, 0, 0, 360, 359, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 364, 3, 8, 4, 0, 363, 358, 1, 0, 0, 0, 363, 362, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 5, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 381, 3, 10, 5, 0, 369, 381, 3, 12, 6, 0, 370, 381, 3, 14, 7, 0, 371, 381, 3, 16, 8, 0, 372, 381, 3, 22, 11, 0, 373, 381, 3, 26, 13, 0, 374, 381, 3, 28, 14, 0, 375, 381, 3, 30, 15, 0, 376, 381, 3, 32, 16, 0, 377, 381, 3, 34, 17, 0, 378, 381, 3, 36, 18, 0, 379, 381, 3, 38, 19, 0, 380, 368, 1, 0, 0, 0, 380, 369, 1, 0, 0, 0, 380, 370, 1, 0, 0, 0, 380, 371, 1, 0, 0, 0, 380, 372, 1, 0, 0, 0, 380, 373, 1, 0, 0, 0, 380, 374, 1, 0, 0, 0, 380, 375, 1, 0, 0, 0, 380, 376, 1, 0, 0, 0, 380, 377, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 380, 379, 1, 0, 0, 0, 381, 7, 1, 0, 0, 0, 382, 383, 5, 381, 0, 0, 383, 9, 1, 0, 0, 0, 384, 399, 3, 40, 20, 0, 385, 399, 3, 104, 52, 0, 386, 399, 3, 106, 53, 0, 387, 399, 3, 108, 54, 0, 388, 399, 3, 102, 51, 0, 389, 399, 3, 114, 57, 0, 390, 399, 3, 128, 64, 0, 391, 399, 3, 130, 65, 0, 392, 399, 3, 132, 66, 0, 393, 399, 3, 134, 67, 0, 394, 399, 3, 136, 68, 0, 395, 399, 3, 138, 69, 0, 396, 399, 3, 140, 70, 0, 397, 399, 3, 142, 71, 0, 398, 384, 1, 0, 0, 0, 398, 385, 1, 0, 0, 0, 398, 386, 1, 0, 0, 0, 398, 387, 1, 0, 0, 0, 398, 388, 1, 0, 0, 0, 398, 389, 1, 0, 0, 0, 398, 390, 1, 0, 0, 0, 398, 391, 1, 0, 0, 0, 398, 392, 1, 0, 0, 0, 398, 393, 1, 0, 0, 0, 398, 394, 1, 0, 0, 0, 398, 395, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 398, 397, 1, 0, 0, 0, 399, 11, 1, 0, 0, 0, 400, 403, 3, 156, 78, 0, 401, 403, 3, 144, 72, 0, 402, 400, 1, 0, 0, 0, 402, 401, 1, 0, 0, 0, 403, 13, 1, 0, 0, 0, 404, 405, 7, 0, 0, 0, 405, 406, 3, 312, 156, 0, 406, 15, 1, 0, 0, 0, 407, 411, 5, 242, 0, 0, 408, 412, 3, 18, 9, 0, 409, 410, 5, 100, 0, 0, 410, 412, 5, 247, 0, 0, 411, 408, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 416, 1, 0, 0, 0, 413, 417, 3, 12, 6, 0, 414, 417, 3, 146, 73, 0, 415, 417, 3, 154, 77, 0, 416, 413, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 415, 1, 0, 0, 0, 417, 17, 1, 0, 0, 0, 418, 423, 3, 20, 10, 0, 419, 420, 5, 380, 0, 0, 420, 422, 3, 20, 10, 0, 421, 419, 1, 0, 0, 0, 422, 425, 1, 0, 0, 0, 423, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 19, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 426, 427, 7, 1, 0, 0, 427, 21, 1, 0, 0, 0, 428, 430, 5, 160, 0, 0, 429, 431, 5, 12, 0, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 435, 3, 312, 156, 0, 433, 435, 3, 24, 12, 0, 434, 428, 1, 0, 0, 0, 434, 433, 1, 0, 0, 0, 435, 23, 1, 0, 0, 0, 436, 437, 5, 160, 0, 0, 437, 438, 5, 83, 0, 0, 438, 443, 3, 312, 156, 0, 439, 440, 5, 380, 0, 0, 440, 442, 3, 312, 156, 0, 441, 439, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 25, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 447, 5, 327, 0, 0, 447, 482, 7, 2, 0, 0, 448, 449, 5, 327, 0, 0, 449, 450, 5, 219, 0, 0, 450, 482, 7, 3, 0, 0, 451, 452, 5, 327, 0, 0, 452, 455, 5, 148, 0, 0, 453, 454, 7, 4, 0, 0, 454, 456, 3, 312, 156, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 458, 1, 0, 0, 0, 457, 459, 3, 264, 132, 0, 458, 457, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 482, 1, 0, 0, 0, 460, 461, 5, 327, 0, 0, 461, 462, 5, 20, 0, 0, 462, 463, 7, 4, 0, 0, 463, 465, 3, 312, 156, 0, 464, 466, 3, 264, 132, 0, 465, 464, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 482, 1, 0, 0, 0, 467, 468, 5, 327, 0, 0, 468, 469, 5, 216, 0, 0, 469, 470, 7, 5, 0, 0, 470, 482, 3, 312, 156, 0, 471, 473, 5, 327, 0, 0, 472, 474, 5, 352, 0, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 482, 5, 50, 0, 0, 476, 478, 5, 327, 0, 0, 477, 479, 5, 249, 0, 0, 478, 477, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 482, 5, 83, 0, 0, 481, 446, 1, 0, 0, 0, 481, 448, 1, 0, 0, 0, 481, 451, 1, 0, 0, 0, 481, 460, 1, 0, 0, 0, 481, 467, 1, 0, 0, 0, 481, 471, 1, 0, 0, 0, 481, 476, 1, 0, 0, 0, 482, 27, 1, 0, 0, 0, 483, 484, 5, 75, 0, 0, 484, 485, 5, 287, 0, 0, 485, 488, 3, 312, 156, 0, 486, 487, 5, 361, 0, 0, 487, 489, 3, 320, 160, 0, 488, 486, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 29, 1, 0, 0, 0, 490, 491, 5, 158, 0, 0, 491, 492, 5, 287, 0, 0, 492, 493, 3, 312, 156, 0, 493, 31, 1, 0, 0, 0, 494, 496, 5, 326, 0, 0, 495, 497, 3, 322, 161, 0, 496, 495, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 33, 1, 0, 0, 0, 498, 500, 5, 316, 0, 0, 499, 501, 3, 324, 162, 0, 500, 499, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 35, 1, 0, 0, 0, 502, 503, 7, 6, 0, 0, 503, 504, 5, 63, 0, 0, 504, 505, 3, 112, 56, 0, 505, 37, 1, 0, 0, 0, 506, 507, 5, 4, 0, 0, 507, 508, 5, 63, 0, 0, 508, 509, 5, 361, 0, 0, 509, 512, 5, 402, 0, 0, 510, 511, 5, 183, 0, 0, 511, 513, 3, 312, 156, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 546, 1, 0, 0, 0, 514, 515, 5, 4, 0, 0, 515, 516, 5, 42, 0, 0, 516, 517, 5, 361, 0, 0, 517, 520, 5, 402, 0, 0, 518, 519, 5, 183, 0, 0, 519, 521, 3, 312, 156, 0, 520, 518, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 523, 5, 118, 0, 0, 523, 525, 3, 312, 156, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 546, 1, 0, 0, 0, 526, 527, 5, 4, 0, 0, 527, 528, 7, 7, 0, 0, 528, 529, 5, 361, 0, 0, 529, 530, 5, 402, 0, 0, 530, 531, 5, 118, 0, 0, 531, 546, 3, 312, 156, 0, 532, 533, 5, 4, 0, 0, 533, 534, 5, 112, 0, 0, 534, 546, 5, 402, 0, 0, 535, 536, 5, 4, 0, 0, 536, 537, 5, 35, 0, 0, 537, 538, 5, 42, 0, 0, 538, 539, 5, 361, 0, 0, 539, 540, 5, 402, 0, 0, 540, 541, 5, 118, 0, 0, 541, 542, 3, 312, 156, 0, 542, 543, 5, 68, 0, 0, 543, 544, 3, 312, 156, 0, 544, 546, 1, 0, 0, 0, 545, 506, 1, 0, 0, 0, 545, 514, 1, 0, 0, 0, 545, 526, 1, 0, 0, 0, 545, 532, 1, 0, 0, 0, 545, 535, 1, 0, 0, 0, 546, 39, 1, 0, 0, 0, 547, 550, 3, 42, 21, 0, 548, 550, 3, 44, 22, 0, 549, 547, 1, 0, 0, 0, 549, 548, 1, 0, 0, 0, 550, 41, 1, 0, 0, 0, 551, 553, 5, 216, 0, 0, 552, 554, 5, 149, 0, 0, 553, 552, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 557, 5, 337, 0, 0, 556, 558, 3, 316, 158, 0, 557, 556, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 3, 98, 49, 0, 560, 561, 5, 376, 0, 0, 561, 566, 3, 46, 23, 0, 562, 563, 5, 380, 0, 0, 563, 565, 3, 46, 23, 0, 564, 562, 1, 0, 0, 0, 565, 568, 1, 0, 0, 0, 566, 564, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 571, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 569, 570, 5, 380, 0, 0, 570, 572, 3, 80, 40, 0, 571, 569, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 574, 5, 380, 0, 0, 574, 576, 3, 82, 41, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 579, 1, 0, 0, 0, 577, 578, 5, 380, 0, 0, 578, 580, 3, 86, 43, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 5, 377, 0, 0, 582, 584, 3, 70, 35, 0, 583, 582, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 586, 1, 0, 0, 0, 585, 587, 3, 88, 44, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, 590, 3, 314, 157, 0, 589, 591, 3, 96, 48, 0, 590, 589, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 43, 1, 0, 0, 0, 592, 593, 5, 216, 0, 0, 593, 595, 5, 337, 0, 0, 594, 596, 3, 316, 158, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 3, 98, 49, 0, 598, 601, 3, 314, 157, 0, 599, 600, 5, 183, 0, 0, 600, 602, 3, 156, 78, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 45, 1, 0, 0, 0, 603, 607, 3, 48, 24, 0, 604, 607, 3, 72, 36, 0, 605, 607, 3, 76, 38, 0, 606, 603, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 605, 1, 0, 0, 0, 607, 47, 1, 0, 0, 0, 608, 609, 3, 50, 25, 0, 609, 611, 3, 54, 27, 0, 610, 612, 3, 68, 34, 0, 611, 610, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 614, 1, 0, 0, 0, 613, 615, 3, 70, 35, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 49, 1, 0, 0, 0, 616, 619, 3, 312, 156, 0, 617, 619, 3, 258, 129, 0, 618, 616, 1, 0, 0, 0, 618, 617, 1, 0, 0, 0, 619, 51, 1, 0, 0, 0, 620, 621, 5, 376, 0, 0, 621, 626, 3, 50, 25, 0, 622, 623, 5, 380, 0, 0, 623, 625, 3, 50, 25, 0, 624, 622, 1, 0, 0, 0, 625, 628, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 629, 630, 5, 377, 0, 0, 630, 53, 1, 0, 0, 0, 631, 669, 7, 8, 0, 0, 632, 634, 7, 9, 0, 0, 633, 635, 3, 56, 28, 0, 634, 633, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 669, 1, 0, 0, 0, 636, 638, 5, 341, 0, 0, 637, 639, 3, 56, 28, 0, 638, 637, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 646, 1, 0, 0, 0, 640, 642, 7, 10, 0, 0, 641, 643, 5, 278, 0, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 645, 5, 340, 0, 0, 645, 647, 5, 174, 0, 0, 646, 640, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 669, 1, 0, 0, 0, 648, 650, 7, 11, 0, 0, 649, 651, 3, 58, 29, 0, 650, 649, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 669, 1, 0, 0, 0, 652, 654, 7, 12, 0, 0, 653, 655, 3, 62, 31, 0, 654, 653, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 669, 1, 0, 0, 0, 656, 658, 5, 76, 0, 0, 657, 659, 3, 64, 32, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 669, 1, 0, 0, 0, 660, 662, 5, 322, 0, 0, 661, 663, 3, 66, 33, 0, 662, 661, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 669, 1, 0, 0, 0, 664, 666, 5, 114, 0, 0, 665, 667, 3, 60, 30, 0, 666, 665, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 669, 1, 0, 0, 0, 668, 631, 1, 0, 0, 0, 668, 632, 1, 0, 0, 0, 668, 636, 1, 0, 0, 0, 668, 648, 1, 0, 0, 0, 668, 652, 1, 0, 0, 0, 668, 656, 1, 0, 0, 0, 668, 660, 1, 0, 0, 0, 668, 664, 1, 0, 0, 0, 669, 55, 1, 0, 0, 0, 670, 671, 5, 376, 0, 0, 671, 672, 3, 342, 171, 0, 672, 673, 5, 377, 0, 0, 673, 57, 1, 0, 0, 0, 674, 675, 5, 376, 0, 0, 675, 678, 3, 342, 171, 0, 676, 677, 5, 380, 0, 0, 677, 679, 3, 342, 171, 0, 678, 676, 1, 0, 0, 0, 678, 679, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 681, 5, 377, 0, 0, 681, 59, 1, 0, 0, 0, 682, 683, 5, 376, 0, 0, 683, 686, 3, 340, 170, 0, 684, 685, 5, 380, 0, 0, 685, 687, 3, 340, 170, 0, 686, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 5, 377, 0, 0, 689, 61, 1, 0, 0, 0, 690, 691, 5, 367, 0, 0, 691, 692, 3, 54, 27, 0, 692, 693, 5, 366, 0, 0, 693, 63, 1, 0, 0, 0, 694, 695, 5, 367, 0, 0, 695, 696, 3, 54, 27, 0, 696, 697, 5, 380, 0, 0, 697, 698, 3, 54, 27, 0, 698, 699, 1, 0, 0, 0, 699, 700, 5, 366, 0, 0, 700, 65, 1, 0, 0, 0, 701, 702, 5, 367, 0, 0, 702, 703, 3, 50, 25, 0, 703, 710, 3, 54, 27, 0, 704, 705, 5, 380, 0, 0, 705, 706, 3, 50, 25, 0, 706, 707, 3, 54, 27, 0, 707, 709, 1, 0, 0, 0, 708, 704, 1, 0, 0, 0, 709, 712, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 713, 1, 0, 0, 0, 712, 710, 1, 0, 0, 0, 713, 714, 5, 366, 0, 0, 714, 67, 1, 0, 0, 0, 715, 716, 5, 212, 0, 0, 716, 718, 3, 84, 42, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 313, 0, 0, 720, 721, 5, 68, 0, 0, 721, 722, 5, 294, 0, 0, 722, 723, 5, 34, 0, 0, 723, 69, 1, 0, 0, 0, 724, 725, 5, 18, 0, 0, 725, 726, 5, 397, 0, 0, 726, 71, 1, 0, 0, 0, 727, 728, 3, 50, 25, 0, 728, 729, 3, 54, 27, 0, 729, 732, 5, 283, 0, 0, 730, 731, 5, 248, 0, 0, 731, 733, 3, 74, 37, 0, 732, 730, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 735, 1, 0, 0, 0, 734, 736, 5, 167, 0, 0, 735, 734, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 73, 1, 0, 0, 0, 737, 738, 5, 397, 0, 0, 738, 75, 1, 0, 0, 0, 739, 740, 3, 50, 25, 0, 740, 741, 5, 183, 0, 0, 741, 743, 3, 78, 39, 0, 742, 744, 3, 70, 35, 0, 743, 742, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 77, 1, 0, 0, 0, 745, 746, 3, 258, 129, 0, 746, 79, 1, 0, 0, 0, 747, 748, 5, 168, 0, 0, 748, 749, 5, 247, 0, 0, 749, 750, 3, 258, 129, 0, 750, 751, 5, 183, 0, 0, 751, 752, 3, 258, 129, 0, 752, 81, 1, 0, 0, 0, 753, 754, 5, 212, 0, 0, 754, 756, 3, 84, 42, 0, 755, 753, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 758, 5, 313, 0, 0, 758, 759, 5, 68, 0, 0, 759, 760, 3, 52, 26, 0, 760, 761, 5, 294, 0, 0, 761, 762, 5, 34, 0, 0, 762, 83, 1, 0, 0, 0, 763, 764, 3, 304, 152, 0, 764, 85, 1, 0, 0, 0, 765, 766, 5, 311, 0, 0, 766, 767, 5, 247, 0, 0, 767, 768, 5, 335, 0, 0, 768, 87, 1, 0, 0, 0, 769, 770, 5, 94, 0, 0, 770, 771, 5, 194, 0, 0, 771, 772, 3, 90, 45, 0, 772, 89, 1, 0, 0, 0, 773, 774, 5, 376, 0, 0, 774, 779, 3, 92, 46, 0, 775, 776, 5, 380, 0, 0, 776, 778, 3, 92, 46, 0, 777, 775, 1, 0, 0, 0, 778, 781, 1, 0, 0, 0, 779, 777, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 782, 1, 0, 0, 0, 781, 779, 1, 0, 0, 0, 782, 783, 5, 377, 0, 0, 783, 91, 1, 0, 0, 0, 784, 798, 3, 276, 138, 0, 785, 786, 3, 304, 152, 0, 786, 787, 5, 376, 0, 0, 787, 792, 3, 94, 47, 0, 788, 789, 5, 380, 0, 0, 789, 791, 3, 94, 47, 0, 790, 788, 1, 0, 0, 0, 791, 794, 1, 0, 0, 0, 792, 790, 1, 0, 0, 0, 792, 793, 1, 0, 0, 0, 793, 795, 1, 0, 0, 0, 794, 792, 1, 0, 0, 0, 795, 796, 5, 377, 0, 0, 796, 798, 1, 0, 0, 0, 797, 784, 1, 0, 0, 0, 797, 785, 1, 0, 0, 0, 798, 93, 1, 0, 0, 0, 799, 802, 3, 276, 138, 0, 800, 802, 3, 338, 169, 0, 801, 799, 1, 0, 0, 0, 801, 800, 1, 0, 0, 0, 802, 95, 1, 0, 0, 0, 803, 804, 5, 276, 0, 0, 804, 813, 3, 98, 49, 0, 805, 809, 5, 376, 0, 0, 806, 808, 3, 100, 50, 0, 807, 806, 1, 0, 0, 0, 808, 811, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 809, 810, 1, 0, 0, 0, 810, 812, 1, 0, 0, 0, 811, 809, 1, 0, 0, 0, 812, 814, 5, 377, 0, 0, 813, 805, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 97, 1, 0, 0, 0, 815, 816, 3, 312, 156, 0, 816, 99, 1, 0, 0, 0, 817, 818, 7, 13, 0, 0, 818, 822, 7, 14, 0, 0, 819, 820, 7, 15, 0, 0, 820, 822, 7, 16, 0, 0, 821, 817, 1, 0, 0, 0, 821, 819, 1, 0, 0, 0, 822, 101, 1, 0, 0, 0, 823, 824, 5, 216, 0, 0, 824, 825, 5, 12, 0, 0, 825, 826, 3, 312, 156, 0, 826, 827, 3, 314, 157, 0, 827, 103, 1, 0, 0, 0, 828, 829, 5, 216, 0, 0, 829, 831, 5, 25, 0, 0, 830, 832, 3, 316, 158, 0, 831, 830, 1, 0, 0, 0, 831, 832, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 835, 3, 312, 156, 0, 834, 836, 3, 70, 35, 0, 835, 834, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 3, 314, 157, 0, 838, 105, 1, 0, 0, 0, 839, 841, 5, 216, 0, 0, 840, 842, 5, 149, 0, 0, 841, 840, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 843, 1, 0, 0, 0, 843, 845, 5, 165, 0, 0, 844, 846, 3, 316, 158, 0, 845, 844, 1, 0, 0, 0, 845, 846, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 849, 3, 312, 156, 0, 848, 850, 3, 52, 26, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 1, 0, 0, 0, 851, 853, 3, 70, 35, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 5, 183, 0, 0, 855, 856, 3, 156, 78, 0, 856, 107, 1, 0, 0, 0, 857, 861, 5, 216, 0, 0, 858, 862, 5, 149, 0, 0, 859, 860, 5, 149, 0, 0, 860, 862, 5, 334, 0, 0, 861, 858, 1, 0, 0, 0, 861, 859, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 865, 5, 250, 0, 0, 864, 866, 3, 316, 158, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 3, 312, 156, 0, 868, 869, 5, 183, 0, 0, 869, 872, 3, 304, 152, 0, 870, 871, 5, 272, 0, 0, 871, 873, 7, 17, 0, 0, 872, 870, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 875, 1, 0, 0, 0, 874, 876, 3, 110, 55, 0, 875, 874, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 109, 1, 0, 0, 0, 877, 878, 5, 353, 0, 0, 878, 879, 5, 63, 0, 0, 879, 885, 3, 112, 56, 0, 880, 881, 5, 380, 0, 0, 881, 882, 5, 63, 0, 0, 882, 884, 3, 112, 56, 0, 883, 880, 1, 0, 0, 0, 884, 887, 1, 0, 0, 0, 885, 883, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 111, 1, 0, 0, 0, 887, 885, 1, 0, 0, 0, 888, 889, 5, 397, 0, 0, 889, 113, 1, 0, 0, 0, 890, 891, 5, 178, 0, 0, 891, 893, 5, 337, 0, 0, 892, 894, 3, 318, 159, 0, 893, 892, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 901, 3, 312, 156, 0, 896, 902, 3, 116, 58, 0, 897, 902, 3, 118, 59, 0, 898, 902, 3, 120, 60, 0, 899, 902, 3, 122, 61, 0, 900, 902, 3, 124, 62, 0, 901, 896, 1, 0, 0, 0, 901, 897, 1, 0, 0, 0, 901, 898, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 901, 900, 1, 0, 0, 0, 902, 115, 1, 0, 0, 0, 903, 905, 5, 118, 0, 0, 904, 906, 3, 312, 156, 0, 905, 904, 1, 0, 0, 0, 905, 906, 1, 0, 0, 0, 906, 907, 1, 0, 0, 0, 907, 908, 5, 343, 0, 0, 908, 909, 3, 312, 156, 0, 909, 117, 1, 0, 0, 0, 910, 911, 5, 326, 0, 0, 911, 912, 3, 320, 160, 0, 912, 119, 1, 0, 0, 0, 913, 914, 5, 4, 0, 0, 914, 915, 5, 212, 0, 0, 915, 916, 3, 84, 42, 0, 916, 917, 5, 313, 0, 0, 917, 918, 5, 68, 0, 0, 918, 920, 3, 52, 26, 0, 919, 921, 3, 126, 63, 0, 920, 919, 1, 0, 0, 0, 920, 921, 1, 0, 0, 0, 921, 121, 1, 0, 0, 0, 922, 923, 5, 234, 0, 0, 923, 924, 5, 212, 0, 0, 924, 925, 3, 84, 42, 0, 925, 123, 1, 0, 0, 0, 926, 927, 5, 4, 0, 0, 927, 928, 5, 347, 0, 0, 928, 929, 3, 52, 26, 0, 929, 125, 1, 0, 0, 0, 930, 931, 5, 294, 0, 0, 931, 932, 5, 34, 0, 0, 932, 127, 1, 0, 0, 0, 933, 934, 5, 178, 0, 0, 934, 935, 5, 165, 0, 0, 935, 939, 3, 312, 156, 0, 936, 940, 3, 116, 58, 0, 937, 938, 5, 183, 0, 0, 938, 940, 3, 156, 78, 0, 939, 936, 1, 0, 0, 0, 939, 937, 1, 0, 0, 0, 940, 129, 1, 0, 0, 0, 941, 942, 5, 178, 0, 0, 942, 943, 5, 25, 0, 0, 943, 944, 3, 312, 156, 0, 944, 945, 3, 118, 59, 0, 945, 131, 1, 0, 0, 0, 946, 950, 5, 178, 0, 0, 947, 951, 5, 149, 0, 0, 948, 949, 5, 149, 0, 0, 949, 951, 5, 334, 0, 0, 950, 947, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 954, 5, 250, 0, 0, 953, 955, 3, 318, 159, 0, 954, 953, 1, 0, 0, 0, 954, 955, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 957, 3, 312, 156, 0, 957, 958, 5, 183, 0, 0, 958, 961, 3, 304, 152, 0, 959, 960, 5, 272, 0, 0, 960, 962, 7, 17, 0, 0, 961, 959, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 133, 1, 0, 0, 0, 963, 964, 5, 234, 0, 0, 964, 966, 5, 12, 0, 0, 965, 967, 3, 318, 159, 0, 966, 965, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 3, 312, 156, 0, 969, 135, 1, 0, 0, 0, 970, 972, 5, 234, 0, 0, 971, 973, 5, 149, 0, 0, 972, 971, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 976, 5, 337, 0, 0, 975, 977, 3, 318, 159, 0, 976, 975, 1, 0, 0, 0, 976, 977, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 979, 3, 312, 156, 0, 979, 137, 1, 0, 0, 0, 980, 981, 5, 234, 0, 0, 981, 983, 5, 25, 0, 0, 982, 984, 3, 318, 159, 0, 983, 982, 1, 0, 0, 0, 983, 984, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 987, 3, 312, 156, 0, 986, 988, 7, 18, 0, 0, 987, 986, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 139, 1, 0, 0, 0, 989, 991, 5, 234, 0, 0, 990, 992, 5, 149, 0, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 995, 5, 165, 0, 0, 994, 996, 3, 318, 159, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 997, 1, 0, 0, 0, 997, 998, 3, 312, 156, 0, 998, 141, 1, 0, 0, 0, 999, 1003, 5, 234, 0, 0, 1000, 1004, 5, 149, 0, 0, 1001, 1002, 5, 149, 0, 0, 1002, 1004, 5, 334, 0, 0, 1003, 1000, 1, 0, 0, 0, 1003, 1001, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1007, 5, 250, 0, 0, 1006, 1008, 3, 318, 159, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1010, 3, 312, 156, 0, 1010, 143, 1, 0, 0, 0, 1011, 1013, 5, 240, 0, 0, 1012, 1011, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1018, 3, 146, 73, 0, 1015, 1016, 5, 240, 0, 0, 1016, 1018, 3, 154, 77, 0, 1017, 1012, 1, 0, 0, 0, 1017, 1015, 1, 0, 0, 0, 1018, 145, 1, 0, 0, 0, 1019, 1020, 5, 263, 0, 0, 1020, 1021, 7, 19, 0, 0, 1021, 1030, 3, 312, 156, 0, 1022, 1024, 3, 148, 74, 0, 1023, 1022, 1, 0, 0, 0, 1023, 1024, 1, 0, 0, 0, 1024, 1026, 1, 0, 0, 0, 1025, 1027, 3, 52, 26, 0, 1026, 1025, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1031, 3, 156, 78, 0, 1029, 1031, 3, 150, 75, 0, 1030, 1023, 1, 0, 0, 0, 1030, 1029, 1, 0, 0, 0, 1031, 147, 1, 0, 0, 0, 1032, 1033, 5, 307, 0, 0, 1033, 1034, 3, 320, 160, 0, 1034, 149, 1, 0, 0, 0, 1035, 1036, 5, 355, 0, 0, 1036, 1041, 3, 152, 76, 0, 1037, 1038, 5, 380, 0, 0, 1038, 1040, 3, 152, 76, 0, 1039, 1037, 1, 0, 0, 0, 1040, 1043, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 151, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1044, 1045, 5, 376, 0, 0, 1045, 1050, 3, 338, 169, 0, 1046, 1047, 5, 380, 0, 0, 1047, 1049, 3, 338, 169, 0, 1048, 1046, 1, 0, 0, 0, 1049, 1052, 1, 0, 0, 0, 1050, 1048, 1, 0, 0, 0, 1050, 1051, 1, 0, 0, 0, 1051, 1053, 1, 0, 0, 0, 1052, 1050, 1, 0, 0, 0, 1053, 1054, 5, 377, 0, 0, 1054, 153, 1, 0, 0, 0, 1055, 1056, 5, 143, 0, 0, 1056, 1057, 5, 326, 0, 0, 1057, 1061, 5, 186, 0, 0, 1058, 1059, 3, 146, 73, 0, 1059, 1060, 5, 381, 0, 0, 1060, 1062, 1, 0, 0, 0, 1061, 1058, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1061, 1, 0, 0, 0, 1063, 1064, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1066, 5, 237, 0, 0, 1066, 155, 1, 0, 0, 0, 1067, 1068, 6, 78, -1, 0, 1068, 1091, 3, 158, 79, 0, 1069, 1070, 3, 160, 80, 0, 1070, 1071, 3, 156, 78, 5, 1071, 1091, 1, 0, 0, 0, 1072, 1073, 5, 376, 0, 0, 1073, 1074, 3, 156, 78, 0, 1074, 1075, 5, 377, 0, 0, 1075, 1091, 1, 0, 0, 0, 1076, 1078, 3, 168, 84, 0, 1077, 1079, 3, 230, 115, 0, 1078, 1077, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1081, 1, 0, 0, 0, 1080, 1082, 3, 234, 117, 0, 1081, 1080, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 1091, 1, 0, 0, 0, 1083, 1085, 3, 166, 83, 0, 1084, 1086, 3, 230, 115, 0, 1085, 1084, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1088, 1, 0, 0, 0, 1087, 1089, 3, 234, 117, 0, 1088, 1087, 1, 0, 0, 0, 1088, 1089, 1, 0, 0, 0, 1089, 1091, 1, 0, 0, 0, 1090, 1067, 1, 0, 0, 0, 1090, 1069, 1, 0, 0, 0, 1090, 1072, 1, 0, 0, 0, 1090, 1076, 1, 0, 0, 0, 1090, 1083, 1, 0, 0, 0, 1091, 1106, 1, 0, 0, 0, 1092, 1093, 10, 3, 0, 0, 1093, 1095, 7, 20, 0, 0, 1094, 1096, 5, 176, 0, 0, 1095, 1094, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1099, 3, 156, 78, 0, 1098, 1100, 3, 230, 115, 0, 1099, 1098, 1, 0, 0, 0, 1099, 1100, 1, 0, 0, 0, 1100, 1102, 1, 0, 0, 0, 1101, 1103, 3, 234, 117, 0, 1102, 1101, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1105, 1, 0, 0, 0, 1104, 1092, 1, 0, 0, 0, 1105, 1108, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 157, 1, 0, 0, 0, 1108, 1106, 1, 0, 0, 0, 1109, 1110, 5, 355, 0, 0, 1110, 1115, 3, 258, 129, 0, 1111, 1112, 5, 380, 0, 0, 1112, 1114, 3, 258, 129, 0, 1113, 1111, 1, 0, 0, 0, 1114, 1117, 1, 0, 0, 0, 1115, 1113, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 159, 1, 0, 0, 0, 1117, 1115, 1, 0, 0, 0, 1118, 1119, 5, 361, 0, 0, 1119, 1124, 3, 162, 81, 0, 1120, 1121, 5, 380, 0, 0, 1121, 1123, 3, 162, 81, 0, 1122, 1120, 1, 0, 0, 0, 1123, 1126, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1124, 1125, 1, 0, 0, 0, 1125, 161, 1, 0, 0, 0, 1126, 1124, 1, 0, 0, 0, 1127, 1139, 3, 164, 82, 0, 1128, 1129, 5, 376, 0, 0, 1129, 1134, 3, 50, 25, 0, 1130, 1131, 5, 380, 0, 0, 1131, 1133, 3, 50, 25, 0, 1132, 1130, 1, 0, 0, 0, 1133, 1136, 1, 0, 0, 0, 1134, 1132, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1137, 1, 0, 0, 0, 1136, 1134, 1, 0, 0, 0, 1137, 1138, 5, 377, 0, 0, 1138, 1140, 1, 0, 0, 0, 1139, 1128, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1142, 5, 183, 0, 0, 1142, 1143, 5, 376, 0, 0, 1143, 1144, 3, 156, 78, 0, 1144, 1145, 5, 377, 0, 0, 1145, 163, 1, 0, 0, 0, 1146, 1147, 3, 304, 152, 0, 1147, 165, 1, 0, 0, 0, 1148, 1149, 3, 168, 84, 0, 1149, 1151, 3, 174, 87, 0, 1150, 1152, 3, 204, 102, 0, 1151, 1150, 1, 0, 0, 0, 1151, 1152, 1, 0, 0, 0, 1152, 1154, 1, 0, 0, 0, 1153, 1155, 3, 206, 103, 0, 1154, 1153, 1, 0, 0, 0, 1154, 1155, 1, 0, 0, 0, 1155, 1157, 1, 0, 0, 0, 1156, 1158, 3, 220, 110, 0, 1157, 1156, 1, 0, 0, 0, 1157, 1158, 1, 0, 0, 0, 1158, 1160, 1, 0, 0, 0, 1159, 1161, 3, 222, 111, 0, 1160, 1159, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1167, 1, 0, 0, 0, 1162, 1163, 3, 168, 84, 0, 1163, 1164, 3, 174, 87, 0, 1164, 1165, 3, 228, 114, 0, 1165, 1167, 1, 0, 0, 0, 1166, 1148, 1, 0, 0, 0, 1166, 1162, 1, 0, 0, 0, 1167, 167, 1, 0, 0, 0, 1168, 1170, 5, 325, 0, 0, 1169, 1171, 3, 346, 173, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1181, 1, 0, 0, 0, 1172, 1182, 5, 387, 0, 0, 1173, 1178, 3, 170, 85, 0, 1174, 1175, 5, 380, 0, 0, 1175, 1177, 3, 170, 85, 0, 1176, 1174, 1, 0, 0, 0, 1177, 1180, 1, 0, 0, 0, 1178, 1176, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1182, 1, 0, 0, 0, 1180, 1178, 1, 0, 0, 0, 1181, 1172, 1, 0, 0, 0, 1181, 1173, 1, 0, 0, 0, 1182, 169, 1, 0, 0, 0, 1183, 1192, 3, 172, 86, 0, 1184, 1189, 3, 258, 129, 0, 1185, 1187, 5, 183, 0, 0, 1186, 1185, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 1188, 1, 0, 0, 0, 1188, 1190, 3, 258, 129, 0, 1189, 1186, 1, 0, 0, 0, 1189, 1190, 1, 0, 0, 0, 1190, 1192, 1, 0, 0, 0, 1191, 1183, 1, 0, 0, 0, 1191, 1184, 1, 0, 0, 0, 1192, 171, 1, 0, 0, 0, 1193, 1194, 3, 268, 134, 0, 1194, 1195, 5, 305, 0, 0, 1195, 1196, 3, 226, 113, 0, 1196, 1197, 5, 183, 0, 0, 1197, 1198, 3, 304, 152, 0, 1198, 1206, 1, 0, 0, 0, 1199, 1200, 3, 268, 134, 0, 1200, 1201, 5, 305, 0, 0, 1201, 1202, 3, 296, 148, 0, 1202, 1203, 5, 183, 0, 0, 1203, 1204, 3, 304, 152, 0, 1204, 1206, 1, 0, 0, 0, 1205, 1193, 1, 0, 0, 0, 1205, 1199, 1, 0, 0, 0, 1206, 173, 1, 0, 0, 0, 1207, 1208, 5, 248, 0, 0, 1208, 1209, 3, 176, 88, 0, 1209, 175, 1, 0, 0, 0, 1210, 1211, 6, 88, -1, 0, 1211, 1216, 3, 178, 89, 0, 1212, 1213, 5, 380, 0, 0, 1213, 1215, 3, 178, 89, 0, 1214, 1212, 1, 0, 0, 0, 1215, 1218, 1, 0, 0, 0, 1216, 1214, 1, 0, 0, 0, 1216, 1217, 1, 0, 0, 0, 1217, 1222, 1, 0, 0, 0, 1218, 1216, 1, 0, 0, 0, 1219, 1222, 3, 188, 94, 0, 1220, 1222, 3, 190, 95, 0, 1221, 1210, 1, 0, 0, 0, 1221, 1219, 1, 0, 0, 0, 1221, 1220, 1, 0, 0, 0, 1222, 1244, 1, 0, 0, 0, 1223, 1224, 10, 3, 0, 0, 1224, 1225, 5, 217, 0, 0, 1225, 1226, 5, 270, 0, 0, 1226, 1243, 3, 176, 88, 4, 1227, 1229, 10, 4, 0, 0, 1228, 1230, 5, 290, 0, 0, 1229, 1228, 1, 0, 0, 0, 1229, 1230, 1, 0, 0, 0, 1230, 1232, 1, 0, 0, 0, 1231, 1233, 7, 21, 0, 0, 1232, 1231, 1, 0, 0, 0, 1232, 1233, 1, 0, 0, 0, 1233, 1235, 1, 0, 0, 0, 1234, 1236, 5, 304, 0, 0, 1235, 1234, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 1238, 5, 270, 0, 0, 1238, 1240, 3, 176, 88, 0, 1239, 1241, 3, 202, 101, 0, 1240, 1239, 1, 0, 0, 0, 1240, 1241, 1, 0, 0, 0, 1241, 1243, 1, 0, 0, 0, 1242, 1223, 1, 0, 0, 0, 1242, 1227, 1, 0, 0, 0, 1243, 1246, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 177, 1, 0, 0, 0, 1246, 1244, 1, 0, 0, 0, 1247, 1249, 3, 180, 90, 0, 1248, 1250, 3, 294, 147, 0, 1249, 1248, 1, 0, 0, 0, 1249, 1250, 1, 0, 0, 0, 1250, 179, 1, 0, 0, 0, 1251, 1253, 5, 337, 0, 0, 1252, 1251, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 1256, 3, 182, 91, 0, 1255, 1257, 3, 184, 92, 0, 1256, 1255, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1262, 1, 0, 0, 0, 1258, 1260, 5, 183, 0, 0, 1259, 1258, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1263, 3, 274, 137, 0, 1262, 1259, 1, 0, 0, 0, 1262, 1263, 1, 0, 0, 0, 1263, 1293, 1, 0, 0, 0, 1264, 1265, 5, 273, 0, 0, 1265, 1266, 5, 337, 0, 0, 1266, 1267, 5, 376, 0, 0, 1267, 1268, 3, 270, 135, 0, 1268, 1269, 5, 376, 0, 0, 1269, 1274, 3, 258, 129, 0, 1270, 1271, 5, 380, 0, 0, 1271, 1273, 3, 258, 129, 0, 1272, 1270, 1, 0, 0, 0, 1273, 1276, 1, 0, 0, 0, 1274, 1272, 1, 0, 0, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1277, 1, 0, 0, 0, 1276, 1274, 1, 0, 0, 0, 1277, 1278, 5, 377, 0, 0, 1278, 1279, 5, 377, 0, 0, 1279, 1293, 1, 0, 0, 0, 1280, 1282, 5, 273, 0, 0, 1281, 1280, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 5, 376, 0, 0, 1284, 1285, 3, 156, 78, 0, 1285, 1286, 5, 377, 0, 0, 1286, 1293, 1, 0, 0, 0, 1287, 1288, 5, 349, 0, 0, 1288, 1289, 5, 376, 0, 0, 1289, 1290, 3, 258, 129, 0, 1290, 1291, 5, 377, 0, 0, 1291, 1293, 1, 0, 0, 0, 1292, 1252, 1, 0, 0, 0, 1292, 1264, 1, 0, 0, 0, 1292, 1281, 1, 0, 0, 0, 1292, 1287, 1, 0, 0, 0, 1293, 181, 1, 0, 0, 0, 1294, 1295, 3, 312, 156, 0, 1295, 183, 1, 0, 0, 0, 1296, 1297, 5, 247, 0, 0, 1297, 1298, 5, 335, 0, 0, 1298, 1299, 5, 183, 0, 0, 1299, 1300, 5, 297, 0, 0, 1300, 1301, 3, 186, 93, 0, 1301, 185, 1, 0, 0, 0, 1302, 1303, 3, 258, 129, 0, 1303, 187, 1, 0, 0, 0, 1304, 1305, 5, 376, 0, 0, 1305, 1306, 3, 150, 75, 0, 1306, 1307, 5, 377, 0, 0, 1307, 1308, 3, 294, 147, 0, 1308, 189, 1, 0, 0, 0, 1309, 1310, 5, 337, 0, 0, 1310, 1311, 5, 376, 0, 0, 1311, 1312, 3, 192, 96, 0, 1312, 1313, 5, 377, 0, 0, 1313, 191, 1, 0, 0, 0, 1314, 1315, 3, 194, 97, 0, 1315, 1316, 5, 376, 0, 0, 1316, 1321, 3, 196, 98, 0, 1317, 1318, 5, 380, 0, 0, 1318, 1320, 3, 196, 98, 0, 1319, 1317, 1, 0, 0, 0, 1320, 1323, 1, 0, 0, 0, 1321, 1319, 1, 0, 0, 0, 1321, 1322, 1, 0, 0, 0, 1322, 1324, 1, 0, 0, 0, 1323, 1321, 1, 0, 0, 0, 1324, 1325, 5, 377, 0, 0, 1325, 193, 1, 0, 0, 0, 1326, 1327, 7, 22, 0, 0, 1327, 195, 1, 0, 0, 0, 1328, 1329, 5, 337, 0, 0, 1329, 1344, 3, 218, 109, 0, 1330, 1344, 3, 200, 100, 0, 1331, 1344, 3, 278, 139, 0, 1332, 1333, 5, 24, 0, 0, 1333, 1334, 5, 396, 0, 0, 1334, 1335, 5, 337, 0, 0, 1335, 1344, 3, 218, 109, 0, 1336, 1337, 5, 150, 0, 0, 1337, 1338, 5, 396, 0, 0, 1338, 1344, 3, 200, 100, 0, 1339, 1340, 3, 198, 99, 0, 1340, 1341, 5, 396, 0, 0, 1341, 1342, 3, 278, 139, 0, 1342, 1344, 1, 0, 0, 0, 1343, 1328, 1, 0, 0, 0, 1343, 1330, 1, 0, 0, 0, 1343, 1331, 1, 0, 0, 0, 1343, 1332, 1, 0, 0, 0, 1343, 1336, 1, 0, 0, 0, 1343, 1339, 1, 0, 0, 0, 1344, 197, 1, 0, 0, 0, 1345, 1346, 7, 23, 0, 0, 1346, 199, 1, 0, 0, 0, 1347, 1348, 5, 31, 0, 0, 1348, 1349, 5, 376, 0, 0, 1349, 1350, 3, 312, 156, 0, 1350, 1351, 5, 377, 0, 0, 1351, 201, 1, 0, 0, 0, 1352, 1353, 5, 299, 0, 0, 1353, 1367, 3, 260, 130, 0, 1354, 1355, 5, 353, 0, 0, 1355, 1356, 5, 376, 0, 0, 1356, 1361, 3, 312, 156, 0, 1357, 1358, 5, 380, 0, 0, 1358, 1360, 3, 312, 156, 0, 1359, 1357, 1, 0, 0, 0, 1360, 1363, 1, 0, 0, 0, 1361, 1359, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1364, 1, 0, 0, 0, 1363, 1361, 1, 0, 0, 0, 1364, 1365, 5, 377, 0, 0, 1365, 1367, 1, 0, 0, 0, 1366, 1352, 1, 0, 0, 0, 1366, 1354, 1, 0, 0, 0, 1367, 203, 1, 0, 0, 0, 1368, 1369, 5, 359, 0, 0, 1369, 1370, 3, 260, 130, 0, 1370, 205, 1, 0, 0, 0, 1371, 1372, 5, 253, 0, 0, 1372, 1373, 5, 194, 0, 0, 1373, 1378, 3, 208, 104, 0, 1374, 1375, 5, 380, 0, 0, 1375, 1377, 3, 208, 104, 0, 1376, 1374, 1, 0, 0, 0, 1377, 1380, 1, 0, 0, 0, 1378, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 207, 1, 0, 0, 0, 1380, 1378, 1, 0, 0, 0, 1381, 1421, 3, 258, 129, 0, 1382, 1421, 3, 214, 107, 0, 1383, 1384, 5, 376, 0, 0, 1384, 1421, 5, 377, 0, 0, 1385, 1386, 5, 376, 0, 0, 1386, 1391, 3, 258, 129, 0, 1387, 1388, 5, 380, 0, 0, 1388, 1390, 3, 258, 129, 0, 1389, 1387, 1, 0, 0, 0, 1390, 1393, 1, 0, 0, 0, 1391, 1389, 1, 0, 0, 0, 1391, 1392, 1, 0, 0, 0, 1392, 1394, 1, 0, 0, 0, 1393, 1391, 1, 0, 0, 0, 1394, 1395, 5, 377, 0, 0, 1395, 1421, 1, 0, 0, 0, 1396, 1397, 3, 212, 106, 0, 1397, 1398, 5, 376, 0, 0, 1398, 1403, 3, 258, 129, 0, 1399, 1400, 5, 380, 0, 0, 1400, 1402, 3, 258, 129, 0, 1401, 1399, 1, 0, 0, 0, 1402, 1405, 1, 0, 0, 0, 1403, 1401, 1, 0, 0, 0, 1403, 1404, 1, 0, 0, 0, 1404, 1406, 1, 0, 0, 0, 1405, 1403, 1, 0, 0, 0, 1406, 1407, 5, 377, 0, 0, 1407, 1421, 1, 0, 0, 0, 1408, 1409, 3, 210, 105, 0, 1409, 1410, 5, 376, 0, 0, 1410, 1415, 3, 208, 104, 0, 1411, 1412, 5, 380, 0, 0, 1412, 1414, 3, 208, 104, 0, 1413, 1411, 1, 0, 0, 0, 1414, 1417, 1, 0, 0, 0, 1415, 1413, 1, 0, 0, 0, 1415, 1416, 1, 0, 0, 0, 1416, 1418, 1, 0, 0, 0, 1417, 1415, 1, 0, 0, 0, 1418, 1419, 5, 377, 0, 0, 1419, 1421, 1, 0, 0, 0, 1420, 1381, 1, 0, 0, 0, 1420, 1382, 1, 0, 0, 0, 1420, 1383, 1, 0, 0, 0, 1420, 1385, 1, 0, 0, 0, 1420, 1396, 1, 0, 0, 0, 1420, 1408, 1, 0, 0, 0, 1421, 209, 1, 0, 0, 0, 1422, 1423, 5, 254, 0, 0, 1423, 1424, 5, 136, 0, 0, 1424, 211, 1, 0, 0, 0, 1425, 1426, 7, 24, 0, 0, 1426, 213, 1, 0, 0, 0, 1427, 1428, 3, 216, 108, 0, 1428, 1429, 5, 376, 0, 0, 1429, 1430, 3, 218, 109, 0, 1430, 1431, 5, 380, 0, 0, 1431, 1432, 3, 278, 139, 0, 1432, 1433, 5, 377, 0, 0, 1433, 215, 1, 0, 0, 0, 1434, 1435, 7, 25, 0, 0, 1435, 217, 1, 0, 0, 0, 1436, 1437, 3, 312, 156, 0, 1437, 219, 1, 0, 0, 0, 1438, 1439, 5, 256, 0, 0, 1439, 1440, 3, 260, 130, 0, 1440, 221, 1, 0, 0, 0, 1441, 1442, 5, 360, 0, 0, 1442, 1447, 3, 224, 112, 0, 1443, 1444, 5, 380, 0, 0, 1444, 1446, 3, 224, 112, 0, 1445, 1443, 1, 0, 0, 0, 1446, 1449, 1, 0, 0, 0, 1447, 1445, 1, 0, 0, 0, 1447, 1448, 1, 0, 0, 0, 1448, 223, 1, 0, 0, 0, 1449, 1447, 1, 0, 0, 0, 1450, 1451, 3, 296, 148, 0, 1451, 1452, 5, 183, 0, 0, 1452, 1453, 3, 226, 113, 0, 1453, 225, 1, 0, 0, 0, 1454, 1456, 3, 296, 148, 0, 1455, 1454, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1457, 1, 0, 0, 0, 1457, 1459, 5, 376, 0, 0, 1458, 1460, 3, 236, 118, 0, 1459, 1458, 1, 0, 0, 0, 1459, 1460, 1, 0, 0, 0, 1460, 1462, 1, 0, 0, 0, 1461, 1463, 3, 230, 115, 0, 1462, 1461, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1465, 1, 0, 0, 0, 1464, 1466, 3, 252, 126, 0, 1465, 1464, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 5, 377, 0, 0, 1468, 227, 1, 0, 0, 0, 1469, 1470, 5, 280, 0, 0, 1470, 1472, 5, 376, 0, 0, 1471, 1473, 3, 236, 118, 0, 1472, 1471, 1, 0, 0, 0, 1472, 1473, 1, 0, 0, 0, 1473, 1475, 1, 0, 0, 0, 1474, 1476, 3, 230, 115, 0, 1475, 1474, 1, 0, 0, 0, 1475, 1476, 1, 0, 0, 0, 1476, 1478, 1, 0, 0, 0, 1477, 1479, 3, 240, 120, 0, 1478, 1477, 1, 0, 0, 0, 1478, 1479, 1, 0, 0, 0, 1479, 1481, 1, 0, 0, 0, 1480, 1482, 3, 246, 123, 0, 1481, 1480, 1, 0, 0, 0, 1481, 1482, 1, 0, 0, 0, 1482, 1484, 1, 0, 0, 0, 1483, 1485, 3, 248, 124, 0, 1484, 1483, 1, 0, 0, 0, 1484, 1485, 1, 0, 0, 0, 1485, 1487, 1, 0, 0, 0, 1486, 1488, 3, 242, 121, 0, 1487, 1486, 1, 0, 0, 0, 1487, 1488, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 3, 250, 125, 0, 1490, 1495, 5, 377, 0, 0, 1491, 1493, 5, 183, 0, 0, 1492, 1491, 1, 0, 0, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1494, 1, 0, 0, 0, 1494, 1496, 3, 304, 152, 0, 1495, 1492, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 229, 1, 0, 0, 0, 1497, 1498, 5, 302, 0, 0, 1498, 1499, 5, 194, 0, 0, 1499, 1504, 3, 232, 116, 0, 1500, 1501, 5, 380, 0, 0, 1501, 1503, 3, 232, 116, 0, 1502, 1500, 1, 0, 0, 0, 1503, 1506, 1, 0, 0, 0, 1504, 1502, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 231, 1, 0, 0, 0, 1506, 1504, 1, 0, 0, 0, 1507, 1509, 3, 258, 129, 0, 1508, 1510, 7, 26, 0, 0, 1509, 1508, 1, 0, 0, 0, 1509, 1510, 1, 0, 0, 0, 1510, 1513, 1, 0, 0, 0, 1511, 1512, 5, 86, 0, 0, 1512, 1514, 7, 27, 0, 0, 1513, 1511, 1, 0, 0, 0, 1513, 1514, 1, 0, 0, 0, 1514, 233, 1, 0, 0, 0, 1515, 1518, 5, 277, 0, 0, 1516, 1519, 5, 176, 0, 0, 1517, 1519, 3, 258, 129, 0, 1518, 1516, 1, 0, 0, 0, 1518, 1517, 1, 0, 0, 0, 1519, 235, 1, 0, 0, 0, 1520, 1521, 5, 307, 0, 0, 1521, 1522, 5, 194, 0, 0, 1522, 1527, 3, 258, 129, 0, 1523, 1524, 5, 380, 0, 0, 1524, 1526, 3, 258, 129, 0, 1525, 1523, 1, 0, 0, 0, 1526, 1529, 1, 0, 0, 0, 1527, 1525, 1, 0, 0, 0, 1527, 1528, 1, 0, 0, 0, 1528, 237, 1, 0, 0, 0, 1529, 1527, 1, 0, 0, 0, 1530, 1547, 5, 387, 0, 0, 1531, 1547, 5, 390, 0, 0, 1532, 1547, 5, 395, 0, 0, 1533, 1534, 5, 378, 0, 0, 1534, 1535, 5, 398, 0, 0, 1535, 1536, 5, 380, 0, 0, 1536, 1537, 5, 398, 0, 0, 1537, 1547, 5, 379, 0, 0, 1538, 1539, 5, 378, 0, 0, 1539, 1540, 5, 398, 0, 0, 1540, 1541, 5, 380, 0, 0, 1541, 1547, 5, 379, 0, 0, 1542, 1543, 5, 378, 0, 0, 1543, 1544, 5, 380, 0, 0, 1544, 1545, 5, 398, 0, 0, 1545, 1547, 5, 379, 0, 0, 1546, 1530, 1, 0, 0, 0, 1546, 1531, 1, 0, 0, 0, 1546, 1532, 1, 0, 0, 0, 1546, 1533, 1, 0, 0, 0, 1546, 1538, 1, 0, 0, 0, 1546, 1542, 1, 0, 0, 0, 1547, 239, 1, 0, 0, 0, 1548, 1549, 5, 281, 0, 0, 1549, 1554, 3, 170, 85, 0, 1550, 1551, 5, 380, 0, 0, 1551, 1553, 3, 170, 85, 0, 1552, 1550, 1, 0, 0, 0, 1553, 1556, 1, 0, 0, 0, 1554, 1552, 1, 0, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 241, 1, 0, 0, 0, 1556, 1554, 1, 0, 0, 0, 1557, 1558, 5, 308, 0, 0, 1558, 1560, 5, 376, 0, 0, 1559, 1561, 3, 244, 122, 0, 1560, 1559, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 1560, 1, 0, 0, 0, 1562, 1563, 1, 0, 0, 0, 1563, 1564, 1, 0, 0, 0, 1564, 1566, 5, 377, 0, 0, 1565, 1567, 3, 256, 128, 0, 1566, 1565, 1, 0, 0, 0, 1566, 1567, 1, 0, 0, 0, 1567, 243, 1, 0, 0, 0, 1568, 1570, 3, 306, 153, 0, 1569, 1571, 3, 238, 119, 0, 1570, 1569, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 245, 1, 0, 0, 0, 1572, 1573, 5, 176, 0, 0, 1573, 1574, 5, 323, 0, 0, 1574, 1575, 5, 309, 0, 0, 1575, 1581, 5, 279, 0, 0, 1576, 1577, 5, 300, 0, 0, 1577, 1578, 5, 322, 0, 0, 1578, 1579, 5, 309, 0, 0, 1579, 1581, 5, 279, 0, 0, 1580, 1572, 1, 0, 0, 0, 1580, 1576, 1, 0, 0, 0, 1581, 247, 1, 0, 0, 0, 1582, 1583, 5, 6, 0, 0, 1583, 1584, 5, 279, 0, 0, 1584, 1585, 5, 328, 0, 0, 1585, 1586, 5, 97, 0, 0, 1586, 1587, 5, 72, 0, 0, 1587, 1607, 5, 322, 0, 0, 1588, 1589, 5, 6, 0, 0, 1589, 1590, 5, 279, 0, 0, 1590, 1591, 5, 328, 0, 0, 1591, 1592, 5, 343, 0, 0, 1592, 1593, 5, 291, 0, 0, 1593, 1607, 5, 322, 0, 0, 1594, 1595, 5, 6, 0, 0, 1595, 1596, 5, 279, 0, 0, 1596, 1597, 5, 328, 0, 0, 1597, 1598, 5, 343, 0, 0, 1598, 1599, 5, 72, 0, 0, 1599, 1607, 3, 306, 153, 0, 1600, 1601, 5, 6, 0, 0, 1601, 1602, 5, 279, 0, 0, 1602, 1603, 5, 328, 0, 0, 1603, 1604, 5, 343, 0, 0, 1604, 1605, 5, 44, 0, 0, 1605, 1607, 3, 306, 153, 0, 1606, 1582, 1, 0, 0, 0, 1606, 1588, 1, 0, 0, 0, 1606, 1594, 1, 0, 0, 0, 1606, 1600, 1, 0, 0, 0, 1607, 249, 1, 0, 0, 0, 1608, 1609, 5, 229, 0, 0, 1609, 1614, 3, 170, 85, 0, 1610, 1611, 5, 380, 0, 0, 1611, 1613, 3, 170, 85, 0, 1612, 1610, 1, 0, 0, 0, 1613, 1616, 1, 0, 0, 0, 1614, 1612, 1, 0, 0, 0, 1614, 1615, 1, 0, 0, 0, 1615, 251, 1, 0, 0, 0, 1616, 1614, 1, 0, 0, 0, 1617, 1618, 5, 314, 0, 0, 1618, 1619, 5, 187, 0, 0, 1619, 1620, 3, 278, 139, 0, 1620, 1621, 3, 254, 127, 0, 1621, 1627, 1, 0, 0, 0, 1622, 1623, 5, 323, 0, 0, 1623, 1624, 5, 187, 0, 0, 1624, 1625, 5, 398, 0, 0, 1625, 1627, 3, 254, 127, 0, 1626, 1617, 1, 0, 0, 0, 1626, 1622, 1, 0, 0, 0, 1627, 253, 1, 0, 0, 0, 1628, 1629, 5, 101, 0, 0, 1629, 1630, 5, 179, 0, 0, 1630, 1631, 5, 219, 0, 0, 1631, 1632, 5, 322, 0, 0, 1632, 255, 1, 0, 0, 0, 1633, 1634, 5, 362, 0, 0, 1634, 1635, 3, 278, 139, 0, 1635, 257, 1, 0, 0, 0, 1636, 1637, 3, 260, 130, 0, 1637, 259, 1, 0, 0, 0, 1638, 1639, 6, 130, -1, 0, 1639, 1640, 5, 294, 0, 0, 1640, 1651, 3, 260, 130, 5, 1641, 1642, 5, 241, 0, 0, 1642, 1643, 5, 376, 0, 0, 1643, 1644, 3, 156, 78, 0, 1644, 1645, 5, 377, 0, 0, 1645, 1651, 1, 0, 0, 0, 1646, 1648, 3, 266, 133, 0, 1647, 1649, 3, 262, 131, 0, 1648, 1647, 1, 0, 0, 0, 1648, 1649, 1, 0, 0, 0, 1649, 1651, 1, 0, 0, 0, 1650, 1638, 1, 0, 0, 0, 1650, 1641, 1, 0, 0, 0, 1650, 1646, 1, 0, 0, 0, 1651, 1660, 1, 0, 0, 0, 1652, 1653, 10, 2, 0, 0, 1653, 1654, 5, 179, 0, 0, 1654, 1659, 3, 260, 130, 3, 1655, 1656, 10, 1, 0, 0, 1656, 1657, 5, 301, 0, 0, 1657, 1659, 3, 260, 130, 2, 1658, 1652, 1, 0, 0, 0, 1658, 1655, 1, 0, 0, 0, 1659, 1662, 1, 0, 0, 0, 1660, 1658, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 261, 1, 0, 0, 0, 1662, 1660, 1, 0, 0, 0, 1663, 1665, 5, 294, 0, 0, 1664, 1663, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1666, 1, 0, 0, 0, 1666, 1667, 5, 187, 0, 0, 1667, 1668, 3, 266, 133, 0, 1668, 1669, 5, 179, 0, 0, 1669, 1670, 3, 266, 133, 0, 1670, 1747, 1, 0, 0, 0, 1671, 1673, 5, 294, 0, 0, 1672, 1671, 1, 0, 0, 0, 1672, 1673, 1, 0, 0, 0, 1673, 1674, 1, 0, 0, 0, 1674, 1675, 5, 259, 0, 0, 1675, 1676, 5, 376, 0, 0, 1676, 1681, 3, 258, 129, 0, 1677, 1678, 5, 380, 0, 0, 1678, 1680, 3, 258, 129, 0, 1679, 1677, 1, 0, 0, 0, 1680, 1683, 1, 0, 0, 0, 1681, 1679, 1, 0, 0, 0, 1681, 1682, 1, 0, 0, 0, 1682, 1684, 1, 0, 0, 0, 1683, 1681, 1, 0, 0, 0, 1684, 1685, 5, 377, 0, 0, 1685, 1747, 1, 0, 0, 0, 1686, 1688, 5, 294, 0, 0, 1687, 1686, 1, 0, 0, 0, 1687, 1688, 1, 0, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1690, 5, 259, 0, 0, 1690, 1691, 5, 376, 0, 0, 1691, 1692, 3, 156, 78, 0, 1692, 1693, 5, 377, 0, 0, 1693, 1747, 1, 0, 0, 0, 1694, 1695, 5, 241, 0, 0, 1695, 1696, 5, 376, 0, 0, 1696, 1697, 3, 156, 78, 0, 1697, 1698, 5, 377, 0, 0, 1698, 1747, 1, 0, 0, 0, 1699, 1701, 5, 294, 0, 0, 1700, 1699, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1703, 5, 319, 0, 0, 1703, 1747, 3, 266, 133, 0, 1704, 1706, 5, 294, 0, 0, 1705, 1704, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 1707, 1, 0, 0, 0, 1707, 1708, 5, 276, 0, 0, 1708, 1722, 7, 28, 0, 0, 1709, 1710, 5, 376, 0, 0, 1710, 1723, 5, 377, 0, 0, 1711, 1712, 5, 376, 0, 0, 1712, 1717, 3, 258, 129, 0, 1713, 1714, 5, 380, 0, 0, 1714, 1716, 3, 258, 129, 0, 1715, 1713, 1, 0, 0, 0, 1716, 1719, 1, 0, 0, 0, 1717, 1715, 1, 0, 0, 0, 1717, 1718, 1, 0, 0, 0, 1718, 1720, 1, 0, 0, 0, 1719, 1717, 1, 0, 0, 0, 1720, 1721, 5, 377, 0, 0, 1721, 1723, 1, 0, 0, 0, 1722, 1709, 1, 0, 0, 0, 1722, 1711, 1, 0, 0, 0, 1723, 1747, 1, 0, 0, 0, 1724, 1726, 5, 294, 0, 0, 1725, 1724, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1727, 1728, 5, 276, 0, 0, 1728, 1747, 3, 266, 133, 0, 1729, 1731, 5, 269, 0, 0, 1730, 1732, 5, 294, 0, 0, 1731, 1730, 1, 0, 0, 0, 1731, 1732, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1747, 5, 295, 0, 0, 1734, 1736, 5, 269, 0, 0, 1735, 1737, 5, 294, 0, 0, 1736, 1735, 1, 0, 0, 0, 1736, 1737, 1, 0, 0, 0, 1737, 1738, 1, 0, 0, 0, 1738, 1747, 7, 29, 0, 0, 1739, 1741, 5, 269, 0, 0, 1740, 1742, 5, 294, 0, 0, 1741, 1740, 1, 0, 0, 0, 1741, 1742, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1744, 5, 232, 0, 0, 1744, 1745, 5, 248, 0, 0, 1745, 1747, 3, 266, 133, 0, 1746, 1664, 1, 0, 0, 0, 1746, 1672, 1, 0, 0, 0, 1746, 1687, 1, 0, 0, 0, 1746, 1694, 1, 0, 0, 0, 1746, 1700, 1, 0, 0, 0, 1746, 1705, 1, 0, 0, 0, 1746, 1725, 1, 0, 0, 0, 1746, 1729, 1, 0, 0, 0, 1746, 1734, 1, 0, 0, 0, 1746, 1739, 1, 0, 0, 0, 1747, 263, 1, 0, 0, 0, 1748, 1750, 5, 294, 0, 0, 1749, 1748, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1752, 5, 276, 0, 0, 1752, 1766, 7, 28, 0, 0, 1753, 1754, 5, 376, 0, 0, 1754, 1767, 5, 377, 0, 0, 1755, 1756, 5, 376, 0, 0, 1756, 1761, 3, 258, 129, 0, 1757, 1758, 5, 380, 0, 0, 1758, 1760, 3, 258, 129, 0, 1759, 1757, 1, 0, 0, 0, 1760, 1763, 1, 0, 0, 0, 1761, 1759, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1762, 1764, 1, 0, 0, 0, 1763, 1761, 1, 0, 0, 0, 1764, 1765, 5, 377, 0, 0, 1765, 1767, 1, 0, 0, 0, 1766, 1753, 1, 0, 0, 0, 1766, 1755, 1, 0, 0, 0, 1767, 1774, 1, 0, 0, 0, 1768, 1770, 5, 294, 0, 0, 1769, 1768, 1, 0, 0, 0, 1769, 1770, 1, 0, 0, 0, 1770, 1771, 1, 0, 0, 0, 1771, 1772, 5, 276, 0, 0, 1772, 1774, 3, 266, 133, 0, 1773, 1749, 1, 0, 0, 0, 1773, 1769, 1, 0, 0, 0, 1774, 265, 1, 0, 0, 0, 1775, 1776, 6, 133, -1, 0, 1776, 1780, 3, 268, 134, 0, 1777, 1778, 7, 30, 0, 0, 1778, 1780, 3, 266, 133, 7, 1779, 1775, 1, 0, 0, 0, 1779, 1777, 1, 0, 0, 0, 1780, 1802, 1, 0, 0, 0, 1781, 1782, 10, 6, 0, 0, 1782, 1783, 7, 31, 0, 0, 1783, 1801, 3, 266, 133, 7, 1784, 1785, 10, 5, 0, 0, 1785, 1786, 7, 32, 0, 0, 1786, 1801, 3, 266, 133, 6, 1787, 1788, 10, 4, 0, 0, 1788, 1789, 5, 371, 0, 0, 1789, 1801, 3, 266, 133, 5, 1790, 1791, 10, 3, 0, 0, 1791, 1792, 5, 372, 0, 0, 1792, 1801, 3, 266, 133, 4, 1793, 1794, 10, 2, 0, 0, 1794, 1795, 5, 370, 0, 0, 1795, 1801, 3, 266, 133, 3, 1796, 1797, 10, 1, 0, 0, 1797, 1798, 3, 330, 165, 0, 1798, 1799, 3, 266, 133, 2, 1799, 1801, 1, 0, 0, 0, 1800, 1781, 1, 0, 0, 0, 1800, 1784, 1, 0, 0, 0, 1800, 1787, 1, 0, 0, 0, 1800, 1790, 1, 0, 0, 0, 1800, 1793, 1, 0, 0, 0, 1800, 1796, 1, 0, 0, 0, 1801, 1804, 1, 0, 0, 0, 1802, 1800, 1, 0, 0, 0, 1802, 1803, 1, 0, 0, 0, 1803, 267, 1, 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1805, 1806, 6, 134, -1, 0, 1806, 1808, 5, 198, 0, 0, 1807, 1809, 3, 310, 155, 0, 1808, 1807, 1, 0, 0, 0, 1809, 1810, 1, 0, 0, 0, 1810, 1808, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1814, 1, 0, 0, 0, 1812, 1813, 5, 236, 0, 0, 1813, 1815, 3, 258, 129, 0, 1814, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 1816, 1, 0, 0, 0, 1816, 1817, 5, 237, 0, 0, 1817, 1897, 1, 0, 0, 0, 1818, 1819, 5, 198, 0, 0, 1819, 1821, 3, 258, 129, 0, 1820, 1822, 3, 310, 155, 0, 1821, 1820, 1, 0, 0, 0, 1822, 1823, 1, 0, 0, 0, 1823, 1821, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1827, 1, 0, 0, 0, 1825, 1826, 5, 236, 0, 0, 1826, 1828, 3, 258, 129, 0, 1827, 1825, 1, 0, 0, 0, 1827, 1828, 1, 0, 0, 0, 1828, 1829, 1, 0, 0, 0, 1829, 1830, 5, 237, 0, 0, 1830, 1897, 1, 0, 0, 0, 1831, 1832, 5, 199, 0, 0, 1832, 1833, 5, 376, 0, 0, 1833, 1834, 3, 258, 129, 0, 1834, 1835, 5, 183, 0, 0, 1835, 1836, 3, 54, 27, 0, 1836, 1837, 5, 377, 0, 0, 1837, 1897, 1, 0, 0, 0, 1838, 1839, 5, 44, 0, 0, 1839, 1840, 5, 376, 0, 0, 1840, 1843, 3, 258, 129, 0, 1841, 1842, 5, 59, 0, 0, 1842, 1844, 5, 86, 0, 0, 1843, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 1846, 5, 377, 0, 0, 1846, 1897, 1, 0, 0, 0, 1847, 1848, 5, 72, 0, 0, 1848, 1849, 5, 376, 0, 0, 1849, 1852, 3, 258, 129, 0, 1850, 1851, 5, 59, 0, 0, 1851, 1853, 5, 86, 0, 0, 1852, 1850, 1, 0, 0, 0, 1852, 1853, 1, 0, 0, 0, 1853, 1854, 1, 0, 0, 0, 1854, 1855, 5, 377, 0, 0, 1855, 1897, 1, 0, 0, 0, 1856, 1857, 5, 312, 0, 0, 1857, 1858, 5, 376, 0, 0, 1858, 1859, 3, 266, 133, 0, 1859, 1860, 5, 259, 0, 0, 1860, 1861, 3, 266, 133, 0, 1861, 1862, 5, 377, 0, 0, 1862, 1897, 1, 0, 0, 0, 1863, 1897, 3, 338, 169, 0, 1864, 1897, 5, 387, 0, 0, 1865, 1866, 3, 312, 156, 0, 1866, 1867, 5, 373, 0, 0, 1867, 1868, 5, 387, 0, 0, 1868, 1897, 1, 0, 0, 0, 1869, 1870, 5, 376, 0, 0, 1870, 1871, 3, 156, 78, 0, 1871, 1872, 5, 377, 0, 0, 1872, 1897, 1, 0, 0, 0, 1873, 1874, 3, 270, 135, 0, 1874, 1886, 5, 376, 0, 0, 1875, 1877, 3, 346, 173, 0, 1876, 1875, 1, 0, 0, 0, 1876, 1877, 1, 0, 0, 0, 1877, 1878, 1, 0, 0, 0, 1878, 1883, 3, 258, 129, 0, 1879, 1880, 5, 380, 0, 0, 1880, 1882, 3, 258, 129, 0, 1881, 1879, 1, 0, 0, 0, 1882, 1885, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1883, 1884, 1, 0, 0, 0, 1884, 1887, 1, 0, 0, 0, 1885, 1883, 1, 0, 0, 0, 1886, 1876, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1888, 1, 0, 0, 0, 1888, 1889, 5, 377, 0, 0, 1889, 1897, 1, 0, 0, 0, 1890, 1897, 3, 304, 152, 0, 1891, 1897, 3, 272, 136, 0, 1892, 1893, 5, 376, 0, 0, 1893, 1894, 3, 258, 129, 0, 1894, 1895, 5, 377, 0, 0, 1895, 1897, 1, 0, 0, 0, 1896, 1805, 1, 0, 0, 0, 1896, 1818, 1, 0, 0, 0, 1896, 1831, 1, 0, 0, 0, 1896, 1838, 1, 0, 0, 0, 1896, 1847, 1, 0, 0, 0, 1896, 1856, 1, 0, 0, 0, 1896, 1863, 1, 0, 0, 0, 1896, 1864, 1, 0, 0, 0, 1896, 1865, 1, 0, 0, 0, 1896, 1869, 1, 0, 0, 0, 1896, 1873, 1, 0, 0, 0, 1896, 1890, 1, 0, 0, 0, 1896, 1891, 1, 0, 0, 0, 1896, 1892, 1, 0, 0, 0, 1897, 1905, 1, 0, 0, 0, 1898, 1899, 10, 4, 0, 0, 1899, 1900, 5, 374, 0, 0, 1900, 1901, 3, 266, 133, 0, 1901, 1902, 5, 375, 0, 0, 1902, 1904, 1, 0, 0, 0, 1903, 1898, 1, 0, 0, 0, 1904, 1907, 1, 0, 0, 0, 1905, 1903, 1, 0, 0, 0, 1905, 1906, 1, 0, 0, 0, 1906, 269, 1, 0, 0, 0, 1907, 1905, 1, 0, 0, 0, 1908, 1912, 3, 348, 174, 0, 1909, 1912, 3, 350, 175, 0, 1910, 1912, 3, 312, 156, 0, 1911, 1908, 1, 0, 0, 0, 1911, 1909, 1, 0, 0, 0, 1911, 1910, 1, 0, 0, 0, 1912, 271, 1, 0, 0, 0, 1913, 1914, 3, 312, 156, 0, 1914, 273, 1, 0, 0, 0, 1915, 1916, 3, 304, 152, 0, 1916, 275, 1, 0, 0, 0, 1917, 1920, 3, 304, 152, 0, 1918, 1920, 3, 272, 136, 0, 1919, 1917, 1, 0, 0, 0, 1919, 1918, 1, 0, 0, 0, 1920, 277, 1, 0, 0, 0, 1921, 1924, 5, 267, 0, 0, 1922, 1925, 3, 280, 140, 0, 1923, 1925, 3, 284, 142, 0, 1924, 1922, 1, 0, 0, 0, 1924, 1923, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 279, 1, 0, 0, 0, 1926, 1928, 3, 282, 141, 0, 1927, 1929, 3, 286, 143, 0, 1928, 1927, 1, 0, 0, 0, 1928, 1929, 1, 0, 0, 0, 1929, 281, 1, 0, 0, 0, 1930, 1931, 3, 288, 144, 0, 1931, 1932, 3, 290, 145, 0, 1932, 1934, 1, 0, 0, 0, 1933, 1930, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1933, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 283, 1, 0, 0, 0, 1937, 1940, 3, 286, 143, 0, 1938, 1941, 3, 282, 141, 0, 1939, 1941, 3, 286, 143, 0, 1940, 1938, 1, 0, 0, 0, 1940, 1939, 1, 0, 0, 0, 1940, 1941, 1, 0, 0, 0, 1941, 285, 1, 0, 0, 0, 1942, 1943, 3, 288, 144, 0, 1943, 1944, 3, 290, 145, 0, 1944, 1945, 5, 343, 0, 0, 1945, 1946, 3, 290, 145, 0, 1946, 287, 1, 0, 0, 0, 1947, 1949, 7, 33, 0, 0, 1948, 1947, 1, 0, 0, 0, 1948, 1949, 1, 0, 0, 0, 1949, 1950, 1, 0, 0, 0, 1950, 1953, 7, 34, 0, 0, 1951, 1953, 5, 397, 0, 0, 1952, 1948, 1, 0, 0, 0, 1952, 1951, 1, 0, 0, 0, 1953, 289, 1, 0, 0, 0, 1954, 1957, 3, 304, 152, 0, 1955, 1957, 3, 348, 174, 0, 1956, 1954, 1, 0, 0, 0, 1956, 1955, 1, 0, 0, 0, 1957, 291, 1, 0, 0, 0, 1958, 1960, 5, 183, 0, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1961, 1, 0, 0, 0, 1961, 1963, 3, 304, 152, 0, 1962, 1964, 3, 300, 150, 0, 1963, 1962, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 293, 1, 0, 0, 0, 1965, 1967, 5, 183, 0, 0, 1966, 1965, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1970, 3, 304, 152, 0, 1969, 1971, 3, 300, 150, 0, 1970, 1969, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 295, 1, 0, 0, 0, 1972, 1973, 3, 304, 152, 0, 1973, 1974, 3, 298, 149, 0, 1974, 297, 1, 0, 0, 0, 1975, 1976, 5, 284, 0, 0, 1976, 1978, 3, 304, 152, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1979, 1, 0, 0, 0, 1979, 1977, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 1983, 1, 0, 0, 0, 1981, 1983, 1, 0, 0, 0, 1982, 1977, 1, 0, 0, 0, 1982, 1981, 1, 0, 0, 0, 1983, 299, 1, 0, 0, 0, 1984, 1985, 5, 376, 0, 0, 1985, 1986, 3, 302, 151, 0, 1986, 1987, 5, 377, 0, 0, 1987, 301, 1, 0, 0, 0, 1988, 1993, 3, 304, 152, 0, 1989, 1990, 5, 380, 0, 0, 1990, 1992, 3, 304, 152, 0, 1991, 1989, 1, 0, 0, 0, 1992, 1995, 1, 0, 0, 0, 1993, 1991, 1, 0, 0, 0, 1993, 1994, 1, 0, 0, 0, 1994, 303, 1, 0, 0, 0, 1995, 1993, 1, 0, 0, 0, 1996, 2000, 3, 306, 153, 0, 1997, 2000, 3, 308, 154, 0, 1998, 2000, 3, 350, 175, 0, 1999, 1996, 1, 0, 0, 0, 1999, 1997, 1, 0, 0, 0, 1999, 1998, 1, 0, 0, 0, 2000, 305, 1, 0, 0, 0, 2001, 2002, 7, 35, 0, 0, 2002, 307, 1, 0, 0, 0, 2003, 2004, 5, 397, 0, 0, 2004, 309, 1, 0, 0, 0, 2005, 2006, 5, 358, 0, 0, 2006, 2007, 3, 258, 129, 0, 2007, 2008, 5, 339, 0, 0, 2008, 2009, 3, 258, 129, 0, 2009, 311, 1, 0, 0, 0, 2010, 2015, 3, 304, 152, 0, 2011, 2012, 5, 373, 0, 0, 2012, 2014, 3, 304, 152, 0, 2013, 2011, 1, 0, 0, 0, 2014, 2017, 1, 0, 0, 0, 2015, 2016, 1, 0, 0, 0, 2015, 2013, 1, 0, 0, 0, 2016, 313, 1, 0, 0, 0, 2017, 2015, 1, 0, 0, 0, 2018, 2019, 5, 361, 0, 0, 2019, 2020, 3, 320, 160, 0, 2020, 315, 1, 0, 0, 0, 2021, 2022, 5, 58, 0, 0, 2022, 2023, 5, 294, 0, 0, 2023, 2024, 5, 241, 0, 0, 2024, 317, 1, 0, 0, 0, 2025, 2026, 5, 58, 0, 0, 2026, 2027, 5, 241, 0, 0, 2027, 319, 1, 0, 0, 0, 2028, 2029, 5, 376, 0, 0, 2029, 2034, 3, 322, 161, 0, 2030, 2031, 5, 380, 0, 0, 2031, 2033, 3, 322, 161, 0, 2032, 2030, 1, 0, 0, 0, 2033, 2036, 1, 0, 0, 0, 2034, 2032, 1, 0, 0, 0, 2034, 2035, 1, 0, 0, 0, 2035, 2037, 1, 0, 0, 0, 2036, 2034, 1, 0, 0, 0, 2037, 2038, 5, 377, 0, 0, 2038, 321, 1, 0, 0, 0, 2039, 2044, 3, 324, 162, 0, 2040, 2042, 5, 365, 0, 0, 2041, 2040, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2043, 1, 0, 0, 0, 2043, 2045, 3, 326, 163, 0, 2044, 2041, 1, 0, 0, 0, 2044, 2045, 1, 0, 0, 0, 2045, 323, 1, 0, 0, 0, 2046, 2050, 3, 304, 152, 0, 2047, 2050, 3, 272, 136, 0, 2048, 2050, 5, 397, 0, 0, 2049, 2046, 1, 0, 0, 0, 2049, 2047, 1, 0, 0, 0, 2049, 2048, 1, 0, 0, 0, 2050, 325, 1, 0, 0, 0, 2051, 2056, 5, 398, 0, 0, 2052, 2056, 5, 399, 0, 0, 2053, 2056, 3, 344, 172, 0, 2054, 2056, 5, 397, 0, 0, 2055, 2051, 1, 0, 0, 0, 2055, 2052, 1, 0, 0, 0, 2055, 2053, 1, 0, 0, 0, 2055, 2054, 1, 0, 0, 0, 2056, 327, 1, 0, 0, 0, 2057, 2064, 5, 179, 0, 0, 2058, 2059, 5, 371, 0, 0, 2059, 2064, 5, 371, 0, 0, 2060, 2064, 5, 301, 0, 0, 2061, 2062, 5, 370, 0, 0, 2062, 2064, 5, 370, 0, 0, 2063, 2057, 1, 0, 0, 0, 2063, 2058, 1, 0, 0, 0, 2063, 2060, 1, 0, 0, 0, 2063, 2061, 1, 0, 0, 0, 2064, 329, 1, 0, 0, 0, 2065, 2080, 5, 365, 0, 0, 2066, 2080, 5, 366, 0, 0, 2067, 2080, 5, 367, 0, 0, 2068, 2069, 5, 367, 0, 0, 2069, 2080, 5, 365, 0, 0, 2070, 2071, 5, 366, 0, 0, 2071, 2080, 5, 365, 0, 0, 2072, 2073, 5, 367, 0, 0, 2073, 2080, 5, 366, 0, 0, 2074, 2075, 5, 368, 0, 0, 2075, 2080, 5, 365, 0, 0, 2076, 2077, 5, 367, 0, 0, 2077, 2078, 5, 365, 0, 0, 2078, 2080, 5, 366, 0, 0, 2079, 2065, 1, 0, 0, 0, 2079, 2066, 1, 0, 0, 0, 2079, 2067, 1, 0, 0, 0, 2079, 2068, 1, 0, 0, 0, 2079, 2070, 1, 0, 0, 0, 2079, 2072, 1, 0, 0, 0, 2079, 2074, 1, 0, 0, 0, 2079, 2076, 1, 0, 0, 0, 2080, 331, 1, 0, 0, 0, 2081, 2082, 5, 367, 0, 0, 2082, 2089, 5, 367, 0, 0, 2083, 2084, 5, 366, 0, 0, 2084, 2089, 5, 366, 0, 0, 2085, 2089, 5, 371, 0, 0, 2086, 2089, 5, 372, 0, 0, 2087, 2089, 5, 370, 0, 0, 2088, 2081, 1, 0, 0, 0, 2088, 2083, 1, 0, 0, 0, 2088, 2085, 1, 0, 0, 0, 2088, 2086, 1, 0, 0, 0, 2088, 2087, 1, 0, 0, 0, 2089, 333, 1, 0, 0, 0, 2090, 2091, 7, 36, 0, 0, 2091, 335, 1, 0, 0, 0, 2092, 2093, 7, 37, 0, 0, 2093, 337, 1, 0, 0, 0, 2094, 2107, 3, 340, 170, 0, 2095, 2107, 3, 342, 171, 0, 2096, 2107, 3, 278, 139, 0, 2097, 2098, 5, 389, 0, 0, 2098, 2107, 3, 342, 171, 0, 2099, 2107, 3, 344, 172, 0, 2100, 2107, 5, 399, 0, 0, 2101, 2107, 5, 400, 0, 0, 2102, 2104, 5, 294, 0, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2105, 1, 0, 0, 0, 2105, 2107, 5, 295, 0, 0, 2106, 2094, 1, 0, 0, 0, 2106, 2095, 1, 0, 0, 0, 2106, 2096, 1, 0, 0, 0, 2106, 2097, 1, 0, 0, 0, 2106, 2099, 1, 0, 0, 0, 2106, 2100, 1, 0, 0, 0, 2106, 2101, 1, 0, 0, 0, 2106, 2103, 1, 0, 0, 0, 2107, 339, 1, 0, 0, 0, 2108, 2109, 5, 397, 0, 0, 2109, 341, 1, 0, 0, 0, 2110, 2111, 5, 398, 0, 0, 2111, 343, 1, 0, 0, 0, 2112, 2113, 7, 29, 0, 0, 2113, 345, 1, 0, 0, 0, 2114, 2115, 7, 38, 0, 0, 2115, 347, 1, 0, 0, 0, 2116, 2117, 7, 39, 0, 0, 2117, 349, 1, 0, 0, 0, 2118, 2119, 7, 40, 0, 0, 2119, 351, 1, 0, 0, 0, 244, 360, 363, 365, 380, 398, 402, 411, 416, 423, 430, 434, 443, 455, 458, 465, 473, 478, 481, 488, 496, 500, 512, 520, 524, 545, 549, 553, 557, 566, 571, 575, 579, 583, 586, 590, 595, 601, 606, 611, 614, 618, 626, 634, 638, 642, 646, 650, 654, 658, 662, 666, 668, 678, 686, 710, 717, 732, 735, 743, 755, 779, 792, 797, 801, 809, 813, 821, 831, 835, 841, 845, 849, 852, 861, 865, 872, 875, 885, 893, 901, 905, 920, 939, 950, 954, 961, 966, 972, 976, 983, 987, 991, 995, 1003, 1007, 1012, 1017, 1023, 1026, 1030, 1041, 1050, 1063, 1078, 1081, 1085, 1088, 1090, 1095, 1099, 1102, 1106, 1115, 1124, 1134, 1139, 1151, 1154, 1157, 1160, 1166, 1170, 1178, 1181, 1186, 1189, 1191, 1205, 1216, 1221, 1229, 1232, 1235, 1240, 1242, 1244, 1249, 1252, 1256, 1259, 1262, 1274, 1281, 1292, 1321, 1343, 1361, 1366, 1378, 1391, 1403, 1415, 1420, 1447, 1455, 1459, 1462, 1465, 1472, 1475, 1478, 1481, 1484, 1487, 1492, 1495, 1504, 1509, 1513, 1518, 1527, 1546, 1554, 1562, 1566, 1570, 1580, 1606, 1614, 1626, 1648, 1650, 1658, 1660, 1664, 1672, 1681, 1687, 1700, 1705, 1717, 1722, 1725, 1731, 1736, 1741, 1746, 1749, 1761, 1766, 1769, 1773, 1779, 1800, 1802, 1810, 1814, 1823, 1827, 1843, 1852, 1876, 1883, 1886, 1896, 1905, 1911, 1919, 1924, 1928, 1935, 1940, 1948, 1952, 1956, 1959, 1963, 1966, 1970, 1979, 1982, 1993, 1999, 2015, 2034, 2041, 2044, 2049, 2055, 2063, 2079, 2088, 2103, 2106] \ No newline at end of file diff --git a/src/lib/flinksql/FlinkSqlParser.tokens b/src/lib/flinksql/FlinkSqlParser.tokens index 62cec6d..3b1fd9d 100644 --- a/src/lib/flinksql/FlinkSqlParser.tokens +++ b/src/lib/flinksql/FlinkSqlParser.tokens @@ -1,688 +1,795 @@ SPACE=1 COMMENT_INPUT=2 LINE_COMMENT=3 -SELECT=4 -FROM=5 -ADD=6 -AS=7 -ALL=8 -ANY=9 -DISTINCT=10 -WHERE=11 -GROUP=12 -BY=13 -GROUPING=14 -SETS=15 -CUBE=16 -ROLLUP=17 -ORDER=18 -HAVING=19 -LIMIT=20 -AT=21 -OR=22 -AND=23 -IN=24 -NOT=25 -NO=26 -EXISTS=27 -BETWEEN=28 -LIKE=29 -RLIKE=30 -IS=31 -TRUE=32 -FALSE=33 -NULLS=34 -ASC=35 -DESC=36 -FOR=37 -INTERVAL=38 -CASE=39 -WHEN=40 -THEN=41 -ELSE=42 -BEGIN=43 -END=44 -JOIN=45 -CROSS=46 -OUTER=47 -INNER=48 -LEFT=49 -SEMI=50 -RIGHT=51 -FULL=52 -USER=53 -NATURAL=54 -ON=55 -PIVOT=56 -LATERAL=57 -WINDOW=58 -OVER=59 -PARTITION=60 -RANGE=61 -ROWS=62 -UNBOUNDED=63 -PRECEDING=64 -FOLLOWING=65 -CURRENT=66 -FIRST=67 -AFTER=68 -LAST=69 -WITH=70 -WITHOUT=71 -VALUES=72 -CREATE=73 -TABLE=74 -DIRECTORY=75 -VIEW=76 -REPLACE=77 -EXECUTE=78 -STATEMENT=79 -INSERT=80 -DELETE=81 -REMOVE=82 -INTO=83 -DESCRIBE=84 -EXPLAIN=85 -PLAN=86 -CHANGELOG_MODE=87 -JSON_EXECUTION_PLAN=88 -ESTIMATED_COST=89 -FORMAT=90 -LOGICAL=91 -CODEGEN=92 -COST=93 -CAST=94 -SHOW=95 -TABLES=96 -COLUMNS=97 -COLUMN=98 -USE=99 -MODULE=100 -MODULES=101 -PARTITIONS=102 -FUNCTIONS=103 -DROP=104 -UNION=105 -EXCEPT=106 -SETMINUS=107 -INTERSECT=108 -TO=109 -TABLESAMPLE=110 -STRATIFY=111 -ALTER=112 -RENAME=113 -STRUCT=114 -COMMENT=115 -SET=116 -RESET=117 -DATA=118 -START=119 -TRANSACTION=120 -COMMIT=121 -ROLLBACK=122 -MACRO=123 -IGNORE=124 -BOTH=125 -LEADING=126 -TRAILING=127 -IF=128 -POSITION=129 -EXTRACT=130 -MINUS=131 -DIV=132 -PERCENTLIT=133 -BUCKET=134 -OUT=135 -OF=136 -SORT=137 -CLUSTER=138 -DISTRIBUTE=139 -OVERWRITE=140 -TRANSFORM=141 -REDUCE=142 -USING=143 -SERDE=144 -SERDEPROPERTIES=145 -RECORDREADER=146 -RECORDWRITER=147 -DELIMITED=148 -FIELDS=149 -TERMINATED=150 -COLLECTION=151 -ITEMS=152 -KEYS=153 -ESCAPED=154 -LINES=155 -SEPARATED=156 -FUNCTION=157 -EXTENDED=158 -REFRESH=159 -CLEAR=160 -CACHE=161 -UNCACHE=162 -LAZY=163 -FORMATTED=164 -GLOBAL=165 -TEMPORARY=166 -OPTIONS=167 -UNSET=168 -TBLPROPERTIES=169 -DBPROPERTIES=170 -BUCKETS=171 -SKEWED=172 -STORED=173 -DIRECTORIES=174 -LOCATION=175 -EXCHANGE=176 -ARCHIVE=177 -UNARCHIVE=178 -FILEFORMAT=179 -TOUCH=180 -COMPACT=181 -CONCATENATE=182 -CHANGE=183 -CASCADE=184 -CONSTRAINT=185 -RESTRICT=186 -CLUSTERED=187 -SORTED=188 -PURGE=189 -INPUTFORMAT=190 -OUTPUTFORMAT=191 -DATABASE=192 -DATABASES=193 -DFS=194 -TRUNCATE=195 -ANALYZE=196 -COMPUTE=197 -LIST=198 -STATISTICS=199 -PARTITIONED=200 -EXTERNAL=201 -DEFINED=202 -REVOKE=203 -GRANT=204 -LOCK=205 -UNLOCK=206 -MSCK=207 -REPAIR=208 -RECOVER=209 -EXPORT=210 -IMPORT=211 -LOAD=212 -UNLOAD=213 -ROLE=214 -ROLES=215 -COMPACTIONS=216 -PRINCIPALS=217 -TRANSACTIONS=218 -INDEX=219 -INDEXES=220 -LOCKS=221 -OPTION=222 -ANTI=223 -LOCAL=224 -INPATH=225 -WATERMARK=226 -UNNEST=227 -MATCH=228 -NEXT=229 -WITHIN=230 -WS=231 -SYSTEM=232 -INCLUDING=233 -EXCLUDING=234 -OVERWRITING=235 -CONSTRAINTS=236 -GENERATED=237 -WATERMARKS=238 -CATALOG=239 -LANGUAGE=240 -JAVA=241 -SCALA=242 -PYTHON=243 -JAR=244 -FILE=245 -PYTHON_FILES=246 -PYTHON_REQUIREMENTS=247 -PYTHON_DEPENDENCIES=248 -PYTHON_JAR=249 -PYTHON_ARCHIVES=250 -PYTHON_PARAMETER=251 -ENGINE=252 -CATALOGS=253 -VIEWS=254 -JARS=255 -PRIMARY=256 -UNIQUE=257 -KEY=258 -PERIOD=259 -SYSTEM_TIME=260 -ENFORCED=261 -METADATA=262 -VIRTUAL=263 -ZONE=264 -TUMBLE=265 -HOP=266 -CUMULATE=267 -DESCRIPTOR=268 -TIMECOL=269 -SIZE=270 -OFFSET=271 -STEP=272 -SLIDE=273 -SESSION=274 -MATCH_RECOGNIZE=275 -MEASURES=276 -PATTERN=277 -ONE=278 -PER=279 -KW_SKIP=280 -PAST=281 -DEFINE=282 -STRING=283 -ARRAY=284 -MAP=285 -CHAR=286 -VARCHAR=287 -BINARY=288 -VARBINARY=289 -BYTES=290 -DECIMAL=291 -DEC=292 -NUMERIC=293 -TINYINT=294 -SMALLINT=295 -INT=296 -INTEGER=297 -BIGINT=298 -FLOAT=299 -DOUBLE=300 -DATE=301 -TIME=302 -TIMESTAMP=303 -TIMESTAMP_LTZ=304 -MULTISET=305 -BOOLEAN=306 -RAW=307 -ROW=308 -NULL=309 -DATETIME=310 -EQUAL_SYMBOL=311 -GREATER_SYMBOL=312 -LESS_SYMBOL=313 -EXCLAMATION_SYMBOL=314 -BIT_NOT_OP=315 -BIT_OR_OP=316 -BIT_AND_OP=317 -BIT_XOR_OP=318 -DOT=319 -LS_BRACKET=320 -RS_BRACKET=321 -LR_BRACKET=322 -RR_BRACKET=323 -LB_BRACKET=324 -RB_BRACKET=325 -COMMA=326 -SEMICOLON=327 -AT_SIGN=328 -SINGLE_QUOTE_SYMB=329 -DOUBLE_QUOTE_SYMB=330 -REVERSE_QUOTE_SYMB=331 -COLON_SYMB=332 -ASTERISK_SIGN=333 -UNDERLINE_SIGN=334 -HYPNEN_SIGN=335 -ADD_SIGN=336 -PENCENT_SIGN=337 -DOUBLE_VERTICAL_SIGN=338 -DOUBLE_HYPNEN_SIGN=339 -SLASH_SIGN=340 -QUESTION_MARK_SIGN=341 -DOT_ID=342 -STRING_LITERAL=343 -DIG_LITERAL=344 -REAL_LITERAL=345 -BIT_STRING=346 -ID_LITERAL=347 -FILE_PATH=348 -DOUBLE_ARROW=349 -'SELECT'=4 -'FROM'=5 -'ADD'=6 -'AS'=7 -'ALL'=8 -'ANY'=9 -'DISTINCT'=10 -'WHERE'=11 -'GROUP'=12 -'BY'=13 -'GROUPING'=14 -'SETS'=15 -'CUBE'=16 -'ROLLUP'=17 -'ORDER'=18 -'HAVING'=19 -'LIMIT'=20 -'AT'=21 -'OR'=22 -'AND'=23 -'IN'=24 -'NOT'=25 -'NO'=26 -'EXISTS'=27 -'BETWEEN'=28 -'LIKE'=29 -'RLIKE'=30 -'IS'=31 -'TRUE'=32 -'FALSE'=33 -'NULLS'=34 -'ASC'=35 -'DESC'=36 -'FOR'=37 -'INTERVAL'=38 -'CASE'=39 -'WHEN'=40 -'THEN'=41 -'ELSE'=42 -'BEGIN'=43 -'END'=44 -'JOIN'=45 -'CROSS'=46 -'OUTER'=47 -'INNER'=48 -'LEFT'=49 -'SEMI'=50 -'RIGHT'=51 -'FULL'=52 -'USER'=53 -'NATURAL'=54 -'ON'=55 -'PIVOT'=56 -'LATERAL'=57 -'WINDOW'=58 -'OVER'=59 -'PARTITION'=60 -'RANGE'=61 -'ROWS'=62 -'UNBOUNDED'=63 -'PRECEDING'=64 -'FOLLOWING'=65 -'CURRENT'=66 -'FIRST'=67 -'AFTER'=68 -'LAST'=69 -'WITH'=70 -'WITHOUT'=71 -'VALUES'=72 -'CREATE'=73 -'TABLE'=74 -'DIRECTORY'=75 -'VIEW'=76 -'REPLACE'=77 -'EXECUTE'=78 -'STATEMENT'=79 -'INSERT'=80 -'DELETE'=81 -'REMOVE'=82 -'INTO'=83 -'DESCRIBE'=84 -'EXPLAIN'=85 -'PLAN'=86 -'CHANGELOG_MODE'=87 -'JSON_EXECUTION_PLAN'=88 -'ESTIMATED_COST'=89 -'FORMAT'=90 -'LOGICAL'=91 -'CODEGEN'=92 -'COST'=93 -'CAST'=94 -'SHOW'=95 -'TABLES'=96 -'COLUMNS'=97 -'COLUMN'=98 -'USE'=99 -'MODULE'=100 -'MODULES'=101 -'PARTITIONS'=102 -'FUNCTIONS'=103 -'DROP'=104 -'UNION'=105 -'EXCEPT'=106 -'SETMINUS'=107 -'INTERSECT'=108 -'TO'=109 -'TABLESAMPLE'=110 -'STRATIFY'=111 -'ALTER'=112 -'RENAME'=113 -'STRUCT'=114 -'COMMENT'=115 -'SET'=116 -'RESET'=117 -'DATA'=118 -'START'=119 -'TRANSACTION'=120 -'COMMIT'=121 -'ROLLBACK'=122 -'MACRO'=123 -'IGNORE'=124 -'BOTH'=125 -'LEADING'=126 -'TRAILING'=127 -'IF'=128 -'POSITION'=129 -'EXTRACT'=130 -'MINUS'=131 -'DIV'=132 -'PERCENTLIT'=133 -'BUCKET'=134 -'OUT'=135 -'OF'=136 -'SORT'=137 -'CLUSTER'=138 -'DISTRIBUTE'=139 -'OVERWRITE'=140 -'TRANSFORM'=141 -'REDUCE'=142 -'USING'=143 -'SERDE'=144 -'SERDEPROPERTIES'=145 -'RECORDREADER'=146 -'RECORDWRITER'=147 -'DELIMITED'=148 -'FIELDS'=149 -'TERMINATED'=150 -'COLLECTION'=151 -'ITEMS'=152 -'KEYS'=153 -'ESCAPED'=154 -'LINES'=155 -'SEPARATED'=156 -'FUNCTION'=157 -'EXTENDED'=158 -'REFRESH'=159 -'CLEAR'=160 -'CACHE'=161 -'UNCACHE'=162 -'LAZY'=163 -'FORMATTED'=164 -'GLOBAL'=165 -'TEMPORARY'=166 -'OPTIONS'=167 -'UNSET'=168 -'TBLPROPERTIES'=169 -'DBPROPERTIES'=170 -'BUCKETS'=171 -'SKEWED'=172 -'STORED'=173 -'DIRECTORIES'=174 -'LOCATION'=175 -'EXCHANGE'=176 -'ARCHIVE'=177 -'UNARCHIVE'=178 -'FILEFORMAT'=179 -'TOUCH'=180 -'COMPACT'=181 -'CONCATENATE'=182 -'CHANGE'=183 -'CASCADE'=184 -'CONSTRAINT'=185 -'RESTRICT'=186 -'CLUSTERED'=187 -'SORTED'=188 -'PURGE'=189 -'INPUTFORMAT'=190 -'OUTPUTFORMAT'=191 -'DATABASE'=192 -'DATABASES'=193 -'DFS'=194 -'TRUNCATE'=195 -'ANALYZE'=196 -'COMPUTE'=197 -'LIST'=198 -'STATISTICS'=199 -'PARTITIONED'=200 -'EXTERNAL'=201 -'DEFINED'=202 -'REVOKE'=203 -'GRANT'=204 -'LOCK'=205 -'UNLOCK'=206 -'MSCK'=207 -'REPAIR'=208 -'RECOVER'=209 -'EXPORT'=210 -'IMPORT'=211 -'LOAD'=212 -'UNLOAD'=213 -'ROLE'=214 -'ROLES'=215 -'COMPACTIONS'=216 -'PRINCIPALS'=217 -'TRANSACTIONS'=218 -'INDEX'=219 -'INDEXES'=220 -'LOCKS'=221 -'OPTION'=222 -'ANTI'=223 -'LOCAL'=224 -'INPATH'=225 -'WATERMARK'=226 -'UNNEST'=227 -'MATCH'=228 -'NEXT'=229 -'WITHIN'=230 -'WS'=231 -'SYSTEM'=232 -'INCLUDING'=233 -'EXCLUDING'=234 -'OVERWRITING'=235 -'CONSTRAINTS'=236 -'GENERATED'=237 -'WATERMARKS'=238 -'CATALOG'=239 -'LANGUAGE'=240 -'JAVA'=241 -'SCALA'=242 -'PYTHON'=243 -'JAR'=244 -'FILE'=245 -'PYTHON_FILES'=246 -'PYTHON_REQUIREMENTS'=247 -'PYTHON_DEPENDENCIES'=248 -'PYTHON_JAR'=249 -'PYTHON_ARCHIVES'=250 -'PYTHON_PARAMETER'=251 -'ENGINE'=252 -'CATALOGS'=253 -'VIEWS'=254 -'JARS'=255 -'PRIMARY'=256 -'UNIQUE'=257 -'KEY'=258 -'PERIOD'=259 -'SYSTEM_TIME'=260 -'ENFORCED'=261 -'METADATA'=262 -'VIRTUAL'=263 -'ZONE'=264 -'TUMBLE'=265 -'HOP'=266 -'CUMULATE'=267 -'DESCRIPTOR'=268 -'TIMECOL'=269 -'SIZE'=270 -'OFFSET'=271 -'STEP'=272 -'SLIDE'=273 -'SESSION'=274 -'MATCH_RECOGNIZE'=275 -'MEASURES'=276 -'PATTERN'=277 -'ONE'=278 -'PER'=279 -'SKIP'=280 -'PAST'=281 -'DEFINE'=282 -'STRING'=283 -'ARRAY'=284 -'MAP'=285 -'CHAR'=286 -'VARCHAR'=287 -'BINARY'=288 -'VARBINARY'=289 -'BYTES'=290 -'DECIMAL'=291 -'DEC'=292 -'NUMERIC'=293 -'TINYINT'=294 -'SMALLINT'=295 -'INT'=296 -'INTEGER'=297 -'BIGINT'=298 -'FLOAT'=299 -'DOUBLE'=300 -'DATE'=301 -'TIME'=302 -'TIMESTAMP'=303 -'TIMESTAMP_LTZ'=304 -'MULTISET'=305 -'BOOLEAN'=306 -'RAW'=307 -'ROW'=308 -'NULL'=309 -'DATETIME'=310 -'='=311 -'>'=312 -'<'=313 -'!'=314 -'~'=315 -'|'=316 -'&'=317 -'^'=318 -'.'=319 -'['=320 -']'=321 -'('=322 -')'=323 -'{'=324 -'}'=325 -','=326 -';'=327 -'@'=328 -'\''=329 -'"'=330 -'`'=331 -':'=332 -'*'=333 -'_'=334 -'-'=335 -'+'=336 -'%'=337 -'||'=338 -'--'=339 -'/'=340 -'?'=341 -'=>'=349 +KW_ADD=4 +KW_ADMIN=5 +KW_AFTER=6 +KW_ANALYZE=7 +KW_ASC=8 +KW_BEFORE=9 +KW_BYTES=10 +KW_CASCADE=11 +KW_CATALOG=12 +KW_CATALOGS=13 +KW_CENTURY=14 +KW_CHAIN=15 +KW_CHANGELOG_MODE=16 +KW_CHARACTERS=17 +KW_COMMENT=18 +KW_COMPACT=19 +KW_COLUMNS=20 +KW_CONSTRAINTS=21 +KW_CONSTRUCTOR=22 +KW_CUMULATE=23 +KW_DATA=24 +KW_DATABASE=25 +KW_DATABASES=26 +KW_DAYS=27 +KW_DECADE=28 +KW_DEFINED=29 +KW_DESC=30 +KW_DESCRIPTOR=31 +KW_DIV=32 +KW_ENCODING=33 +KW_ENFORCED=34 +KW_ENGINE=35 +KW_ERROR=36 +KW_ESTIMATED_COST=37 +KW_EXCEPTION=38 +KW_EXCLUDE=39 +KW_EXCLUDING=40 +KW_EXTENDED=41 +KW_FILE=42 +KW_FINAL=43 +KW_FIRST=44 +KW_FOLLOWING=45 +KW_FORMAT=46 +KW_FORTRAN=47 +KW_FOUND=48 +KW_FRAC_SECOND=49 +KW_FUNCTIONS=50 +KW_GENERAL=51 +KW_GENERATED=52 +KW_GO=53 +KW_GOTO=54 +KW_GRANTED=55 +KW_HOP=56 +KW_HOURS=57 +KW_IF=58 +KW_IGNORE=59 +KW_INCREMENT=60 +KW_INPUT=61 +KW_INVOKER=62 +KW_JAR=63 +KW_JARS=64 +KW_JAVA=65 +KW_JSON=66 +KW_JSON_EXECUTION_PLAN=67 +KW_KEY=68 +KW_KEY_MEMBER=69 +KW_KEY_TYPE=70 +KW_LABEL=71 +KW_LAST=72 +KW_LENGTH=73 +KW_LEVEL=74 +KW_LOAD=75 +KW_MAP=76 +KW_MICROSECOND=77 +KW_MILLENNIUM=78 +KW_MILLISECOND=79 +KW_MINUTES=80 +KW_MINVALUE=81 +KW_MODIFY=82 +KW_MODULES=83 +KW_MONTHS=84 +KW_NANOSECOND=85 +KW_NULLS=86 +KW_NUMBER=87 +KW_OPTION=88 +KW_OPTIONS=89 +KW_ORDERING=90 +KW_OUTPUT=91 +KW_OVERWRITE=92 +KW_OVERWRITING=93 +KW_PARTITIONED=94 +KW_PARTITIONS=95 +KW_PASSING=96 +KW_PAST=97 +KW_PATH=98 +KW_PLACING=99 +KW_PLAN=100 +KW_PRECEDING=101 +KW_PRESERVE=102 +KW_PRIOR=103 +KW_PRIVILEGES=104 +KW_PUBLIC=105 +KW_PYTHON=106 +KW_PYTHON_FILES=107 +KW_PYTHON_REQUIREMENTS=108 +KW_PYTHON_DEPENDENCIES=109 +KW_PYTHON_JAR=110 +KW_PYTHON_ARCHIVES=111 +KW_PYTHON_PARAMETER=112 +KW_QUARTER=113 +KW_RAW=114 +KW_READ=115 +KW_RELATIVE=116 +KW_REMOVE=117 +KW_RENAME=118 +KW_REPLACE=119 +KW_RESPECT=120 +KW_RESTART=121 +KW_RESTRICT=122 +KW_ROLE=123 +KW_ROW_COUNT=124 +KW_SCALA=125 +KW_SCALAR=126 +KW_SCALE=127 +KW_SCHEMA=128 +KW_SECONDS=129 +KW_SECTION=130 +KW_SECURITY=131 +KW_SELF=132 +KW_SERVER=133 +KW_SERVER_NAME=134 +KW_SESSION=135 +KW_SETS=136 +KW_SIMPLE=137 +KW_SIZE=138 +KW_SLIDE=139 +KW_SOURCE=140 +KW_SPACE=141 +KW_STATE=142 +KW_STATEMENT=143 +KW_STEP=144 +KW_STRING=145 +KW_STRUCTURE=146 +KW_STYLE=147 +KW_TABLES=148 +KW_TEMPORARY=149 +KW_TIMECOL=150 +KW_TIMESTAMP_LTZ=151 +KW_TIMESTAMPADD=152 +KW_TIMESTAMPDIFF=153 +KW_TRANSFORM=154 +KW_TUMBLE=155 +KW_TYPE=156 +KW_UNDER=157 +KW_UNLOAD=158 +KW_USAGE=159 +KW_USE=160 +KW_UTF16=161 +KW_UTF32=162 +KW_UTF8=163 +KW_VERSION=164 +KW_VIEW=165 +KW_VIEWS=166 +KW_VIRTUAL=167 +KW_WATERMARK=168 +KW_WATERMARKS=169 +KW_WEEK=170 +KW_WORK=171 +KW_WRAPPER=172 +KW_YEARS=173 +KW_ZONE=174 +KW_ABS=175 +KW_ALL=176 +ALLOW=177 +KW_ALTER=178 +KW_AND=179 +KW_ANY=180 +KW_ARE=181 +KW_ARRAY=182 +KW_AS=183 +KW_AT=184 +KW_AVG=185 +KW_BEGIN=186 +KW_BETWEEN=187 +KW_BIGINT=188 +KW_BINARY=189 +KW_BIT=190 +KW_BLOB=191 +KW_BOOLEAN=192 +KW_BOTH=193 +KW_BY=194 +KW_CALL=195 +KW_CALLED=196 +KW_CASCADED=197 +KW_CASE=198 +KW_CAST=199 +KW_CEIL=200 +KW_CHAR=201 +KW_CHARACTER=202 +KW_CHECK=203 +KW_CLOB=204 +KW_CLOSE=205 +KW_COALESCE=206 +KW_COLLATE=207 +KW_COLLECT=208 +KW_COLUMN=209 +KW_COMMIT=210 +KW_CONNECT=211 +KW_CONSTRAINT=212 +KW_CONTAINS=213 +KW_CONVERT=214 +KW_COUNT=215 +KW_CREATE=216 +KW_CROSS=217 +KW_CUBE=218 +KW_CURRENT=219 +KW_CURSOR=220 +KW_CYCLE=221 +KW_DATE=222 +KW_DATETIME=223 +KW_DAY=224 +KW_DEC=225 +KW_DECIMAL=226 +KW_DECLARE=227 +KW_DEFAULT=228 +KW_DEFINE=229 +KW_DELETE=230 +KW_DESCRIBE=231 +KW_DISTINCT=232 +KW_DOUBLE=233 +KW_DROP=234 +KW_EACH=235 +KW_ELSE=236 +KW_END=237 +KW_EQUALS=238 +KW_EXCEPT=239 +KW_EXECUTE=240 +KW_EXISTS=241 +KW_EXPLAIN=242 +KW_EXTERNAL=243 +KW_EXTRACT=244 +KW_FALSE=245 +KW_FLOAT=246 +KW_FOR=247 +KW_FROM=248 +KW_FULL=249 +KW_FUNCTION=250 +KW_GLOBAL=251 +KW_GRANT=252 +KW_GROUP=253 +KW_GROUPING=254 +KW_GROUPS=255 +KW_HAVING=256 +KW_HOUR=257 +KW_IMPORT=258 +KW_IN=259 +KW_INCLUDING=260 +KW_INNER=261 +KW_INOUT=262 +KW_INSERT=263 +KW_INT=264 +KW_INTEGER=265 +KW_INTERSECT=266 +KW_INTERVAL=267 +KW_INTO=268 +KW_IS=269 +KW_JOIN=270 +KW_LAG=271 +KW_LANGUAGE=272 +KW_LATERAL=273 +KW_LEADING=274 +KW_LEFT=275 +KW_LIKE=276 +KW_LIMIT=277 +KW_LOCAL=278 +KW_MATCH=279 +KW_MATCH_RECOGNIZE=280 +KW_MEASURES=281 +KW_MERGE=282 +KW_METADATA=283 +KW_MINUS=284 +KW_MINUTE=285 +KW_MODIFIES=286 +KW_MODULE=287 +KW_MONTH=288 +KW_MULTISET=289 +KW_NATURAL=290 +KW_NEXT=291 +KW_NO=292 +KW_NONE=293 +KW_NOT=294 +KW_NULL=295 +KW_NUMERIC=296 +KW_OF=297 +KW_OFFSET=298 +KW_ON=299 +KW_ONE=300 +KW_OR=301 +KW_ORDER=302 +KW_OUT=303 +KW_OUTER=304 +KW_OVER=305 +KW_OVERLAY=306 +KW_PARTITION=307 +KW_PATTERN=308 +KW_PER=309 +KW_PERCENT=310 +KW_PERIOD=311 +KW_POSITION=312 +KW_PRIMARY=313 +KW_RANGE=314 +KW_RANK=315 +KW_RESET=316 +KW_REVOKE=317 +KW_RIGHT=318 +KW_RLIKE=319 +KW_ROLLBACK=320 +KW_ROLLUP=321 +KW_ROW=322 +KW_ROWS=323 +KW_SECOND=324 +KW_SELECT=325 +KW_SET=326 +KW_SHOW=327 +KW_SKIP=328 +KW_SMALLINT=329 +KW_START=330 +KW_STATIC=331 +KW_SUBSTRING=332 +KW_SUM=333 +KW_SYSTEM=334 +KW_SYSTEM_TIME=335 +KW_SYSTEM_USER=336 +KW_TABLE=337 +KW_TABLESAMPLE=338 +KW_THEN=339 +KW_TIME=340 +KW_TIMESTAMP=341 +KW_TINYINT=342 +KW_TO=343 +KW_TRUE=344 +KW_TRUNCATE=345 +KW_UNION=346 +KW_UNIQUE=347 +KW_UNKNOWN=348 +KW_UNNEST=349 +KW_UPPER=350 +KW_UPSERT=351 +KW_USER=352 +KW_USING=353 +KW_VALUE=354 +KW_VALUES=355 +KW_VARBINARY=356 +KW_VARCHAR=357 +KW_WHEN=358 +KW_WHERE=359 +KW_WINDOW=360 +KW_WITH=361 +KW_WITHIN=362 +KW_WITHOUT=363 +KW_YEAR=364 +EQUAL_SYMBOL=365 +GREATER_SYMBOL=366 +LESS_SYMBOL=367 +EXCLAMATION_SYMBOL=368 +BIT_NOT_OP=369 +BIT_OR_OP=370 +BIT_AND_OP=371 +BIT_XOR_OP=372 +DOT=373 +LS_BRACKET=374 +RS_BRACKET=375 +LR_BRACKET=376 +RR_BRACKET=377 +LB_BRACKET=378 +RB_BRACKET=379 +COMMA=380 +SEMICOLON=381 +AT_SIGN=382 +SINGLE_QUOTE_SYMB=383 +DOUBLE_QUOTE_SYMB=384 +REVERSE_QUOTE_SYMB=385 +COLON_SYMB=386 +ASTERISK_SIGN=387 +UNDERLINE_SIGN=388 +HYPNEN_SIGN=389 +ADD_SIGN=390 +PENCENT_SIGN=391 +DOUBLE_VERTICAL_SIGN=392 +DOUBLE_HYPNEN_SIGN=393 +SLASH_SIGN=394 +QUESTION_MARK_SIGN=395 +DOUBLE_RIGHT_ARROW=396 +STRING_LITERAL=397 +DIG_LITERAL=398 +REAL_LITERAL=399 +BIT_STRING=400 +ID_LITERAL=401 +FILE_PATH=402 +'ADD'=4 +'ADMIN'=5 +'AFTER'=6 +'ANALYZE'=7 +'ASC'=8 +'BEFORE'=9 +'BYTES'=10 +'CASCADE'=11 +'CATALOG'=12 +'CATALOGS'=13 +'CENTURY'=14 +'CHAIN'=15 +'CHANGELOG_MODE'=16 +'CHARACTERS'=17 +'COMMENT'=18 +'COMPACT'=19 +'COLUMNS'=20 +'CONSTRAINTS'=21 +'CONSTRUCTOR'=22 +'CUMULATE'=23 +'DATA'=24 +'DATABASE'=25 +'DATABASES'=26 +'DAYS'=27 +'DECADE'=28 +'DEFINED'=29 +'DESC'=30 +'DESCRIPTOR'=31 +'DIV'=32 +'ENCODING'=33 +'ENFORCED'=34 +'ENGINE'=35 +'ERROR'=36 +'ESTIMATED_COST'=37 +'EXCEPTION'=38 +'EXCLUDE'=39 +'EXCLUDING'=40 +'EXTENDED'=41 +'FILE'=42 +'FINAL'=43 +'FIRST'=44 +'FOLLOWING'=45 +'FORMAT'=46 +'FORTRAN'=47 +'FOUND'=48 +'FRAC_SECOND'=49 +'FUNCTIONS'=50 +'GENERAL'=51 +'GENERATED'=52 +'GO'=53 +'GOTO'=54 +'GRANTED'=55 +'HOP'=56 +'HOURS'=57 +'IF'=58 +'IGNORE'=59 +'INCREMENT'=60 +'INPUT'=61 +'INVOKER'=62 +'JAR'=63 +'JARS'=64 +'JAVA'=65 +'JSON'=66 +'JSON_EXECUTION_PLAN'=67 +'KEY'=68 +'KEY_MEMBER'=69 +'KEY_TYPE'=70 +'LABEL'=71 +'LAST'=72 +'LENGTH'=73 +'LEVEL'=74 +'LOAD'=75 +'MAP'=76 +'MICROSECOND'=77 +'MILLENNIUM'=78 +'MILLISECOND'=79 +'MINUTES'=80 +'MINVALUE'=81 +'MODIFY'=82 +'MODULES'=83 +'MONTHS'=84 +'NANOSECOND'=85 +'NULLS'=86 +'NUMBER'=87 +'OPTION'=88 +'OPTIONS'=89 +'ORDERING'=90 +'OUTPUT'=91 +'OVERWRITE'=92 +'OVERWRITING'=93 +'PARTITIONED'=94 +'PARTITIONS'=95 +'PASSING'=96 +'PAST'=97 +'PATH'=98 +'PLACING'=99 +'PLAN'=100 +'PRECEDING'=101 +'PRESERVE'=102 +'PRIOR'=103 +'PRIVILEGES'=104 +'PUBLIC'=105 +'PYTHON'=106 +'PYTHON_FILES'=107 +'PYTHON_REQUIREMENTS'=108 +'PYTHON_DEPENDENCIES'=109 +'PYTHON_JAR'=110 +'PYTHON_ARCHIVES'=111 +'PYTHON_PARAMETER'=112 +'QUARTER'=113 +'RAW'=114 +'READ'=115 +'RELATIVE'=116 +'REMOVE'=117 +'RENAME'=118 +'REPLACE'=119 +'RESPECT'=120 +'RESTART'=121 +'RESTRICT'=122 +'ROLE'=123 +'ROW_COUNT'=124 +'SCALA'=125 +'SCALAR'=126 +'SCALE'=127 +'SCHEMA'=128 +'SECONDS'=129 +'SECTION'=130 +'SECURITY'=131 +'SELF'=132 +'SERVER'=133 +'SERVER_NAME'=134 +'SESSION'=135 +'SETS'=136 +'SIMPLE'=137 +'SIZE'=138 +'SLIDE'=139 +'SOURCE'=140 +'SPACE'=141 +'STATE'=142 +'STATEMENT'=143 +'STEP'=144 +'STRING'=145 +'STRUCTURE'=146 +'STYLE'=147 +'TABLES'=148 +'TEMPORARY'=149 +'TIMECOL'=150 +'TIMESTAMP_LTZ'=151 +'TIMESTAMPADD'=152 +'TIMESTAMPDIFF'=153 +'TRANSFORM'=154 +'TUMBLE'=155 +'TYPE'=156 +'UNDER'=157 +'UNLOAD'=158 +'USAGE'=159 +'USE'=160 +'UTF16'=161 +'UTF32'=162 +'UTF8'=163 +'VERSION'=164 +'VIEW'=165 +'VIEWS'=166 +'VIRTUAL'=167 +'WATERMARK'=168 +'WATERMARKS'=169 +'WEEK'=170 +'WORK'=171 +'WRAPPER'=172 +'YEARS'=173 +'ZONE'=174 +'ABS'=175 +'ALL'=176 +'ALLOW'=177 +'ALTER'=178 +'AND'=179 +'ANY'=180 +'ARE'=181 +'ARRAY'=182 +'AS'=183 +'AT'=184 +'AVG'=185 +'BEGIN'=186 +'BETWEEN'=187 +'BIGINT'=188 +'BINARY'=189 +'BIT'=190 +'BLOB'=191 +'BOOLEAN'=192 +'BOTH'=193 +'BY'=194 +'CALL'=195 +'CALLED'=196 +'CASCADED'=197 +'CASE'=198 +'CAST'=199 +'CEIL'=200 +'CHAR'=201 +'CHARACTER'=202 +'CHECK'=203 +'CLOB'=204 +'CLOSE'=205 +'COALESCE'=206 +'COLLATE'=207 +'COLLECT'=208 +'COLUMN'=209 +'COMMIT'=210 +'CONNECT'=211 +'CONSTRAINT'=212 +'CONTAINS'=213 +'CONVERT'=214 +'COUNT'=215 +'CREATE'=216 +'CROSS'=217 +'CUBE'=218 +'CURRENT'=219 +'CURSOR'=220 +'CYCLE'=221 +'DATE'=222 +'DATETIME'=223 +'DAY'=224 +'DEC'=225 +'DECIMAL'=226 +'DECLARE'=227 +'DEFAULT'=228 +'DEFINE'=229 +'DELETE'=230 +'DESCRIBE'=231 +'DISTINCT'=232 +'DOUBLE'=233 +'DROP'=234 +'EACH'=235 +'ELSE'=236 +'END'=237 +'EQUALS'=238 +'EXCEPT'=239 +'EXECUTE'=240 +'EXISTS'=241 +'EXPLAIN'=242 +'EXTERNAL'=243 +'EXTRACT'=244 +'FALSE'=245 +'FLOAT'=246 +'FOR'=247 +'FROM'=248 +'FULL'=249 +'FUNCTION'=250 +'GLOBAL'=251 +'GRANT'=252 +'GROUP'=253 +'GROUPING'=254 +'GROUPS'=255 +'HAVING'=256 +'HOUR'=257 +'IMPORT'=258 +'IN'=259 +'INCLUDING'=260 +'INNER'=261 +'INOUT'=262 +'INSERT'=263 +'INT'=264 +'INTEGER'=265 +'INTERSECT'=266 +'INTERVAL'=267 +'INTO'=268 +'IS'=269 +'JOIN'=270 +'LAG'=271 +'LANGUAGE'=272 +'LATERAL'=273 +'LEADING'=274 +'LEFT'=275 +'LIKE'=276 +'LIMIT'=277 +'LOCAL'=278 +'MATCH'=279 +'MATCH_RECOGNIZE'=280 +'MEASURES'=281 +'MERGE'=282 +'METADATA'=283 +'MINUS'=284 +'MINUTE'=285 +'MODIFIES'=286 +'MODULE'=287 +'MONTH'=288 +'MULTISET'=289 +'NATURAL'=290 +'NEXT'=291 +'NO'=292 +'NONE'=293 +'NOT'=294 +'NULL'=295 +'NUMERIC'=296 +'OF'=297 +'OFFSET'=298 +'ON'=299 +'ONE'=300 +'OR'=301 +'ORDER'=302 +'OUT'=303 +'OUTER'=304 +'OVER'=305 +'OVERLAY'=306 +'PARTITION'=307 +'PATTERN'=308 +'PER'=309 +'PERCENT'=310 +'PERIOD'=311 +'POSITION'=312 +'PRIMARY'=313 +'RANGE'=314 +'RANK'=315 +'RESET'=316 +'REVOKE'=317 +'RIGHT'=318 +'RLIKE'=319 +'ROLLBACK'=320 +'ROLLUP'=321 +'ROW'=322 +'ROWS'=323 +'SECOND'=324 +'SELECT'=325 +'SET'=326 +'SHOW'=327 +'SKIP'=328 +'SMALLINT'=329 +'START'=330 +'STATIC'=331 +'SUBSTRING'=332 +'SUM'=333 +'SYSTEM'=334 +'SYSTEM_TIME'=335 +'SYSTEM_USER'=336 +'TABLE'=337 +'TABLESAMPLE'=338 +'THEN'=339 +'TIME'=340 +'TIMESTAMP'=341 +'TINYINT'=342 +'TO'=343 +'TRUE'=344 +'TRUNCATE'=345 +'UNION'=346 +'UNIQUE'=347 +'UNKNOWN'=348 +'UNNEST'=349 +'UPPER'=350 +'UPSERT'=351 +'USER'=352 +'USING'=353 +'VALUE'=354 +'VALUES'=355 +'VARBINARY'=356 +'VARCHAR'=357 +'WHEN'=358 +'WHERE'=359 +'WINDOW'=360 +'WITH'=361 +'WITHIN'=362 +'WITHOUT'=363 +'YEAR'=364 +'='=365 +'>'=366 +'<'=367 +'!'=368 +'~'=369 +'|'=370 +'&'=371 +'^'=372 +'.'=373 +'['=374 +']'=375 +'('=376 +')'=377 +'{'=378 +'}'=379 +','=380 +';'=381 +'@'=382 +'\''=383 +'"'=384 +'`'=385 +':'=386 +'*'=387 +'_'=388 +'-'=389 +'+'=390 +'%'=391 +'||'=392 +'--'=393 +'/'=394 +'?'=395 +'=>'=396 diff --git a/src/lib/flinksql/FlinkSqlParser.ts b/src/lib/flinksql/FlinkSqlParser.ts index 177fe71..d8b8a0b 100644 --- a/src/lib/flinksql/FlinkSqlParser.ts +++ b/src/lib/flinksql/FlinkSqlParser.ts @@ -22,352 +22,405 @@ export default class FlinkSqlParser extends Parser { public static readonly SPACE = 1; public static readonly COMMENT_INPUT = 2; public static readonly LINE_COMMENT = 3; - public static readonly SELECT = 4; - public static readonly FROM = 5; - public static readonly ADD = 6; - public static readonly AS = 7; - public static readonly ALL = 8; - public static readonly ANY = 9; - public static readonly DISTINCT = 10; - public static readonly WHERE = 11; - public static readonly GROUP = 12; - public static readonly BY = 13; - public static readonly GROUPING = 14; - public static readonly SETS = 15; - public static readonly CUBE = 16; - public static readonly ROLLUP = 17; - public static readonly ORDER = 18; - public static readonly HAVING = 19; - public static readonly LIMIT = 20; - public static readonly AT = 21; - public static readonly OR = 22; - public static readonly AND = 23; - public static readonly IN = 24; - public static readonly NOT = 25; - public static readonly NO = 26; - public static readonly EXISTS = 27; - public static readonly BETWEEN = 28; - public static readonly LIKE = 29; - public static readonly RLIKE = 30; - public static readonly IS = 31; - public static readonly TRUE = 32; - public static readonly FALSE = 33; - public static readonly NULLS = 34; - public static readonly ASC = 35; - public static readonly DESC = 36; - public static readonly FOR = 37; - public static readonly INTERVAL = 38; - public static readonly CASE = 39; - public static readonly WHEN = 40; - public static readonly THEN = 41; - public static readonly ELSE = 42; - public static readonly BEGIN = 43; - public static readonly END = 44; - public static readonly JOIN = 45; - public static readonly CROSS = 46; - public static readonly OUTER = 47; - public static readonly INNER = 48; - public static readonly LEFT = 49; - public static readonly SEMI = 50; - public static readonly RIGHT = 51; - public static readonly FULL = 52; - public static readonly USER = 53; - public static readonly NATURAL = 54; - public static readonly ON = 55; - public static readonly PIVOT = 56; - public static readonly LATERAL = 57; - public static readonly WINDOW = 58; - public static readonly OVER = 59; - public static readonly PARTITION = 60; - public static readonly RANGE = 61; - public static readonly ROWS = 62; - public static readonly UNBOUNDED = 63; - public static readonly PRECEDING = 64; - public static readonly FOLLOWING = 65; - public static readonly CURRENT = 66; - public static readonly FIRST = 67; - public static readonly AFTER = 68; - public static readonly LAST = 69; - public static readonly WITH = 70; - public static readonly WITHOUT = 71; - public static readonly VALUES = 72; - public static readonly CREATE = 73; - public static readonly TABLE = 74; - public static readonly DIRECTORY = 75; - public static readonly VIEW = 76; - public static readonly REPLACE = 77; - public static readonly EXECUTE = 78; - public static readonly STATEMENT = 79; - public static readonly INSERT = 80; - public static readonly DELETE = 81; - public static readonly REMOVE = 82; - public static readonly INTO = 83; - public static readonly DESCRIBE = 84; - public static readonly EXPLAIN = 85; - public static readonly PLAN = 86; - public static readonly CHANGELOG_MODE = 87; - public static readonly JSON_EXECUTION_PLAN = 88; - public static readonly ESTIMATED_COST = 89; - public static readonly FORMAT = 90; - public static readonly LOGICAL = 91; - public static readonly CODEGEN = 92; - public static readonly COST = 93; - public static readonly CAST = 94; - public static readonly SHOW = 95; - public static readonly TABLES = 96; - public static readonly COLUMNS = 97; - public static readonly COLUMN = 98; - public static readonly USE = 99; - public static readonly MODULE = 100; - public static readonly MODULES = 101; - public static readonly PARTITIONS = 102; - public static readonly FUNCTIONS = 103; - public static readonly DROP = 104; - public static readonly UNION = 105; - public static readonly EXCEPT = 106; - public static readonly SETMINUS = 107; - public static readonly INTERSECT = 108; - public static readonly TO = 109; - public static readonly TABLESAMPLE = 110; - public static readonly STRATIFY = 111; - public static readonly ALTER = 112; - public static readonly RENAME = 113; - public static readonly STRUCT = 114; - public static readonly COMMENT = 115; - public static readonly SET = 116; - public static readonly RESET = 117; - public static readonly DATA = 118; - public static readonly START = 119; - public static readonly TRANSACTION = 120; - public static readonly COMMIT = 121; - public static readonly ROLLBACK = 122; - public static readonly MACRO = 123; - public static readonly IGNORE = 124; - public static readonly BOTH = 125; - public static readonly LEADING = 126; - public static readonly TRAILING = 127; - public static readonly IF = 128; - public static readonly POSITION = 129; - public static readonly EXTRACT = 130; - public static readonly MINUS = 131; - public static readonly DIV = 132; - public static readonly PERCENTLIT = 133; - public static readonly BUCKET = 134; - public static readonly OUT = 135; - public static readonly OF = 136; - public static readonly SORT = 137; - public static readonly CLUSTER = 138; - public static readonly DISTRIBUTE = 139; - public static readonly OVERWRITE = 140; - public static readonly TRANSFORM = 141; - public static readonly REDUCE = 142; - public static readonly USING = 143; - public static readonly SERDE = 144; - public static readonly SERDEPROPERTIES = 145; - public static readonly RECORDREADER = 146; - public static readonly RECORDWRITER = 147; - public static readonly DELIMITED = 148; - public static readonly FIELDS = 149; - public static readonly TERMINATED = 150; - public static readonly COLLECTION = 151; - public static readonly ITEMS = 152; - public static readonly KEYS = 153; - public static readonly ESCAPED = 154; - public static readonly LINES = 155; - public static readonly SEPARATED = 156; - public static readonly FUNCTION = 157; - public static readonly EXTENDED = 158; - public static readonly REFRESH = 159; - public static readonly CLEAR = 160; - public static readonly CACHE = 161; - public static readonly UNCACHE = 162; - public static readonly LAZY = 163; - public static readonly FORMATTED = 164; - public static readonly GLOBAL = 165; - public static readonly TEMPORARY = 166; - public static readonly OPTIONS = 167; - public static readonly UNSET = 168; - public static readonly TBLPROPERTIES = 169; - public static readonly DBPROPERTIES = 170; - public static readonly BUCKETS = 171; - public static readonly SKEWED = 172; - public static readonly STORED = 173; - public static readonly DIRECTORIES = 174; - public static readonly LOCATION = 175; - public static readonly EXCHANGE = 176; - public static readonly ARCHIVE = 177; - public static readonly UNARCHIVE = 178; - public static readonly FILEFORMAT = 179; - public static readonly TOUCH = 180; - public static readonly COMPACT = 181; - public static readonly CONCATENATE = 182; - public static readonly CHANGE = 183; - public static readonly CASCADE = 184; - public static readonly CONSTRAINT = 185; - public static readonly RESTRICT = 186; - public static readonly CLUSTERED = 187; - public static readonly SORTED = 188; - public static readonly PURGE = 189; - public static readonly INPUTFORMAT = 190; - public static readonly OUTPUTFORMAT = 191; - public static readonly DATABASE = 192; - public static readonly DATABASES = 193; - public static readonly DFS = 194; - public static readonly TRUNCATE = 195; - public static readonly ANALYZE = 196; - public static readonly COMPUTE = 197; - public static readonly LIST = 198; - public static readonly STATISTICS = 199; - public static readonly PARTITIONED = 200; - public static readonly EXTERNAL = 201; - public static readonly DEFINED = 202; - public static readonly REVOKE = 203; - public static readonly GRANT = 204; - public static readonly LOCK = 205; - public static readonly UNLOCK = 206; - public static readonly MSCK = 207; - public static readonly REPAIR = 208; - public static readonly RECOVER = 209; - public static readonly EXPORT = 210; - public static readonly IMPORT = 211; - public static readonly LOAD = 212; - public static readonly UNLOAD = 213; - public static readonly ROLE = 214; - public static readonly ROLES = 215; - public static readonly COMPACTIONS = 216; - public static readonly PRINCIPALS = 217; - public static readonly TRANSACTIONS = 218; - public static readonly INDEX = 219; - public static readonly INDEXES = 220; - public static readonly LOCKS = 221; - public static readonly OPTION = 222; - public static readonly ANTI = 223; - public static readonly LOCAL = 224; - public static readonly INPATH = 225; - public static readonly WATERMARK = 226; - public static readonly UNNEST = 227; - public static readonly MATCH = 228; - public static readonly NEXT = 229; - public static readonly WITHIN = 230; - public static readonly WS = 231; - public static readonly SYSTEM = 232; - public static readonly INCLUDING = 233; - public static readonly EXCLUDING = 234; - public static readonly OVERWRITING = 235; - public static readonly CONSTRAINTS = 236; - public static readonly GENERATED = 237; - public static readonly WATERMARKS = 238; - public static readonly CATALOG = 239; - public static readonly LANGUAGE = 240; - public static readonly JAVA = 241; - public static readonly SCALA = 242; - public static readonly PYTHON = 243; - public static readonly JAR = 244; - public static readonly FILE = 245; - public static readonly PYTHON_FILES = 246; - public static readonly PYTHON_REQUIREMENTS = 247; - public static readonly PYTHON_DEPENDENCIES = 248; - public static readonly PYTHON_JAR = 249; - public static readonly PYTHON_ARCHIVES = 250; - public static readonly PYTHON_PARAMETER = 251; - public static readonly ENGINE = 252; - public static readonly CATALOGS = 253; - public static readonly VIEWS = 254; - public static readonly JARS = 255; - public static readonly PRIMARY = 256; - public static readonly UNIQUE = 257; - public static readonly KEY = 258; - public static readonly PERIOD = 259; - public static readonly SYSTEM_TIME = 260; - public static readonly ENFORCED = 261; - public static readonly METADATA = 262; - public static readonly VIRTUAL = 263; - public static readonly ZONE = 264; - public static readonly TUMBLE = 265; - public static readonly HOP = 266; - public static readonly CUMULATE = 267; - public static readonly DESCRIPTOR = 268; - public static readonly TIMECOL = 269; - public static readonly SIZE = 270; - public static readonly OFFSET = 271; - public static readonly STEP = 272; - public static readonly SLIDE = 273; - public static readonly SESSION = 274; - public static readonly MATCH_RECOGNIZE = 275; - public static readonly MEASURES = 276; - public static readonly PATTERN = 277; - public static readonly ONE = 278; - public static readonly PER = 279; - public static readonly KW_SKIP = 280; - public static readonly PAST = 281; - public static readonly DEFINE = 282; - public static readonly STRING = 283; - public static readonly ARRAY = 284; - public static readonly MAP = 285; - public static readonly CHAR = 286; - public static readonly VARCHAR = 287; - public static readonly BINARY = 288; - public static readonly VARBINARY = 289; - public static readonly BYTES = 290; - public static readonly DECIMAL = 291; - public static readonly DEC = 292; - public static readonly NUMERIC = 293; - public static readonly TINYINT = 294; - public static readonly SMALLINT = 295; - public static readonly INT = 296; - public static readonly INTEGER = 297; - public static readonly BIGINT = 298; - public static readonly FLOAT = 299; - public static readonly DOUBLE = 300; - public static readonly DATE = 301; - public static readonly TIME = 302; - public static readonly TIMESTAMP = 303; - public static readonly TIMESTAMP_LTZ = 304; - public static readonly MULTISET = 305; - public static readonly BOOLEAN = 306; - public static readonly RAW = 307; - public static readonly ROW = 308; - public static readonly NULL = 309; - public static readonly DATETIME = 310; - public static readonly EQUAL_SYMBOL = 311; - public static readonly GREATER_SYMBOL = 312; - public static readonly LESS_SYMBOL = 313; - public static readonly EXCLAMATION_SYMBOL = 314; - public static readonly BIT_NOT_OP = 315; - public static readonly BIT_OR_OP = 316; - public static readonly BIT_AND_OP = 317; - public static readonly BIT_XOR_OP = 318; - public static readonly DOT = 319; - public static readonly LS_BRACKET = 320; - public static readonly RS_BRACKET = 321; - public static readonly LR_BRACKET = 322; - public static readonly RR_BRACKET = 323; - public static readonly LB_BRACKET = 324; - public static readonly RB_BRACKET = 325; - public static readonly COMMA = 326; - public static readonly SEMICOLON = 327; - public static readonly AT_SIGN = 328; - public static readonly SINGLE_QUOTE_SYMB = 329; - public static readonly DOUBLE_QUOTE_SYMB = 330; - public static readonly REVERSE_QUOTE_SYMB = 331; - public static readonly COLON_SYMB = 332; - public static readonly ASTERISK_SIGN = 333; - public static readonly UNDERLINE_SIGN = 334; - public static readonly HYPNEN_SIGN = 335; - public static readonly ADD_SIGN = 336; - public static readonly PENCENT_SIGN = 337; - public static readonly DOUBLE_VERTICAL_SIGN = 338; - public static readonly DOUBLE_HYPNEN_SIGN = 339; - public static readonly SLASH_SIGN = 340; - public static readonly QUESTION_MARK_SIGN = 341; - public static readonly DOT_ID = 342; - public static readonly STRING_LITERAL = 343; - public static readonly DIG_LITERAL = 344; - public static readonly REAL_LITERAL = 345; - public static readonly BIT_STRING = 346; - public static readonly ID_LITERAL = 347; - public static readonly FILE_PATH = 348; - public static readonly DOUBLE_ARROW = 349; + public static readonly KW_ADD = 4; + public static readonly KW_ADMIN = 5; + public static readonly KW_AFTER = 6; + public static readonly KW_ANALYZE = 7; + public static readonly KW_ASC = 8; + public static readonly KW_BEFORE = 9; + public static readonly KW_BYTES = 10; + public static readonly KW_CASCADE = 11; + public static readonly KW_CATALOG = 12; + public static readonly KW_CATALOGS = 13; + public static readonly KW_CENTURY = 14; + public static readonly KW_CHAIN = 15; + public static readonly KW_CHANGELOG_MODE = 16; + public static readonly KW_CHARACTERS = 17; + public static readonly KW_COMMENT = 18; + public static readonly KW_COMPACT = 19; + public static readonly KW_COLUMNS = 20; + public static readonly KW_CONSTRAINTS = 21; + public static readonly KW_CONSTRUCTOR = 22; + public static readonly KW_CUMULATE = 23; + public static readonly KW_DATA = 24; + public static readonly KW_DATABASE = 25; + public static readonly KW_DATABASES = 26; + public static readonly KW_DAYS = 27; + public static readonly KW_DECADE = 28; + public static readonly KW_DEFINED = 29; + public static readonly KW_DESC = 30; + public static readonly KW_DESCRIPTOR = 31; + public static readonly KW_DIV = 32; + public static readonly KW_ENCODING = 33; + public static readonly KW_ENFORCED = 34; + public static readonly KW_ENGINE = 35; + public static readonly KW_ERROR = 36; + public static readonly KW_ESTIMATED_COST = 37; + public static readonly KW_EXCEPTION = 38; + public static readonly KW_EXCLUDE = 39; + public static readonly KW_EXCLUDING = 40; + public static readonly KW_EXTENDED = 41; + public static readonly KW_FILE = 42; + public static readonly KW_FINAL = 43; + public static readonly KW_FIRST = 44; + public static readonly KW_FOLLOWING = 45; + public static readonly KW_FORMAT = 46; + public static readonly KW_FORTRAN = 47; + public static readonly KW_FOUND = 48; + public static readonly KW_FRAC_SECOND = 49; + public static readonly KW_FUNCTIONS = 50; + public static readonly KW_GENERAL = 51; + public static readonly KW_GENERATED = 52; + public static readonly KW_GO = 53; + public static readonly KW_GOTO = 54; + public static readonly KW_GRANTED = 55; + public static readonly KW_HOP = 56; + public static readonly KW_HOURS = 57; + public static readonly KW_IF = 58; + public static readonly KW_IGNORE = 59; + public static readonly KW_INCREMENT = 60; + public static readonly KW_INPUT = 61; + public static readonly KW_INVOKER = 62; + public static readonly KW_JAR = 63; + public static readonly KW_JARS = 64; + public static readonly KW_JAVA = 65; + public static readonly KW_JSON = 66; + public static readonly KW_JSON_EXECUTION_PLAN = 67; + public static readonly KW_KEY = 68; + public static readonly KW_KEY_MEMBER = 69; + public static readonly KW_KEY_TYPE = 70; + public static readonly KW_LABEL = 71; + public static readonly KW_LAST = 72; + public static readonly KW_LENGTH = 73; + public static readonly KW_LEVEL = 74; + public static readonly KW_LOAD = 75; + public static readonly KW_MAP = 76; + public static readonly KW_MICROSECOND = 77; + public static readonly KW_MILLENNIUM = 78; + public static readonly KW_MILLISECOND = 79; + public static readonly KW_MINUTES = 80; + public static readonly KW_MINVALUE = 81; + public static readonly KW_MODIFY = 82; + public static readonly KW_MODULES = 83; + public static readonly KW_MONTHS = 84; + public static readonly KW_NANOSECOND = 85; + public static readonly KW_NULLS = 86; + public static readonly KW_NUMBER = 87; + public static readonly KW_OPTION = 88; + public static readonly KW_OPTIONS = 89; + public static readonly KW_ORDERING = 90; + public static readonly KW_OUTPUT = 91; + public static readonly KW_OVERWRITE = 92; + public static readonly KW_OVERWRITING = 93; + public static readonly KW_PARTITIONED = 94; + public static readonly KW_PARTITIONS = 95; + public static readonly KW_PASSING = 96; + public static readonly KW_PAST = 97; + public static readonly KW_PATH = 98; + public static readonly KW_PLACING = 99; + public static readonly KW_PLAN = 100; + public static readonly KW_PRECEDING = 101; + public static readonly KW_PRESERVE = 102; + public static readonly KW_PRIOR = 103; + public static readonly KW_PRIVILEGES = 104; + public static readonly KW_PUBLIC = 105; + public static readonly KW_PYTHON = 106; + public static readonly KW_PYTHON_FILES = 107; + public static readonly KW_PYTHON_REQUIREMENTS = 108; + public static readonly KW_PYTHON_DEPENDENCIES = 109; + public static readonly KW_PYTHON_JAR = 110; + public static readonly KW_PYTHON_ARCHIVES = 111; + public static readonly KW_PYTHON_PARAMETER = 112; + public static readonly KW_QUARTER = 113; + public static readonly KW_RAW = 114; + public static readonly KW_READ = 115; + public static readonly KW_RELATIVE = 116; + public static readonly KW_REMOVE = 117; + public static readonly KW_RENAME = 118; + public static readonly KW_REPLACE = 119; + public static readonly KW_RESPECT = 120; + public static readonly KW_RESTART = 121; + public static readonly KW_RESTRICT = 122; + public static readonly KW_ROLE = 123; + public static readonly KW_ROW_COUNT = 124; + public static readonly KW_SCALA = 125; + public static readonly KW_SCALAR = 126; + public static readonly KW_SCALE = 127; + public static readonly KW_SCHEMA = 128; + public static readonly KW_SECONDS = 129; + public static readonly KW_SECTION = 130; + public static readonly KW_SECURITY = 131; + public static readonly KW_SELF = 132; + public static readonly KW_SERVER = 133; + public static readonly KW_SERVER_NAME = 134; + public static readonly KW_SESSION = 135; + public static readonly KW_SETS = 136; + public static readonly KW_SIMPLE = 137; + public static readonly KW_SIZE = 138; + public static readonly KW_SLIDE = 139; + public static readonly KW_SOURCE = 140; + public static readonly KW_SPACE = 141; + public static readonly KW_STATE = 142; + public static readonly KW_STATEMENT = 143; + public static readonly KW_STEP = 144; + public static readonly KW_STRING = 145; + public static readonly KW_STRUCTURE = 146; + public static readonly KW_STYLE = 147; + public static readonly KW_TABLES = 148; + public static readonly KW_TEMPORARY = 149; + public static readonly KW_TIMECOL = 150; + public static readonly KW_TIMESTAMP_LTZ = 151; + public static readonly KW_TIMESTAMPADD = 152; + public static readonly KW_TIMESTAMPDIFF = 153; + public static readonly KW_TRANSFORM = 154; + public static readonly KW_TUMBLE = 155; + public static readonly KW_TYPE = 156; + public static readonly KW_UNDER = 157; + public static readonly KW_UNLOAD = 158; + public static readonly KW_USAGE = 159; + public static readonly KW_USE = 160; + public static readonly KW_UTF16 = 161; + public static readonly KW_UTF32 = 162; + public static readonly KW_UTF8 = 163; + public static readonly KW_VERSION = 164; + public static readonly KW_VIEW = 165; + public static readonly KW_VIEWS = 166; + public static readonly KW_VIRTUAL = 167; + public static readonly KW_WATERMARK = 168; + public static readonly KW_WATERMARKS = 169; + public static readonly KW_WEEK = 170; + public static readonly KW_WORK = 171; + public static readonly KW_WRAPPER = 172; + public static readonly KW_YEARS = 173; + public static readonly KW_ZONE = 174; + public static readonly KW_ABS = 175; + public static readonly KW_ALL = 176; + public static readonly ALLOW = 177; + public static readonly KW_ALTER = 178; + public static readonly KW_AND = 179; + public static readonly KW_ANY = 180; + public static readonly KW_ARE = 181; + public static readonly KW_ARRAY = 182; + public static readonly KW_AS = 183; + public static readonly KW_AT = 184; + public static readonly KW_AVG = 185; + public static readonly KW_BEGIN = 186; + public static readonly KW_BETWEEN = 187; + public static readonly KW_BIGINT = 188; + public static readonly KW_BINARY = 189; + public static readonly KW_BIT = 190; + public static readonly KW_BLOB = 191; + public static readonly KW_BOOLEAN = 192; + public static readonly KW_BOTH = 193; + public static readonly KW_BY = 194; + public static readonly KW_CALL = 195; + public static readonly KW_CALLED = 196; + public static readonly KW_CASCADED = 197; + public static readonly KW_CASE = 198; + public static readonly KW_CAST = 199; + public static readonly KW_CEIL = 200; + public static readonly KW_CHAR = 201; + public static readonly KW_CHARACTER = 202; + public static readonly KW_CHECK = 203; + public static readonly KW_CLOB = 204; + public static readonly KW_CLOSE = 205; + public static readonly KW_COALESCE = 206; + public static readonly KW_COLLATE = 207; + public static readonly KW_COLLECT = 208; + public static readonly KW_COLUMN = 209; + public static readonly KW_COMMIT = 210; + public static readonly KW_CONNECT = 211; + public static readonly KW_CONSTRAINT = 212; + public static readonly KW_CONTAINS = 213; + public static readonly KW_CONVERT = 214; + public static readonly KW_COUNT = 215; + public static readonly KW_CREATE = 216; + public static readonly KW_CROSS = 217; + public static readonly KW_CUBE = 218; + public static readonly KW_CURRENT = 219; + public static readonly KW_CURSOR = 220; + public static readonly KW_CYCLE = 221; + public static readonly KW_DATE = 222; + public static readonly KW_DATETIME = 223; + public static readonly KW_DAY = 224; + public static readonly KW_DEC = 225; + public static readonly KW_DECIMAL = 226; + public static readonly KW_DECLARE = 227; + public static readonly KW_DEFAULT = 228; + public static readonly KW_DEFINE = 229; + public static readonly KW_DELETE = 230; + public static readonly KW_DESCRIBE = 231; + public static readonly KW_DISTINCT = 232; + public static readonly KW_DOUBLE = 233; + public static readonly KW_DROP = 234; + public static readonly KW_EACH = 235; + public static readonly KW_ELSE = 236; + public static readonly KW_END = 237; + public static readonly KW_EQUALS = 238; + public static readonly KW_EXCEPT = 239; + public static readonly KW_EXECUTE = 240; + public static readonly KW_EXISTS = 241; + public static readonly KW_EXPLAIN = 242; + public static readonly KW_EXTERNAL = 243; + public static readonly KW_EXTRACT = 244; + public static readonly KW_FALSE = 245; + public static readonly KW_FLOAT = 246; + public static readonly KW_FOR = 247; + public static readonly KW_FROM = 248; + public static readonly KW_FULL = 249; + public static readonly KW_FUNCTION = 250; + public static readonly KW_GLOBAL = 251; + public static readonly KW_GRANT = 252; + public static readonly KW_GROUP = 253; + public static readonly KW_GROUPING = 254; + public static readonly KW_GROUPS = 255; + public static readonly KW_HAVING = 256; + public static readonly KW_HOUR = 257; + public static readonly KW_IMPORT = 258; + public static readonly KW_IN = 259; + public static readonly KW_INCLUDING = 260; + public static readonly KW_INNER = 261; + public static readonly KW_INOUT = 262; + public static readonly KW_INSERT = 263; + public static readonly KW_INT = 264; + public static readonly KW_INTEGER = 265; + public static readonly KW_INTERSECT = 266; + public static readonly KW_INTERVAL = 267; + public static readonly KW_INTO = 268; + public static readonly KW_IS = 269; + public static readonly KW_JOIN = 270; + public static readonly KW_LAG = 271; + public static readonly KW_LANGUAGE = 272; + public static readonly KW_LATERAL = 273; + public static readonly KW_LEADING = 274; + public static readonly KW_LEFT = 275; + public static readonly KW_LIKE = 276; + public static readonly KW_LIMIT = 277; + public static readonly KW_LOCAL = 278; + public static readonly KW_MATCH = 279; + public static readonly KW_MATCH_RECOGNIZE = 280; + public static readonly KW_MEASURES = 281; + public static readonly KW_MERGE = 282; + public static readonly KW_METADATA = 283; + public static readonly KW_MINUS = 284; + public static readonly KW_MINUTE = 285; + public static readonly KW_MODIFIES = 286; + public static readonly KW_MODULE = 287; + public static readonly KW_MONTH = 288; + public static readonly KW_MULTISET = 289; + public static readonly KW_NATURAL = 290; + public static readonly KW_NEXT = 291; + public static readonly KW_NO = 292; + public static readonly KW_NONE = 293; + public static readonly KW_NOT = 294; + public static readonly KW_NULL = 295; + public static readonly KW_NUMERIC = 296; + public static readonly KW_OF = 297; + public static readonly KW_OFFSET = 298; + public static readonly KW_ON = 299; + public static readonly KW_ONE = 300; + public static readonly KW_OR = 301; + public static readonly KW_ORDER = 302; + public static readonly KW_OUT = 303; + public static readonly KW_OUTER = 304; + public static readonly KW_OVER = 305; + public static readonly KW_OVERLAY = 306; + public static readonly KW_PARTITION = 307; + public static readonly KW_PATTERN = 308; + public static readonly KW_PER = 309; + public static readonly KW_PERCENT = 310; + public static readonly KW_PERIOD = 311; + public static readonly KW_POSITION = 312; + public static readonly KW_PRIMARY = 313; + public static readonly KW_RANGE = 314; + public static readonly KW_RANK = 315; + public static readonly KW_RESET = 316; + public static readonly KW_REVOKE = 317; + public static readonly KW_RIGHT = 318; + public static readonly KW_RLIKE = 319; + public static readonly KW_ROLLBACK = 320; + public static readonly KW_ROLLUP = 321; + public static readonly KW_ROW = 322; + public static readonly KW_ROWS = 323; + public static readonly KW_SECOND = 324; + public static readonly KW_SELECT = 325; + public static readonly KW_SET = 326; + public static readonly KW_SHOW = 327; + public static readonly KW_SKIP = 328; + public static readonly KW_SMALLINT = 329; + public static readonly KW_START = 330; + public static readonly KW_STATIC = 331; + public static readonly KW_SUBSTRING = 332; + public static readonly KW_SUM = 333; + public static readonly KW_SYSTEM = 334; + public static readonly KW_SYSTEM_TIME = 335; + public static readonly KW_SYSTEM_USER = 336; + public static readonly KW_TABLE = 337; + public static readonly KW_TABLESAMPLE = 338; + public static readonly KW_THEN = 339; + public static readonly KW_TIME = 340; + public static readonly KW_TIMESTAMP = 341; + public static readonly KW_TINYINT = 342; + public static readonly KW_TO = 343; + public static readonly KW_TRUE = 344; + public static readonly KW_TRUNCATE = 345; + public static readonly KW_UNION = 346; + public static readonly KW_UNIQUE = 347; + public static readonly KW_UNKNOWN = 348; + public static readonly KW_UNNEST = 349; + public static readonly KW_UPPER = 350; + public static readonly KW_UPSERT = 351; + public static readonly KW_USER = 352; + public static readonly KW_USING = 353; + public static readonly KW_VALUE = 354; + public static readonly KW_VALUES = 355; + public static readonly KW_VARBINARY = 356; + public static readonly KW_VARCHAR = 357; + public static readonly KW_WHEN = 358; + public static readonly KW_WHERE = 359; + public static readonly KW_WINDOW = 360; + public static readonly KW_WITH = 361; + public static readonly KW_WITHIN = 362; + public static readonly KW_WITHOUT = 363; + public static readonly KW_YEAR = 364; + public static readonly EQUAL_SYMBOL = 365; + public static readonly GREATER_SYMBOL = 366; + public static readonly LESS_SYMBOL = 367; + public static readonly EXCLAMATION_SYMBOL = 368; + public static readonly BIT_NOT_OP = 369; + public static readonly BIT_OR_OP = 370; + public static readonly BIT_AND_OP = 371; + public static readonly BIT_XOR_OP = 372; + public static readonly DOT = 373; + public static readonly LS_BRACKET = 374; + public static readonly RS_BRACKET = 375; + public static readonly LR_BRACKET = 376; + public static readonly RR_BRACKET = 377; + public static readonly LB_BRACKET = 378; + public static readonly RB_BRACKET = 379; + public static readonly COMMA = 380; + public static readonly SEMICOLON = 381; + public static readonly AT_SIGN = 382; + public static readonly SINGLE_QUOTE_SYMB = 383; + public static readonly DOUBLE_QUOTE_SYMB = 384; + public static readonly REVERSE_QUOTE_SYMB = 385; + public static readonly COLON_SYMB = 386; + public static readonly ASTERISK_SIGN = 387; + public static readonly UNDERLINE_SIGN = 388; + public static readonly HYPNEN_SIGN = 389; + public static readonly ADD_SIGN = 390; + public static readonly PENCENT_SIGN = 391; + public static readonly DOUBLE_VERTICAL_SIGN = 392; + public static readonly DOUBLE_HYPNEN_SIGN = 393; + public static readonly SLASH_SIGN = 394; + public static readonly QUESTION_MARK_SIGN = 395; + public static readonly DOUBLE_RIGHT_ARROW = 396; + public static readonly STRING_LITERAL = 397; + public static readonly DIG_LITERAL = 398; + public static readonly REAL_LITERAL = 399; + public static readonly BIT_STRING = 400; + public static readonly ID_LITERAL = 401; + public static readonly FILE_PATH = 402; public static readonly EOF = Token.EOF; public static readonly RULE_program = 0; public static readonly RULE_statement = 1; @@ -498,23 +551,23 @@ export default class FlinkSqlParser extends Parser { public static readonly RULE_windowFrame = 126; public static readonly RULE_frameBound = 127; public static readonly RULE_withinClause = 128; - public static readonly RULE_timeIntervalExpression = 129; - public static readonly RULE_expression = 130; - public static readonly RULE_booleanExpression = 131; - public static readonly RULE_predicate = 132; - public static readonly RULE_likePredicate = 133; - public static readonly RULE_valueExpression = 134; - public static readonly RULE_primaryExpression = 135; - public static readonly RULE_functionName = 136; - public static readonly RULE_dereferenceDefinition = 137; - public static readonly RULE_correlationName = 138; - public static readonly RULE_qualifiedName = 139; - public static readonly RULE_interval = 140; - public static readonly RULE_errorCapturingMultiUnitsInterval = 141; - public static readonly RULE_multiUnitsInterval = 142; - public static readonly RULE_errorCapturingUnitToUnitInterval = 143; - public static readonly RULE_unitToUnitInterval = 144; - public static readonly RULE_intervalValue = 145; + public static readonly RULE_expression = 129; + public static readonly RULE_booleanExpression = 130; + public static readonly RULE_predicate = 131; + public static readonly RULE_likePredicate = 132; + public static readonly RULE_valueExpression = 133; + public static readonly RULE_primaryExpression = 134; + public static readonly RULE_functionName = 135; + public static readonly RULE_dereferenceDefinition = 136; + public static readonly RULE_correlationName = 137; + public static readonly RULE_qualifiedName = 138; + public static readonly RULE_timeIntervalExpression = 139; + public static readonly RULE_errorCapturingMultiUnitsInterval = 140; + public static readonly RULE_multiUnitsInterval = 141; + public static readonly RULE_errorCapturingUnitToUnitInterval = 142; + public static readonly RULE_unitToUnitInterval = 143; + public static readonly RULE_intervalValue = 144; + public static readonly RULE_intervalTimeUnit = 145; public static readonly RULE_columnAlias = 146; public static readonly RULE_tableAlias = 147; public static readonly RULE_errorCapturingIdentifier = 148; @@ -522,480 +575,630 @@ export default class FlinkSqlParser extends Parser { public static readonly RULE_identifierList = 150; public static readonly RULE_identifierSeq = 151; public static readonly RULE_identifier = 152; - public static readonly RULE_strictIdentifier = 153; - public static readonly RULE_unquotedIdentifier = 154; - public static readonly RULE_quotedIdentifier = 155; - public static readonly RULE_whenClause = 156; - public static readonly RULE_uidList = 157; - public static readonly RULE_uid = 158; - public static readonly RULE_withOption = 159; - public static readonly RULE_ifNotExists = 160; - public static readonly RULE_ifExists = 161; - public static readonly RULE_tablePropertyList = 162; - public static readonly RULE_tableProperty = 163; - public static readonly RULE_tablePropertyKey = 164; - public static readonly RULE_tablePropertyValue = 165; - public static readonly RULE_logicalOperator = 166; - public static readonly RULE_comparisonOperator = 167; - public static readonly RULE_bitOperator = 168; - public static readonly RULE_mathOperator = 169; - public static readonly RULE_unaryOperator = 170; - public static readonly RULE_fullColumnName = 171; - public static readonly RULE_constant = 172; - public static readonly RULE_stringLiteral = 173; - public static readonly RULE_decimalLiteral = 174; - public static readonly RULE_booleanLiteral = 175; - public static readonly RULE_setQuantifier = 176; - public static readonly RULE_ansiNonReserved = 177; - public static readonly RULE_strictNonReserved = 178; - public static readonly RULE_nonReserved = 179; + public static readonly RULE_unquotedIdentifier = 153; + public static readonly RULE_quotedIdentifier = 154; + public static readonly RULE_whenClause = 155; + public static readonly RULE_uid = 156; + public static readonly RULE_withOption = 157; + public static readonly RULE_ifNotExists = 158; + public static readonly RULE_ifExists = 159; + public static readonly RULE_tablePropertyList = 160; + public static readonly RULE_tableProperty = 161; + public static readonly RULE_tablePropertyKey = 162; + public static readonly RULE_tablePropertyValue = 163; + public static readonly RULE_logicalOperator = 164; + public static readonly RULE_comparisonOperator = 165; + public static readonly RULE_bitOperator = 166; + public static readonly RULE_mathOperator = 167; + public static readonly RULE_unaryOperator = 168; + public static readonly RULE_constant = 169; + public static readonly RULE_stringLiteral = 170; + public static readonly RULE_decimalLiteral = 171; + public static readonly RULE_booleanLiteral = 172; + public static readonly RULE_setQuantifier = 173; + public static readonly RULE_reservedKeywords = 174; + public static readonly RULE_nonReservedKeywords = 175; public static readonly literalNames: (string | null)[] = [ null, null, null, null, - "'SELECT'", - "'FROM'", "'ADD'", - "'AS'", "'ALL'", - "'ANY'", "'DISTINCT'", - "'WHERE'", "'GROUP'", - "'BY'", "'GROUPING'", - "'SETS'", "'CUBE'", - "'ROLLUP'", - "'ORDER'", "'HAVING'", - "'LIMIT'", "'AT'", - "'OR'", "'AND'", - "'IN'", "'NOT'", - "'NO'", "'EXISTS'", - "'BETWEEN'", - "'LIKE'", "'RLIKE'", - "'IS'", "'TRUE'", - "'FALSE'", "'NULLS'", - "'ASC'", "'DESC'", - "'FOR'", "'INTERVAL'", - "'CASE'", "'WHEN'", - "'THEN'", "'ELSE'", - "'BEGIN'", "'END'", - "'JOIN'", "'CROSS'", - "'OUTER'", "'INNER'", - "'LEFT'", "'SEMI'", - "'RIGHT'", "'FULL'", - "'USER'", "'NATURAL'", - "'ON'", "'PIVOT'", - "'LATERAL'", - "'WINDOW'", - "'OVER'", "'PARTITION'", - "'RANGE'", "'ROWS'", - "'UNBOUNDED'", - "'PRECEDING'", - "'FOLLOWING'", - "'CURRENT'", - "'FIRST'", "'AFTER'", - "'LAST'", "'WITH'", - "'WITHOUT'", - "'VALUES'", - "'CREATE'", - "'TABLE'", "'DIRECTORY'", - "'VIEW'", "'REPLACE'", - "'EXECUTE'", - "'STATEMENT'", - "'INSERT'", - "'DELETE'", - "'REMOVE'", - "'INTO'", "'DESCRIBE'", - "'EXPLAIN'", - "'PLAN'", "'CHANGELOG_MODE'", - "'JSON_EXECUTION_PLAN'", - "'ESTIMATED_COST'", - "'FORMAT'", - "'LOGICAL'", - "'CODEGEN'", - "'COST'", "'CAST'", - "'SHOW'", "'TABLES'", - "'COLUMNS'", - "'COLUMN'", - "'USE'", "'MODULE'", - "'MODULES'", - "'PARTITIONS'", - "'FUNCTIONS'", - "'DROP'", "'UNION'", - "'EXCEPT'", - "'SETMINUS'", - "'INTERSECT'", - "'TO'", "'TABLESAMPLE'", - "'STRATIFY'", - "'ALTER'", "'RENAME'", - "'STRUCT'", - "'COMMENT'", - "'SET'", "'RESET'", - "'DATA'", "'START'", - "'TRANSACTION'", - "'COMMIT'", - "'ROLLBACK'", - "'MACRO'", "'IGNORE'", - "'BOTH'", "'LEADING'", - "'TRAILING'", - "'IF'", "'POSITION'", - "'EXTRACT'", - "'MINUS'", "'DIV'", - "'PERCENTLIT'", - "'BUCKET'", - "'OUT'", "'OF'", - "'SORT'", "'CLUSTER'", - "'DISTRIBUTE'", - "'OVERWRITE'", - "'TRANSFORM'", - "'REDUCE'", - "'USING'", "'SERDE'", - "'SERDEPROPERTIES'", - "'RECORDREADER'", - "'RECORDWRITER'", - "'DELIMITED'", - "'FIELDS'", - "'TERMINATED'", - "'COLLECTION'", - "'ITEMS'", "'KEYS'", - "'ESCAPED'", - "'LINES'", "'SEPARATED'", - "'FUNCTION'", - "'EXTENDED'", - "'REFRESH'", - "'CLEAR'", "'CACHE'", - "'UNCACHE'", - "'LAZY'", "'FORMATTED'", - "'GLOBAL'", - "'TEMPORARY'", - "'OPTIONS'", - "'UNSET'", "'TBLPROPERTIES'", - "'DBPROPERTIES'", - "'BUCKETS'", - "'SKEWED'", - "'STORED'", - "'DIRECTORIES'", - "'LOCATION'", - "'EXCHANGE'", - "'ARCHIVE'", - "'UNARCHIVE'", - "'FILEFORMAT'", - "'TOUCH'", "'COMPACT'", - "'CONCATENATE'", - "'CHANGE'", - "'CASCADE'", - "'CONSTRAINT'", - "'RESTRICT'", - "'CLUSTERED'", - "'SORTED'", - "'PURGE'", "'INPUTFORMAT'", - "'OUTPUTFORMAT'", - "'DATABASE'", - "'DATABASES'", - "'DFS'", "'TRUNCATE'", - "'ANALYZE'", - "'COMPUTE'", - "'LIST'", "'STATISTICS'", - "'PARTITIONED'", - "'EXTERNAL'", - "'DEFINED'", - "'REVOKE'", - "'GRANT'", "'LOCK'", - "'UNLOCK'", - "'MSCK'", "'REPAIR'", - "'RECOVER'", - "'EXPORT'", - "'IMPORT'", - "'LOAD'", "'UNLOAD'", - "'ROLE'", "'ROLES'", - "'COMPACTIONS'", - "'PRINCIPALS'", - "'TRANSACTIONS'", - "'INDEX'", "'INDEXES'", - "'LOCKS'", "'OPTION'", - "'ANTI'", "'LOCAL'", - "'INPATH'", - "'WATERMARK'", - "'UNNEST'", - "'MATCH'", "'NEXT'", - "'WITHIN'", - "'WS'", "'SYSTEM'", - "'INCLUDING'", - "'EXCLUDING'", - "'OVERWRITING'", - "'CONSTRAINTS'", - "'GENERATED'", - "'WATERMARKS'", + "'ADD'", "'ADMIN'", + "'AFTER'", "'ANALYZE'", + "'ASC'", "'BEFORE'", + "'BYTES'", "'CASCADE'", "'CATALOG'", - "'LANGUAGE'", - "'JAVA'", "'SCALA'", + "'CATALOGS'", + "'CENTURY'", + "'CHAIN'", "'CHANGELOG_MODE'", + "'CHARACTERS'", + "'COMMENT'", + "'COMPACT'", + "'COLUMNS'", + "'CONSTRAINTS'", + "'CONSTRUCTOR'", + "'CUMULATE'", + "'DATA'", "'DATABASE'", + "'DATABASES'", + "'DAYS'", "'DECADE'", + "'DEFINED'", + "'DESC'", "'DESCRIPTOR'", + "'DIV'", "'ENCODING'", + "'ENFORCED'", + "'ENGINE'", + "'ERROR'", "'ESTIMATED_COST'", + "'EXCEPTION'", + "'EXCLUDE'", + "'EXCLUDING'", + "'EXTENDED'", + "'FILE'", "'FINAL'", + "'FIRST'", "'FOLLOWING'", + "'FORMAT'", + "'FORTRAN'", + "'FOUND'", "'FRAC_SECOND'", + "'FUNCTIONS'", + "'GENERAL'", + "'GENERATED'", + "'GO'", "'GOTO'", + "'GRANTED'", + "'HOP'", "'HOURS'", + "'IF'", "'IGNORE'", + "'INCREMENT'", + "'INPUT'", "'INVOKER'", + "'JAR'", "'JARS'", + "'JAVA'", "'JSON'", + "'JSON_EXECUTION_PLAN'", + "'KEY'", "'KEY_MEMBER'", + "'KEY_TYPE'", + "'LABEL'", "'LAST'", + "'LENGTH'", + "'LEVEL'", "'LOAD'", + "'MAP'", "'MICROSECOND'", + "'MILLENNIUM'", + "'MILLISECOND'", + "'MINUTES'", + "'MINVALUE'", + "'MODIFY'", + "'MODULES'", + "'MONTHS'", + "'NANOSECOND'", + "'NULLS'", "'NUMBER'", + "'OPTION'", + "'OPTIONS'", + "'ORDERING'", + "'OUTPUT'", + "'OVERWRITE'", + "'OVERWRITING'", + "'PARTITIONED'", + "'PARTITIONS'", + "'PASSING'", + "'PAST'", "'PATH'", + "'PLACING'", + "'PLAN'", "'PRECEDING'", + "'PRESERVE'", + "'PRIOR'", "'PRIVILEGES'", + "'PUBLIC'", "'PYTHON'", - "'JAR'", "'FILE'", "'PYTHON_FILES'", "'PYTHON_REQUIREMENTS'", "'PYTHON_DEPENDENCIES'", "'PYTHON_JAR'", "'PYTHON_ARCHIVES'", "'PYTHON_PARAMETER'", - "'ENGINE'", - "'CATALOGS'", - "'VIEWS'", "'JARS'", - "'PRIMARY'", - "'UNIQUE'", - "'KEY'", "'PERIOD'", - "'SYSTEM_TIME'", - "'ENFORCED'", - "'METADATA'", - "'VIRTUAL'", - "'ZONE'", "'TUMBLE'", - "'HOP'", "'CUMULATE'", - "'DESCRIPTOR'", - "'TIMECOL'", - "'SIZE'", "'OFFSET'", - "'STEP'", "'SLIDE'", + "'QUARTER'", + "'RAW'", "'READ'", + "'RELATIVE'", + "'REMOVE'", + "'RENAME'", + "'REPLACE'", + "'RESPECT'", + "'RESTART'", + "'RESTRICT'", + "'ROLE'", "'ROW_COUNT'", + "'SCALA'", "'SCALAR'", + "'SCALE'", "'SCHEMA'", + "'SECONDS'", + "'SECTION'", + "'SECURITY'", + "'SELF'", "'SERVER'", + "'SERVER_NAME'", "'SESSION'", - "'MATCH_RECOGNIZE'", - "'MEASURES'", - "'PATTERN'", - "'ONE'", "'PER'", - "'SKIP'", "'PAST'", - "'DEFINE'", - "'STRING'", - "'ARRAY'", "'MAP'", - "'CHAR'", "'VARCHAR'", - "'BINARY'", - "'VARBINARY'", - "'BYTES'", "'DECIMAL'", - "'DEC'", "'NUMERIC'", - "'TINYINT'", - "'SMALLINT'", - "'INT'", "'INTEGER'", - "'BIGINT'", - "'FLOAT'", "'DOUBLE'", - "'DATE'", "'TIME'", - "'TIMESTAMP'", + "'SETS'", "'SIMPLE'", + "'SIZE'", "'SLIDE'", + "'SOURCE'", + "'SPACE'", "'STATE'", + "'STATEMENT'", + "'STEP'", "'STRING'", + "'STRUCTURE'", + "'STYLE'", "'TABLES'", + "'TEMPORARY'", + "'TIMECOL'", "'TIMESTAMP_LTZ'", - "'MULTISET'", + "'TIMESTAMPADD'", + "'TIMESTAMPDIFF'", + "'TRANSFORM'", + "'TUMBLE'", + "'TYPE'", "'UNDER'", + "'UNLOAD'", + "'USAGE'", "'USE'", + "'UTF16'", "'UTF32'", + "'UTF8'", "'VERSION'", + "'VIEW'", "'VIEWS'", + "'VIRTUAL'", + "'WATERMARK'", + "'WATERMARKS'", + "'WEEK'", "'WORK'", + "'WRAPPER'", + "'YEARS'", "'ZONE'", + "'ABS'", "'ALL'", + "'ALLOW'", "'ALTER'", + "'AND'", "'ANY'", + "'ARE'", "'ARRAY'", + "'AS'", "'AT'", + "'AVG'", "'BEGIN'", + "'BETWEEN'", + "'BIGINT'", + "'BINARY'", + "'BIT'", "'BLOB'", "'BOOLEAN'", - "'RAW'", "'ROW'", - "'NULL'", "'DATETIME'", - "'='", "'>'", - "'<'", "'!'", - "'~'", "'|'", - "'&'", "'^'", - "'.'", "'['", - "']'", "'('", - "')'", "'{'", - "'}'", "','", - "';'", "'@'", - "'''", "'\"'", - "'`'", "':'", - "'*'", "'_'", - "'-'", "'+'", - "'%'", "'||'", - "'--'", "'/'", - "'?'", null, - null, null, - null, null, - null, null, + "'BOTH'", "'BY'", + "'CALL'", "'CALLED'", + "'CASCADED'", + "'CASE'", "'CAST'", + "'CEIL'", "'CHAR'", + "'CHARACTER'", + "'CHECK'", "'CLOB'", + "'CLOSE'", "'COALESCE'", + "'COLLATE'", + "'COLLECT'", + "'COLUMN'", + "'COMMIT'", + "'CONNECT'", + "'CONSTRAINT'", + "'CONTAINS'", + "'CONVERT'", + "'COUNT'", "'CREATE'", + "'CROSS'", "'CUBE'", + "'CURRENT'", + "'CURSOR'", + "'CYCLE'", "'DATE'", + "'DATETIME'", + "'DAY'", "'DEC'", + "'DECIMAL'", + "'DECLARE'", + "'DEFAULT'", + "'DEFINE'", + "'DELETE'", + "'DESCRIBE'", + "'DISTINCT'", + "'DOUBLE'", + "'DROP'", "'EACH'", + "'ELSE'", "'END'", + "'EQUALS'", + "'EXCEPT'", + "'EXECUTE'", + "'EXISTS'", + "'EXPLAIN'", + "'EXTERNAL'", + "'EXTRACT'", + "'FALSE'", "'FLOAT'", + "'FOR'", "'FROM'", + "'FULL'", "'FUNCTION'", + "'GLOBAL'", + "'GRANT'", "'GROUP'", + "'GROUPING'", + "'GROUPS'", + "'HAVING'", + "'HOUR'", "'IMPORT'", + "'IN'", "'INCLUDING'", + "'INNER'", "'INOUT'", + "'INSERT'", + "'INT'", "'INTEGER'", + "'INTERSECT'", + "'INTERVAL'", + "'INTO'", "'IS'", + "'JOIN'", "'LAG'", + "'LANGUAGE'", + "'LATERAL'", + "'LEADING'", + "'LEFT'", "'LIKE'", + "'LIMIT'", "'LOCAL'", + "'MATCH'", "'MATCH_RECOGNIZE'", + "'MEASURES'", + "'MERGE'", "'METADATA'", + "'MINUS'", "'MINUTE'", + "'MODIFIES'", + "'MODULE'", + "'MONTH'", "'MULTISET'", + "'NATURAL'", + "'NEXT'", "'NO'", + "'NONE'", "'NOT'", + "'NULL'", "'NUMERIC'", + "'OF'", "'OFFSET'", + "'ON'", "'ONE'", + "'OR'", "'ORDER'", + "'OUT'", "'OUTER'", + "'OVER'", "'OVERLAY'", + "'PARTITION'", + "'PATTERN'", + "'PER'", "'PERCENT'", + "'PERIOD'", + "'POSITION'", + "'PRIMARY'", + "'RANGE'", "'RANK'", + "'RESET'", "'REVOKE'", + "'RIGHT'", "'RLIKE'", + "'ROLLBACK'", + "'ROLLUP'", + "'ROW'", "'ROWS'", + "'SECOND'", + "'SELECT'", + "'SET'", "'SHOW'", + "'SKIP'", "'SMALLINT'", + "'START'", "'STATIC'", + "'SUBSTRING'", + "'SUM'", "'SYSTEM'", + "'SYSTEM_TIME'", + "'SYSTEM_USER'", + "'TABLE'", "'TABLESAMPLE'", + "'THEN'", "'TIME'", + "'TIMESTAMP'", + "'TINYINT'", + "'TO'", "'TRUE'", + "'TRUNCATE'", + "'UNION'", "'UNIQUE'", + "'UNKNOWN'", + "'UNNEST'", + "'UPPER'", "'UPSERT'", + "'USER'", "'USING'", + "'VALUE'", "'VALUES'", + "'VARBINARY'", + "'VARCHAR'", + "'WHEN'", "'WHERE'", + "'WINDOW'", + "'WITH'", "'WITHIN'", + "'WITHOUT'", + "'YEAR'", "'='", + "'>'", "'<'", + "'!'", "'~'", + "'|'", "'&'", + "'^'", "'.'", + "'['", "']'", + "'('", "')'", + "'{'", "'}'", + "','", "';'", + "'@'", "'''", + "'\"'", "'`'", + "':'", "'*'", + "'_'", "'-'", + "'+'", "'%'", + "'||'", "'--'", + "'/'", "'?'", "'=>'" ]; public static readonly symbolicNames: (string | null)[] = [ null, "SPACE", "COMMENT_INPUT", "LINE_COMMENT", - "SELECT", "FROM", - "ADD", "AS", - "ALL", "ANY", - "DISTINCT", - "WHERE", "GROUP", - "BY", "GROUPING", - "SETS", "CUBE", - "ROLLUP", "ORDER", - "HAVING", "LIMIT", - "AT", "OR", - "AND", "IN", - "NOT", "NO", - "EXISTS", "BETWEEN", - "LIKE", "RLIKE", - "IS", "TRUE", - "FALSE", "NULLS", - "ASC", "DESC", - "FOR", "INTERVAL", - "CASE", "WHEN", - "THEN", "ELSE", - "BEGIN", "END", - "JOIN", "CROSS", - "OUTER", "INNER", - "LEFT", "SEMI", - "RIGHT", "FULL", - "USER", "NATURAL", - "ON", "PIVOT", - "LATERAL", - "WINDOW", "OVER", - "PARTITION", - "RANGE", "ROWS", - "UNBOUNDED", - "PRECEDING", - "FOLLOWING", - "CURRENT", - "FIRST", "AFTER", - "LAST", "WITH", - "WITHOUT", - "VALUES", "CREATE", - "TABLE", "DIRECTORY", - "VIEW", "REPLACE", - "EXECUTE", - "STATEMENT", - "INSERT", "DELETE", - "REMOVE", "INTO", - "DESCRIBE", - "EXPLAIN", - "PLAN", "CHANGELOG_MODE", - "JSON_EXECUTION_PLAN", - "ESTIMATED_COST", - "FORMAT", "LOGICAL", - "CODEGEN", - "COST", "CAST", - "SHOW", "TABLES", - "COLUMNS", - "COLUMN", "USE", - "MODULE", "MODULES", - "PARTITIONS", - "FUNCTIONS", - "DROP", "UNION", - "EXCEPT", "SETMINUS", - "INTERSECT", - "TO", "TABLESAMPLE", - "STRATIFY", - "ALTER", "RENAME", - "STRUCT", "COMMENT", - "SET", "RESET", - "DATA", "START", - "TRANSACTION", - "COMMIT", "ROLLBACK", - "MACRO", "IGNORE", - "BOTH", "LEADING", - "TRAILING", - "IF", "POSITION", - "EXTRACT", - "MINUS", "DIV", - "PERCENTLIT", - "BUCKET", "OUT", - "OF", "SORT", - "CLUSTER", - "DISTRIBUTE", - "OVERWRITE", - "TRANSFORM", - "REDUCE", "USING", - "SERDE", "SERDEPROPERTIES", - "RECORDREADER", - "RECORDWRITER", - "DELIMITED", - "FIELDS", "TERMINATED", - "COLLECTION", - "ITEMS", "KEYS", - "ESCAPED", - "LINES", "SEPARATED", - "FUNCTION", - "EXTENDED", - "REFRESH", - "CLEAR", "CACHE", - "UNCACHE", - "LAZY", "FORMATTED", - "GLOBAL", "TEMPORARY", - "OPTIONS", - "UNSET", "TBLPROPERTIES", - "DBPROPERTIES", - "BUCKETS", - "SKEWED", "STORED", - "DIRECTORIES", - "LOCATION", - "EXCHANGE", - "ARCHIVE", - "UNARCHIVE", - "FILEFORMAT", - "TOUCH", "COMPACT", - "CONCATENATE", - "CHANGE", "CASCADE", - "CONSTRAINT", - "RESTRICT", - "CLUSTERED", - "SORTED", "PURGE", - "INPUTFORMAT", - "OUTPUTFORMAT", - "DATABASE", - "DATABASES", - "DFS", "TRUNCATE", - "ANALYZE", - "COMPUTE", - "LIST", "STATISTICS", - "PARTITIONED", - "EXTERNAL", - "DEFINED", - "REVOKE", "GRANT", - "LOCK", "UNLOCK", - "MSCK", "REPAIR", - "RECOVER", - "EXPORT", "IMPORT", - "LOAD", "UNLOAD", - "ROLE", "ROLES", - "COMPACTIONS", - "PRINCIPALS", - "TRANSACTIONS", - "INDEX", "INDEXES", - "LOCKS", "OPTION", - "ANTI", "LOCAL", - "INPATH", "WATERMARK", - "UNNEST", "MATCH", - "NEXT", "WITHIN", - "WS", "SYSTEM", - "INCLUDING", - "EXCLUDING", - "OVERWRITING", - "CONSTRAINTS", - "GENERATED", - "WATERMARKS", - "CATALOG", - "LANGUAGE", - "JAVA", "SCALA", - "PYTHON", "JAR", - "FILE", "PYTHON_FILES", - "PYTHON_REQUIREMENTS", - "PYTHON_DEPENDENCIES", - "PYTHON_JAR", - "PYTHON_ARCHIVES", - "PYTHON_PARAMETER", - "ENGINE", "CATALOGS", - "VIEWS", "JARS", - "PRIMARY", - "UNIQUE", "KEY", - "PERIOD", "SYSTEM_TIME", - "ENFORCED", - "METADATA", - "VIRTUAL", - "ZONE", "TUMBLE", - "HOP", "CUMULATE", - "DESCRIPTOR", - "TIMECOL", - "SIZE", "OFFSET", - "STEP", "SLIDE", - "SESSION", - "MATCH_RECOGNIZE", - "MEASURES", - "PATTERN", - "ONE", "PER", + "KW_ADD", "KW_ADMIN", + "KW_AFTER", + "KW_ANALYZE", + "KW_ASC", "KW_BEFORE", + "KW_BYTES", + "KW_CASCADE", + "KW_CATALOG", + "KW_CATALOGS", + "KW_CENTURY", + "KW_CHAIN", + "KW_CHANGELOG_MODE", + "KW_CHARACTERS", + "KW_COMMENT", + "KW_COMPACT", + "KW_COLUMNS", + "KW_CONSTRAINTS", + "KW_CONSTRUCTOR", + "KW_CUMULATE", + "KW_DATA", + "KW_DATABASE", + "KW_DATABASES", + "KW_DAYS", + "KW_DECADE", + "KW_DEFINED", + "KW_DESC", + "KW_DESCRIPTOR", + "KW_DIV", "KW_ENCODING", + "KW_ENFORCED", + "KW_ENGINE", + "KW_ERROR", + "KW_ESTIMATED_COST", + "KW_EXCEPTION", + "KW_EXCLUDE", + "KW_EXCLUDING", + "KW_EXTENDED", + "KW_FILE", + "KW_FINAL", + "KW_FIRST", + "KW_FOLLOWING", + "KW_FORMAT", + "KW_FORTRAN", + "KW_FOUND", + "KW_FRAC_SECOND", + "KW_FUNCTIONS", + "KW_GENERAL", + "KW_GENERATED", + "KW_GO", "KW_GOTO", + "KW_GRANTED", + "KW_HOP", "KW_HOURS", + "KW_IF", "KW_IGNORE", + "KW_INCREMENT", + "KW_INPUT", + "KW_INVOKER", + "KW_JAR", "KW_JARS", + "KW_JAVA", + "KW_JSON", + "KW_JSON_EXECUTION_PLAN", + "KW_KEY", "KW_KEY_MEMBER", + "KW_KEY_TYPE", + "KW_LABEL", + "KW_LAST", + "KW_LENGTH", + "KW_LEVEL", + "KW_LOAD", + "KW_MAP", "KW_MICROSECOND", + "KW_MILLENNIUM", + "KW_MILLISECOND", + "KW_MINUTES", + "KW_MINVALUE", + "KW_MODIFY", + "KW_MODULES", + "KW_MONTHS", + "KW_NANOSECOND", + "KW_NULLS", + "KW_NUMBER", + "KW_OPTION", + "KW_OPTIONS", + "KW_ORDERING", + "KW_OUTPUT", + "KW_OVERWRITE", + "KW_OVERWRITING", + "KW_PARTITIONED", + "KW_PARTITIONS", + "KW_PASSING", + "KW_PAST", + "KW_PATH", + "KW_PLACING", + "KW_PLAN", + "KW_PRECEDING", + "KW_PRESERVE", + "KW_PRIOR", + "KW_PRIVILEGES", + "KW_PUBLIC", + "KW_PYTHON", + "KW_PYTHON_FILES", + "KW_PYTHON_REQUIREMENTS", + "KW_PYTHON_DEPENDENCIES", + "KW_PYTHON_JAR", + "KW_PYTHON_ARCHIVES", + "KW_PYTHON_PARAMETER", + "KW_QUARTER", + "KW_RAW", "KW_READ", + "KW_RELATIVE", + "KW_REMOVE", + "KW_RENAME", + "KW_REPLACE", + "KW_RESPECT", + "KW_RESTART", + "KW_RESTRICT", + "KW_ROLE", + "KW_ROW_COUNT", + "KW_SCALA", + "KW_SCALAR", + "KW_SCALE", + "KW_SCHEMA", + "KW_SECONDS", + "KW_SECTION", + "KW_SECURITY", + "KW_SELF", + "KW_SERVER", + "KW_SERVER_NAME", + "KW_SESSION", + "KW_SETS", + "KW_SIMPLE", + "KW_SIZE", + "KW_SLIDE", + "KW_SOURCE", + "KW_SPACE", + "KW_STATE", + "KW_STATEMENT", + "KW_STEP", + "KW_STRING", + "KW_STRUCTURE", + "KW_STYLE", + "KW_TABLES", + "KW_TEMPORARY", + "KW_TIMECOL", + "KW_TIMESTAMP_LTZ", + "KW_TIMESTAMPADD", + "KW_TIMESTAMPDIFF", + "KW_TRANSFORM", + "KW_TUMBLE", + "KW_TYPE", + "KW_UNDER", + "KW_UNLOAD", + "KW_USAGE", + "KW_USE", "KW_UTF16", + "KW_UTF32", + "KW_UTF8", + "KW_VERSION", + "KW_VIEW", + "KW_VIEWS", + "KW_VIRTUAL", + "KW_WATERMARK", + "KW_WATERMARKS", + "KW_WEEK", + "KW_WORK", + "KW_WRAPPER", + "KW_YEARS", + "KW_ZONE", + "KW_ABS", "KW_ALL", + "ALLOW", "KW_ALTER", + "KW_AND", "KW_ANY", + "KW_ARE", "KW_ARRAY", + "KW_AS", "KW_AT", + "KW_AVG", "KW_BEGIN", + "KW_BETWEEN", + "KW_BIGINT", + "KW_BINARY", + "KW_BIT", "KW_BLOB", + "KW_BOOLEAN", + "KW_BOTH", + "KW_BY", "KW_CALL", + "KW_CALLED", + "KW_CASCADED", + "KW_CASE", + "KW_CAST", + "KW_CEIL", + "KW_CHAR", + "KW_CHARACTER", + "KW_CHECK", + "KW_CLOB", + "KW_CLOSE", + "KW_COALESCE", + "KW_COLLATE", + "KW_COLLECT", + "KW_COLUMN", + "KW_COMMIT", + "KW_CONNECT", + "KW_CONSTRAINT", + "KW_CONTAINS", + "KW_CONVERT", + "KW_COUNT", + "KW_CREATE", + "KW_CROSS", + "KW_CUBE", + "KW_CURRENT", + "KW_CURSOR", + "KW_CYCLE", + "KW_DATE", + "KW_DATETIME", + "KW_DAY", "KW_DEC", + "KW_DECIMAL", + "KW_DECLARE", + "KW_DEFAULT", + "KW_DEFINE", + "KW_DELETE", + "KW_DESCRIBE", + "KW_DISTINCT", + "KW_DOUBLE", + "KW_DROP", + "KW_EACH", + "KW_ELSE", + "KW_END", "KW_EQUALS", + "KW_EXCEPT", + "KW_EXECUTE", + "KW_EXISTS", + "KW_EXPLAIN", + "KW_EXTERNAL", + "KW_EXTRACT", + "KW_FALSE", + "KW_FLOAT", + "KW_FOR", "KW_FROM", + "KW_FULL", + "KW_FUNCTION", + "KW_GLOBAL", + "KW_GRANT", + "KW_GROUP", + "KW_GROUPING", + "KW_GROUPS", + "KW_HAVING", + "KW_HOUR", + "KW_IMPORT", + "KW_IN", "KW_INCLUDING", + "KW_INNER", + "KW_INOUT", + "KW_INSERT", + "KW_INT", "KW_INTEGER", + "KW_INTERSECT", + "KW_INTERVAL", + "KW_INTO", + "KW_IS", "KW_JOIN", + "KW_LAG", "KW_LANGUAGE", + "KW_LATERAL", + "KW_LEADING", + "KW_LEFT", + "KW_LIKE", + "KW_LIMIT", + "KW_LOCAL", + "KW_MATCH", + "KW_MATCH_RECOGNIZE", + "KW_MEASURES", + "KW_MERGE", + "KW_METADATA", + "KW_MINUS", + "KW_MINUTE", + "KW_MODIFIES", + "KW_MODULE", + "KW_MONTH", + "KW_MULTISET", + "KW_NATURAL", + "KW_NEXT", + "KW_NO", "KW_NONE", + "KW_NOT", "KW_NULL", + "KW_NUMERIC", + "KW_OF", "KW_OFFSET", + "KW_ON", "KW_ONE", + "KW_OR", "KW_ORDER", + "KW_OUT", "KW_OUTER", + "KW_OVER", + "KW_OVERLAY", + "KW_PARTITION", + "KW_PATTERN", + "KW_PER", "KW_PERCENT", + "KW_PERIOD", + "KW_POSITION", + "KW_PRIMARY", + "KW_RANGE", + "KW_RANK", + "KW_RESET", + "KW_REVOKE", + "KW_RIGHT", + "KW_RLIKE", + "KW_ROLLBACK", + "KW_ROLLUP", + "KW_ROW", "KW_ROWS", + "KW_SECOND", + "KW_SELECT", + "KW_SET", "KW_SHOW", "KW_SKIP", - "PAST", "DEFINE", - "STRING", "ARRAY", - "MAP", "CHAR", - "VARCHAR", - "BINARY", "VARBINARY", - "BYTES", "DECIMAL", - "DEC", "NUMERIC", - "TINYINT", - "SMALLINT", - "INT", "INTEGER", - "BIGINT", "FLOAT", - "DOUBLE", "DATE", - "TIME", "TIMESTAMP", - "TIMESTAMP_LTZ", - "MULTISET", - "BOOLEAN", - "RAW", "ROW", - "NULL", "DATETIME", + "KW_SMALLINT", + "KW_START", + "KW_STATIC", + "KW_SUBSTRING", + "KW_SUM", "KW_SYSTEM", + "KW_SYSTEM_TIME", + "KW_SYSTEM_USER", + "KW_TABLE", + "KW_TABLESAMPLE", + "KW_THEN", + "KW_TIME", + "KW_TIMESTAMP", + "KW_TINYINT", + "KW_TO", "KW_TRUE", + "KW_TRUNCATE", + "KW_UNION", + "KW_UNIQUE", + "KW_UNKNOWN", + "KW_UNNEST", + "KW_UPPER", + "KW_UPSERT", + "KW_USER", + "KW_USING", + "KW_VALUE", + "KW_VALUES", + "KW_VARBINARY", + "KW_VARCHAR", + "KW_WHEN", + "KW_WHERE", + "KW_WINDOW", + "KW_WITH", + "KW_WITHIN", + "KW_WITHOUT", + "KW_YEAR", "EQUAL_SYMBOL", "GREATER_SYMBOL", "LESS_SYMBOL", @@ -1025,13 +1228,13 @@ export default class FlinkSqlParser extends Parser { "DOUBLE_HYPNEN_SIGN", "SLASH_SIGN", "QUESTION_MARK_SIGN", - "DOT_ID", "STRING_LITERAL", + "DOUBLE_RIGHT_ARROW", + "STRING_LITERAL", "DIG_LITERAL", "REAL_LITERAL", "BIT_STRING", "ID_LITERAL", - "FILE_PATH", - "DOUBLE_ARROW" ]; + "FILE_PATH" ]; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ "program", "statement", "sqlStatements", "sqlStatement", "emptyStatement", @@ -1064,19 +1267,18 @@ export default class FlinkSqlParser extends Parser { "matchRecognizeClause", "orderByCaluse", "orderItemDefition", "limitClause", "partitionByClause", "quantifiers", "measuresClause", "patternDefination", "patternVariable", "outputMode", "afterMatchStrategy", "patternVariablesDefination", - "windowFrame", "frameBound", "withinClause", "timeIntervalExpression", - "expression", "booleanExpression", "predicate", "likePredicate", "valueExpression", - "primaryExpression", "functionName", "dereferenceDefinition", "correlationName", - "qualifiedName", "interval", "errorCapturingMultiUnitsInterval", "multiUnitsInterval", + "windowFrame", "frameBound", "withinClause", "expression", "booleanExpression", + "predicate", "likePredicate", "valueExpression", "primaryExpression", + "functionName", "dereferenceDefinition", "correlationName", "qualifiedName", + "timeIntervalExpression", "errorCapturingMultiUnitsInterval", "multiUnitsInterval", "errorCapturingUnitToUnitInterval", "unitToUnitInterval", "intervalValue", - "columnAlias", "tableAlias", "errorCapturingIdentifier", "errorCapturingIdentifierExtra", - "identifierList", "identifierSeq", "identifier", "strictIdentifier", "unquotedIdentifier", - "quotedIdentifier", "whenClause", "uidList", "uid", "withOption", "ifNotExists", - "ifExists", "tablePropertyList", "tableProperty", "tablePropertyKey", + "intervalTimeUnit", "columnAlias", "tableAlias", "errorCapturingIdentifier", + "errorCapturingIdentifierExtra", "identifierList", "identifierSeq", "identifier", + "unquotedIdentifier", "quotedIdentifier", "whenClause", "uid", "withOption", + "ifNotExists", "ifExists", "tablePropertyList", "tableProperty", "tablePropertyKey", "tablePropertyValue", "logicalOperator", "comparisonOperator", "bitOperator", - "mathOperator", "unaryOperator", "fullColumnName", "constant", "stringLiteral", - "decimalLiteral", "booleanLiteral", "setQuantifier", "ansiNonReserved", - "strictNonReserved", "nonReserved", + "mathOperator", "unaryOperator", "constant", "stringLiteral", "decimalLiteral", + "booleanLiteral", "setQuantifier", "reservedKeywords", "nonReservedKeywords", ]; public get grammarFileName(): string { return "FlinkSqlParser.g4"; } public get literalNames(): (string | null)[] { return FlinkSqlParser.literalNames; } @@ -1099,9 +1301,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 360; + this.state = 352; this.statement(); - this.state = 361; + this.state = 353; this.match(FlinkSqlParser.EOF); } } @@ -1126,9 +1328,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 363; + this.state = 355; this.sqlStatements(); - this.state = 364; + this.state = 356; this.match(FlinkSqlParser.EOF); } } @@ -1154,52 +1356,52 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 373; + this.state = 365; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===4 || _la===6 || _la===36 || ((((_la - 70)) & ~0x1F) === 0 && ((1 << (_la - 70)) & 570479885) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & 12545) !== 0) || _la===212 || _la===213 || _la===322 || _la===327) { + while (_la===4 || _la===30 || _la===75 || _la===117 || ((((_la - 158)) & ~0x1F) === 0 && ((1 << (_la - 158)) & 1048581) !== 0) || ((((_la - 216)) & ~0x1F) === 0 && ((1 << (_la - 216)) & 84180993) !== 0) || _la===263 || ((((_la - 316)) & ~0x1F) === 0 && ((1 << (_la - 316)) & 3585) !== 0) || ((((_la - 355)) & ~0x1F) === 0 && ((1 << (_la - 355)) & 69206081) !== 0)) { { - this.state = 371; + this.state = 363; this._errHandler.sync(this); switch (this._input.LA(1)) { case 4: - case 6: - case 36: - case 70: - case 72: - case 73: - case 78: - case 80: - case 82: - case 84: - case 85: - case 95: - case 99: - case 104: - case 112: - case 116: + case 30: + case 75: case 117: - case 212: - case 213: - case 322: + case 158: + case 160: + case 178: + case 216: + case 231: + case 234: + case 240: + case 242: + case 263: + case 316: + case 325: + case 326: + case 327: + case 355: + case 361: + case 376: { - this.state = 366; + this.state = 358; this.sqlStatement(); - this.state = 368; + this.state = 360; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 0, this._ctx) ) { case 1: { - this.state = 367; + this.state = 359; this.match(FlinkSqlParser.SEMICOLON); } break; } } break; - case 327: + case 381: { - this.state = 370; + this.state = 362; this.emptyStatement(); } break; @@ -1207,7 +1409,7 @@ export default class FlinkSqlParser extends Parser { throw new NoViableAltException(this); } } - this.state = 375; + this.state = 367; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1232,90 +1434,90 @@ export default class FlinkSqlParser extends Parser { let localctx: SqlStatementContext = new SqlStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 6, FlinkSqlParser.RULE_sqlStatement); try { - this.state = 388; + this.state = 380; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 3, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 376; + this.state = 368; this.ddlStatement(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 377; + this.state = 369; this.dmlStatement(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 378; + this.state = 370; this.describeStatement(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 379; + this.state = 371; this.explainStatement(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 380; + this.state = 372; this.useStatement(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 381; + this.state = 373; this.showStatememt(); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 382; + this.state = 374; this.loadStatement(); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 383; + this.state = 375; this.unloadStatememt(); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 384; + this.state = 376; this.setStatememt(); } break; case 10: this.enterOuterAlt(localctx, 10); { - this.state = 385; + this.state = 377; this.resetStatememt(); } break; case 11: this.enterOuterAlt(localctx, 11); { - this.state = 386; + this.state = 378; this.jarStatememt(); } break; case 12: this.enterOuterAlt(localctx, 12); { - this.state = 387; + this.state = 379; this.dtAddStatement(); } break; @@ -1342,7 +1544,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 390; + this.state = 382; this.match(FlinkSqlParser.SEMICOLON); } } @@ -1365,104 +1567,104 @@ export default class FlinkSqlParser extends Parser { let localctx: DdlStatementContext = new DdlStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 10, FlinkSqlParser.RULE_ddlStatement); try { - this.state = 406; + this.state = 398; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 4, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 392; + this.state = 384; this.createTable(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 393; + this.state = 385; this.createDatabase(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 394; + this.state = 386; this.createView(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 395; + this.state = 387; this.createFunction(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 396; + this.state = 388; this.createCatalog(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 397; + this.state = 389; this.alterTable(); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 398; + this.state = 390; this.alertView(); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 399; + this.state = 391; this.alterDatabase(); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 400; + this.state = 392; this.alterFunction(); } break; case 10: this.enterOuterAlt(localctx, 10); { - this.state = 401; + this.state = 393; this.dropCatalog(); } break; case 11: this.enterOuterAlt(localctx, 11); { - this.state = 402; + this.state = 394; this.dropTable(); } break; case 12: this.enterOuterAlt(localctx, 12); { - this.state = 403; + this.state = 395; this.dropDatabase(); } break; case 13: this.enterOuterAlt(localctx, 13); { - this.state = 404; + this.state = 396; this.dropView(); } break; case 14: this.enterOuterAlt(localctx, 14); { - this.state = 405; + this.state = 397; this.dropFunction(); } break; @@ -1487,24 +1689,24 @@ export default class FlinkSqlParser extends Parser { let localctx: DmlStatementContext = new DmlStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 12, FlinkSqlParser.RULE_dmlStatement); try { - this.state = 410; + this.state = 402; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 4: - case 70: - case 72: - case 322: + case 325: + case 355: + case 361: + case 376: this.enterOuterAlt(localctx, 1); { - this.state = 408; + this.state = 400; this.queryStatement(0); } break; - case 78: - case 80: + case 240: + case 263: this.enterOuterAlt(localctx, 2); { - this.state = 409; + this.state = 401; this.insertStatement(); } break; @@ -1534,16 +1736,16 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 412; + this.state = 404; _la = this._input.LA(1); - if(!(_la===36 || _la===84)) { + if(!(_la===30 || _la===231)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 413; + this.state = 405; this.uid(); } } @@ -1568,56 +1770,56 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 415; - this.match(FlinkSqlParser.EXPLAIN); - this.state = 419; + this.state = 407; + this.match(FlinkSqlParser.KW_EXPLAIN); + this.state = 411; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 87: - case 88: - case 89: + case 16: + case 37: + case 67: { - this.state = 416; + this.state = 408; this.explainDetails(); } break; - case 86: + case 100: { - this.state = 417; - this.match(FlinkSqlParser.PLAN); - this.state = 418; - this.match(FlinkSqlParser.FOR); + this.state = 409; + this.match(FlinkSqlParser.KW_PLAN); + this.state = 410; + this.match(FlinkSqlParser.KW_FOR); } break; - case 4: - case 70: - case 72: - case 78: - case 79: - case 80: - case 322: + case 143: + case 240: + case 263: + case 325: + case 355: + case 361: + case 376: break; default: break; } - this.state = 424; + this.state = 416; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 7, this._ctx) ) { case 1: { - this.state = 421; + this.state = 413; this.dmlStatement(); } break; case 2: { - this.state = 422; + this.state = 414; this.insertSimpleStatement(); } break; case 3: { - this.state = 423; + this.state = 415; this.insertMulStatement(); } break; @@ -1646,21 +1848,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 426; + this.state = 418; this.explainDetail(); - this.state = 431; + this.state = 423; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 427; + this.state = 419; this.match(FlinkSqlParser.COMMA); - this.state = 428; + this.state = 420; this.explainDetail(); } } - this.state = 433; + this.state = 425; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1688,9 +1890,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 434; + this.state = 426; _la = this._input.LA(1); - if(!(((((_la - 87)) & ~0x1F) === 0 && ((1 << (_la - 87)) & 7) !== 0))) { + if(!(_la===16 || _la===37 || _la===67)) { this._errHandler.recoverInline(this); } else { @@ -1717,34 +1919,33 @@ export default class FlinkSqlParser extends Parser { public useStatement(): UseStatementContext { let localctx: UseStatementContext = new UseStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 22, FlinkSqlParser.RULE_useStatement); - let _la: number; try { - this.state = 442; + this.state = 434; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 10, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 436; - this.match(FlinkSqlParser.USE); - this.state = 438; + this.state = 428; + this.match(FlinkSqlParser.KW_USE); + this.state = 430; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===239) { + switch ( this._interp.adaptivePredict(this._input, 9, this._ctx) ) { + case 1: { - this.state = 437; - this.match(FlinkSqlParser.CATALOG); + this.state = 429; + this.match(FlinkSqlParser.KW_CATALOG); } + break; } - - this.state = 440; + this.state = 432; this.uid(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 441; + this.state = 433; this.useModuleStatement(); } break; @@ -1772,25 +1973,25 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 444; - this.match(FlinkSqlParser.USE); - this.state = 445; - this.match(FlinkSqlParser.MODULES); - this.state = 446; + this.state = 436; + this.match(FlinkSqlParser.KW_USE); + this.state = 437; + this.match(FlinkSqlParser.KW_MODULES); + this.state = 438; this.uid(); - this.state = 451; + this.state = 443; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 447; + this.state = 439; this.match(FlinkSqlParser.COMMA); - this.state = 448; + this.state = 440; this.uid(); } } - this.state = 453; + this.state = 445; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -1816,17 +2017,17 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 26, FlinkSqlParser.RULE_showStatememt); let _la: number; try { - this.state = 489; + this.state = 481; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 17, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 454; - this.match(FlinkSqlParser.SHOW); - this.state = 455; + this.state = 446; + this.match(FlinkSqlParser.KW_SHOW); + this.state = 447; _la = this._input.LA(1); - if(!(_la===193 || ((((_la - 253)) & ~0x1F) === 0 && ((1 << (_la - 253)) & 7) !== 0))) { + if(!(_la===13 || _la===26 || _la===64 || _la===166)) { this._errHandler.recoverInline(this); } else { @@ -1838,13 +2039,13 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 456; - this.match(FlinkSqlParser.SHOW); - this.state = 457; - this.match(FlinkSqlParser.CURRENT); - this.state = 458; + this.state = 448; + this.match(FlinkSqlParser.KW_SHOW); + this.state = 449; + this.match(FlinkSqlParser.KW_CURRENT); + this.state = 450; _la = this._input.LA(1); - if(!(_la===192 || _la===239)) { + if(!(_la===12 || _la===25)) { this._errHandler.recoverInline(this); } else { @@ -1856,35 +2057,35 @@ export default class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(localctx, 3); { - this.state = 459; - this.match(FlinkSqlParser.SHOW); - this.state = 460; - this.match(FlinkSqlParser.TABLES); - this.state = 463; + this.state = 451; + this.match(FlinkSqlParser.KW_SHOW); + this.state = 452; + this.match(FlinkSqlParser.KW_TABLES); + this.state = 455; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===5 || _la===24) { + if (_la===248 || _la===259) { { - this.state = 461; + this.state = 453; _la = this._input.LA(1); - if(!(_la===5 || _la===24)) { + if(!(_la===248 || _la===259)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 462; + this.state = 454; this.uid(); } } - this.state = 466; + this.state = 458; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25 || _la===29) { + if (_la===276 || _la===294) { { - this.state = 465; + this.state = 457; this.likePredicate(); } } @@ -1894,27 +2095,27 @@ export default class FlinkSqlParser extends Parser { case 4: this.enterOuterAlt(localctx, 4); { - this.state = 468; - this.match(FlinkSqlParser.SHOW); - this.state = 469; - this.match(FlinkSqlParser.COLUMNS); - this.state = 470; + this.state = 460; + this.match(FlinkSqlParser.KW_SHOW); + this.state = 461; + this.match(FlinkSqlParser.KW_COLUMNS); + this.state = 462; _la = this._input.LA(1); - if(!(_la===5 || _la===24)) { + if(!(_la===248 || _la===259)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 471; + this.state = 463; this.uid(); - this.state = 473; + this.state = 465; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25 || _la===29) { + if (_la===276 || _la===294) { { - this.state = 472; + this.state = 464; this.likePredicate(); } } @@ -1924,59 +2125,59 @@ export default class FlinkSqlParser extends Parser { case 5: this.enterOuterAlt(localctx, 5); { - this.state = 475; - this.match(FlinkSqlParser.SHOW); - this.state = 476; - this.match(FlinkSqlParser.CREATE); - this.state = 477; + this.state = 467; + this.match(FlinkSqlParser.KW_SHOW); + this.state = 468; + this.match(FlinkSqlParser.KW_CREATE); + this.state = 469; _la = this._input.LA(1); - if(!(_la===74 || _la===76)) { + if(!(_la===165 || _la===337)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 478; + this.state = 470; this.uid(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 479; - this.match(FlinkSqlParser.SHOW); - this.state = 481; + this.state = 471; + this.match(FlinkSqlParser.KW_SHOW); + this.state = 473; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===53) { + if (_la===352) { { - this.state = 480; - this.match(FlinkSqlParser.USER); + this.state = 472; + this.match(FlinkSqlParser.KW_USER); } } - this.state = 483; - this.match(FlinkSqlParser.FUNCTIONS); + this.state = 475; + this.match(FlinkSqlParser.KW_FUNCTIONS); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 484; - this.match(FlinkSqlParser.SHOW); - this.state = 486; + this.state = 476; + this.match(FlinkSqlParser.KW_SHOW); + this.state = 478; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===52) { + if (_la===249) { { - this.state = 485; - this.match(FlinkSqlParser.FULL); + this.state = 477; + this.match(FlinkSqlParser.KW_FULL); } } - this.state = 488; - this.match(FlinkSqlParser.MODULES); + this.state = 480; + this.match(FlinkSqlParser.KW_MODULES); } break; } @@ -2002,20 +2203,20 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 491; - this.match(FlinkSqlParser.LOAD); - this.state = 492; - this.match(FlinkSqlParser.MODULE); - this.state = 493; + this.state = 483; + this.match(FlinkSqlParser.KW_LOAD); + this.state = 484; + this.match(FlinkSqlParser.KW_MODULE); + this.state = 485; this.uid(); - this.state = 496; + this.state = 488; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 18, this._ctx) ) { case 1: { - this.state = 494; - this.match(FlinkSqlParser.WITH); - this.state = 495; + this.state = 486; + this.match(FlinkSqlParser.KW_WITH); + this.state = 487; this.tablePropertyList(); } break; @@ -2043,11 +2244,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 498; - this.match(FlinkSqlParser.UNLOAD); - this.state = 499; - this.match(FlinkSqlParser.MODULE); - this.state = 500; + this.state = 490; + this.match(FlinkSqlParser.KW_UNLOAD); + this.state = 491; + this.match(FlinkSqlParser.KW_MODULE); + this.state = 492; this.uid(); } } @@ -2072,14 +2273,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 502; - this.match(FlinkSqlParser.SET); - this.state = 504; + this.state = 494; + this.match(FlinkSqlParser.KW_SET); + this.state = 496; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 19, this._ctx) ) { case 1: { - this.state = 503; + this.state = 495; this.tableProperty(); } break; @@ -2107,14 +2308,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 506; - this.match(FlinkSqlParser.RESET); - this.state = 508; + this.state = 498; + this.match(FlinkSqlParser.KW_RESET); + this.state = 500; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 20, this._ctx) ) { case 1: { - this.state = 507; + this.state = 499; this.tablePropertyKey(); } break; @@ -2143,18 +2344,18 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 510; + this.state = 502; _la = this._input.LA(1); - if(!(_la===6 || _la===82)) { + if(!(_la===4 || _la===117)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 511; - this.match(FlinkSqlParser.JAR); - this.state = 512; + this.state = 503; + this.match(FlinkSqlParser.KW_JAR); + this.state = 504; this.jarFileName(); } } @@ -2178,28 +2379,28 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 38, FlinkSqlParser.RULE_dtAddStatement); let _la: number; try { - this.state = 553; + this.state = 545; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 24, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 514; - this.match(FlinkSqlParser.ADD); - this.state = 515; - this.match(FlinkSqlParser.JAR); - this.state = 516; - this.match(FlinkSqlParser.WITH); - this.state = 517; + this.state = 506; + this.match(FlinkSqlParser.KW_ADD); + this.state = 507; + this.match(FlinkSqlParser.KW_JAR); + this.state = 508; + this.match(FlinkSqlParser.KW_WITH); + this.state = 509; this.match(FlinkSqlParser.FILE_PATH); - this.state = 520; + this.state = 512; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===7) { + if (_la===183) { { - this.state = 518; - this.match(FlinkSqlParser.AS); - this.state = 519; + this.state = 510; + this.match(FlinkSqlParser.KW_AS); + this.state = 511; this.uid(); } } @@ -2209,34 +2410,34 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 522; - this.match(FlinkSqlParser.ADD); - this.state = 523; - this.match(FlinkSqlParser.FILE); - this.state = 524; - this.match(FlinkSqlParser.WITH); - this.state = 525; + this.state = 514; + this.match(FlinkSqlParser.KW_ADD); + this.state = 515; + this.match(FlinkSqlParser.KW_FILE); + this.state = 516; + this.match(FlinkSqlParser.KW_WITH); + this.state = 517; this.match(FlinkSqlParser.FILE_PATH); - this.state = 528; + this.state = 520; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===7) { + if (_la===183) { { - this.state = 526; - this.match(FlinkSqlParser.AS); - this.state = 527; + this.state = 518; + this.match(FlinkSqlParser.KW_AS); + this.state = 519; this.uid(); } } - this.state = 532; + this.state = 524; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===113) { + if (_la===118) { { - this.state = 530; - this.match(FlinkSqlParser.RENAME); - this.state = 531; + this.state = 522; + this.match(FlinkSqlParser.KW_RENAME); + this.state = 523; this.uid(); } } @@ -2246,58 +2447,58 @@ export default class FlinkSqlParser extends Parser { case 3: this.enterOuterAlt(localctx, 3); { - this.state = 534; - this.match(FlinkSqlParser.ADD); - this.state = 535; + this.state = 526; + this.match(FlinkSqlParser.KW_ADD); + this.state = 527; _la = this._input.LA(1); - if(!(((((_la - 246)) & ~0x1F) === 0 && ((1 << (_la - 246)) & 31) !== 0))) { + if(!(((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & 31) !== 0))) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 536; - this.match(FlinkSqlParser.WITH); - this.state = 537; + this.state = 528; + this.match(FlinkSqlParser.KW_WITH); + this.state = 529; this.match(FlinkSqlParser.FILE_PATH); - this.state = 538; - this.match(FlinkSqlParser.RENAME); - this.state = 539; + this.state = 530; + this.match(FlinkSqlParser.KW_RENAME); + this.state = 531; this.uid(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 540; - this.match(FlinkSqlParser.ADD); - this.state = 541; - this.match(FlinkSqlParser.PYTHON_PARAMETER); - this.state = 542; + this.state = 532; + this.match(FlinkSqlParser.KW_ADD); + this.state = 533; + this.match(FlinkSqlParser.KW_PYTHON_PARAMETER); + this.state = 534; this.match(FlinkSqlParser.FILE_PATH); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 543; - this.match(FlinkSqlParser.ADD); - this.state = 544; - this.match(FlinkSqlParser.ENGINE); - this.state = 545; - this.match(FlinkSqlParser.FILE); - this.state = 546; - this.match(FlinkSqlParser.WITH); - this.state = 547; + this.state = 535; + this.match(FlinkSqlParser.KW_ADD); + this.state = 536; + this.match(FlinkSqlParser.KW_ENGINE); + this.state = 537; + this.match(FlinkSqlParser.KW_FILE); + this.state = 538; + this.match(FlinkSqlParser.KW_WITH); + this.state = 539; this.match(FlinkSqlParser.FILE_PATH); - this.state = 548; - this.match(FlinkSqlParser.RENAME); - this.state = 549; + this.state = 540; + this.match(FlinkSqlParser.KW_RENAME); + this.state = 541; this.uid(); - this.state = 550; - this.match(FlinkSqlParser.KEY); - this.state = 551; + this.state = 542; + this.match(FlinkSqlParser.KW_KEY); + this.state = 543; this.uid(); } break; @@ -2324,18 +2525,18 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 557; + this.state = 549; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 25, this._ctx) ) { case 1: { - this.state = 555; + this.state = 547; this.simpleCreateTable(); } break; case 2: { - this.state = 556; + this.state = 548; this.createTableAsSelect(); } break; @@ -2365,120 +2566,120 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 559; - this.match(FlinkSqlParser.CREATE); - this.state = 561; + this.state = 551; + this.match(FlinkSqlParser.KW_CREATE); + this.state = 553; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===166) { + if (_la===149) { { - this.state = 560; - this.match(FlinkSqlParser.TEMPORARY); + this.state = 552; + this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 563; - this.match(FlinkSqlParser.TABLE); - this.state = 565; + this.state = 555; + this.match(FlinkSqlParser.KW_TABLE); + this.state = 557; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 27, this._ctx) ) { + case 1: { - this.state = 564; + this.state = 556; this.ifNotExists(); } + break; } - - this.state = 567; + this.state = 559; this.sourceTable(); - this.state = 568; + this.state = 560; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 569; + this.state = 561; this.columnOptionDefinition(); - this.state = 574; + this.state = 566; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 28, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 570; + this.state = 562; this.match(FlinkSqlParser.COMMA); - this.state = 571; + this.state = 563; this.columnOptionDefinition(); } } } - this.state = 576; + this.state = 568; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 28, this._ctx); } - this.state = 579; + this.state = 571; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 29, this._ctx) ) { case 1: { - this.state = 577; + this.state = 569; this.match(FlinkSqlParser.COMMA); - this.state = 578; + this.state = 570; this.watermarkDefinition(); } break; } - this.state = 583; + this.state = 575; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 30, this._ctx) ) { case 1: { - this.state = 581; + this.state = 573; this.match(FlinkSqlParser.COMMA); - this.state = 582; + this.state = 574; this.tableConstraint(); } break; } - this.state = 587; + this.state = 579; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===326) { + if (_la===380) { { - this.state = 585; + this.state = 577; this.match(FlinkSqlParser.COMMA); - this.state = 586; + this.state = 578; this.selfDefinitionClause(); } } - this.state = 589; + this.state = 581; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 591; + this.state = 583; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===115) { + if (_la===18) { { - this.state = 590; + this.state = 582; this.commentSpec(); } } - this.state = 594; + this.state = 586; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===200) { + if (_la===94) { { - this.state = 593; + this.state = 585; this.partitionDefinition(); } } - this.state = 596; + this.state = 588; this.withOption(); - this.state = 598; + this.state = 590; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===29) { + if (_la===276) { { - this.state = 597; + this.state = 589; this.likeDefinition(); } } @@ -2507,32 +2708,32 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 600; - this.match(FlinkSqlParser.CREATE); - this.state = 601; - this.match(FlinkSqlParser.TABLE); - this.state = 603; + this.state = 592; + this.match(FlinkSqlParser.KW_CREATE); + this.state = 593; + this.match(FlinkSqlParser.KW_TABLE); + this.state = 595; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 35, this._ctx) ) { + case 1: { - this.state = 602; + this.state = 594; this.ifNotExists(); } + break; } - - this.state = 605; + this.state = 597; this.sourceTable(); - this.state = 606; + this.state = 598; this.withOption(); - this.state = 609; + this.state = 601; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===7) { + if (_la===183) { { - this.state = 607; - this.match(FlinkSqlParser.AS); - this.state = 608; + this.state = 599; + this.match(FlinkSqlParser.KW_AS); + this.state = 600; this.queryStatement(0); } } @@ -2558,27 +2759,27 @@ export default class FlinkSqlParser extends Parser { let localctx: ColumnOptionDefinitionContext = new ColumnOptionDefinitionContext(this, this._ctx, this.state); this.enterRule(localctx, 46, FlinkSqlParser.RULE_columnOptionDefinition); try { - this.state = 614; + this.state = 606; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 37, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 611; + this.state = 603; this.physicalColumnDefinition(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 612; + this.state = 604; this.metadataColumnDefinition(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 613; + this.state = 605; this.computedColumnDefinition(); } break; @@ -2606,26 +2807,26 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 616; + this.state = 608; this.columnName(); - this.state = 617; + this.state = 609; this.columnType(); - this.state = 619; + this.state = 611; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===185 || _la===256) { + if (_la===212 || _la===313) { { - this.state = 618; + this.state = 610; this.columnConstraint(); } } - this.state = 622; + this.state = 614; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===115) { + if (_la===18) { { - this.state = 621; + this.state = 613; this.commentSpec(); } } @@ -2651,20 +2852,20 @@ export default class FlinkSqlParser extends Parser { let localctx: ColumnNameContext = new ColumnNameContext(this, this._ctx, this.state); this.enterRule(localctx, 50, FlinkSqlParser.RULE_columnName); try { - this.state = 626; + this.state = 618; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 40, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 624; + this.state = 616; this.uid(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 625; + this.state = 617; this.expression(); } break; @@ -2692,27 +2893,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 628; + this.state = 620; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 629; + this.state = 621; this.columnName(); - this.state = 634; + this.state = 626; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 630; + this.state = 622; this.match(FlinkSqlParser.COMMA); - this.state = 631; + this.state = 623; this.columnName(); } } - this.state = 636; + this.state = 628; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 637; + this.state = 629; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -2736,18 +2937,18 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 54, FlinkSqlParser.RULE_columnType); let _la: number; try { - this.state = 676; + this.state = 668; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 301: - case 306: - case 309: + case 192: + case 222: + case 295: this.enterOuterAlt(localctx, 1); { - this.state = 639; + this.state = 631; localctx._typeName = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 301)) & ~0x1F) === 0 && ((1 << (_la - 301)) & 289) !== 0))) { + if(!(_la===192 || _la===222 || _la===295)) { localctx._typeName = this._errHandler.recoverInline(this); } else { @@ -2756,192 +2957,192 @@ export default class FlinkSqlParser extends Parser { } } break; - case 283: - case 286: - case 287: - case 288: - case 289: - case 290: - case 294: - case 295: - case 296: - case 297: - case 298: - case 302: - case 304: - case 310: + case 10: + case 145: + case 151: + case 188: + case 189: + case 201: + case 223: + case 264: + case 265: + case 329: + case 340: + case 342: + case 356: + case 357: this.enterOuterAlt(localctx, 2); { - this.state = 640; + this.state = 632; localctx._typeName = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 136902905) !== 0))) { + if(!(_la===10 || _la===145 || _la===151 || ((((_la - 188)) & ~0x1F) === 0 && ((1 << (_la - 188)) & 8195) !== 0) || _la===223 || _la===264 || _la===265 || ((((_la - 329)) & ~0x1F) === 0 && ((1 << (_la - 329)) & 402663425) !== 0))) { localctx._typeName = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 642; + this.state = 634; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===322) { + if (_la===376) { { - this.state = 641; + this.state = 633; this.lengthOneDimension(); } } } break; - case 303: + case 341: this.enterOuterAlt(localctx, 3); { - this.state = 644; - localctx._typeName = this.match(FlinkSqlParser.TIMESTAMP); + this.state = 636; + localctx._typeName = this.match(FlinkSqlParser.KW_TIMESTAMP); + this.state = 638; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===376) { + { + this.state = 637; + this.lengthOneDimension(); + } + } + this.state = 646; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===322) { + if (_la===361 || _la===363) { { - this.state = 645; - this.lengthOneDimension(); - } - } - - this.state = 654; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===70 || _la===71) { - { - this.state = 648; + this.state = 640; _la = this._input.LA(1); - if(!(_la===70 || _la===71)) { + if(!(_la===361 || _la===363)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 650; + this.state = 642; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===224) { + if (_la===278) { { - this.state = 649; - this.match(FlinkSqlParser.LOCAL); + this.state = 641; + this.match(FlinkSqlParser.KW_LOCAL); } } - this.state = 652; - this.match(FlinkSqlParser.TIME); - this.state = 653; - this.match(FlinkSqlParser.ZONE); + this.state = 644; + this.match(FlinkSqlParser.KW_TIME); + this.state = 645; + this.match(FlinkSqlParser.KW_ZONE); } } } break; - case 291: - case 292: - case 293: - case 299: - case 300: + case 225: + case 226: + case 233: + case 246: + case 296: this.enterOuterAlt(localctx, 4); { - this.state = 656; + this.state = 648; localctx._typeName = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 291)) & ~0x1F) === 0 && ((1 << (_la - 291)) & 775) !== 0))) { + if(!(((((_la - 225)) & ~0x1F) === 0 && ((1 << (_la - 225)) & 2097411) !== 0) || _la===296)) { localctx._typeName = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 658; + this.state = 650; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===322) { + if (_la===376) { { - this.state = 657; + this.state = 649; this.lengthTwoOptionalDimension(); } } } break; - case 284: - case 305: + case 182: + case 289: this.enterOuterAlt(localctx, 5); { - this.state = 660; + this.state = 652; localctx._type_ = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===284 || _la===305)) { + if(!(_la===182 || _la===289)) { localctx._type_ = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 662; + this.state = 654; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===313) { + if (_la===367) { { - this.state = 661; + this.state = 653; this.lengthOneTypeDimension(); } } } break; - case 285: + case 76: this.enterOuterAlt(localctx, 6); { - this.state = 664; - localctx._type_ = this.match(FlinkSqlParser.MAP); - this.state = 666; + this.state = 656; + localctx._type_ = this.match(FlinkSqlParser.KW_MAP); + this.state = 658; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===313) { + if (_la===367) { { - this.state = 665; + this.state = 657; this.mapTypeDimension(); } } } break; - case 308: + case 322: this.enterOuterAlt(localctx, 7); { - this.state = 668; - localctx._type_ = this.match(FlinkSqlParser.ROW); - this.state = 670; + this.state = 660; + localctx._type_ = this.match(FlinkSqlParser.KW_ROW); + this.state = 662; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===313) { + if (_la===367) { { - this.state = 669; + this.state = 661; this.rowTypeDimension(); } } } break; - case 307: + case 114: this.enterOuterAlt(localctx, 8); { - this.state = 672; - localctx._type_ = this.match(FlinkSqlParser.RAW); - this.state = 674; + this.state = 664; + localctx._type_ = this.match(FlinkSqlParser.KW_RAW); + this.state = 666; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===322) { + if (_la===376) { { - this.state = 673; + this.state = 665; this.lengthTwoStringDimension(); } } @@ -2973,11 +3174,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 678; + this.state = 670; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 679; + this.state = 671; this.decimalLiteral(); - this.state = 680; + this.state = 672; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3003,23 +3204,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 682; + this.state = 674; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 683; + this.state = 675; this.decimalLiteral(); - this.state = 686; + this.state = 678; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===326) { + if (_la===380) { { - this.state = 684; + this.state = 676; this.match(FlinkSqlParser.COMMA); - this.state = 685; + this.state = 677; this.decimalLiteral(); } } - this.state = 688; + this.state = 680; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3045,23 +3246,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 690; + this.state = 682; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 691; + this.state = 683; this.stringLiteral(); - this.state = 694; + this.state = 686; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===326) { + if (_la===380) { { - this.state = 692; + this.state = 684; this.match(FlinkSqlParser.COMMA); - this.state = 693; + this.state = 685; this.stringLiteral(); } } - this.state = 696; + this.state = 688; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3086,11 +3287,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 698; + this.state = 690; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 699; + this.state = 691; this.columnType(); - this.state = 700; + this.state = 692; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3115,17 +3316,17 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 702; + this.state = 694; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 703; + this.state = 695; this.columnType(); { - this.state = 704; + this.state = 696; this.match(FlinkSqlParser.COMMA); - this.state = 705; + this.state = 697; this.columnType(); } - this.state = 707; + this.state = 699; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3151,31 +3352,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 709; + this.state = 701; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 710; + this.state = 702; this.columnName(); - this.state = 711; + this.state = 703; this.columnType(); - this.state = 718; + this.state = 710; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 712; + this.state = 704; this.match(FlinkSqlParser.COMMA); - this.state = 713; + this.state = 705; this.columnName(); - this.state = 714; + this.state = 706; this.columnType(); } } - this.state = 720; + this.state = 712; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 721; + this.state = 713; this.match(FlinkSqlParser.GREATER_SYMBOL); } } @@ -3201,26 +3402,26 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 725; + this.state = 717; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===185) { + if (_la===212) { { - this.state = 723; - this.match(FlinkSqlParser.CONSTRAINT); - this.state = 724; + this.state = 715; + this.match(FlinkSqlParser.KW_CONSTRAINT); + this.state = 716; this.constraintName(); } } - this.state = 727; - this.match(FlinkSqlParser.PRIMARY); - this.state = 728; - this.match(FlinkSqlParser.KEY); - this.state = 729; - this.match(FlinkSqlParser.NOT); - this.state = 730; - this.match(FlinkSqlParser.ENFORCED); + this.state = 719; + this.match(FlinkSqlParser.KW_PRIMARY); + this.state = 720; + this.match(FlinkSqlParser.KW_KEY); + this.state = 721; + this.match(FlinkSqlParser.KW_NOT); + this.state = 722; + this.match(FlinkSqlParser.KW_ENFORCED); } } catch (re) { @@ -3244,9 +3445,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 732; - this.match(FlinkSqlParser.COMMENT); - this.state = 733; + this.state = 724; + this.match(FlinkSqlParser.KW_COMMENT); + this.state = 725; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3272,31 +3473,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 735; + this.state = 727; this.columnName(); - this.state = 736; + this.state = 728; this.columnType(); - this.state = 737; - this.match(FlinkSqlParser.METADATA); - this.state = 740; + this.state = 729; + this.match(FlinkSqlParser.KW_METADATA); + this.state = 732; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===5) { + if (_la===248) { { - this.state = 738; - this.match(FlinkSqlParser.FROM); - this.state = 739; + this.state = 730; + this.match(FlinkSqlParser.KW_FROM); + this.state = 731; this.metadataKey(); } } - this.state = 743; + this.state = 735; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===263) { + if (_la===167) { { - this.state = 742; - this.match(FlinkSqlParser.VIRTUAL); + this.state = 734; + this.match(FlinkSqlParser.KW_VIRTUAL); } } @@ -3323,7 +3524,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 745; + this.state = 737; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3349,18 +3550,18 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 747; + this.state = 739; this.columnName(); - this.state = 748; - this.match(FlinkSqlParser.AS); - this.state = 749; + this.state = 740; + this.match(FlinkSqlParser.KW_AS); + this.state = 741; this.computedColumnExpression(); - this.state = 751; + this.state = 743; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===115) { + if (_la===18) { { - this.state = 750; + this.state = 742; this.commentSpec(); } } @@ -3388,7 +3589,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 753; + this.state = 745; this.expression(); } } @@ -3413,15 +3614,15 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 755; - this.match(FlinkSqlParser.WATERMARK); - this.state = 756; - this.match(FlinkSqlParser.FOR); - this.state = 757; + this.state = 747; + this.match(FlinkSqlParser.KW_WATERMARK); + this.state = 748; + this.match(FlinkSqlParser.KW_FOR); + this.state = 749; this.expression(); - this.state = 758; - this.match(FlinkSqlParser.AS); - this.state = 759; + this.state = 750; + this.match(FlinkSqlParser.KW_AS); + this.state = 751; this.expression(); } } @@ -3447,28 +3648,28 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 763; + this.state = 755; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===185) { + if (_la===212) { { - this.state = 761; - this.match(FlinkSqlParser.CONSTRAINT); - this.state = 762; + this.state = 753; + this.match(FlinkSqlParser.KW_CONSTRAINT); + this.state = 754; this.constraintName(); } } - this.state = 765; - this.match(FlinkSqlParser.PRIMARY); - this.state = 766; - this.match(FlinkSqlParser.KEY); - this.state = 767; + this.state = 757; + this.match(FlinkSqlParser.KW_PRIMARY); + this.state = 758; + this.match(FlinkSqlParser.KW_KEY); + this.state = 759; this.columnNameList(); - this.state = 768; - this.match(FlinkSqlParser.NOT); - this.state = 769; - this.match(FlinkSqlParser.ENFORCED); + this.state = 760; + this.match(FlinkSqlParser.KW_NOT); + this.state = 761; + this.match(FlinkSqlParser.KW_ENFORCED); } } catch (re) { @@ -3492,7 +3693,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 771; + this.state = 763; this.identifier(); } } @@ -3517,12 +3718,12 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 773; - this.match(FlinkSqlParser.PERIOD); - this.state = 774; - this.match(FlinkSqlParser.FOR); - this.state = 775; - this.match(FlinkSqlParser.SYSTEM_TIME); + this.state = 765; + this.match(FlinkSqlParser.KW_PERIOD); + this.state = 766; + this.match(FlinkSqlParser.KW_FOR); + this.state = 767; + this.match(FlinkSqlParser.KW_SYSTEM_TIME); } } catch (re) { @@ -3546,11 +3747,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 777; - this.match(FlinkSqlParser.PARTITIONED); - this.state = 778; - this.match(FlinkSqlParser.BY); - this.state = 779; + this.state = 769; + this.match(FlinkSqlParser.KW_PARTITIONED); + this.state = 770; + this.match(FlinkSqlParser.KW_BY); + this.state = 771; this.transformList(); } } @@ -3576,27 +3777,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 781; + this.state = 773; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 782; + this.state = 774; this.transform(); - this.state = 787; + this.state = 779; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 783; + this.state = 775; this.match(FlinkSqlParser.COMMA); - this.state = 784; + this.state = 776; this.transform(); } } - this.state = 789; + this.state = 781; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 790; + this.state = 782; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3620,14 +3821,14 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 92, FlinkSqlParser.RULE_transform); let _la: number; try { - this.state = 805; + this.state = 797; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 62, this._ctx) ) { case 1: localctx = new IdentityTransformContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 792; + this.state = 784; this.qualifiedName(); } break; @@ -3635,29 +3836,29 @@ export default class FlinkSqlParser extends Parser { localctx = new ApplyTransformContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 793; + this.state = 785; (localctx as ApplyTransformContext)._transformName = this.identifier(); - this.state = 794; + this.state = 786; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 795; + this.state = 787; this.transformArgument(); - this.state = 800; + this.state = 792; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 796; + this.state = 788; this.match(FlinkSqlParser.COMMA); - this.state = 797; + this.state = 789; this.transformArgument(); } } - this.state = 802; + this.state = 794; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 803; + this.state = 795; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3682,20 +3883,20 @@ export default class FlinkSqlParser extends Parser { let localctx: TransformArgumentContext = new TransformArgumentContext(this, this._ctx, this.state); this.enterRule(localctx, 94, FlinkSqlParser.RULE_transformArgument); try { - this.state = 809; + this.state = 801; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 63, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 807; + this.state = 799; this.qualifiedName(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 808; + this.state = 800; this.constant(); } break; @@ -3723,32 +3924,32 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 811; - this.match(FlinkSqlParser.LIKE); - this.state = 812; + this.state = 803; + this.match(FlinkSqlParser.KW_LIKE); + this.state = 804; this.sourceTable(); - this.state = 821; + this.state = 813; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 65, this._ctx) ) { case 1: { - this.state = 813; + this.state = 805; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 817; + this.state = 809; this._errHandler.sync(this); _la = this._input.LA(1); - while (((((_la - 233)) & ~0x1F) === 0 && ((1 << (_la - 233)) & 7) !== 0)) { + while (_la===40 || _la===93 || _la===260) { { { - this.state = 814; + this.state = 806; this.likeOption(); } } - this.state = 819; + this.state = 811; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 820; + this.state = 812; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3776,7 +3977,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 823; + this.state = 815; this.uid(); } } @@ -3800,25 +4001,25 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 100, FlinkSqlParser.RULE_likeOption); let _la: number; try { - this.state = 829; + this.state = 821; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 66, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { { - this.state = 825; + this.state = 817; _la = this._input.LA(1); - if(!(_la===233 || _la===234)) { + if(!(_la===40 || _la===260)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 826; + this.state = 818; _la = this._input.LA(1); - if(!(_la===8 || _la===102 || _la===236)) { + if(!(_la===21 || _la===95 || _la===176)) { this._errHandler.recoverInline(this); } else { @@ -3832,18 +4033,18 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 2); { { - this.state = 827; + this.state = 819; _la = this._input.LA(1); - if(!(((((_la - 233)) & ~0x1F) === 0 && ((1 << (_la - 233)) & 7) !== 0))) { + if(!(_la===40 || _la===93 || _la===260)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 828; + this.state = 820; _la = this._input.LA(1); - if(!(_la===167 || _la===237 || _la===238)) { + if(!(_la===52 || _la===89 || _la===169)) { this._errHandler.recoverInline(this); } else { @@ -3876,13 +4077,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 831; - this.match(FlinkSqlParser.CREATE); - this.state = 832; - this.match(FlinkSqlParser.CATALOG); - this.state = 833; + this.state = 823; + this.match(FlinkSqlParser.KW_CREATE); + this.state = 824; + this.match(FlinkSqlParser.KW_CATALOG); + this.state = 825; this.uid(); - this.state = 834; + this.state = 826; this.withOption(); } } @@ -3908,33 +4109,33 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 836; - this.match(FlinkSqlParser.CREATE); - this.state = 837; - this.match(FlinkSqlParser.DATABASE); - this.state = 839; + this.state = 828; + this.match(FlinkSqlParser.KW_CREATE); + this.state = 829; + this.match(FlinkSqlParser.KW_DATABASE); + this.state = 831; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 67, this._ctx) ) { + case 1: { - this.state = 838; + this.state = 830; this.ifNotExists(); } + break; } - - this.state = 841; + this.state = 833; this.uid(); - this.state = 843; + this.state = 835; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===115) { + if (_la===18) { { - this.state = 842; + this.state = 834; this.commentSpec(); } } - this.state = 845; + this.state = 837; this.withOption(); } } @@ -3960,55 +4161,55 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { + this.state = 839; + this.match(FlinkSqlParser.KW_CREATE); + this.state = 841; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===149) { + { + this.state = 840; + this.match(FlinkSqlParser.KW_TEMPORARY); + } + } + + this.state = 843; + this.match(FlinkSqlParser.KW_VIEW); + this.state = 845; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 70, this._ctx) ) { + case 1: + { + this.state = 844; + this.ifNotExists(); + } + break; + } this.state = 847; - this.match(FlinkSqlParser.CREATE); + this.uid(); this.state = 849; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===166) { + if (_la===376) { { this.state = 848; - this.match(FlinkSqlParser.TEMPORARY); - } - } - - this.state = 851; - this.match(FlinkSqlParser.VIEW); - this.state = 853; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { - { - this.state = 852; - this.ifNotExists(); - } - } - - this.state = 855; - this.uid(); - this.state = 857; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===322) { - { - this.state = 856; this.columnNameList(); } } - this.state = 860; + this.state = 852; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===115) { + if (_la===18) { { - this.state = 859; + this.state = 851; this.commentSpec(); } } - this.state = 862; - this.match(FlinkSqlParser.AS); - this.state = 863; + this.state = 854; + this.match(FlinkSqlParser.KW_AS); + this.state = 855; this.queryStatement(0); } } @@ -4034,54 +4235,54 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 865; - this.match(FlinkSqlParser.CREATE); - this.state = 869; + this.state = 857; + this.match(FlinkSqlParser.KW_CREATE); + this.state = 861; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 73, this._ctx) ) { case 1: { - this.state = 866; - this.match(FlinkSqlParser.TEMPORARY); + this.state = 858; + this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 867; - this.match(FlinkSqlParser.TEMPORARY); - this.state = 868; - this.match(FlinkSqlParser.SYSTEM); + this.state = 859; + this.match(FlinkSqlParser.KW_TEMPORARY); + this.state = 860; + this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 871; - this.match(FlinkSqlParser.FUNCTION); - this.state = 873; + this.state = 863; + this.match(FlinkSqlParser.KW_FUNCTION); + this.state = 865; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 74, this._ctx) ) { + case 1: { - this.state = 872; + this.state = 864; this.ifNotExists(); } + break; } - - this.state = 875; + this.state = 867; this.uid(); - this.state = 876; - this.match(FlinkSqlParser.AS); - this.state = 877; + this.state = 868; + this.match(FlinkSqlParser.KW_AS); + this.state = 869; this.identifier(); - this.state = 880; + this.state = 872; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===240) { + if (_la===272) { { - this.state = 878; - this.match(FlinkSqlParser.LANGUAGE); - this.state = 879; + this.state = 870; + this.match(FlinkSqlParser.KW_LANGUAGE); + this.state = 871; _la = this._input.LA(1); - if(!(((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 7) !== 0))) { + if(!(_la===65 || _la===106 || _la===125)) { this._errHandler.recoverInline(this); } else { @@ -4091,12 +4292,12 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 883; + this.state = 875; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===143) { + if (_la===353) { { - this.state = 882; + this.state = 874; this.usingClause(); } } @@ -4125,27 +4326,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 885; - this.match(FlinkSqlParser.USING); - this.state = 886; - this.match(FlinkSqlParser.JAR); - this.state = 887; + this.state = 877; + this.match(FlinkSqlParser.KW_USING); + this.state = 878; + this.match(FlinkSqlParser.KW_JAR); + this.state = 879; this.jarFileName(); - this.state = 893; + this.state = 885; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 888; + this.state = 880; this.match(FlinkSqlParser.COMMA); - this.state = 889; - this.match(FlinkSqlParser.JAR); - this.state = 890; + this.state = 881; + this.match(FlinkSqlParser.KW_JAR); + this.state = 882; this.jarFileName(); } } - this.state = 895; + this.state = 887; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -4172,7 +4373,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 896; + this.state = 888; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -4194,56 +4395,55 @@ export default class FlinkSqlParser extends Parser { public alterTable(): AlterTableContext { let localctx: AlterTableContext = new AlterTableContext(this, this._ctx, this.state); this.enterRule(localctx, 114, FlinkSqlParser.RULE_alterTable); - let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 898; - this.match(FlinkSqlParser.ALTER); - this.state = 899; - this.match(FlinkSqlParser.TABLE); - this.state = 901; + this.state = 890; + this.match(FlinkSqlParser.KW_ALTER); + this.state = 891; + this.match(FlinkSqlParser.KW_TABLE); + this.state = 893; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 78, this._ctx) ) { + case 1: { - this.state = 900; + this.state = 892; this.ifExists(); } + break; } - - this.state = 903; + this.state = 895; this.uid(); - this.state = 909; + this.state = 901; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 79, this._ctx) ) { case 1: { - this.state = 904; + this.state = 896; this.renameDefinition(); } break; case 2: { - this.state = 905; + this.state = 897; this.setKeyValueDefinition(); } break; case 3: { - this.state = 906; + this.state = 898; this.addConstraint(); } break; case 4: { - this.state = 907; + this.state = 899; this.dropConstraint(); } break; case 5: { - this.state = 908; + this.state = 900; this.addUnique(); } break; @@ -4272,21 +4472,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 911; - this.match(FlinkSqlParser.RENAME); - this.state = 913; + this.state = 903; + this.match(FlinkSqlParser.KW_RENAME); + this.state = 905; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===347) { + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967295) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 32767) !== 0) || ((((_la - 397)) & ~0x1F) === 0 && ((1 << (_la - 397)) & 19) !== 0)) { { - this.state = 912; + this.state = 904; this.uid(); } } - this.state = 915; - this.match(FlinkSqlParser.TO); - this.state = 916; + this.state = 907; + this.match(FlinkSqlParser.KW_TO); + this.state = 908; this.uid(); } } @@ -4311,9 +4511,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 918; - this.match(FlinkSqlParser.SET); - this.state = 919; + this.state = 910; + this.match(FlinkSqlParser.KW_SET); + this.state = 911; this.tablePropertyList(); } } @@ -4339,24 +4539,24 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 921; - this.match(FlinkSqlParser.ADD); - this.state = 922; - this.match(FlinkSqlParser.CONSTRAINT); - this.state = 923; + this.state = 913; + this.match(FlinkSqlParser.KW_ADD); + this.state = 914; + this.match(FlinkSqlParser.KW_CONSTRAINT); + this.state = 915; this.constraintName(); - this.state = 924; - this.match(FlinkSqlParser.PRIMARY); - this.state = 925; - this.match(FlinkSqlParser.KEY); - this.state = 926; + this.state = 916; + this.match(FlinkSqlParser.KW_PRIMARY); + this.state = 917; + this.match(FlinkSqlParser.KW_KEY); + this.state = 918; this.columnNameList(); - this.state = 928; + this.state = 920; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 927; + this.state = 919; this.notForced(); } } @@ -4384,11 +4584,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 930; - this.match(FlinkSqlParser.DROP); - this.state = 931; - this.match(FlinkSqlParser.CONSTRAINT); - this.state = 932; + this.state = 922; + this.match(FlinkSqlParser.KW_DROP); + this.state = 923; + this.match(FlinkSqlParser.KW_CONSTRAINT); + this.state = 924; this.constraintName(); } } @@ -4413,11 +4613,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 934; - this.match(FlinkSqlParser.ADD); - this.state = 935; - this.match(FlinkSqlParser.UNIQUE); - this.state = 936; + this.state = 926; + this.match(FlinkSqlParser.KW_ADD); + this.state = 927; + this.match(FlinkSqlParser.KW_UNIQUE); + this.state = 928; this.columnNameList(); } } @@ -4442,10 +4642,10 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 938; - this.match(FlinkSqlParser.NOT); - this.state = 939; - this.match(FlinkSqlParser.ENFORCED); + this.state = 930; + this.match(FlinkSqlParser.KW_NOT); + this.state = 931; + this.match(FlinkSqlParser.KW_ENFORCED); } } catch (re) { @@ -4469,26 +4669,26 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 941; - this.match(FlinkSqlParser.ALTER); - this.state = 942; - this.match(FlinkSqlParser.VIEW); - this.state = 943; + this.state = 933; + this.match(FlinkSqlParser.KW_ALTER); + this.state = 934; + this.match(FlinkSqlParser.KW_VIEW); + this.state = 935; this.uid(); - this.state = 947; + this.state = 939; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 113: + case 118: { - this.state = 944; + this.state = 936; this.renameDefinition(); } break; - case 7: + case 183: { - this.state = 945; - this.match(FlinkSqlParser.AS); - this.state = 946; + this.state = 937; + this.match(FlinkSqlParser.KW_AS); + this.state = 938; this.queryStatement(0); } break; @@ -4518,13 +4718,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 949; - this.match(FlinkSqlParser.ALTER); - this.state = 950; - this.match(FlinkSqlParser.DATABASE); - this.state = 951; + this.state = 941; + this.match(FlinkSqlParser.KW_ALTER); + this.state = 942; + this.match(FlinkSqlParser.KW_DATABASE); + this.state = 943; this.uid(); - this.state = 952; + this.state = 944; this.setKeyValueDefinition(); } } @@ -4550,54 +4750,54 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 954; - this.match(FlinkSqlParser.ALTER); - this.state = 958; + this.state = 946; + this.match(FlinkSqlParser.KW_ALTER); + this.state = 950; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 83, this._ctx) ) { case 1: { - this.state = 955; - this.match(FlinkSqlParser.TEMPORARY); + this.state = 947; + this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 956; - this.match(FlinkSqlParser.TEMPORARY); - this.state = 957; - this.match(FlinkSqlParser.SYSTEM); + this.state = 948; + this.match(FlinkSqlParser.KW_TEMPORARY); + this.state = 949; + this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 960; - this.match(FlinkSqlParser.FUNCTION); - this.state = 962; + this.state = 952; + this.match(FlinkSqlParser.KW_FUNCTION); + this.state = 954; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 84, this._ctx) ) { + case 1: { - this.state = 961; + this.state = 953; this.ifExists(); } + break; } - - this.state = 964; + this.state = 956; this.uid(); - this.state = 965; - this.match(FlinkSqlParser.AS); - this.state = 966; + this.state = 957; + this.match(FlinkSqlParser.KW_AS); + this.state = 958; this.identifier(); - this.state = 969; + this.state = 961; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===240) { + if (_la===272) { { - this.state = 967; - this.match(FlinkSqlParser.LANGUAGE); - this.state = 968; + this.state = 959; + this.match(FlinkSqlParser.KW_LANGUAGE); + this.state = 960; _la = this._input.LA(1); - if(!(((((_la - 241)) & ~0x1F) === 0 && ((1 << (_la - 241)) & 7) !== 0))) { + if(!(_la===65 || _la===106 || _la===125)) { this._errHandler.recoverInline(this); } else { @@ -4627,25 +4827,24 @@ export default class FlinkSqlParser extends Parser { public dropCatalog(): DropCatalogContext { let localctx: DropCatalogContext = new DropCatalogContext(this, this._ctx, this.state); this.enterRule(localctx, 134, FlinkSqlParser.RULE_dropCatalog); - let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 971; - this.match(FlinkSqlParser.DROP); - this.state = 972; - this.match(FlinkSqlParser.CATALOG); - this.state = 974; + this.state = 963; + this.match(FlinkSqlParser.KW_DROP); + this.state = 964; + this.match(FlinkSqlParser.KW_CATALOG); + this.state = 966; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 86, this._ctx) ) { + case 1: { - this.state = 973; + this.state = 965; this.ifExists(); } + break; } - - this.state = 976; + this.state = 968; this.uid(); } } @@ -4671,31 +4870,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 978; - this.match(FlinkSqlParser.DROP); - this.state = 980; + this.state = 970; + this.match(FlinkSqlParser.KW_DROP); + this.state = 972; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===166) { + if (_la===149) { { - this.state = 979; - this.match(FlinkSqlParser.TEMPORARY); + this.state = 971; + this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 982; - this.match(FlinkSqlParser.TABLE); - this.state = 984; + this.state = 974; + this.match(FlinkSqlParser.KW_TABLE); + this.state = 976; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 88, this._ctx) ) { + case 1: { - this.state = 983; + this.state = 975; this.ifExists(); } + break; } - - this.state = 986; + this.state = 978; this.uid(); } } @@ -4721,31 +4920,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 988; - this.match(FlinkSqlParser.DROP); - this.state = 989; - this.match(FlinkSqlParser.DATABASE); - this.state = 991; + this.state = 980; + this.match(FlinkSqlParser.KW_DROP); + this.state = 981; + this.match(FlinkSqlParser.KW_DATABASE); + this.state = 983; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 89, this._ctx) ) { + case 1: { - this.state = 990; + this.state = 982; this.ifExists(); } + break; } - - this.state = 993; + this.state = 985; this.uid(); - this.state = 995; + this.state = 987; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===184 || _la===186) { + if (_la===11 || _la===122) { { - this.state = 994; + this.state = 986; localctx._dropType = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===184 || _la===186)) { + if(!(_la===11 || _la===122)) { localctx._dropType = this._errHandler.recoverInline(this); } else { @@ -4779,31 +4978,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 997; - this.match(FlinkSqlParser.DROP); - this.state = 999; + this.state = 989; + this.match(FlinkSqlParser.KW_DROP); + this.state = 991; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===166) { + if (_la===149) { { - this.state = 998; - this.match(FlinkSqlParser.TEMPORARY); + this.state = 990; + this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 1001; - this.match(FlinkSqlParser.VIEW); - this.state = 1003; + this.state = 993; + this.match(FlinkSqlParser.KW_VIEW); + this.state = 995; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 92, this._ctx) ) { + case 1: { - this.state = 1002; + this.state = 994; this.ifExists(); } + break; } - - this.state = 1005; + this.state = 997; this.uid(); } } @@ -4825,43 +5024,42 @@ export default class FlinkSqlParser extends Parser { public dropFunction(): DropFunctionContext { let localctx: DropFunctionContext = new DropFunctionContext(this, this._ctx, this.state); this.enterRule(localctx, 142, FlinkSqlParser.RULE_dropFunction); - let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1007; - this.match(FlinkSqlParser.DROP); - this.state = 1011; + this.state = 999; + this.match(FlinkSqlParser.KW_DROP); + this.state = 1003; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 93, this._ctx) ) { case 1: { - this.state = 1008; - this.match(FlinkSqlParser.TEMPORARY); + this.state = 1000; + this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 1009; - this.match(FlinkSqlParser.TEMPORARY); - this.state = 1010; - this.match(FlinkSqlParser.SYSTEM); + this.state = 1001; + this.match(FlinkSqlParser.KW_TEMPORARY); + this.state = 1002; + this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 1013; - this.match(FlinkSqlParser.FUNCTION); - this.state = 1015; + this.state = 1005; + this.match(FlinkSqlParser.KW_FUNCTION); + this.state = 1007; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===128) { + switch ( this._interp.adaptivePredict(this._input, 94, this._ctx) ) { + case 1: { - this.state = 1014; + this.state = 1006; this.ifExists(); } + break; } - - this.state = 1017; + this.state = 1009; this.uid(); } } @@ -4885,24 +5083,24 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 144, FlinkSqlParser.RULE_insertStatement); let _la: number; try { - this.state = 1025; + this.state = 1017; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 96, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { { - this.state = 1020; + this.state = 1012; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===78) { + if (_la===240) { { - this.state = 1019; - this.match(FlinkSqlParser.EXECUTE); + this.state = 1011; + this.match(FlinkSqlParser.KW_EXECUTE); } } - this.state = 1022; + this.state = 1014; this.insertSimpleStatement(); } } @@ -4911,9 +5109,9 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 2); { { - this.state = 1023; - this.match(FlinkSqlParser.EXECUTE); - this.state = 1024; + this.state = 1015; + this.match(FlinkSqlParser.KW_EXECUTE); + this.state = 1016; this.insertMulStatement(); } } @@ -4942,51 +5140,51 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1027; - this.match(FlinkSqlParser.INSERT); - this.state = 1028; + this.state = 1019; + this.match(FlinkSqlParser.KW_INSERT); + this.state = 1020; _la = this._input.LA(1); - if(!(_la===83 || _la===140)) { + if(!(_la===92 || _la===268)) { this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1029; + this.state = 1021; this.uid(); - this.state = 1038; + this.state = 1030; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 99, this._ctx) ) { case 1: { - this.state = 1031; + this.state = 1023; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===60) { + if (_la===307) { { - this.state = 1030; + this.state = 1022; this.insertPartitionDefinition(); } } - this.state = 1034; + this.state = 1026; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 98, this._ctx) ) { case 1: { - this.state = 1033; + this.state = 1025; this.columnNameList(); } break; } - this.state = 1036; + this.state = 1028; this.queryStatement(0); } break; case 2: { - this.state = 1037; + this.state = 1029; this.valuesDefinition(); } break; @@ -5014,9 +5212,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1040; - this.match(FlinkSqlParser.PARTITION); - this.state = 1041; + this.state = 1032; + this.match(FlinkSqlParser.KW_PARTITION); + this.state = 1033; this.tablePropertyList(); } } @@ -5042,23 +5240,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1043; - this.match(FlinkSqlParser.VALUES); - this.state = 1044; + this.state = 1035; + this.match(FlinkSqlParser.KW_VALUES); + this.state = 1036; this.valuesRowDefinition(); - this.state = 1049; + this.state = 1041; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1045; + this.state = 1037; this.match(FlinkSqlParser.COMMA); - this.state = 1046; + this.state = 1038; this.valuesRowDefinition(); } } - this.state = 1051; + this.state = 1043; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5086,27 +5284,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1052; + this.state = 1044; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1053; + this.state = 1045; this.constant(); - this.state = 1058; + this.state = 1050; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1054; + this.state = 1046; this.match(FlinkSqlParser.COMMA); - this.state = 1055; + this.state = 1047; this.constant(); } } - this.state = 1060; + this.state = 1052; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1061; + this.state = 1053; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5132,30 +5330,30 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1063; - this.match(FlinkSqlParser.STATEMENT); - this.state = 1064; - this.match(FlinkSqlParser.SET); - this.state = 1065; - this.match(FlinkSqlParser.BEGIN); - this.state = 1069; + this.state = 1055; + this.match(FlinkSqlParser.KW_STATEMENT); + this.state = 1056; + this.match(FlinkSqlParser.KW_SET); + this.state = 1057; + this.match(FlinkSqlParser.KW_BEGIN); + this.state = 1061; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1066; + this.state = 1058; this.insertSimpleStatement(); - this.state = 1067; + this.state = 1059; this.match(FlinkSqlParser.SEMICOLON); } } - this.state = 1071; + this.state = 1063; this._errHandler.sync(this); _la = this._input.LA(1); - } while (_la===80); - this.state = 1073; - this.match(FlinkSqlParser.END); + } while (_la===263); + this.state = 1065; + this.match(FlinkSqlParser.KW_END); } } catch (re) { @@ -5192,53 +5390,53 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1098; + this.state = 1090; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 107, this._ctx) ) { case 1: { - this.state = 1076; + this.state = 1068; this.valuesCaluse(); } break; case 2: { - this.state = 1077; + this.state = 1069; this.withClause(); - this.state = 1078; + this.state = 1070; this.queryStatement(5); } break; case 3: { - this.state = 1080; + this.state = 1072; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1081; + this.state = 1073; this.queryStatement(0); - this.state = 1082; + this.state = 1074; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: { - this.state = 1084; + this.state = 1076; this.selectClause(); - this.state = 1086; + this.state = 1078; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 103, this._ctx) ) { case 1: { - this.state = 1085; + this.state = 1077; this.orderByCaluse(); } break; } - this.state = 1089; + this.state = 1081; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 104, this._ctx) ) { case 1: { - this.state = 1088; + this.state = 1080; this.limitClause(); } break; @@ -5247,24 +5445,24 @@ export default class FlinkSqlParser extends Parser { break; case 5: { - this.state = 1091; + this.state = 1083; this.selectStatement(); - this.state = 1093; + this.state = 1085; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 105, this._ctx) ) { case 1: { - this.state = 1092; + this.state = 1084; this.orderByCaluse(); } break; } - this.state = 1096; + this.state = 1088; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 106, this._ctx) ) { case 1: { - this.state = 1095; + this.state = 1087; this.limitClause(); } break; @@ -5273,7 +5471,7 @@ export default class FlinkSqlParser extends Parser { break; } this._ctx.stop = this._input.LT(-1); - this.state = 1114; + this.state = 1106; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 111, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -5287,48 +5485,48 @@ export default class FlinkSqlParser extends Parser { localctx = new QueryStatementContext(this, _parentctx, _parentState); localctx._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_queryStatement); - this.state = 1100; + this.state = 1092; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1101; + this.state = 1093; localctx._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 105)) & ~0x1F) === 0 && ((1 << (_la - 105)) & 11) !== 0))) { + if(!(_la===239 || _la===266 || _la===346)) { localctx._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1103; + this.state = 1095; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===8) { + if (_la===176) { { - this.state = 1102; - this.match(FlinkSqlParser.ALL); + this.state = 1094; + this.match(FlinkSqlParser.KW_ALL); } } - this.state = 1105; + this.state = 1097; localctx._right = this.queryStatement(0); - this.state = 1107; + this.state = 1099; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 109, this._ctx) ) { case 1: { - this.state = 1106; + this.state = 1098; this.orderByCaluse(); } break; } - this.state = 1110; + this.state = 1102; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 110, this._ctx) ) { case 1: { - this.state = 1109; + this.state = 1101; this.limitClause(); } break; @@ -5336,7 +5534,7 @@ export default class FlinkSqlParser extends Parser { } } } - this.state = 1116; + this.state = 1108; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 111, this._ctx); } @@ -5364,25 +5562,25 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1117; - this.match(FlinkSqlParser.VALUES); - this.state = 1118; + this.state = 1109; + this.match(FlinkSqlParser.KW_VALUES); + this.state = 1110; this.expression(); - this.state = 1123; + this.state = 1115; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 112, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1119; + this.state = 1111; this.match(FlinkSqlParser.COMMA); - this.state = 1120; + this.state = 1112; this.expression(); } } } - this.state = 1125; + this.state = 1117; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 112, this._ctx); } @@ -5410,23 +5608,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1126; - this.match(FlinkSqlParser.WITH); - this.state = 1127; + this.state = 1118; + this.match(FlinkSqlParser.KW_WITH); + this.state = 1119; this.withItem(); - this.state = 1132; + this.state = 1124; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1128; + this.state = 1120; this.match(FlinkSqlParser.COMMA); - this.state = 1129; + this.state = 1121; this.withItem(); } } - this.state = 1134; + this.state = 1126; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5454,45 +5652,45 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1135; + this.state = 1127; this.withItemName(); - this.state = 1147; + this.state = 1139; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===322) { + if (_la===376) { { - this.state = 1136; + this.state = 1128; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1137; + this.state = 1129; this.columnName(); - this.state = 1142; + this.state = 1134; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1138; + this.state = 1130; this.match(FlinkSqlParser.COMMA); - this.state = 1139; + this.state = 1131; this.columnName(); } } - this.state = 1144; + this.state = 1136; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1145; + this.state = 1137; this.match(FlinkSqlParser.RR_BRACKET); } } - this.state = 1149; - this.match(FlinkSqlParser.AS); - this.state = 1150; + this.state = 1141; + this.match(FlinkSqlParser.KW_AS); + this.state = 1142; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1151; + this.state = 1143; this.queryStatement(0); - this.state = 1152; + this.state = 1144; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5517,7 +5715,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1154; + this.state = 1146; this.identifier(); } } @@ -5540,52 +5738,52 @@ export default class FlinkSqlParser extends Parser { let localctx: SelectStatementContext = new SelectStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 166, FlinkSqlParser.RULE_selectStatement); try { - this.state = 1174; + this.state = 1166; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 120, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1156; + this.state = 1148; this.selectClause(); - this.state = 1157; + this.state = 1149; this.fromClause(); - this.state = 1159; + this.state = 1151; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 116, this._ctx) ) { case 1: { - this.state = 1158; + this.state = 1150; this.whereClause(); } break; } - this.state = 1162; + this.state = 1154; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 117, this._ctx) ) { case 1: { - this.state = 1161; + this.state = 1153; this.groupByClause(); } break; } - this.state = 1165; + this.state = 1157; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 118, this._ctx) ) { case 1: { - this.state = 1164; + this.state = 1156; this.havingClause(); } break; } - this.state = 1168; + this.state = 1160; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 119, this._ctx) ) { case 1: { - this.state = 1167; + this.state = 1159; this.windowClause(); } break; @@ -5595,11 +5793,11 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1170; + this.state = 1162; this.selectClause(); - this.state = 1171; + this.state = 1163; this.fromClause(); - this.state = 1172; + this.state = 1164; this.matchRecognizeClause(); } break; @@ -5627,46 +5825,46 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1176; - this.match(FlinkSqlParser.SELECT); - this.state = 1178; + this.state = 1168; + this.match(FlinkSqlParser.KW_SELECT); + this.state = 1170; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 121, this._ctx) ) { case 1: { - this.state = 1177; + this.state = 1169; this.setQuantifier(); } break; } - this.state = 1189; + this.state = 1181; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 123, this._ctx) ) { case 1: { - this.state = 1180; + this.state = 1172; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; case 2: { - this.state = 1181; + this.state = 1173; this.projectItemDefinition(); - this.state = 1186; + this.state = 1178; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 122, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1182; + this.state = 1174; this.match(FlinkSqlParser.COMMA); - this.state = 1183; + this.state = 1175; this.projectItemDefinition(); } } } - this.state = 1188; + this.state = 1180; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 122, this._ctx); } @@ -5694,37 +5892,37 @@ export default class FlinkSqlParser extends Parser { let localctx: ProjectItemDefinitionContext = new ProjectItemDefinitionContext(this, this._ctx, this.state); this.enterRule(localctx, 170, FlinkSqlParser.RULE_projectItemDefinition); try { - this.state = 1199; + this.state = 1191; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 126, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1191; + this.state = 1183; this.overWindowItem(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1192; + this.state = 1184; this.expression(); - this.state = 1197; + this.state = 1189; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 125, this._ctx) ) { case 1: { - this.state = 1194; + this.state = 1186; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 124, this._ctx) ) { case 1: { - this.state = 1193; - this.match(FlinkSqlParser.AS); + this.state = 1185; + this.match(FlinkSqlParser.KW_AS); } break; } - this.state = 1196; + this.state = 1188; this.expression(); } break; @@ -5752,37 +5950,37 @@ export default class FlinkSqlParser extends Parser { let localctx: OverWindowItemContext = new OverWindowItemContext(this, this._ctx, this.state); this.enterRule(localctx, 172, FlinkSqlParser.RULE_overWindowItem); try { - this.state = 1213; + this.state = 1205; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 127, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1201; + this.state = 1193; this.primaryExpression(0); - this.state = 1202; - this.match(FlinkSqlParser.OVER); - this.state = 1203; + this.state = 1194; + this.match(FlinkSqlParser.KW_OVER); + this.state = 1195; this.windowSpec(); - this.state = 1204; - this.match(FlinkSqlParser.AS); - this.state = 1205; - this.strictIdentifier(); + this.state = 1196; + this.match(FlinkSqlParser.KW_AS); + this.state = 1197; + this.identifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1207; + this.state = 1199; this.primaryExpression(0); - this.state = 1208; - this.match(FlinkSqlParser.OVER); - this.state = 1209; + this.state = 1200; + this.match(FlinkSqlParser.KW_OVER); + this.state = 1201; this.errorCapturingIdentifier(); - this.state = 1210; - this.match(FlinkSqlParser.AS); - this.state = 1211; - this.strictIdentifier(); + this.state = 1202; + this.match(FlinkSqlParser.KW_AS); + this.state = 1203; + this.identifier(); } break; } @@ -5808,9 +6006,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1215; - this.match(FlinkSqlParser.FROM); - this.state = 1216; + this.state = 1207; + this.match(FlinkSqlParser.KW_FROM); + this.state = 1208; this.tableExpression(0); } } @@ -5848,28 +6046,28 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1229; + this.state = 1221; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 129, this._ctx) ) { case 1: { - this.state = 1219; + this.state = 1211; this.tableReference(); - this.state = 1224; + this.state = 1216; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 128, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1220; + this.state = 1212; this.match(FlinkSqlParser.COMMA); - this.state = 1221; + this.state = 1213; this.tableReference(); } } } - this.state = 1226; + this.state = 1218; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 128, this._ctx); } @@ -5877,19 +6075,19 @@ export default class FlinkSqlParser extends Parser { break; case 2: { - this.state = 1227; + this.state = 1219; this.inlineDataValueClause(); } break; case 3: { - this.state = 1228; + this.state = 1220; this.windoTVFClause(); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 1252; + this.state = 1244; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 135, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -5899,22 +6097,22 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1250; + this.state = 1242; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 134, this._ctx) ) { case 1: { localctx = new TableExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1231; + this.state = 1223; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1232; - this.match(FlinkSqlParser.CROSS); - this.state = 1233; - this.match(FlinkSqlParser.JOIN); - this.state = 1234; + this.state = 1224; + this.match(FlinkSqlParser.KW_CROSS); + this.state = 1225; + this.match(FlinkSqlParser.KW_JOIN); + this.state = 1226; this.tableExpression(4); } break; @@ -5922,28 +6120,28 @@ export default class FlinkSqlParser extends Parser { { localctx = new TableExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1235; + this.state = 1227; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1237; + this.state = 1229; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===54) { + if (_la===290) { { - this.state = 1236; - this.match(FlinkSqlParser.NATURAL); + this.state = 1228; + this.match(FlinkSqlParser.KW_NATURAL); } } - this.state = 1240; + this.state = 1232; this._errHandler.sync(this); _la = this._input.LA(1); - if (((((_la - 48)) & ~0x1F) === 0 && ((1 << (_la - 48)) & 27) !== 0)) { + if (((((_la - 249)) & ~0x1F) === 0 && ((1 << (_la - 249)) & 67112961) !== 0) || _la===318) { { - this.state = 1239; + this.state = 1231; _la = this._input.LA(1); - if(!(((((_la - 48)) & ~0x1F) === 0 && ((1 << (_la - 48)) & 27) !== 0))) { + if(!(((((_la - 249)) & ~0x1F) === 0 && ((1 << (_la - 249)) & 67112961) !== 0) || _la===318)) { this._errHandler.recoverInline(this); } else { @@ -5953,26 +6151,26 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 1243; + this.state = 1235; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===47) { + if (_la===304) { { - this.state = 1242; - this.match(FlinkSqlParser.OUTER); + this.state = 1234; + this.match(FlinkSqlParser.KW_OUTER); } } - this.state = 1245; - this.match(FlinkSqlParser.JOIN); - this.state = 1246; + this.state = 1237; + this.match(FlinkSqlParser.KW_JOIN); + this.state = 1238; this.tableExpression(0); - this.state = 1248; + this.state = 1240; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 133, this._ctx) ) { case 1: { - this.state = 1247; + this.state = 1239; this.joinCondition(); } break; @@ -5982,7 +6180,7 @@ export default class FlinkSqlParser extends Parser { } } } - this.state = 1254; + this.state = 1246; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 135, this._ctx); } @@ -6009,14 +6207,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1255; + this.state = 1247; this.tablePrimary(); - this.state = 1257; + this.state = 1249; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 136, this._ctx) ) { case 1: { - this.state = 1256; + this.state = 1248; this.tableAlias(); } break; @@ -6043,50 +6241,50 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 180, FlinkSqlParser.RULE_tablePrimary); let _la: number; try { - this.state = 1300; + this.state = 1292; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 143, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1260; + this.state = 1252; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===74) { + if (_la===337) { { - this.state = 1259; - this.match(FlinkSqlParser.TABLE); + this.state = 1251; + this.match(FlinkSqlParser.KW_TABLE); } } - this.state = 1262; + this.state = 1254; this.tablePath(); - this.state = 1264; + this.state = 1256; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 138, this._ctx) ) { case 1: { - this.state = 1263; + this.state = 1255; this.systemTimePeriod(); } break; } - this.state = 1270; + this.state = 1262; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 140, this._ctx) ) { case 1: { - this.state = 1267; + this.state = 1259; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 139, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la===183) { { - this.state = 1266; - this.match(FlinkSqlParser.AS); + this.state = 1258; + this.match(FlinkSqlParser.KW_AS); } - break; } - this.state = 1269; + + this.state = 1261; this.correlationName(); } break; @@ -6096,71 +6294,71 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1272; - this.match(FlinkSqlParser.LATERAL); - this.state = 1273; - this.match(FlinkSqlParser.TABLE); - this.state = 1274; + this.state = 1264; + this.match(FlinkSqlParser.KW_LATERAL); + this.state = 1265; + this.match(FlinkSqlParser.KW_TABLE); + this.state = 1266; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1275; + this.state = 1267; this.functionName(); - this.state = 1276; + this.state = 1268; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1277; + this.state = 1269; this.expression(); - this.state = 1282; + this.state = 1274; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1278; + this.state = 1270; this.match(FlinkSqlParser.COMMA); - this.state = 1279; + this.state = 1271; this.expression(); } } - this.state = 1284; + this.state = 1276; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1285; + this.state = 1277; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1286; + this.state = 1278; this.match(FlinkSqlParser.RR_BRACKET); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1289; + this.state = 1281; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===57) { + if (_la===273) { { - this.state = 1288; - this.match(FlinkSqlParser.LATERAL); + this.state = 1280; + this.match(FlinkSqlParser.KW_LATERAL); } } - this.state = 1291; + this.state = 1283; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1292; + this.state = 1284; this.queryStatement(0); - this.state = 1293; + this.state = 1285; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1295; - this.match(FlinkSqlParser.UNNEST); - this.state = 1296; + this.state = 1287; + this.match(FlinkSqlParser.KW_UNNEST); + this.state = 1288; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1297; + this.state = 1289; this.expression(); - this.state = 1298; + this.state = 1290; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6187,7 +6385,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1302; + this.state = 1294; this.uid(); } } @@ -6212,15 +6410,15 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1304; - this.match(FlinkSqlParser.FOR); - this.state = 1305; - this.match(FlinkSqlParser.SYSTEM_TIME); - this.state = 1306; - this.match(FlinkSqlParser.AS); - this.state = 1307; - this.match(FlinkSqlParser.OF); - this.state = 1308; + this.state = 1296; + this.match(FlinkSqlParser.KW_FOR); + this.state = 1297; + this.match(FlinkSqlParser.KW_SYSTEM_TIME); + this.state = 1298; + this.match(FlinkSqlParser.KW_AS); + this.state = 1299; + this.match(FlinkSqlParser.KW_OF); + this.state = 1300; this.dateTimeExpression(); } } @@ -6245,7 +6443,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1310; + this.state = 1302; this.expression(); } } @@ -6270,13 +6468,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1312; + this.state = 1304; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1313; + this.state = 1305; this.valuesDefinition(); - this.state = 1314; + this.state = 1306; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1315; + this.state = 1307; this.tableAlias(); } } @@ -6301,13 +6499,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1317; - this.match(FlinkSqlParser.TABLE); - this.state = 1318; + this.state = 1309; + this.match(FlinkSqlParser.KW_TABLE); + this.state = 1310; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1319; + this.state = 1311; this.windowTVFExression(); - this.state = 1320; + this.state = 1312; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6333,29 +6531,29 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1322; + this.state = 1314; this.windoTVFName(); - this.state = 1323; + this.state = 1315; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1324; + this.state = 1316; this.windowTVFParam(); - this.state = 1329; + this.state = 1321; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1325; + this.state = 1317; this.match(FlinkSqlParser.COMMA); - this.state = 1326; + this.state = 1318; this.windowTVFParam(); } } - this.state = 1331; + this.state = 1323; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1332; + this.state = 1324; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6381,9 +6579,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1334; + this.state = 1326; _la = this._input.LA(1); - if(!(((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 7) !== 0))) { + if(!(_la===23 || _la===56 || _la===155)) { this._errHandler.recoverInline(this); } else { @@ -6411,64 +6609,64 @@ export default class FlinkSqlParser extends Parser { let localctx: WindowTVFParamContext = new WindowTVFParamContext(this, this._ctx, this.state); this.enterRule(localctx, 196, FlinkSqlParser.RULE_windowTVFParam); try { - this.state = 1351; + this.state = 1343; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 145, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1336; - this.match(FlinkSqlParser.TABLE); - this.state = 1337; + this.state = 1328; + this.match(FlinkSqlParser.KW_TABLE); + this.state = 1329; this.timeAttrColumn(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1338; + this.state = 1330; this.columnDescriptor(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1339; + this.state = 1331; this.timeIntervalExpression(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1340; - this.match(FlinkSqlParser.DATA); - this.state = 1341; - this.match(FlinkSqlParser.DOUBLE_ARROW); - this.state = 1342; - this.match(FlinkSqlParser.TABLE); - this.state = 1343; + this.state = 1332; + this.match(FlinkSqlParser.KW_DATA); + this.state = 1333; + this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); + this.state = 1334; + this.match(FlinkSqlParser.KW_TABLE); + this.state = 1335; this.timeAttrColumn(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 1344; - this.match(FlinkSqlParser.TIMECOL); - this.state = 1345; - this.match(FlinkSqlParser.DOUBLE_ARROW); - this.state = 1346; + this.state = 1336; + this.match(FlinkSqlParser.KW_TIMECOL); + this.state = 1337; + this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); + this.state = 1338; this.columnDescriptor(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 1347; + this.state = 1339; this.timeIntervalParamName(); - this.state = 1348; - this.match(FlinkSqlParser.DOUBLE_ARROW); - this.state = 1349; + this.state = 1340; + this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); + this.state = 1341; this.timeIntervalExpression(); } break; @@ -6496,9 +6694,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1353; + this.state = 1345; _la = this._input.LA(1); - if(!(_la===118 || ((((_la - 269)) & ~0x1F) === 0 && ((1 << (_la - 269)) & 31) !== 0))) { + if(!(_la===24 || ((((_la - 138)) & ~0x1F) === 0 && ((1 << (_la - 138)) & 4163) !== 0) || _la===298)) { this._errHandler.recoverInline(this); } else { @@ -6528,13 +6726,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1355; - this.match(FlinkSqlParser.DESCRIPTOR); - this.state = 1356; + this.state = 1347; + this.match(FlinkSqlParser.KW_DESCRIPTOR); + this.state = 1348; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1357; + this.state = 1349; this.uid(); - this.state = 1358; + this.state = 1350; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6558,44 +6756,44 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 202, FlinkSqlParser.RULE_joinCondition); let _la: number; try { - this.state = 1374; + this.state = 1366; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 55: + case 299: this.enterOuterAlt(localctx, 1); { - this.state = 1360; - this.match(FlinkSqlParser.ON); - this.state = 1361; + this.state = 1352; + this.match(FlinkSqlParser.KW_ON); + this.state = 1353; this.booleanExpression(0); } break; - case 143: + case 353: this.enterOuterAlt(localctx, 2); { - this.state = 1362; - this.match(FlinkSqlParser.USING); - this.state = 1363; + this.state = 1354; + this.match(FlinkSqlParser.KW_USING); + this.state = 1355; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1364; + this.state = 1356; this.uid(); - this.state = 1369; + this.state = 1361; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1365; + this.state = 1357; this.match(FlinkSqlParser.COMMA); - this.state = 1366; + this.state = 1358; this.uid(); } } - this.state = 1371; + this.state = 1363; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1372; + this.state = 1364; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6624,9 +6822,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1376; - this.match(FlinkSqlParser.WHERE); - this.state = 1377; + this.state = 1368; + this.match(FlinkSqlParser.KW_WHERE); + this.state = 1369; this.booleanExpression(0); } } @@ -6652,27 +6850,27 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1379; - this.match(FlinkSqlParser.GROUP); - this.state = 1380; - this.match(FlinkSqlParser.BY); - this.state = 1381; + this.state = 1371; + this.match(FlinkSqlParser.KW_GROUP); + this.state = 1372; + this.match(FlinkSqlParser.KW_BY); + this.state = 1373; this.groupItemDefinition(); - this.state = 1386; + this.state = 1378; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 148, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1382; + this.state = 1374; this.match(FlinkSqlParser.COMMA); - this.state = 1383; + this.state = 1375; this.groupItemDefinition(); } } } - this.state = 1388; + this.state = 1380; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 148, this._ctx); } @@ -6698,114 +6896,114 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 208, FlinkSqlParser.RULE_groupItemDefinition); let _la: number; try { - this.state = 1428; + this.state = 1420; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 152, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1389; + this.state = 1381; this.expression(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1390; + this.state = 1382; this.groupWindowFunction(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1391; + this.state = 1383; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1392; + this.state = 1384; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1393; + this.state = 1385; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1394; + this.state = 1386; this.expression(); - this.state = 1399; + this.state = 1391; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1395; + this.state = 1387; this.match(FlinkSqlParser.COMMA); - this.state = 1396; + this.state = 1388; this.expression(); } } - this.state = 1401; + this.state = 1393; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1402; + this.state = 1394; this.match(FlinkSqlParser.RR_BRACKET); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 1404; + this.state = 1396; this.groupingSetsNotaionName(); - this.state = 1405; + this.state = 1397; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1406; + this.state = 1398; this.expression(); - this.state = 1411; + this.state = 1403; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1407; + this.state = 1399; this.match(FlinkSqlParser.COMMA); - this.state = 1408; + this.state = 1400; this.expression(); } } - this.state = 1413; + this.state = 1405; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1414; + this.state = 1406; this.match(FlinkSqlParser.RR_BRACKET); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 1416; + this.state = 1408; this.groupingSets(); - this.state = 1417; + this.state = 1409; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1418; + this.state = 1410; this.groupItemDefinition(); - this.state = 1423; + this.state = 1415; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1419; + this.state = 1411; this.match(FlinkSqlParser.COMMA); - this.state = 1420; + this.state = 1412; this.groupItemDefinition(); } } - this.state = 1425; + this.state = 1417; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1426; + this.state = 1418; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6832,10 +7030,10 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1430; - this.match(FlinkSqlParser.GROUPING); - this.state = 1431; - this.match(FlinkSqlParser.SETS); + this.state = 1422; + this.match(FlinkSqlParser.KW_GROUPING); + this.state = 1423; + this.match(FlinkSqlParser.KW_SETS); } } catch (re) { @@ -6860,9 +7058,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1433; + this.state = 1425; _la = this._input.LA(1); - if(!(_la===16 || _la===17)) { + if(!(_la===218 || _la===321)) { this._errHandler.recoverInline(this); } else { @@ -6892,17 +7090,17 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1435; + this.state = 1427; this.groupWindowFunctionName(); - this.state = 1436; + this.state = 1428; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1437; + this.state = 1429; this.timeAttrColumn(); - this.state = 1438; + this.state = 1430; this.match(FlinkSqlParser.COMMA); - this.state = 1439; + this.state = 1431; this.timeIntervalExpression(); - this.state = 1440; + this.state = 1432; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6928,9 +7126,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1442; + this.state = 1434; _la = this._input.LA(1); - if(!(((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & 515) !== 0))) { + if(!(_la===56 || _la===135 || _la===155)) { this._errHandler.recoverInline(this); } else { @@ -6960,7 +7158,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1444; + this.state = 1436; this.uid(); } } @@ -6985,9 +7183,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1446; - this.match(FlinkSqlParser.HAVING); - this.state = 1447; + this.state = 1438; + this.match(FlinkSqlParser.KW_HAVING); + this.state = 1439; this.booleanExpression(0); } } @@ -7013,25 +7211,25 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1449; - this.match(FlinkSqlParser.WINDOW); - this.state = 1450; + this.state = 1441; + this.match(FlinkSqlParser.KW_WINDOW); + this.state = 1442; this.namedWindow(); - this.state = 1455; + this.state = 1447; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 153, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1451; + this.state = 1443; this.match(FlinkSqlParser.COMMA); - this.state = 1452; + this.state = 1444; this.namedWindow(); } } } - this.state = 1457; + this.state = 1449; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 153, this._ctx); } @@ -7058,11 +7256,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1458; + this.state = 1450; localctx._name = this.errorCapturingIdentifier(); - this.state = 1459; - this.match(FlinkSqlParser.AS); - this.state = 1460; + this.state = 1451; + this.match(FlinkSqlParser.KW_AS); + this.state = 1452; this.windowSpec(); } } @@ -7088,49 +7286,49 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1463; + this.state = 1455; this._errHandler.sync(this); _la = this._input.LA(1); - if (((((_la - 4)) & ~0x1F) === 0 && ((1 << (_la - 4)) & 4294967295) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 4294967167) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 4291015671) !== 0) || ((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & 4294967295) !== 0) || ((((_la - 134)) & ~0x1F) === 0 && ((1 << (_la - 134)) & 4294967295) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 4294967295) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4294934527) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 1971324639) !== 0) || ((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 266320383) !== 0) || ((((_la - 343)) & ~0x1F) === 0 && ((1 << (_la - 343)) & 19) !== 0)) { + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967295) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 32767) !== 0) || ((((_la - 397)) & ~0x1F) === 0 && ((1 << (_la - 397)) & 19) !== 0)) { { - this.state = 1462; + this.state = 1454; localctx._name = this.errorCapturingIdentifier(); } } - this.state = 1465; + this.state = 1457; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1467; + this.state = 1459; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===60) { + if (_la===307) { { - this.state = 1466; + this.state = 1458; this.partitionByClause(); } } - this.state = 1470; + this.state = 1462; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===18) { + if (_la===302) { { - this.state = 1469; + this.state = 1461; this.orderByCaluse(); } } - this.state = 1473; + this.state = 1465; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===61 || _la===62) { + if (_la===314 || _la===323) { { - this.state = 1472; + this.state = 1464; this.windowFrame(); } } - this.state = 1475; + this.state = 1467; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -7156,91 +7354,91 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1477; - this.match(FlinkSqlParser.MATCH_RECOGNIZE); - this.state = 1478; + this.state = 1469; + this.match(FlinkSqlParser.KW_MATCH_RECOGNIZE); + this.state = 1470; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1480; + this.state = 1472; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===60) { + if (_la===307) { { - this.state = 1479; + this.state = 1471; this.partitionByClause(); } } - this.state = 1483; + this.state = 1475; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===18) { + if (_la===302) { { - this.state = 1482; + this.state = 1474; this.orderByCaluse(); } } - this.state = 1486; + this.state = 1478; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===276) { + if (_la===281) { { - this.state = 1485; + this.state = 1477; this.measuresClause(); } } - this.state = 1489; + this.state = 1481; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===8 || _la===278) { + if (_la===176 || _la===300) { { - this.state = 1488; + this.state = 1480; this.outputMode(); } } - this.state = 1492; + this.state = 1484; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===68) { + if (_la===6) { { - this.state = 1491; + this.state = 1483; this.afterMatchStrategy(); } } - this.state = 1495; + this.state = 1487; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===277) { + if (_la===308) { { - this.state = 1494; + this.state = 1486; this.patternDefination(); } } - this.state = 1497; + this.state = 1489; this.patternVariablesDefination(); - this.state = 1498; + this.state = 1490; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1503; + this.state = 1495; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 165, this._ctx) ) { case 1: { - this.state = 1500; + this.state = 1492; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 164, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la===183) { { - this.state = 1499; - this.match(FlinkSqlParser.AS); + this.state = 1491; + this.match(FlinkSqlParser.KW_AS); } - break; } - this.state = 1502; - this.strictIdentifier(); + + this.state = 1494; + this.identifier(); } break; } @@ -7268,27 +7466,27 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1505; - this.match(FlinkSqlParser.ORDER); - this.state = 1506; - this.match(FlinkSqlParser.BY); - this.state = 1507; + this.state = 1497; + this.match(FlinkSqlParser.KW_ORDER); + this.state = 1498; + this.match(FlinkSqlParser.KW_BY); + this.state = 1499; this.orderItemDefition(); - this.state = 1512; + this.state = 1504; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 166, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1508; + this.state = 1500; this.match(FlinkSqlParser.COMMA); - this.state = 1509; + this.state = 1501; this.orderItemDefition(); } } } - this.state = 1514; + this.state = 1506; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 166, this._ctx); } @@ -7316,17 +7514,17 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1515; + this.state = 1507; this.expression(); - this.state = 1517; + this.state = 1509; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 167, this._ctx) ) { case 1: { - this.state = 1516; + this.state = 1508; localctx._ordering = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===35 || _la===36)) { + if(!(_la===8 || _la===30)) { localctx._ordering = this._errHandler.recoverInline(this); } else { @@ -7336,17 +7534,17 @@ export default class FlinkSqlParser extends Parser { } break; } - this.state = 1521; + this.state = 1513; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 168, this._ctx) ) { case 1: { - this.state = 1519; - this.match(FlinkSqlParser.NULLS); - this.state = 1520; + this.state = 1511; + this.match(FlinkSqlParser.KW_NULLS); + this.state = 1512; localctx._nullOrder = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===67 || _la===69)) { + if(!(_la===44 || _la===72)) { localctx._nullOrder = this._errHandler.recoverInline(this); } else { @@ -7379,20 +7577,20 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1523; - this.match(FlinkSqlParser.LIMIT); - this.state = 1526; + this.state = 1515; + this.match(FlinkSqlParser.KW_LIMIT); + this.state = 1518; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 169, this._ctx) ) { case 1: { - this.state = 1524; - this.match(FlinkSqlParser.ALL); + this.state = 1516; + this.match(FlinkSqlParser.KW_ALL); } break; case 2: { - this.state = 1525; + this.state = 1517; localctx._limit = this.expression(); } break; @@ -7421,25 +7619,25 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1528; - this.match(FlinkSqlParser.PARTITION); - this.state = 1529; - this.match(FlinkSqlParser.BY); - this.state = 1530; + this.state = 1520; + this.match(FlinkSqlParser.KW_PARTITION); + this.state = 1521; + this.match(FlinkSqlParser.KW_BY); + this.state = 1522; this.expression(); - this.state = 1535; + this.state = 1527; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1531; + this.state = 1523; this.match(FlinkSqlParser.COMMA); - this.state = 1532; + this.state = 1524; this.expression(); } } - this.state = 1537; + this.state = 1529; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7464,14 +7662,14 @@ export default class FlinkSqlParser extends Parser { let localctx: QuantifiersContext = new QuantifiersContext(this, this._ctx, this.state); this.enterRule(localctx, 238, FlinkSqlParser.RULE_quantifiers); try { - this.state = 1554; + this.state = 1546; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 171, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { { - this.state = 1538; + this.state = 1530; this.match(FlinkSqlParser.ASTERISK_SIGN); } } @@ -7480,7 +7678,7 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 2); { { - this.state = 1539; + this.state = 1531; this.match(FlinkSqlParser.ADD_SIGN); } } @@ -7489,7 +7687,7 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 3); { { - this.state = 1540; + this.state = 1532; this.match(FlinkSqlParser.QUESTION_MARK_SIGN); } } @@ -7498,15 +7696,15 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 4); { { - this.state = 1541; + this.state = 1533; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1542; + this.state = 1534; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1543; + this.state = 1535; this.match(FlinkSqlParser.COMMA); - this.state = 1544; + this.state = 1536; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1545; + this.state = 1537; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7515,13 +7713,13 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 5); { { - this.state = 1546; + this.state = 1538; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1547; + this.state = 1539; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1548; + this.state = 1540; this.match(FlinkSqlParser.COMMA); - this.state = 1549; + this.state = 1541; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7530,13 +7728,13 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 6); { { - this.state = 1550; + this.state = 1542; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1551; + this.state = 1543; this.match(FlinkSqlParser.COMMA); - this.state = 1552; + this.state = 1544; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1553; + this.state = 1545; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7565,23 +7763,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1556; - this.match(FlinkSqlParser.MEASURES); - this.state = 1557; + this.state = 1548; + this.match(FlinkSqlParser.KW_MEASURES); + this.state = 1549; this.projectItemDefinition(); - this.state = 1562; + this.state = 1554; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1558; + this.state = 1550; this.match(FlinkSqlParser.COMMA); - this.state = 1559; + this.state = 1551; this.projectItemDefinition(); } } - this.state = 1564; + this.state = 1556; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7609,32 +7807,32 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1565; - this.match(FlinkSqlParser.PATTERN); - this.state = 1566; + this.state = 1557; + this.match(FlinkSqlParser.KW_PATTERN); + this.state = 1558; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1568; + this.state = 1560; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1567; + this.state = 1559; this.patternVariable(); } } - this.state = 1570; + this.state = 1562; this._errHandler.sync(this); _la = this._input.LA(1); - } while (_la===344 || _la===347); - this.state = 1572; + } while (_la===398 || _la===401); + this.state = 1564; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1574; + this.state = 1566; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===230) { + if (_la===362) { { - this.state = 1573; + this.state = 1565; this.withinClause(); } } @@ -7663,14 +7861,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1576; + this.state = 1568; this.unquotedIdentifier(); - this.state = 1578; + this.state = 1570; this._errHandler.sync(this); _la = this._input.LA(1); - if (((((_la - 324)) & ~0x1F) === 0 && ((1 << (_la - 324)) & 135681) !== 0)) { + if (((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 135681) !== 0)) { { - this.state = 1577; + this.state = 1569; this.quantifiers(); } } @@ -7696,33 +7894,33 @@ export default class FlinkSqlParser extends Parser { let localctx: OutputModeContext = new OutputModeContext(this, this._ctx, this.state); this.enterRule(localctx, 246, FlinkSqlParser.RULE_outputMode); try { - this.state = 1588; + this.state = 1580; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 8: + case 176: this.enterOuterAlt(localctx, 1); { - this.state = 1580; - this.match(FlinkSqlParser.ALL); - this.state = 1581; - this.match(FlinkSqlParser.ROWS); - this.state = 1582; - this.match(FlinkSqlParser.PER); - this.state = 1583; - this.match(FlinkSqlParser.MATCH); + this.state = 1572; + this.match(FlinkSqlParser.KW_ALL); + this.state = 1573; + this.match(FlinkSqlParser.KW_ROWS); + this.state = 1574; + this.match(FlinkSqlParser.KW_PER); + this.state = 1575; + this.match(FlinkSqlParser.KW_MATCH); } break; - case 278: + case 300: this.enterOuterAlt(localctx, 2); { - this.state = 1584; - this.match(FlinkSqlParser.ONE); - this.state = 1585; - this.match(FlinkSqlParser.ROW); - this.state = 1586; - this.match(FlinkSqlParser.PER); - this.state = 1587; - this.match(FlinkSqlParser.MATCH); + this.state = 1576; + this.match(FlinkSqlParser.KW_ONE); + this.state = 1577; + this.match(FlinkSqlParser.KW_ROW); + this.state = 1578; + this.match(FlinkSqlParser.KW_PER); + this.state = 1579; + this.match(FlinkSqlParser.KW_MATCH); } break; default: @@ -7748,74 +7946,74 @@ export default class FlinkSqlParser extends Parser { let localctx: AfterMatchStrategyContext = new AfterMatchStrategyContext(this, this._ctx, this.state); this.enterRule(localctx, 248, FlinkSqlParser.RULE_afterMatchStrategy); try { - this.state = 1614; + this.state = 1606; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 177, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1590; - this.match(FlinkSqlParser.AFTER); - this.state = 1591; - this.match(FlinkSqlParser.MATCH); - this.state = 1592; + this.state = 1582; + this.match(FlinkSqlParser.KW_AFTER); + this.state = 1583; + this.match(FlinkSqlParser.KW_MATCH); + this.state = 1584; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1593; - this.match(FlinkSqlParser.PAST); - this.state = 1594; - this.match(FlinkSqlParser.LAST); - this.state = 1595; - this.match(FlinkSqlParser.ROW); + this.state = 1585; + this.match(FlinkSqlParser.KW_PAST); + this.state = 1586; + this.match(FlinkSqlParser.KW_LAST); + this.state = 1587; + this.match(FlinkSqlParser.KW_ROW); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1596; - this.match(FlinkSqlParser.AFTER); - this.state = 1597; - this.match(FlinkSqlParser.MATCH); - this.state = 1598; + this.state = 1588; + this.match(FlinkSqlParser.KW_AFTER); + this.state = 1589; + this.match(FlinkSqlParser.KW_MATCH); + this.state = 1590; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1599; - this.match(FlinkSqlParser.TO); - this.state = 1600; - this.match(FlinkSqlParser.NEXT); - this.state = 1601; - this.match(FlinkSqlParser.ROW); + this.state = 1591; + this.match(FlinkSqlParser.KW_TO); + this.state = 1592; + this.match(FlinkSqlParser.KW_NEXT); + this.state = 1593; + this.match(FlinkSqlParser.KW_ROW); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1602; - this.match(FlinkSqlParser.AFTER); - this.state = 1603; - this.match(FlinkSqlParser.MATCH); - this.state = 1604; + this.state = 1594; + this.match(FlinkSqlParser.KW_AFTER); + this.state = 1595; + this.match(FlinkSqlParser.KW_MATCH); + this.state = 1596; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1605; - this.match(FlinkSqlParser.TO); - this.state = 1606; - this.match(FlinkSqlParser.LAST); - this.state = 1607; + this.state = 1597; + this.match(FlinkSqlParser.KW_TO); + this.state = 1598; + this.match(FlinkSqlParser.KW_LAST); + this.state = 1599; this.unquotedIdentifier(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1608; - this.match(FlinkSqlParser.AFTER); - this.state = 1609; - this.match(FlinkSqlParser.MATCH); - this.state = 1610; + this.state = 1600; + this.match(FlinkSqlParser.KW_AFTER); + this.state = 1601; + this.match(FlinkSqlParser.KW_MATCH); + this.state = 1602; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1611; - this.match(FlinkSqlParser.TO); - this.state = 1612; - this.match(FlinkSqlParser.FIRST); - this.state = 1613; + this.state = 1603; + this.match(FlinkSqlParser.KW_TO); + this.state = 1604; + this.match(FlinkSqlParser.KW_FIRST); + this.state = 1605; this.unquotedIdentifier(); } break; @@ -7843,23 +8041,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1616; - this.match(FlinkSqlParser.DEFINE); - this.state = 1617; + this.state = 1608; + this.match(FlinkSqlParser.KW_DEFINE); + this.state = 1609; this.projectItemDefinition(); - this.state = 1622; + this.state = 1614; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1618; + this.state = 1610; this.match(FlinkSqlParser.COMMA); - this.state = 1619; + this.state = 1611; this.projectItemDefinition(); } } - this.state = 1624; + this.state = 1616; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7884,32 +8082,32 @@ export default class FlinkSqlParser extends Parser { let localctx: WindowFrameContext = new WindowFrameContext(this, this._ctx, this.state); this.enterRule(localctx, 252, FlinkSqlParser.RULE_windowFrame); try { - this.state = 1634; + this.state = 1626; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 61: + case 314: this.enterOuterAlt(localctx, 1); { - this.state = 1625; - this.match(FlinkSqlParser.RANGE); - this.state = 1626; - this.match(FlinkSqlParser.BETWEEN); - this.state = 1627; + this.state = 1617; + this.match(FlinkSqlParser.KW_RANGE); + this.state = 1618; + this.match(FlinkSqlParser.KW_BETWEEN); + this.state = 1619; this.timeIntervalExpression(); - this.state = 1628; + this.state = 1620; this.frameBound(); } break; - case 62: + case 323: this.enterOuterAlt(localctx, 2); { - this.state = 1630; - this.match(FlinkSqlParser.ROWS); - this.state = 1631; - this.match(FlinkSqlParser.BETWEEN); - this.state = 1632; + this.state = 1622; + this.match(FlinkSqlParser.KW_ROWS); + this.state = 1623; + this.match(FlinkSqlParser.KW_BETWEEN); + this.state = 1624; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1633; + this.state = 1625; this.frameBound(); } break; @@ -7938,14 +8136,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1636; - this.match(FlinkSqlParser.PRECEDING); - this.state = 1637; - this.match(FlinkSqlParser.AND); - this.state = 1638; - this.match(FlinkSqlParser.CURRENT); - this.state = 1639; - this.match(FlinkSqlParser.ROW); + this.state = 1628; + this.match(FlinkSqlParser.KW_PRECEDING); + this.state = 1629; + this.match(FlinkSqlParser.KW_AND); + this.state = 1630; + this.match(FlinkSqlParser.KW_CURRENT); + this.state = 1631; + this.match(FlinkSqlParser.KW_ROW); } } catch (re) { @@ -7969,9 +8167,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1641; - this.match(FlinkSqlParser.WITHIN); - this.state = 1642; + this.state = 1633; + this.match(FlinkSqlParser.KW_WITHIN); + this.state = 1634; this.timeIntervalExpression(); } } @@ -7990,42 +8188,13 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) - public timeIntervalExpression(): TimeIntervalExpressionContext { - let localctx: TimeIntervalExpressionContext = new TimeIntervalExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 258, FlinkSqlParser.RULE_timeIntervalExpression); - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 1644; - this.match(FlinkSqlParser.INTERVAL); - this.state = 1645; - this.match(FlinkSqlParser.STRING_LITERAL); - this.state = 1646; - this.match(FlinkSqlParser.ID_LITERAL); - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) public expression(): ExpressionContext { let localctx: ExpressionContext = new ExpressionContext(this, this._ctx, this.state); - this.enterRule(localctx, 260, FlinkSqlParser.RULE_expression); + this.enterRule(localctx, 258, FlinkSqlParser.RULE_expression); try { this.enterOuterAlt(localctx, 1); { - this.state = 1648; + this.state = 1636; this.booleanExpression(0); } } @@ -8056,13 +8225,13 @@ export default class FlinkSqlParser extends Parser { let _parentState: number = this.state; let localctx: BooleanExpressionContext = new BooleanExpressionContext(this, this._ctx, _parentState); let _prevctx: BooleanExpressionContext = localctx; - let _startState: number = 262; - this.enterRecursionRule(localctx, 262, FlinkSqlParser.RULE_booleanExpression, _p); + let _startState: number = 260; + this.enterRecursionRule(localctx, 260, FlinkSqlParser.RULE_booleanExpression, _p); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1662; + this.state = 1650; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 181, this._ctx) ) { case 1: @@ -8071,9 +8240,9 @@ export default class FlinkSqlParser extends Parser { this._ctx = localctx; _prevctx = localctx; - this.state = 1651; - this.match(FlinkSqlParser.NOT); - this.state = 1652; + this.state = 1639; + this.match(FlinkSqlParser.KW_NOT); + this.state = 1640; this.booleanExpression(5); } break; @@ -8082,13 +8251,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ExistsContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1653; - this.match(FlinkSqlParser.EXISTS); - this.state = 1654; + this.state = 1641; + this.match(FlinkSqlParser.KW_EXISTS); + this.state = 1642; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1655; + this.state = 1643; this.queryStatement(0); - this.state = 1656; + this.state = 1644; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8097,14 +8266,14 @@ export default class FlinkSqlParser extends Parser { localctx = new PredicatedContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1658; + this.state = 1646; this.valueExpression(0); - this.state = 1660; + this.state = 1648; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 180, this._ctx) ) { case 1: { - this.state = 1659; + this.state = 1647; this.predicate(); } break; @@ -8113,7 +8282,7 @@ export default class FlinkSqlParser extends Parser { break; } this._ctx.stop = this._input.LT(-1); - this.state = 1672; + this.state = 1660; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 183, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -8123,7 +8292,7 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1670; + this.state = 1658; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 182, this._ctx) ) { case 1: @@ -8131,13 +8300,13 @@ export default class FlinkSqlParser extends Parser { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1664; + this.state = 1652; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1665; - (localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.AND); - this.state = 1666; + this.state = 1653; + (localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.KW_AND); + this.state = 1654; (localctx as LogicalBinaryContext)._right = this.booleanExpression(3); } break; @@ -8146,20 +8315,20 @@ export default class FlinkSqlParser extends Parser { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1667; + this.state = 1655; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1668; - (localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.OR); - this.state = 1669; + this.state = 1656; + (localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.KW_OR); + this.state = 1657; (localctx as LogicalBinaryContext)._right = this.booleanExpression(2); } break; } } } - this.state = 1674; + this.state = 1662; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 183, this._ctx); } @@ -8182,188 +8351,188 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public predicate(): PredicateContext { let localctx: PredicateContext = new PredicateContext(this, this._ctx, this.state); - this.enterRule(localctx, 264, FlinkSqlParser.RULE_predicate); + this.enterRule(localctx, 262, FlinkSqlParser.RULE_predicate); let _la: number; try { - this.state = 1758; + this.state = 1746; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 196, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1676; + this.state = 1664; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1675; - this.match(FlinkSqlParser.NOT); + this.state = 1663; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1678; - localctx._kind = this.match(FlinkSqlParser.BETWEEN); - this.state = 1679; + this.state = 1666; + localctx._kind = this.match(FlinkSqlParser.KW_BETWEEN); + this.state = 1667; localctx._lower = this.valueExpression(0); - this.state = 1680; - this.match(FlinkSqlParser.AND); - this.state = 1681; + this.state = 1668; + this.match(FlinkSqlParser.KW_AND); + this.state = 1669; localctx._upper = this.valueExpression(0); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1684; + this.state = 1672; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1683; - this.match(FlinkSqlParser.NOT); + this.state = 1671; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1686; - localctx._kind = this.match(FlinkSqlParser.IN); - this.state = 1687; + this.state = 1674; + localctx._kind = this.match(FlinkSqlParser.KW_IN); + this.state = 1675; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1688; + this.state = 1676; this.expression(); - this.state = 1693; + this.state = 1681; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1689; + this.state = 1677; this.match(FlinkSqlParser.COMMA); - this.state = 1690; + this.state = 1678; this.expression(); } } - this.state = 1695; + this.state = 1683; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1696; + this.state = 1684; this.match(FlinkSqlParser.RR_BRACKET); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1699; + this.state = 1687; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1698; - this.match(FlinkSqlParser.NOT); + this.state = 1686; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1701; - localctx._kind = this.match(FlinkSqlParser.IN); - this.state = 1702; + this.state = 1689; + localctx._kind = this.match(FlinkSqlParser.KW_IN); + this.state = 1690; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1703; + this.state = 1691; this.queryStatement(0); - this.state = 1704; + this.state = 1692; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1706; - localctx._kind = this.match(FlinkSqlParser.EXISTS); - this.state = 1707; + this.state = 1694; + localctx._kind = this.match(FlinkSqlParser.KW_EXISTS); + this.state = 1695; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1708; + this.state = 1696; this.queryStatement(0); - this.state = 1709; + this.state = 1697; this.match(FlinkSqlParser.RR_BRACKET); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 1712; + this.state = 1700; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1711; - this.match(FlinkSqlParser.NOT); + this.state = 1699; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1714; - localctx._kind = this.match(FlinkSqlParser.RLIKE); - this.state = 1715; + this.state = 1702; + localctx._kind = this.match(FlinkSqlParser.KW_RLIKE); + this.state = 1703; localctx._pattern = this.valueExpression(0); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 1717; + this.state = 1705; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1716; - this.match(FlinkSqlParser.NOT); + this.state = 1704; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1719; - localctx._kind = this.match(FlinkSqlParser.LIKE); - this.state = 1720; + this.state = 1707; + localctx._kind = this.match(FlinkSqlParser.KW_LIKE); + this.state = 1708; localctx._quantifier = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===8 || _la===9)) { + if(!(_la===176 || _la===180)) { localctx._quantifier = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1734; + this.state = 1722; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 191, this._ctx) ) { case 1: { - this.state = 1721; + this.state = 1709; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1722; + this.state = 1710; this.match(FlinkSqlParser.RR_BRACKET); } break; case 2: { - this.state = 1723; + this.state = 1711; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1724; + this.state = 1712; this.expression(); - this.state = 1729; + this.state = 1717; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1725; + this.state = 1713; this.match(FlinkSqlParser.COMMA); - this.state = 1726; + this.state = 1714; this.expression(); } } - this.state = 1731; + this.state = 1719; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1732; + this.state = 1720; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8373,60 +8542,60 @@ export default class FlinkSqlParser extends Parser { case 7: this.enterOuterAlt(localctx, 7); { - this.state = 1737; + this.state = 1725; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1736; - this.match(FlinkSqlParser.NOT); + this.state = 1724; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1739; - localctx._kind = this.match(FlinkSqlParser.LIKE); - this.state = 1740; + this.state = 1727; + localctx._kind = this.match(FlinkSqlParser.KW_LIKE); + this.state = 1728; localctx._pattern = this.valueExpression(0); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 1741; - this.match(FlinkSqlParser.IS); - this.state = 1743; + this.state = 1729; + this.match(FlinkSqlParser.KW_IS); + this.state = 1731; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1742; - this.match(FlinkSqlParser.NOT); + this.state = 1730; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1745; - localctx._kind = this.match(FlinkSqlParser.NULL); + this.state = 1733; + localctx._kind = this.match(FlinkSqlParser.KW_NULL); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 1746; - this.match(FlinkSqlParser.IS); - this.state = 1748; + this.state = 1734; + this.match(FlinkSqlParser.KW_IS); + this.state = 1736; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1747; - this.match(FlinkSqlParser.NOT); + this.state = 1735; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1750; + this.state = 1738; localctx._kind = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===32 || _la===33)) { + if(!(_la===245 || _la===344)) { localctx._kind = this._errHandler.recoverInline(this); } else { @@ -8438,23 +8607,23 @@ export default class FlinkSqlParser extends Parser { case 10: this.enterOuterAlt(localctx, 10); { - this.state = 1751; - this.match(FlinkSqlParser.IS); - this.state = 1753; + this.state = 1739; + this.match(FlinkSqlParser.KW_IS); + this.state = 1741; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1752; - this.match(FlinkSqlParser.NOT); + this.state = 1740; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1755; - localctx._kind = this.match(FlinkSqlParser.DISTINCT); - this.state = 1756; - this.match(FlinkSqlParser.FROM); - this.state = 1757; + this.state = 1743; + localctx._kind = this.match(FlinkSqlParser.KW_DISTINCT); + this.state = 1744; + this.match(FlinkSqlParser.KW_FROM); + this.state = 1745; localctx._right = this.valueExpression(0); } break; @@ -8477,71 +8646,71 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public likePredicate(): LikePredicateContext { let localctx: LikePredicateContext = new LikePredicateContext(this, this._ctx, this.state); - this.enterRule(localctx, 266, FlinkSqlParser.RULE_likePredicate); + this.enterRule(localctx, 264, FlinkSqlParser.RULE_likePredicate); let _la: number; try { - this.state = 1785; + this.state = 1773; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 201, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1761; + this.state = 1749; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1760; - this.match(FlinkSqlParser.NOT); + this.state = 1748; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1763; - localctx._kind = this.match(FlinkSqlParser.LIKE); - this.state = 1764; + this.state = 1751; + localctx._kind = this.match(FlinkSqlParser.KW_LIKE); + this.state = 1752; localctx._quantifier = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===8 || _la===9)) { + if(!(_la===176 || _la===180)) { localctx._quantifier = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1778; + this.state = 1766; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 199, this._ctx) ) { case 1: { - this.state = 1765; + this.state = 1753; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1766; + this.state = 1754; this.match(FlinkSqlParser.RR_BRACKET); } break; case 2: { - this.state = 1767; + this.state = 1755; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1768; + this.state = 1756; this.expression(); - this.state = 1773; + this.state = 1761; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1769; + this.state = 1757; this.match(FlinkSqlParser.COMMA); - this.state = 1770; + this.state = 1758; this.expression(); } } - this.state = 1775; + this.state = 1763; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1776; + this.state = 1764; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8551,19 +8720,19 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1781; + this.state = 1769; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 1780; - this.match(FlinkSqlParser.NOT); + this.state = 1768; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1783; - localctx._kind = this.match(FlinkSqlParser.LIKE); - this.state = 1784; + this.state = 1771; + localctx._kind = this.match(FlinkSqlParser.KW_LIKE); + this.state = 1772; localctx._pattern = this.valueExpression(0); } break; @@ -8596,14 +8765,14 @@ export default class FlinkSqlParser extends Parser { let _parentState: number = this.state; let localctx: ValueExpressionContext = new ValueExpressionContext(this, this._ctx, _parentState); let _prevctx: ValueExpressionContext = localctx; - let _startState: number = 268; - this.enterRecursionRule(localctx, 268, FlinkSqlParser.RULE_valueExpression, _p); + let _startState: number = 266; + this.enterRecursionRule(localctx, 266, FlinkSqlParser.RULE_valueExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1791; + this.state = 1779; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 202, this._ctx) ) { case 1: @@ -8612,7 +8781,7 @@ export default class FlinkSqlParser extends Parser { this._ctx = localctx; _prevctx = localctx; - this.state = 1788; + this.state = 1776; this.primaryExpression(0); } break; @@ -8621,23 +8790,23 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticUnaryContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1789; + this.state = 1777; (localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 315)) & ~0x1F) === 0 && ((1 << (_la - 315)) & 3145729) !== 0))) { + if(!(((((_la - 369)) & ~0x1F) === 0 && ((1 << (_la - 369)) & 3145729) !== 0))) { (localctx as ArithmeticUnaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1790; + this.state = 1778; this.valueExpression(7); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 1814; + this.state = 1802; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 204, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -8647,7 +8816,7 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1812; + this.state = 1800; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 203, this._ctx) ) { case 1: @@ -8655,21 +8824,21 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1793; + this.state = 1781; if (!(this.precpred(this._ctx, 6))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); } - this.state = 1794; + this.state = 1782; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(_la===132 || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 145) !== 0))) { + if(!(_la===32 || ((((_la - 387)) & ~0x1F) === 0 && ((1 << (_la - 387)) & 145) !== 0))) { (localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1795; + this.state = 1783; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(7); } break; @@ -8678,21 +8847,21 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1796; + this.state = 1784; if (!(this.precpred(this._ctx, 5))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 1797; + this.state = 1785; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); - if(!(((((_la - 335)) & ~0x1F) === 0 && ((1 << (_la - 335)) & 11) !== 0))) { + if(!(((((_la - 389)) & ~0x1F) === 0 && ((1 << (_la - 389)) & 11) !== 0))) { (localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); } else { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1798; + this.state = 1786; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(6); } break; @@ -8701,13 +8870,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1799; + this.state = 1787; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1800; + this.state = 1788; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 1801; + this.state = 1789; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(5); } break; @@ -8716,13 +8885,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1802; + this.state = 1790; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1803; + this.state = 1791; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_XOR_OP); - this.state = 1804; + this.state = 1792; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(4); } break; @@ -8731,13 +8900,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1805; + this.state = 1793; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1806; + this.state = 1794; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 1807; + this.state = 1795; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(3); } break; @@ -8746,20 +8915,20 @@ export default class FlinkSqlParser extends Parser { localctx = new ComparisonContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ComparisonContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1808; + this.state = 1796; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1809; + this.state = 1797; this.comparisonOperator(); - this.state = 1810; + this.state = 1798; (localctx as ComparisonContext)._right = this.valueExpression(2); } break; } } } - this.state = 1816; + this.state = 1804; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 204, this._ctx); } @@ -8792,14 +8961,14 @@ export default class FlinkSqlParser extends Parser { let _parentState: number = this.state; let localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this, this._ctx, _parentState); let _prevctx: PrimaryExpressionContext = localctx; - let _startState: number = 270; - this.enterRecursionRule(localctx, 270, FlinkSqlParser.RULE_primaryExpression, _p); + let _startState: number = 268; + this.enterRecursionRule(localctx, 268, FlinkSqlParser.RULE_primaryExpression, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1908; + this.state = 1896; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 214, this._ctx) ) { case 1: @@ -8808,36 +8977,36 @@ export default class FlinkSqlParser extends Parser { this._ctx = localctx; _prevctx = localctx; - this.state = 1818; - this.match(FlinkSqlParser.CASE); - this.state = 1820; + this.state = 1806; + this.match(FlinkSqlParser.KW_CASE); + this.state = 1808; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1819; + this.state = 1807; this.whenClause(); } } - this.state = 1822; + this.state = 1810; this._errHandler.sync(this); _la = this._input.LA(1); - } while (_la===40); - this.state = 1826; + } while (_la===358); + this.state = 1814; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===42) { + if (_la===236) { { - this.state = 1824; - this.match(FlinkSqlParser.ELSE); - this.state = 1825; + this.state = 1812; + this.match(FlinkSqlParser.KW_ELSE); + this.state = 1813; (localctx as SearchedCaseContext)._elseExpression = this.expression(); } } - this.state = 1828; - this.match(FlinkSqlParser.END); + this.state = 1816; + this.match(FlinkSqlParser.KW_END); } break; case 2: @@ -8845,38 +9014,38 @@ export default class FlinkSqlParser extends Parser { localctx = new SimpleCaseContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1830; - this.match(FlinkSqlParser.CASE); - this.state = 1831; + this.state = 1818; + this.match(FlinkSqlParser.KW_CASE); + this.state = 1819; (localctx as SimpleCaseContext)._value = this.expression(); - this.state = 1833; + this.state = 1821; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1832; + this.state = 1820; this.whenClause(); } } - this.state = 1835; + this.state = 1823; this._errHandler.sync(this); _la = this._input.LA(1); - } while (_la===40); - this.state = 1839; + } while (_la===358); + this.state = 1827; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===42) { + if (_la===236) { { - this.state = 1837; - this.match(FlinkSqlParser.ELSE); - this.state = 1838; + this.state = 1825; + this.match(FlinkSqlParser.KW_ELSE); + this.state = 1826; (localctx as SimpleCaseContext)._elseExpression = this.expression(); } } - this.state = 1841; - this.match(FlinkSqlParser.END); + this.state = 1829; + this.match(FlinkSqlParser.KW_END); } break; case 3: @@ -8884,17 +9053,17 @@ export default class FlinkSqlParser extends Parser { localctx = new CastContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1843; - this.match(FlinkSqlParser.CAST); - this.state = 1844; + this.state = 1831; + this.match(FlinkSqlParser.KW_CAST); + this.state = 1832; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1845; + this.state = 1833; this.expression(); - this.state = 1846; - this.match(FlinkSqlParser.AS); - this.state = 1847; + this.state = 1834; + this.match(FlinkSqlParser.KW_AS); + this.state = 1835; this.columnType(); - this.state = 1848; + this.state = 1836; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8903,25 +9072,25 @@ export default class FlinkSqlParser extends Parser { localctx = new FirstContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1850; - this.match(FlinkSqlParser.FIRST); - this.state = 1851; + this.state = 1838; + this.match(FlinkSqlParser.KW_FIRST); + this.state = 1839; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1852; + this.state = 1840; this.expression(); - this.state = 1855; + this.state = 1843; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===124) { + if (_la===59) { { - this.state = 1853; - this.match(FlinkSqlParser.IGNORE); - this.state = 1854; - this.match(FlinkSqlParser.NULLS); + this.state = 1841; + this.match(FlinkSqlParser.KW_IGNORE); + this.state = 1842; + this.match(FlinkSqlParser.KW_NULLS); } } - this.state = 1857; + this.state = 1845; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8930,25 +9099,25 @@ export default class FlinkSqlParser extends Parser { localctx = new LastContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1859; - this.match(FlinkSqlParser.LAST); - this.state = 1860; + this.state = 1847; + this.match(FlinkSqlParser.KW_LAST); + this.state = 1848; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1861; + this.state = 1849; this.expression(); - this.state = 1864; + this.state = 1852; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===124) { + if (_la===59) { { - this.state = 1862; - this.match(FlinkSqlParser.IGNORE); - this.state = 1863; - this.match(FlinkSqlParser.NULLS); + this.state = 1850; + this.match(FlinkSqlParser.KW_IGNORE); + this.state = 1851; + this.match(FlinkSqlParser.KW_NULLS); } } - this.state = 1866; + this.state = 1854; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8957,17 +9126,17 @@ export default class FlinkSqlParser extends Parser { localctx = new PositionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1868; - this.match(FlinkSqlParser.POSITION); - this.state = 1869; + this.state = 1856; + this.match(FlinkSqlParser.KW_POSITION); + this.state = 1857; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1870; + this.state = 1858; (localctx as PositionContext)._substr = this.valueExpression(0); - this.state = 1871; - this.match(FlinkSqlParser.IN); - this.state = 1872; + this.state = 1859; + this.match(FlinkSqlParser.KW_IN); + this.state = 1860; (localctx as PositionContext)._str = this.valueExpression(0); - this.state = 1873; + this.state = 1861; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8976,7 +9145,7 @@ export default class FlinkSqlParser extends Parser { localctx = new ConstantDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1875; + this.state = 1863; this.constant(); } break; @@ -8985,7 +9154,7 @@ export default class FlinkSqlParser extends Parser { localctx = new StarContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1876; + this.state = 1864; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -8994,11 +9163,11 @@ export default class FlinkSqlParser extends Parser { localctx = new StarContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1877; + this.state = 1865; this.uid(); - this.state = 1878; + this.state = 1866; this.match(FlinkSqlParser.DOT); - this.state = 1879; + this.state = 1867; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -9007,11 +9176,11 @@ export default class FlinkSqlParser extends Parser { localctx = new SubqueryExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1881; + this.state = 1869; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1882; + this.state = 1870; this.queryStatement(0); - this.state = 1883; + this.state = 1871; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9020,47 +9189,47 @@ export default class FlinkSqlParser extends Parser { localctx = new FunctionCallContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1885; + this.state = 1873; this.functionName(); - this.state = 1886; + this.state = 1874; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1898; + this.state = 1886; this._errHandler.sync(this); _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294965247) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4231741311) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967247) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4292870143) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 1610725375) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4160749597) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 142540239) !== 0) || ((((_la - 322)) & ~0x1F) === 0 && ((1 << (_la - 322)) & 65038337) !== 0)) { + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967295) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967295) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967295) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967295) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 16916479) !== 0) || ((((_la - 387)) & ~0x1F) === 0 && ((1 << (_la - 387)) & 31757) !== 0)) { { - this.state = 1888; + this.state = 1876; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 211, this._ctx) ) { case 1: { - this.state = 1887; + this.state = 1875; this.setQuantifier(); } break; } - this.state = 1890; + this.state = 1878; this.expression(); - this.state = 1895; + this.state = 1883; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1891; + this.state = 1879; this.match(FlinkSqlParser.COMMA); - this.state = 1892; + this.state = 1880; this.expression(); } } - this.state = 1897; + this.state = 1885; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 1900; + this.state = 1888; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9069,7 +9238,7 @@ export default class FlinkSqlParser extends Parser { localctx = new ColumnReferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1902; + this.state = 1890; this.identifier(); } break; @@ -9078,7 +9247,7 @@ export default class FlinkSqlParser extends Parser { localctx = new DereferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1903; + this.state = 1891; this.dereferenceDefinition(); } break; @@ -9087,17 +9256,17 @@ export default class FlinkSqlParser extends Parser { localctx = new ParenthesizedExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1904; + this.state = 1892; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1905; + this.state = 1893; this.expression(); - this.state = 1906; + this.state = 1894; this.match(FlinkSqlParser.RR_BRACKET); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 1917; + this.state = 1905; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 215, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { @@ -9111,20 +9280,20 @@ export default class FlinkSqlParser extends Parser { localctx = new SubscriptContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); (localctx as SubscriptContext)._value = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_primaryExpression); - this.state = 1910; + this.state = 1898; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1911; + this.state = 1899; this.match(FlinkSqlParser.LS_BRACKET); - this.state = 1912; + this.state = 1900; (localctx as SubscriptContext)._index = this.valueExpression(0); - this.state = 1913; + this.state = 1901; this.match(FlinkSqlParser.RS_BRACKET); } } } - this.state = 1919; + this.state = 1907; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 215, this._ctx); } @@ -9147,12 +9316,32 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public functionName(): FunctionNameContext { let localctx: FunctionNameContext = new FunctionNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 272, FlinkSqlParser.RULE_functionName); + this.enterRule(localctx, 270, FlinkSqlParser.RULE_functionName); try { - this.enterOuterAlt(localctx, 1); - { - this.state = 1920; - this.uid(); + this.state = 1911; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 216, this._ctx) ) { + case 1: + this.enterOuterAlt(localctx, 1); + { + this.state = 1908; + this.reservedKeywords(); + } + break; + case 2: + this.enterOuterAlt(localctx, 2); + { + this.state = 1909; + this.nonReservedKeywords(); + } + break; + case 3: + this.enterOuterAlt(localctx, 3); + { + this.state = 1910; + this.uid(); + } + break; } } catch (re) { @@ -9172,11 +9361,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public dereferenceDefinition(): DereferenceDefinitionContext { let localctx: DereferenceDefinitionContext = new DereferenceDefinitionContext(this, this._ctx, this.state); - this.enterRule(localctx, 274, FlinkSqlParser.RULE_dereferenceDefinition); + this.enterRule(localctx, 272, FlinkSqlParser.RULE_dereferenceDefinition); try { this.enterOuterAlt(localctx, 1); { - this.state = 1922; + this.state = 1913; this.uid(); } } @@ -9197,11 +9386,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public correlationName(): CorrelationNameContext { let localctx: CorrelationNameContext = new CorrelationNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 276, FlinkSqlParser.RULE_correlationName); + this.enterRule(localctx, 274, FlinkSqlParser.RULE_correlationName); try { this.enterOuterAlt(localctx, 1); { - this.state = 1924; + this.state = 1915; this.identifier(); } } @@ -9222,22 +9411,22 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public qualifiedName(): QualifiedNameContext { let localctx: QualifiedNameContext = new QualifiedNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 278, FlinkSqlParser.RULE_qualifiedName); + this.enterRule(localctx, 276, FlinkSqlParser.RULE_qualifiedName); try { - this.state = 1928; + this.state = 1919; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 216, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 217, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1926; + this.state = 1917; this.identifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1927; + this.state = 1918; this.dereferenceDefinition(); } break; @@ -9258,26 +9447,26 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) - public interval(): IntervalContext { - let localctx: IntervalContext = new IntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 280, FlinkSqlParser.RULE_interval); + public timeIntervalExpression(): TimeIntervalExpressionContext { + let localctx: TimeIntervalExpressionContext = new TimeIntervalExpressionContext(this, this._ctx, this.state); + this.enterRule(localctx, 278, FlinkSqlParser.RULE_timeIntervalExpression); try { this.enterOuterAlt(localctx, 1); { - this.state = 1930; - this.match(FlinkSqlParser.INTERVAL); - this.state = 1933; + this.state = 1921; + this.match(FlinkSqlParser.KW_INTERVAL); + this.state = 1924; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 217, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 218, this._ctx) ) { case 1: { - this.state = 1931; + this.state = 1922; this.errorCapturingMultiUnitsInterval(); } break; case 2: { - this.state = 1932; + this.state = 1923; this.errorCapturingUnitToUnitInterval(); } break; @@ -9301,18 +9490,18 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext { let localctx: ErrorCapturingMultiUnitsIntervalContext = new ErrorCapturingMultiUnitsIntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 282, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval); + this.enterRule(localctx, 280, FlinkSqlParser.RULE_errorCapturingMultiUnitsInterval); try { this.enterOuterAlt(localctx, 1); { - this.state = 1935; + this.state = 1926; this.multiUnitsInterval(); - this.state = 1937; + this.state = 1928; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 218, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 219, this._ctx) ) { case 1: { - this.state = 1936; + this.state = 1927; this.unitToUnitInterval(); } break; @@ -9336,12 +9525,12 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public multiUnitsInterval(): MultiUnitsIntervalContext { let localctx: MultiUnitsIntervalContext = new MultiUnitsIntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 284, FlinkSqlParser.RULE_multiUnitsInterval); + this.enterRule(localctx, 282, FlinkSqlParser.RULE_multiUnitsInterval); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1942; + this.state = 1933; this._errHandler.sync(this); _alt = 1; do { @@ -9349,19 +9538,19 @@ export default class FlinkSqlParser extends Parser { case 1: { { - this.state = 1939; + this.state = 1930; this.intervalValue(); - this.state = 1940; - this.identifier(); + this.state = 1931; + this.intervalTimeUnit(); } } break; default: throw new NoViableAltException(this); } - this.state = 1944; + this.state = 1935; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 219, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 220, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } } @@ -9382,24 +9571,24 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext { let localctx: ErrorCapturingUnitToUnitIntervalContext = new ErrorCapturingUnitToUnitIntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 286, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval); + this.enterRule(localctx, 284, FlinkSqlParser.RULE_errorCapturingUnitToUnitInterval); try { this.enterOuterAlt(localctx, 1); { - this.state = 1946; + this.state = 1937; localctx._body = this.unitToUnitInterval(); - this.state = 1949; + this.state = 1940; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 220, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 221, this._ctx) ) { case 1: { - this.state = 1947; + this.state = 1938; localctx._error1 = this.multiUnitsInterval(); } break; case 2: { - this.state = 1948; + this.state = 1939; localctx._error2 = this.unitToUnitInterval(); } break; @@ -9423,18 +9612,18 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public unitToUnitInterval(): UnitToUnitIntervalContext { let localctx: UnitToUnitIntervalContext = new UnitToUnitIntervalContext(this, this._ctx, this.state); - this.enterRule(localctx, 288, FlinkSqlParser.RULE_unitToUnitInterval); + this.enterRule(localctx, 286, FlinkSqlParser.RULE_unitToUnitInterval); try { this.enterOuterAlt(localctx, 1); { - this.state = 1951; + this.state = 1942; localctx._value = this.intervalValue(); - this.state = 1952; - localctx._from_ = this.identifier(); - this.state = 1953; - this.match(FlinkSqlParser.TO); - this.state = 1954; - localctx._to = this.identifier(); + this.state = 1943; + localctx._from_ = this.intervalTimeUnit(); + this.state = 1944; + this.match(FlinkSqlParser.KW_TO); + this.state = 1945; + localctx._to = this.intervalTimeUnit(); } } catch (re) { @@ -9454,26 +9643,26 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public intervalValue(): IntervalValueContext { let localctx: IntervalValueContext = new IntervalValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 290, FlinkSqlParser.RULE_intervalValue); + this.enterRule(localctx, 288, FlinkSqlParser.RULE_intervalValue); let _la: number; try { - this.state = 1961; + this.state = 1952; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 335: - case 336: - case 344: - case 345: + case 389: + case 390: + case 398: + case 399: this.enterOuterAlt(localctx, 1); { - this.state = 1957; + this.state = 1948; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===335 || _la===336) { + if (_la===389 || _la===390) { { - this.state = 1956; + this.state = 1947; _la = this._input.LA(1); - if(!(_la===335 || _la===336)) { + if(!(_la===389 || _la===390)) { this._errHandler.recoverInline(this); } else { @@ -9483,9 +9672,9 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 1959; + this.state = 1950; _la = this._input.LA(1); - if(!(_la===344 || _la===345)) { + if(!(_la===398 || _la===399)) { this._errHandler.recoverInline(this); } else { @@ -9494,10 +9683,10 @@ export default class FlinkSqlParser extends Parser { } } break; - case 343: + case 397: this.enterOuterAlt(localctx, 2); { - this.state = 1960; + this.state = 1951; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -9520,6 +9709,408 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) + public intervalTimeUnit(): IntervalTimeUnitContext { + let localctx: IntervalTimeUnitContext = new IntervalTimeUnitContext(this, this._ctx, this.state); + this.enterRule(localctx, 290, FlinkSqlParser.RULE_intervalTimeUnit); + try { + this.state = 1956; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 65: + case 66: + case 67: + case 68: + case 69: + case 70: + case 71: + case 72: + case 73: + case 74: + case 75: + case 76: + case 77: + case 78: + case 79: + case 80: + case 81: + case 82: + case 83: + case 84: + case 85: + case 86: + case 87: + case 88: + case 89: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 96: + case 97: + case 98: + case 99: + case 100: + case 101: + case 102: + case 103: + case 104: + case 105: + case 106: + case 107: + case 108: + case 109: + case 110: + case 111: + case 112: + case 113: + case 114: + case 115: + case 116: + case 117: + case 118: + case 119: + case 120: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 138: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 146: + case 147: + case 148: + case 149: + case 150: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 157: + case 158: + case 159: + case 160: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 173: + case 174: + case 397: + case 398: + case 401: + this.enterOuterAlt(localctx, 1); + { + this.state = 1954; + this.identifier(); + } + break; + case 175: + case 176: + case 177: + case 178: + case 179: + case 180: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 187: + case 188: + case 189: + case 190: + case 191: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 200: + case 201: + case 202: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 212: + case 213: + case 214: + case 215: + case 216: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 223: + case 224: + case 225: + case 226: + case 227: + case 228: + case 229: + case 230: + case 231: + case 232: + case 233: + case 234: + case 235: + case 236: + case 237: + case 238: + case 239: + case 240: + case 241: + case 242: + case 243: + case 244: + case 245: + case 246: + case 247: + case 248: + case 249: + case 250: + case 251: + case 252: + case 253: + case 254: + case 255: + case 256: + case 257: + case 258: + case 259: + case 260: + case 261: + case 262: + case 263: + case 264: + case 265: + case 266: + case 267: + case 268: + case 269: + case 270: + case 271: + case 272: + case 273: + case 274: + case 275: + case 276: + case 277: + case 278: + case 279: + case 280: + case 281: + case 282: + case 283: + case 284: + case 285: + case 286: + case 287: + case 288: + case 289: + case 290: + case 291: + case 292: + case 293: + case 294: + case 295: + case 296: + case 297: + case 298: + case 299: + case 300: + case 301: + case 302: + case 303: + case 304: + case 305: + case 306: + case 307: + case 308: + case 309: + case 310: + case 311: + case 312: + case 313: + case 314: + case 315: + case 316: + case 317: + case 318: + case 319: + case 320: + case 321: + case 322: + case 323: + case 324: + case 325: + case 326: + case 327: + case 328: + case 329: + case 330: + case 331: + case 332: + case 333: + case 334: + case 335: + case 336: + case 337: + case 338: + case 339: + case 340: + case 341: + case 342: + case 343: + case 344: + case 345: + case 346: + case 347: + case 348: + case 349: + case 350: + case 351: + case 352: + case 353: + case 354: + case 355: + case 356: + case 357: + case 358: + case 359: + case 360: + case 361: + case 362: + case 363: + case 364: + this.enterOuterAlt(localctx, 2); + { + this.state = 1955; + this.reservedKeywords(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return localctx; + } + // @RuleVersion(0) public columnAlias(): ColumnAliasContext { let localctx: ColumnAliasContext = new ColumnAliasContext(this, this._ctx, this.state); this.enterRule(localctx, 292, FlinkSqlParser.RULE_columnAlias); @@ -9527,24 +10118,24 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1964; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 223, this._ctx) ) { - case 1: - { - this.state = 1963; - this.match(FlinkSqlParser.AS); - } - break; - } - this.state = 1966; - this.strictIdentifier(); - this.state = 1968; + this.state = 1959; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===322) { + if (_la===183) { { - this.state = 1967; + this.state = 1958; + this.match(FlinkSqlParser.KW_AS); + } + } + + this.state = 1961; + this.identifier(); + this.state = 1963; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===376) { + { + this.state = 1962; this.identifierList(); } } @@ -9569,27 +10160,28 @@ export default class FlinkSqlParser extends Parser { public tableAlias(): TableAliasContext { let localctx: TableAliasContext = new TableAliasContext(this, this._ctx, this.state); this.enterRule(localctx, 294, FlinkSqlParser.RULE_tableAlias); + let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 1971; + this.state = 1966; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 225, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la===183) { { - this.state = 1970; - this.match(FlinkSqlParser.AS); + this.state = 1965; + this.match(FlinkSqlParser.KW_AS); } - break; } - this.state = 1973; - this.strictIdentifier(); - this.state = 1975; + + this.state = 1968; + this.identifier(); + this.state = 1970; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 226, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 228, this._ctx) ) { case 1: { - this.state = 1974; + this.state = 1969; this.identifierList(); } break; @@ -9617,9 +10209,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1977; + this.state = 1972; this.identifier(); - this.state = 1978; + this.state = 1973; this.errorCapturingIdentifierExtra(); } } @@ -9643,33 +10235,33 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 298, FlinkSqlParser.RULE_errorCapturingIdentifierExtra); let _la: number; try { - this.state = 1987; + this.state = 1982; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 131: + case 284: localctx = new ErrorIdentContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 1982; + this.state = 1977; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1980; - this.match(FlinkSqlParser.MINUS); - this.state = 1981; + this.state = 1975; + this.match(FlinkSqlParser.KW_MINUS); + this.state = 1976; this.identifier(); } } - this.state = 1984; + this.state = 1979; this._errHandler.sync(this); _la = this._input.LA(1); - } while (_la===131); + } while (_la===284); } break; - case 7: - case 322: + case 183: + case 376: localctx = new RealIdentContext(this, localctx); this.enterOuterAlt(localctx, 2); // tslint:disable-next-line:no-empty @@ -9701,11 +10293,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1989; + this.state = 1984; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1990; + this.state = 1985; this.identifierSeq(); - this.state = 1991; + this.state = 1986; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -9731,21 +10323,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1993; + this.state = 1988; this.identifier(); - this.state = 1998; + this.state = 1993; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 1994; + this.state = 1989; this.match(FlinkSqlParser.COMMA); - this.state = 1995; + this.state = 1990; this.identifier(); } } - this.state = 2000; + this.state = 1995; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -9770,79 +10362,206 @@ export default class FlinkSqlParser extends Parser { let localctx: IdentifierContext = new IdentifierContext(this, this._ctx, this.state); this.enterRule(localctx, 304, FlinkSqlParser.RULE_identifier); try { - this.state = 2003; + this.state = 1999; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 230, this._ctx) ) { - case 1: - this.enterOuterAlt(localctx, 1); - { - this.state = 2001; - this.strictIdentifier(); - } - break; - case 2: - this.enterOuterAlt(localctx, 2); - { - this.state = 2002; - this.strictNonReserved(); - } - break; - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public strictIdentifier(): StrictIdentifierContext { - let localctx: StrictIdentifierContext = new StrictIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 306, FlinkSqlParser.RULE_strictIdentifier); - try { - this.state = 2009; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 231, this._ctx) ) { - case 1: + switch (this._input.LA(1)) { + case 398: + case 401: localctx = new UnquotedIdentifierAlternativeContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 2005; + this.state = 1996; this.unquotedIdentifier(); } break; - case 2: + case 397: localctx = new QuotedIdentifierAlternativeContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 2006; + this.state = 1997; this.quotedIdentifier(); } break; - case 3: - localctx = new AnsiNonReservedKeywordsContext(this, localctx); + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 65: + case 66: + case 67: + case 68: + case 69: + case 70: + case 71: + case 72: + case 73: + case 74: + case 75: + case 76: + case 77: + case 78: + case 79: + case 80: + case 81: + case 82: + case 83: + case 84: + case 85: + case 86: + case 87: + case 88: + case 89: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 96: + case 97: + case 98: + case 99: + case 100: + case 101: + case 102: + case 103: + case 104: + case 105: + case 106: + case 107: + case 108: + case 109: + case 110: + case 111: + case 112: + case 113: + case 114: + case 115: + case 116: + case 117: + case 118: + case 119: + case 120: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 138: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 146: + case 147: + case 148: + case 149: + case 150: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 157: + case 158: + case 159: + case 160: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 173: + case 174: + localctx = new NonReservedKeywordsAlternativeContext(this, localctx); this.enterOuterAlt(localctx, 3); { - this.state = 2007; - this.ansiNonReserved(); - } - break; - case 4: - localctx = new NonReservedKeywordsContext(this, localctx); - this.enterOuterAlt(localctx, 4); - { - this.state = 2008; - this.nonReserved(); + this.state = 1998; + this.nonReservedKeywords(); } break; + default: + throw new NoViableAltException(this); } } catch (re) { @@ -9862,14 +10581,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public unquotedIdentifier(): UnquotedIdentifierContext { let localctx: UnquotedIdentifierContext = new UnquotedIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 308, FlinkSqlParser.RULE_unquotedIdentifier); + this.enterRule(localctx, 306, FlinkSqlParser.RULE_unquotedIdentifier); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2011; + this.state = 2001; _la = this._input.LA(1); - if(!(_la===344 || _la===347)) { + if(!(_la===398 || _la===401)) { this._errHandler.recoverInline(this); } else { @@ -9895,11 +10614,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public quotedIdentifier(): QuotedIdentifierContext { let localctx: QuotedIdentifierContext = new QuotedIdentifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 310, FlinkSqlParser.RULE_quotedIdentifier); + this.enterRule(localctx, 308, FlinkSqlParser.RULE_quotedIdentifier); try { this.enterOuterAlt(localctx, 1); { - this.state = 2013; + this.state = 2003; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -9920,17 +10639,17 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public whenClause(): WhenClauseContext { let localctx: WhenClauseContext = new WhenClauseContext(this, this._ctx, this.state); - this.enterRule(localctx, 312, FlinkSqlParser.RULE_whenClause); + this.enterRule(localctx, 310, FlinkSqlParser.RULE_whenClause); try { this.enterOuterAlt(localctx, 1); { - this.state = 2015; - this.match(FlinkSqlParser.WHEN); - this.state = 2016; + this.state = 2005; + this.match(FlinkSqlParser.KW_WHEN); + this.state = 2006; localctx._condition = this.expression(); - this.state = 2017; - this.match(FlinkSqlParser.THEN); - this.state = 2018; + this.state = 2007; + this.match(FlinkSqlParser.KW_THEN); + this.state = 2008; localctx._result = this.expression(); } } @@ -9949,70 +10668,30 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) - public uidList(): UidListContext { - let localctx: UidListContext = new UidListContext(this, this._ctx, this.state); - this.enterRule(localctx, 314, FlinkSqlParser.RULE_uidList); - let _la: number; - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 2020; - this.uid(); - this.state = 2025; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la===326) { - { - { - this.state = 2021; - this.match(FlinkSqlParser.COMMA); - this.state = 2022; - this.uid(); - } - } - this.state = 2027; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) public uid(): UidContext { let localctx: UidContext = new UidContext(this, this._ctx, this.state); - this.enterRule(localctx, 316, FlinkSqlParser.RULE_uid); + this.enterRule(localctx, 312, FlinkSqlParser.RULE_uid); try { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 2028; - this.match(FlinkSqlParser.ID_LITERAL); - this.state = 2032; + this.state = 2010; + this.identifier(); + this.state = 2015; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 233, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 2029; - this.match(FlinkSqlParser.DOT_ID); + this.state = 2011; + this.match(FlinkSqlParser.DOT); + this.state = 2012; + this.identifier(); } } } - this.state = 2034; + this.state = 2017; this._errHandler.sync(this); _alt = this._interp.adaptivePredict(this._input, 233, this._ctx); } @@ -10035,13 +10714,13 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public withOption(): WithOptionContext { let localctx: WithOptionContext = new WithOptionContext(this, this._ctx, this.state); - this.enterRule(localctx, 318, FlinkSqlParser.RULE_withOption); + this.enterRule(localctx, 314, FlinkSqlParser.RULE_withOption); try { this.enterOuterAlt(localctx, 1); { - this.state = 2035; - this.match(FlinkSqlParser.WITH); - this.state = 2036; + this.state = 2018; + this.match(FlinkSqlParser.KW_WITH); + this.state = 2019; this.tablePropertyList(); } } @@ -10062,16 +10741,16 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public ifNotExists(): IfNotExistsContext { let localctx: IfNotExistsContext = new IfNotExistsContext(this, this._ctx, this.state); - this.enterRule(localctx, 320, FlinkSqlParser.RULE_ifNotExists); + this.enterRule(localctx, 316, FlinkSqlParser.RULE_ifNotExists); try { this.enterOuterAlt(localctx, 1); { - this.state = 2038; - this.match(FlinkSqlParser.IF); - this.state = 2039; - this.match(FlinkSqlParser.NOT); - this.state = 2040; - this.match(FlinkSqlParser.EXISTS); + this.state = 2021; + this.match(FlinkSqlParser.KW_IF); + this.state = 2022; + this.match(FlinkSqlParser.KW_NOT); + this.state = 2023; + this.match(FlinkSqlParser.KW_EXISTS); } } catch (re) { @@ -10091,14 +10770,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public ifExists(): IfExistsContext { let localctx: IfExistsContext = new IfExistsContext(this, this._ctx, this.state); - this.enterRule(localctx, 322, FlinkSqlParser.RULE_ifExists); + this.enterRule(localctx, 318, FlinkSqlParser.RULE_ifExists); try { this.enterOuterAlt(localctx, 1); { - this.state = 2042; - this.match(FlinkSqlParser.IF); - this.state = 2043; - this.match(FlinkSqlParser.EXISTS); + this.state = 2025; + this.match(FlinkSqlParser.KW_IF); + this.state = 2026; + this.match(FlinkSqlParser.KW_EXISTS); } } catch (re) { @@ -10118,32 +10797,32 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyList(): TablePropertyListContext { let localctx: TablePropertyListContext = new TablePropertyListContext(this, this._ctx, this.state); - this.enterRule(localctx, 324, FlinkSqlParser.RULE_tablePropertyList); + this.enterRule(localctx, 320, FlinkSqlParser.RULE_tablePropertyList); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2045; + this.state = 2028; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 2046; + this.state = 2029; this.tableProperty(); - this.state = 2051; + this.state = 2034; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la===326) { + while (_la===380) { { { - this.state = 2047; + this.state = 2030; this.match(FlinkSqlParser.COMMA); - this.state = 2048; + this.state = 2031; this.tableProperty(); } } - this.state = 2053; + this.state = 2036; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 2054; + this.state = 2037; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -10164,29 +10843,29 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tableProperty(): TablePropertyContext { let localctx: TablePropertyContext = new TablePropertyContext(this, this._ctx, this.state); - this.enterRule(localctx, 326, FlinkSqlParser.RULE_tableProperty); + this.enterRule(localctx, 322, FlinkSqlParser.RULE_tableProperty); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2056; + this.state = 2039; localctx._key = this.tablePropertyKey(); - this.state = 2061; + this.state = 2044; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===32 || _la===33 || _la===311 || ((((_la - 343)) & ~0x1F) === 0 && ((1 << (_la - 343)) & 7) !== 0)) { + if (_la===245 || _la===344 || _la===365 || ((((_la - 397)) & ~0x1F) === 0 && ((1 << (_la - 397)) & 7) !== 0)) { { - this.state = 2058; + this.state = 2041; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===311) { + if (_la===365) { { - this.state = 2057; + this.state = 2040; this.match(FlinkSqlParser.EQUAL_SYMBOL); } } - this.state = 2060; + this.state = 2043; localctx._value = this.tablePropertyValue(); } } @@ -10210,29 +10889,29 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyKey(): TablePropertyKeyContext { let localctx: TablePropertyKeyContext = new TablePropertyKeyContext(this, this._ctx, this.state); - this.enterRule(localctx, 328, FlinkSqlParser.RULE_tablePropertyKey); + this.enterRule(localctx, 324, FlinkSqlParser.RULE_tablePropertyKey); try { - this.state = 2066; + this.state = 2049; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 237, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 2063; + this.state = 2046; this.identifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 2064; + this.state = 2047; this.dereferenceDefinition(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 2065; + this.state = 2048; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -10255,37 +10934,37 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public tablePropertyValue(): TablePropertyValueContext { let localctx: TablePropertyValueContext = new TablePropertyValueContext(this, this._ctx, this.state); - this.enterRule(localctx, 330, FlinkSqlParser.RULE_tablePropertyValue); + this.enterRule(localctx, 326, FlinkSqlParser.RULE_tablePropertyValue); try { - this.state = 2072; + this.state = 2055; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 344: + case 398: this.enterOuterAlt(localctx, 1); { - this.state = 2068; + this.state = 2051; this.match(FlinkSqlParser.DIG_LITERAL); } break; - case 345: + case 399: this.enterOuterAlt(localctx, 2); { - this.state = 2069; + this.state = 2052; this.match(FlinkSqlParser.REAL_LITERAL); } break; - case 32: - case 33: + case 245: + case 344: this.enterOuterAlt(localctx, 3); { - this.state = 2070; + this.state = 2053; this.booleanLiteral(); } break; - case 343: + case 397: this.enterOuterAlt(localctx, 4); { - this.state = 2071; + this.state = 2054; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -10310,40 +10989,40 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public logicalOperator(): LogicalOperatorContext { let localctx: LogicalOperatorContext = new LogicalOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 332, FlinkSqlParser.RULE_logicalOperator); + this.enterRule(localctx, 328, FlinkSqlParser.RULE_logicalOperator); try { - this.state = 2080; + this.state = 2063; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 23: + case 179: this.enterOuterAlt(localctx, 1); { - this.state = 2074; - this.match(FlinkSqlParser.AND); + this.state = 2057; + this.match(FlinkSqlParser.KW_AND); } break; - case 317: + case 371: this.enterOuterAlt(localctx, 2); { - this.state = 2075; + this.state = 2058; this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 2076; + this.state = 2059; this.match(FlinkSqlParser.BIT_AND_OP); } break; - case 22: + case 301: this.enterOuterAlt(localctx, 3); { - this.state = 2077; - this.match(FlinkSqlParser.OR); + this.state = 2060; + this.match(FlinkSqlParser.KW_OR); } break; - case 316: + case 370: this.enterOuterAlt(localctx, 4); { - this.state = 2078; + this.state = 2061; this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 2079; + this.state = 2062; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -10368,76 +11047,76 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public comparisonOperator(): ComparisonOperatorContext { let localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 334, FlinkSqlParser.RULE_comparisonOperator); + this.enterRule(localctx, 330, FlinkSqlParser.RULE_comparisonOperator); try { - this.state = 2096; + this.state = 2079; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 240, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 2082; + this.state = 2065; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 2083; + this.state = 2066; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 2084; + this.state = 2067; this.match(FlinkSqlParser.LESS_SYMBOL); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 2085; + this.state = 2068; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2086; + this.state = 2069; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 2087; + this.state = 2070; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 2088; + this.state = 2071; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 2089; + this.state = 2072; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2090; + this.state = 2073; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 2091; + this.state = 2074; this.match(FlinkSqlParser.EXCLAMATION_SYMBOL); - this.state = 2092; + this.state = 2075; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 2093; + this.state = 2076; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2094; + this.state = 2077; this.match(FlinkSqlParser.EQUAL_SYMBOL); - this.state = 2095; + this.state = 2078; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; @@ -10460,47 +11139,47 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public bitOperator(): BitOperatorContext { let localctx: BitOperatorContext = new BitOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 336, FlinkSqlParser.RULE_bitOperator); + this.enterRule(localctx, 332, FlinkSqlParser.RULE_bitOperator); try { - this.state = 2105; + this.state = 2088; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 313: + case 367: this.enterOuterAlt(localctx, 1); { - this.state = 2098; + this.state = 2081; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2099; + this.state = 2082; this.match(FlinkSqlParser.LESS_SYMBOL); } break; - case 312: + case 366: this.enterOuterAlt(localctx, 2); { - this.state = 2100; + this.state = 2083; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 2101; + this.state = 2084; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; - case 317: + case 371: this.enterOuterAlt(localctx, 3); { - this.state = 2102; + this.state = 2085; this.match(FlinkSqlParser.BIT_AND_OP); } break; - case 318: + case 372: this.enterOuterAlt(localctx, 4); { - this.state = 2103; + this.state = 2086; this.match(FlinkSqlParser.BIT_XOR_OP); } break; - case 316: + case 370: this.enterOuterAlt(localctx, 5); { - this.state = 2104; + this.state = 2087; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -10525,14 +11204,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public mathOperator(): MathOperatorContext { let localctx: MathOperatorContext = new MathOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 338, FlinkSqlParser.RULE_mathOperator); + this.enterRule(localctx, 334, FlinkSqlParser.RULE_mathOperator); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2107; + this.state = 2090; _la = this._input.LA(1); - if(!(_la===132 || ((((_la - 333)) & ~0x1F) === 0 && ((1 << (_la - 333)) & 221) !== 0))) { + if(!(_la===32 || ((((_la - 387)) & ~0x1F) === 0 && ((1 << (_la - 387)) & 221) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -10558,14 +11237,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public unaryOperator(): UnaryOperatorContext { let localctx: UnaryOperatorContext = new UnaryOperatorContext(this, this._ctx, this.state); - this.enterRule(localctx, 340, FlinkSqlParser.RULE_unaryOperator); + this.enterRule(localctx, 336, FlinkSqlParser.RULE_unaryOperator); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2109; + this.state = 2092; _la = this._input.LA(1); - if(!(_la===25 || ((((_la - 314)) & ~0x1F) === 0 && ((1 << (_la - 314)) & 6291459) !== 0))) { + if(!(_la===294 || ((((_la - 368)) & ~0x1F) === 0 && ((1 << (_la - 368)) & 6291459) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -10589,107 +11268,82 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) - public fullColumnName(): FullColumnNameContext { - let localctx: FullColumnNameContext = new FullColumnNameContext(this, this._ctx, this.state); - this.enterRule(localctx, 342, FlinkSqlParser.RULE_fullColumnName); - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 2111; - this.uid(); - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) public constant(): ConstantContext { let localctx: ConstantContext = new ConstantContext(this, this._ctx, this.state); - this.enterRule(localctx, 344, FlinkSqlParser.RULE_constant); + this.enterRule(localctx, 338, FlinkSqlParser.RULE_constant); let _la: number; try { - this.state = 2125; + this.state = 2106; this._errHandler.sync(this); switch (this._input.LA(1)) { - case 343: + case 397: this.enterOuterAlt(localctx, 1); { - this.state = 2113; + this.state = 2094; this.stringLiteral(); } break; - case 344: + case 398: this.enterOuterAlt(localctx, 2); { - this.state = 2114; + this.state = 2095; this.decimalLiteral(); } break; - case 38: + case 267: this.enterOuterAlt(localctx, 3); { - this.state = 2115; - this.interval(); + this.state = 2096; + this.timeIntervalExpression(); } break; - case 335: + case 389: this.enterOuterAlt(localctx, 4); { - this.state = 2116; + this.state = 2097; this.match(FlinkSqlParser.HYPNEN_SIGN); - this.state = 2117; + this.state = 2098; this.decimalLiteral(); } break; - case 32: - case 33: + case 245: + case 344: this.enterOuterAlt(localctx, 5); { - this.state = 2118; + this.state = 2099; this.booleanLiteral(); } break; - case 345: + case 399: this.enterOuterAlt(localctx, 6); { - this.state = 2119; + this.state = 2100; this.match(FlinkSqlParser.REAL_LITERAL); } break; - case 346: + case 400: this.enterOuterAlt(localctx, 7); { - this.state = 2120; + this.state = 2101; this.match(FlinkSqlParser.BIT_STRING); } break; - case 25: - case 309: + case 294: + case 295: this.enterOuterAlt(localctx, 8); { - this.state = 2122; + this.state = 2103; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===25) { + if (_la===294) { { - this.state = 2121; - this.match(FlinkSqlParser.NOT); + this.state = 2102; + this.match(FlinkSqlParser.KW_NOT); } } - this.state = 2124; - this.match(FlinkSqlParser.NULL); + this.state = 2105; + this.match(FlinkSqlParser.KW_NULL); } break; default: @@ -10713,11 +11367,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public stringLiteral(): StringLiteralContext { let localctx: StringLiteralContext = new StringLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 346, FlinkSqlParser.RULE_stringLiteral); + this.enterRule(localctx, 340, FlinkSqlParser.RULE_stringLiteral); try { this.enterOuterAlt(localctx, 1); { - this.state = 2127; + this.state = 2108; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -10738,11 +11392,11 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public decimalLiteral(): DecimalLiteralContext { let localctx: DecimalLiteralContext = new DecimalLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 348, FlinkSqlParser.RULE_decimalLiteral); + this.enterRule(localctx, 342, FlinkSqlParser.RULE_decimalLiteral); try { this.enterOuterAlt(localctx, 1); { - this.state = 2129; + this.state = 2110; this.match(FlinkSqlParser.DIG_LITERAL); } } @@ -10763,14 +11417,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public booleanLiteral(): BooleanLiteralContext { let localctx: BooleanLiteralContext = new BooleanLiteralContext(this, this._ctx, this.state); - this.enterRule(localctx, 350, FlinkSqlParser.RULE_booleanLiteral); + this.enterRule(localctx, 344, FlinkSqlParser.RULE_booleanLiteral); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2131; + this.state = 2112; _la = this._input.LA(1); - if(!(_la===32 || _la===33)) { + if(!(_la===245 || _la===344)) { this._errHandler.recoverInline(this); } else { @@ -10796,14 +11450,14 @@ export default class FlinkSqlParser extends Parser { // @RuleVersion(0) public setQuantifier(): SetQuantifierContext { let localctx: SetQuantifierContext = new SetQuantifierContext(this, this._ctx, this.state); - this.enterRule(localctx, 352, FlinkSqlParser.RULE_setQuantifier); + this.enterRule(localctx, 346, FlinkSqlParser.RULE_setQuantifier); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2133; + this.state = 2114; _la = this._input.LA(1); - if(!(_la===8 || _la===10)) { + if(!(_la===176 || _la===232)) { this._errHandler.recoverInline(this); } else { @@ -10827,16 +11481,16 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) - public ansiNonReserved(): AnsiNonReservedContext { - let localctx: AnsiNonReservedContext = new AnsiNonReservedContext(this, this._ctx, this.state); - this.enterRule(localctx, 354, FlinkSqlParser.RULE_ansiNonReserved); + public reservedKeywords(): ReservedKeywordsContext { + let localctx: ReservedKeywordsContext = new ReservedKeywordsContext(this, this._ctx, this.state); + this.enterRule(localctx, 348, FlinkSqlParser.RULE_reservedKeywords); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2135; + this.state = 2116; _la = this._input.LA(1); - if(!(((((_la - 6)) & ~0x1F) === 0 && ((1 << (_la - 6)) & 1978716033) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & 4294709249) !== 0) || ((((_la - 72)) & ~0x1F) === 0 && ((1 << (_la - 72)) & 3418108729) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & 4280287177) !== 0) || ((((_la - 136)) & ~0x1F) === 0 && ((1 << (_la - 136)) & 4294967167) !== 0) || ((((_la - 168)) & ~0x1F) === 0 && ((1 << (_la - 168)) & 4294836223) !== 0) || ((((_la - 200)) & ~0x1F) === 0 && ((1 << (_la - 200)) & 4294959087) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & 476053943) !== 0) || ((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 266320383) !== 0))) { + if(!(((((_la - 175)) & ~0x1F) === 0 && ((1 << (_la - 175)) & 4294967295) !== 0) || ((((_la - 207)) & ~0x1F) === 0 && ((1 << (_la - 207)) & 4294967295) !== 0) || ((((_la - 239)) & ~0x1F) === 0 && ((1 << (_la - 239)) & 4294967295) !== 0) || ((((_la - 271)) & ~0x1F) === 0 && ((1 << (_la - 271)) & 4294967295) !== 0) || ((((_la - 303)) & ~0x1F) === 0 && ((1 << (_la - 303)) & 4294967295) !== 0) || ((((_la - 335)) & ~0x1F) === 0 && ((1 << (_la - 335)) & 1073741823) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -10860,49 +11514,16 @@ export default class FlinkSqlParser extends Parser { return localctx; } // @RuleVersion(0) - public strictNonReserved(): StrictNonReservedContext { - let localctx: StrictNonReservedContext = new StrictNonReservedContext(this, this._ctx, this.state); - this.enterRule(localctx, 356, FlinkSqlParser.RULE_strictNonReserved); + public nonReservedKeywords(): NonReservedKeywordsContext { + let localctx: NonReservedKeywordsContext = new NonReservedKeywordsContext(this, this._ctx, this.state); + this.enterRule(localctx, 350, FlinkSqlParser.RULE_nonReservedKeywords); let _la: number; try { this.enterOuterAlt(localctx, 1); { - this.state = 2137; + this.state = 2118; _la = this._input.LA(1); - if(!(((((_la - 45)) & ~0x1F) === 0 && ((1 << (_la - 45)) & 1787) !== 0) || ((((_la - 105)) & ~0x1F) === 0 && ((1 << (_la - 105)) & 15) !== 0) || _la===143 || _la===223)) { - this._errHandler.recoverInline(this); - } - else { - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return localctx; - } - // @RuleVersion(0) - public nonReserved(): NonReservedContext { - let localctx: NonReservedContext = new NonReservedContext(this, this._ctx, this.state); - this.enterRule(localctx, 358, FlinkSqlParser.RULE_nonReserved); - let _la: number; - try { - this.enterOuterAlt(localctx, 1); - { - this.state = 2139; - _la = this._input.LA(1); - if(!(((((_la - 4)) & ~0x1F) === 0 && ((1 << (_la - 4)) & 4294967295) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & 4294052223) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & 4291015671) !== 0) || ((((_la - 102)) & ~0x1F) === 0 && ((1 << (_la - 102)) & 4294967175) !== 0) || ((((_la - 134)) & ~0x1F) === 0 && ((1 << (_la - 134)) & 4294966783) !== 0) || ((((_la - 166)) & ~0x1F) === 0 && ((1 << (_la - 166)) & 4294965247) !== 0) || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & 4261380095) !== 0) || ((((_la - 230)) & ~0x1F) === 0 && ((1 << (_la - 230)) & 1971324639) !== 0) || ((((_la - 283)) & ~0x1F) === 0 && ((1 << (_la - 283)) & 266320383) !== 0))) { + if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967295) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 32767) !== 0))) { this._errHandler.recoverInline(this); } else { @@ -10932,11 +11553,11 @@ export default class FlinkSqlParser extends Parser { return this.queryStatement_sempred(localctx as QueryStatementContext, predIndex); case 88: return this.tableExpression_sempred(localctx as TableExpressionContext, predIndex); - case 131: + case 130: return this.booleanExpression_sempred(localctx as BooleanExpressionContext, predIndex); - case 134: + case 133: return this.valueExpression_sempred(localctx as ValueExpressionContext, predIndex); - case 135: + case 134: return this.primaryExpression_sempred(localctx as PrimaryExpressionContext, predIndex); } return true; @@ -10991,7 +11612,7 @@ export default class FlinkSqlParser extends Parser { return true; } - public static readonly _serializedATN: number[] = [4,1,349,2142,2,0,7,0, + public static readonly _serializedATN: number[] = [4,1,402,2121,2,0,7,0, 2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9, 2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2, 17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24, @@ -11018,785 +11639,777 @@ export default class FlinkSqlParser extends Parser { 7,157,2,158,7,158,2,159,7,159,2,160,7,160,2,161,7,161,2,162,7,162,2,163, 7,163,2,164,7,164,2,165,7,165,2,166,7,166,2,167,7,167,2,168,7,168,2,169, 7,169,2,170,7,170,2,171,7,171,2,172,7,172,2,173,7,173,2,174,7,174,2,175, - 7,175,2,176,7,176,2,177,7,177,2,178,7,178,2,179,7,179,1,0,1,0,1,0,1,1,1, - 1,1,1,1,2,1,2,3,2,369,8,2,1,2,5,2,372,8,2,10,2,12,2,375,9,2,1,3,1,3,1,3, - 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,389,8,3,1,4,1,4,1,5,1,5,1,5,1,5, - 1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,407,8,5,1,6,1,6,3,6,411,8,6, - 1,7,1,7,1,7,1,8,1,8,1,8,1,8,3,8,420,8,8,1,8,1,8,1,8,3,8,425,8,8,1,9,1,9, - 1,9,5,9,430,8,9,10,9,12,9,433,9,9,1,10,1,10,1,11,1,11,3,11,439,8,11,1,11, - 1,11,3,11,443,8,11,1,12,1,12,1,12,1,12,1,12,5,12,450,8,12,10,12,12,12,453, - 9,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,464,8,13,1,13,3, - 13,467,8,13,1,13,1,13,1,13,1,13,1,13,3,13,474,8,13,1,13,1,13,1,13,1,13, - 1,13,1,13,3,13,482,8,13,1,13,1,13,1,13,3,13,487,8,13,1,13,3,13,490,8,13, - 1,14,1,14,1,14,1,14,1,14,3,14,497,8,14,1,15,1,15,1,15,1,15,1,16,1,16,3, - 16,505,8,16,1,17,1,17,3,17,509,8,17,1,18,1,18,1,18,1,18,1,19,1,19,1,19, - 1,19,1,19,1,19,3,19,521,8,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,529,8,19, - 1,19,1,19,3,19,533,8,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1, - 19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3,19,554,8,19,1,20,1,20, - 3,20,558,8,20,1,21,1,21,3,21,562,8,21,1,21,1,21,3,21,566,8,21,1,21,1,21, - 1,21,1,21,1,21,5,21,573,8,21,10,21,12,21,576,9,21,1,21,1,21,3,21,580,8, - 21,1,21,1,21,3,21,584,8,21,1,21,1,21,3,21,588,8,21,1,21,1,21,3,21,592,8, - 21,1,21,3,21,595,8,21,1,21,1,21,3,21,599,8,21,1,22,1,22,1,22,3,22,604,8, - 22,1,22,1,22,1,22,1,22,3,22,610,8,22,1,23,1,23,1,23,3,23,615,8,23,1,24, - 1,24,1,24,3,24,620,8,24,1,24,3,24,623,8,24,1,25,1,25,3,25,627,8,25,1,26, - 1,26,1,26,1,26,5,26,633,8,26,10,26,12,26,636,9,26,1,26,1,26,1,27,1,27,1, - 27,3,27,643,8,27,1,27,1,27,3,27,647,8,27,1,27,1,27,3,27,651,8,27,1,27,1, - 27,3,27,655,8,27,1,27,1,27,3,27,659,8,27,1,27,1,27,3,27,663,8,27,1,27,1, - 27,3,27,667,8,27,1,27,1,27,3,27,671,8,27,1,27,1,27,3,27,675,8,27,3,27,677, - 8,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,3,29,687,8,29,1,29,1,29,1, - 30,1,30,1,30,1,30,3,30,695,8,30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32, - 1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,5,33,717,8, - 33,10,33,12,33,720,9,33,1,33,1,33,1,34,1,34,3,34,726,8,34,1,34,1,34,1,34, - 1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,3,36,741,8,36,1,36,3, - 36,744,8,36,1,37,1,37,1,38,1,38,1,38,1,38,3,38,752,8,38,1,39,1,39,1,40, - 1,40,1,40,1,40,1,40,1,40,1,41,1,41,3,41,764,8,41,1,41,1,41,1,41,1,41,1, - 41,1,41,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,45,1,45,1,45, - 1,45,5,45,786,8,45,10,45,12,45,789,9,45,1,45,1,45,1,46,1,46,1,46,1,46,1, - 46,1,46,5,46,799,8,46,10,46,12,46,802,9,46,1,46,1,46,3,46,806,8,46,1,47, - 1,47,3,47,810,8,47,1,48,1,48,1,48,1,48,5,48,816,8,48,10,48,12,48,819,9, - 48,1,48,3,48,822,8,48,1,49,1,49,1,50,1,50,1,50,1,50,3,50,830,8,50,1,51, - 1,51,1,51,1,51,1,51,1,52,1,52,1,52,3,52,840,8,52,1,52,1,52,3,52,844,8,52, - 1,52,1,52,1,53,1,53,3,53,850,8,53,1,53,1,53,3,53,854,8,53,1,53,1,53,3,53, - 858,8,53,1,53,3,53,861,8,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,3,54,870, - 8,54,1,54,1,54,3,54,874,8,54,1,54,1,54,1,54,1,54,1,54,3,54,881,8,54,1,54, - 3,54,884,8,54,1,55,1,55,1,55,1,55,1,55,1,55,5,55,892,8,55,10,55,12,55,895, - 9,55,1,56,1,56,1,57,1,57,1,57,3,57,902,8,57,1,57,1,57,1,57,1,57,1,57,1, - 57,3,57,910,8,57,1,58,1,58,3,58,914,8,58,1,58,1,58,1,58,1,59,1,59,1,59, - 1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,929,8,60,1,61,1,61,1,61,1,61,1, - 62,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,3,64,948, - 8,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,3,66,959,8,66,1,66,1, - 66,3,66,963,8,66,1,66,1,66,1,66,1,66,1,66,3,66,970,8,66,1,67,1,67,1,67, - 3,67,975,8,67,1,67,1,67,1,68,1,68,3,68,981,8,68,1,68,1,68,3,68,985,8,68, - 1,68,1,68,1,69,1,69,1,69,3,69,992,8,69,1,69,1,69,3,69,996,8,69,1,70,1,70, - 3,70,1000,8,70,1,70,1,70,3,70,1004,8,70,1,70,1,70,1,71,1,71,1,71,1,71,3, - 71,1012,8,71,1,71,1,71,3,71,1016,8,71,1,71,1,71,1,72,3,72,1021,8,72,1,72, - 1,72,1,72,3,72,1026,8,72,1,73,1,73,1,73,1,73,3,73,1032,8,73,1,73,3,73,1035, - 8,73,1,73,1,73,3,73,1039,8,73,1,74,1,74,1,74,1,75,1,75,1,75,1,75,5,75,1048, - 8,75,10,75,12,75,1051,9,75,1,76,1,76,1,76,1,76,5,76,1057,8,76,10,76,12, - 76,1060,9,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,4,77,1070,8,77,11, - 77,12,77,1071,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1, - 78,1,78,3,78,1087,8,78,1,78,3,78,1090,8,78,1,78,1,78,3,78,1094,8,78,1,78, - 3,78,1097,8,78,3,78,1099,8,78,1,78,1,78,1,78,3,78,1104,8,78,1,78,1,78,3, - 78,1108,8,78,1,78,3,78,1111,8,78,5,78,1113,8,78,10,78,12,78,1116,9,78,1, - 79,1,79,1,79,1,79,5,79,1122,8,79,10,79,12,79,1125,9,79,1,80,1,80,1,80,1, - 80,5,80,1131,8,80,10,80,12,80,1134,9,80,1,81,1,81,1,81,1,81,1,81,5,81,1141, - 8,81,10,81,12,81,1144,9,81,1,81,1,81,3,81,1148,8,81,1,81,1,81,1,81,1,81, - 1,81,1,82,1,82,1,83,1,83,1,83,3,83,1160,8,83,1,83,3,83,1163,8,83,1,83,3, - 83,1166,8,83,1,83,3,83,1169,8,83,1,83,1,83,1,83,1,83,3,83,1175,8,83,1,84, - 1,84,3,84,1179,8,84,1,84,1,84,1,84,1,84,5,84,1185,8,84,10,84,12,84,1188, - 9,84,3,84,1190,8,84,1,85,1,85,1,85,3,85,1195,8,85,1,85,3,85,1198,8,85,3, - 85,1200,8,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86, - 3,86,1214,8,86,1,87,1,87,1,87,1,88,1,88,1,88,1,88,5,88,1223,8,88,10,88, - 12,88,1226,9,88,1,88,1,88,3,88,1230,8,88,1,88,1,88,1,88,1,88,1,88,1,88, - 3,88,1238,8,88,1,88,3,88,1241,8,88,1,88,3,88,1244,8,88,1,88,1,88,1,88,3, - 88,1249,8,88,5,88,1251,8,88,10,88,12,88,1254,9,88,1,89,1,89,3,89,1258,8, - 89,1,90,3,90,1261,8,90,1,90,1,90,3,90,1265,8,90,1,90,3,90,1268,8,90,1,90, - 3,90,1271,8,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,5,90,1281,8,90,10, - 90,12,90,1284,9,90,1,90,1,90,1,90,1,90,3,90,1290,8,90,1,90,1,90,1,90,1, - 90,1,90,1,90,1,90,1,90,1,90,3,90,1301,8,90,1,91,1,91,1,92,1,92,1,92,1,92, - 1,92,1,92,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1, - 96,1,96,1,96,1,96,1,96,5,96,1328,8,96,10,96,12,96,1331,9,96,1,96,1,96,1, - 97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98, - 1,98,1,98,3,98,1352,8,98,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,101, - 1,101,1,101,1,101,1,101,1,101,1,101,5,101,1368,8,101,10,101,12,101,1371, - 9,101,1,101,1,101,3,101,1375,8,101,1,102,1,102,1,102,1,103,1,103,1,103, - 1,103,1,103,5,103,1385,8,103,10,103,12,103,1388,9,103,1,104,1,104,1,104, - 1,104,1,104,1,104,1,104,1,104,5,104,1398,8,104,10,104,12,104,1401,9,104, - 1,104,1,104,1,104,1,104,1,104,1,104,1,104,5,104,1410,8,104,10,104,12,104, - 1413,9,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,5,104,1422,8,104,10, - 104,12,104,1425,9,104,1,104,1,104,3,104,1429,8,104,1,105,1,105,1,105,1, - 106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,109,1, - 109,1,110,1,110,1,110,1,111,1,111,1,111,1,111,5,111,1454,8,111,10,111,12, - 111,1457,9,111,1,112,1,112,1,112,1,112,1,113,3,113,1464,8,113,1,113,1,113, - 3,113,1468,8,113,1,113,3,113,1471,8,113,1,113,3,113,1474,8,113,1,113,1, - 113,1,114,1,114,1,114,3,114,1481,8,114,1,114,3,114,1484,8,114,1,114,3,114, - 1487,8,114,1,114,3,114,1490,8,114,1,114,3,114,1493,8,114,1,114,3,114,1496, - 8,114,1,114,1,114,1,114,3,114,1501,8,114,1,114,3,114,1504,8,114,1,115,1, - 115,1,115,1,115,1,115,5,115,1511,8,115,10,115,12,115,1514,9,115,1,116,1, - 116,3,116,1518,8,116,1,116,1,116,3,116,1522,8,116,1,117,1,117,1,117,3,117, - 1527,8,117,1,118,1,118,1,118,1,118,1,118,5,118,1534,8,118,10,118,12,118, - 1537,9,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119, - 1,119,1,119,1,119,1,119,1,119,1,119,3,119,1555,8,119,1,120,1,120,1,120, - 1,120,5,120,1561,8,120,10,120,12,120,1564,9,120,1,121,1,121,1,121,4,121, - 1569,8,121,11,121,12,121,1570,1,121,1,121,3,121,1575,8,121,1,122,1,122, - 3,122,1579,8,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,3,123, - 1589,8,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, - 1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124, - 1,124,1,124,3,124,1615,8,124,1,125,1,125,1,125,1,125,5,125,1621,8,125,10, - 125,12,125,1624,9,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1, - 126,3,126,1635,8,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128,1, - 129,1,129,1,129,1,129,1,130,1,130,1,131,1,131,1,131,1,131,1,131,1,131,1, - 131,1,131,1,131,1,131,3,131,1661,8,131,3,131,1663,8,131,1,131,1,131,1,131, - 1,131,1,131,1,131,5,131,1671,8,131,10,131,12,131,1674,9,131,1,132,3,132, - 1677,8,132,1,132,1,132,1,132,1,132,1,132,1,132,3,132,1685,8,132,1,132,1, - 132,1,132,1,132,1,132,5,132,1692,8,132,10,132,12,132,1695,9,132,1,132,1, - 132,1,132,3,132,1700,8,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1, - 132,1,132,1,132,1,132,3,132,1713,8,132,1,132,1,132,1,132,3,132,1718,8,132, - 1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,5,132,1728,8,132,10,132, - 12,132,1731,9,132,1,132,1,132,3,132,1735,8,132,1,132,3,132,1738,8,132,1, - 132,1,132,1,132,1,132,3,132,1744,8,132,1,132,1,132,1,132,3,132,1749,8,132, - 1,132,1,132,1,132,3,132,1754,8,132,1,132,1,132,1,132,3,132,1759,8,132,1, - 133,3,133,1762,8,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,5, - 133,1772,8,133,10,133,12,133,1775,9,133,1,133,1,133,3,133,1779,8,133,1, - 133,3,133,1782,8,133,1,133,1,133,3,133,1786,8,133,1,134,1,134,1,134,1,134, - 3,134,1792,8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, - 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,5,134,1813, - 8,134,10,134,12,134,1816,9,134,1,135,1,135,1,135,4,135,1821,8,135,11,135, - 12,135,1822,1,135,1,135,3,135,1827,8,135,1,135,1,135,1,135,1,135,1,135, - 4,135,1834,8,135,11,135,12,135,1835,1,135,1,135,3,135,1840,8,135,1,135, - 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, - 1,135,3,135,1856,8,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,3,135, - 1865,8,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, - 1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, - 3,135,1889,8,135,1,135,1,135,1,135,5,135,1894,8,135,10,135,12,135,1897, - 9,135,3,135,1899,8,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135,1,135, - 3,135,1909,8,135,1,135,1,135,1,135,1,135,1,135,5,135,1916,8,135,10,135, - 12,135,1919,9,135,1,136,1,136,1,137,1,137,1,138,1,138,1,139,1,139,3,139, - 1929,8,139,1,140,1,140,1,140,3,140,1934,8,140,1,141,1,141,3,141,1938,8, - 141,1,142,1,142,1,142,4,142,1943,8,142,11,142,12,142,1944,1,143,1,143,1, - 143,3,143,1950,8,143,1,144,1,144,1,144,1,144,1,144,1,145,3,145,1958,8,145, - 1,145,1,145,3,145,1962,8,145,1,146,3,146,1965,8,146,1,146,1,146,3,146,1969, - 8,146,1,147,3,147,1972,8,147,1,147,1,147,3,147,1976,8,147,1,148,1,148,1, - 148,1,149,1,149,4,149,1983,8,149,11,149,12,149,1984,1,149,3,149,1988,8, - 149,1,150,1,150,1,150,1,150,1,151,1,151,1,151,5,151,1997,8,151,10,151,12, - 151,2000,9,151,1,152,1,152,3,152,2004,8,152,1,153,1,153,1,153,1,153,3,153, - 2010,8,153,1,154,1,154,1,155,1,155,1,156,1,156,1,156,1,156,1,156,1,157, - 1,157,1,157,5,157,2024,8,157,10,157,12,157,2027,9,157,1,158,1,158,5,158, - 2031,8,158,10,158,12,158,2034,9,158,1,159,1,159,1,159,1,160,1,160,1,160, - 1,160,1,161,1,161,1,161,1,162,1,162,1,162,1,162,5,162,2050,8,162,10,162, - 12,162,2053,9,162,1,162,1,162,1,163,1,163,3,163,2059,8,163,1,163,3,163, - 2062,8,163,1,164,1,164,1,164,3,164,2067,8,164,1,165,1,165,1,165,1,165,3, - 165,2073,8,165,1,166,1,166,1,166,1,166,1,166,1,166,3,166,2081,8,166,1,167, - 1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167,1,167, - 1,167,3,167,2097,8,167,1,168,1,168,1,168,1,168,1,168,1,168,1,168,3,168, - 2106,8,168,1,169,1,169,1,170,1,170,1,171,1,171,1,172,1,172,1,172,1,172, - 1,172,1,172,1,172,1,172,1,172,3,172,2123,8,172,1,172,3,172,2126,8,172,1, - 173,1,173,1,174,1,174,1,175,1,175,1,176,1,176,1,177,1,177,1,178,1,178,1, - 179,1,179,1,179,1,2032,5,156,176,262,268,270,180,0,2,4,6,8,10,12,14,16, - 18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64, - 66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108, - 110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144, - 146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180, - 182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216, - 218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252, - 254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288, - 290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324, - 326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,0,42, - 2,0,36,36,84,84,1,0,87,89,2,0,193,193,253,255,2,0,192,192,239,239,2,0,5, - 5,24,24,2,0,74,74,76,76,2,0,6,6,82,82,1,0,246,250,3,0,301,301,306,306,309, - 309,6,0,283,283,286,290,294,298,302,302,304,304,310,310,1,0,70,71,2,0,291, - 293,299,300,2,0,284,284,305,305,1,0,233,234,3,0,8,8,102,102,236,236,1,0, - 233,235,2,0,167,167,237,238,1,0,241,243,2,0,184,184,186,186,2,0,83,83,140, - 140,2,0,105,106,108,108,2,0,48,49,51,52,1,0,265,267,2,0,118,118,269,273, - 1,0,16,17,2,0,265,266,274,274,1,0,35,36,2,0,67,67,69,69,1,0,8,9,1,0,32, - 33,2,0,315,315,335,336,4,0,132,132,333,333,337,337,340,340,2,0,335,336, - 338,338,1,0,335,336,1,0,344,345,2,0,344,344,347,347,4,0,132,132,333,333, - 335,337,339,340,3,0,25,25,314,315,335,336,2,0,8,8,10,10,32,0,6,6,13,17, - 20,21,26,30,32,32,34,36,38,38,50,50,56,69,72,72,75,77,80,81,84,85,90,93, - 95,97,99,99,102,104,107,107,110,124,128,142,144,184,186,203,205,212,214, - 234,236,237,239,240,253,254,258,260,283,291,294,296,298,303,305,310,6,0, - 45,46,48,52,54,55,105,108,143,143,223,223,24,0,4,42,44,44,47,47,53,53,56, - 70,72,77,80,81,83,85,90,99,102,104,109,142,144,176,178,212,214,222,224, - 234,236,237,239,240,253,254,256,256,258,260,283,291,294,296,298,303,305, - 310,2319,0,360,1,0,0,0,2,363,1,0,0,0,4,373,1,0,0,0,6,388,1,0,0,0,8,390, - 1,0,0,0,10,406,1,0,0,0,12,410,1,0,0,0,14,412,1,0,0,0,16,415,1,0,0,0,18, - 426,1,0,0,0,20,434,1,0,0,0,22,442,1,0,0,0,24,444,1,0,0,0,26,489,1,0,0,0, - 28,491,1,0,0,0,30,498,1,0,0,0,32,502,1,0,0,0,34,506,1,0,0,0,36,510,1,0, - 0,0,38,553,1,0,0,0,40,557,1,0,0,0,42,559,1,0,0,0,44,600,1,0,0,0,46,614, - 1,0,0,0,48,616,1,0,0,0,50,626,1,0,0,0,52,628,1,0,0,0,54,676,1,0,0,0,56, - 678,1,0,0,0,58,682,1,0,0,0,60,690,1,0,0,0,62,698,1,0,0,0,64,702,1,0,0,0, - 66,709,1,0,0,0,68,725,1,0,0,0,70,732,1,0,0,0,72,735,1,0,0,0,74,745,1,0, - 0,0,76,747,1,0,0,0,78,753,1,0,0,0,80,755,1,0,0,0,82,763,1,0,0,0,84,771, - 1,0,0,0,86,773,1,0,0,0,88,777,1,0,0,0,90,781,1,0,0,0,92,805,1,0,0,0,94, - 809,1,0,0,0,96,811,1,0,0,0,98,823,1,0,0,0,100,829,1,0,0,0,102,831,1,0,0, - 0,104,836,1,0,0,0,106,847,1,0,0,0,108,865,1,0,0,0,110,885,1,0,0,0,112,896, - 1,0,0,0,114,898,1,0,0,0,116,911,1,0,0,0,118,918,1,0,0,0,120,921,1,0,0,0, - 122,930,1,0,0,0,124,934,1,0,0,0,126,938,1,0,0,0,128,941,1,0,0,0,130,949, - 1,0,0,0,132,954,1,0,0,0,134,971,1,0,0,0,136,978,1,0,0,0,138,988,1,0,0,0, - 140,997,1,0,0,0,142,1007,1,0,0,0,144,1025,1,0,0,0,146,1027,1,0,0,0,148, - 1040,1,0,0,0,150,1043,1,0,0,0,152,1052,1,0,0,0,154,1063,1,0,0,0,156,1098, - 1,0,0,0,158,1117,1,0,0,0,160,1126,1,0,0,0,162,1135,1,0,0,0,164,1154,1,0, - 0,0,166,1174,1,0,0,0,168,1176,1,0,0,0,170,1199,1,0,0,0,172,1213,1,0,0,0, - 174,1215,1,0,0,0,176,1229,1,0,0,0,178,1255,1,0,0,0,180,1300,1,0,0,0,182, - 1302,1,0,0,0,184,1304,1,0,0,0,186,1310,1,0,0,0,188,1312,1,0,0,0,190,1317, - 1,0,0,0,192,1322,1,0,0,0,194,1334,1,0,0,0,196,1351,1,0,0,0,198,1353,1,0, - 0,0,200,1355,1,0,0,0,202,1374,1,0,0,0,204,1376,1,0,0,0,206,1379,1,0,0,0, - 208,1428,1,0,0,0,210,1430,1,0,0,0,212,1433,1,0,0,0,214,1435,1,0,0,0,216, - 1442,1,0,0,0,218,1444,1,0,0,0,220,1446,1,0,0,0,222,1449,1,0,0,0,224,1458, - 1,0,0,0,226,1463,1,0,0,0,228,1477,1,0,0,0,230,1505,1,0,0,0,232,1515,1,0, - 0,0,234,1523,1,0,0,0,236,1528,1,0,0,0,238,1554,1,0,0,0,240,1556,1,0,0,0, - 242,1565,1,0,0,0,244,1576,1,0,0,0,246,1588,1,0,0,0,248,1614,1,0,0,0,250, - 1616,1,0,0,0,252,1634,1,0,0,0,254,1636,1,0,0,0,256,1641,1,0,0,0,258,1644, - 1,0,0,0,260,1648,1,0,0,0,262,1662,1,0,0,0,264,1758,1,0,0,0,266,1785,1,0, - 0,0,268,1791,1,0,0,0,270,1908,1,0,0,0,272,1920,1,0,0,0,274,1922,1,0,0,0, - 276,1924,1,0,0,0,278,1928,1,0,0,0,280,1930,1,0,0,0,282,1935,1,0,0,0,284, - 1942,1,0,0,0,286,1946,1,0,0,0,288,1951,1,0,0,0,290,1961,1,0,0,0,292,1964, - 1,0,0,0,294,1971,1,0,0,0,296,1977,1,0,0,0,298,1987,1,0,0,0,300,1989,1,0, - 0,0,302,1993,1,0,0,0,304,2003,1,0,0,0,306,2009,1,0,0,0,308,2011,1,0,0,0, - 310,2013,1,0,0,0,312,2015,1,0,0,0,314,2020,1,0,0,0,316,2028,1,0,0,0,318, - 2035,1,0,0,0,320,2038,1,0,0,0,322,2042,1,0,0,0,324,2045,1,0,0,0,326,2056, - 1,0,0,0,328,2066,1,0,0,0,330,2072,1,0,0,0,332,2080,1,0,0,0,334,2096,1,0, - 0,0,336,2105,1,0,0,0,338,2107,1,0,0,0,340,2109,1,0,0,0,342,2111,1,0,0,0, - 344,2125,1,0,0,0,346,2127,1,0,0,0,348,2129,1,0,0,0,350,2131,1,0,0,0,352, - 2133,1,0,0,0,354,2135,1,0,0,0,356,2137,1,0,0,0,358,2139,1,0,0,0,360,361, - 3,2,1,0,361,362,5,0,0,1,362,1,1,0,0,0,363,364,3,4,2,0,364,365,5,0,0,1,365, - 3,1,0,0,0,366,368,3,6,3,0,367,369,5,327,0,0,368,367,1,0,0,0,368,369,1,0, - 0,0,369,372,1,0,0,0,370,372,3,8,4,0,371,366,1,0,0,0,371,370,1,0,0,0,372, - 375,1,0,0,0,373,371,1,0,0,0,373,374,1,0,0,0,374,5,1,0,0,0,375,373,1,0,0, - 0,376,389,3,10,5,0,377,389,3,12,6,0,378,389,3,14,7,0,379,389,3,16,8,0,380, - 389,3,22,11,0,381,389,3,26,13,0,382,389,3,28,14,0,383,389,3,30,15,0,384, - 389,3,32,16,0,385,389,3,34,17,0,386,389,3,36,18,0,387,389,3,38,19,0,388, - 376,1,0,0,0,388,377,1,0,0,0,388,378,1,0,0,0,388,379,1,0,0,0,388,380,1,0, - 0,0,388,381,1,0,0,0,388,382,1,0,0,0,388,383,1,0,0,0,388,384,1,0,0,0,388, - 385,1,0,0,0,388,386,1,0,0,0,388,387,1,0,0,0,389,7,1,0,0,0,390,391,5,327, - 0,0,391,9,1,0,0,0,392,407,3,40,20,0,393,407,3,104,52,0,394,407,3,106,53, - 0,395,407,3,108,54,0,396,407,3,102,51,0,397,407,3,114,57,0,398,407,3,128, - 64,0,399,407,3,130,65,0,400,407,3,132,66,0,401,407,3,134,67,0,402,407,3, - 136,68,0,403,407,3,138,69,0,404,407,3,140,70,0,405,407,3,142,71,0,406,392, - 1,0,0,0,406,393,1,0,0,0,406,394,1,0,0,0,406,395,1,0,0,0,406,396,1,0,0,0, - 406,397,1,0,0,0,406,398,1,0,0,0,406,399,1,0,0,0,406,400,1,0,0,0,406,401, - 1,0,0,0,406,402,1,0,0,0,406,403,1,0,0,0,406,404,1,0,0,0,406,405,1,0,0,0, - 407,11,1,0,0,0,408,411,3,156,78,0,409,411,3,144,72,0,410,408,1,0,0,0,410, - 409,1,0,0,0,411,13,1,0,0,0,412,413,7,0,0,0,413,414,3,316,158,0,414,15,1, - 0,0,0,415,419,5,85,0,0,416,420,3,18,9,0,417,418,5,86,0,0,418,420,5,37,0, - 0,419,416,1,0,0,0,419,417,1,0,0,0,419,420,1,0,0,0,420,424,1,0,0,0,421,425, - 3,12,6,0,422,425,3,146,73,0,423,425,3,154,77,0,424,421,1,0,0,0,424,422, - 1,0,0,0,424,423,1,0,0,0,425,17,1,0,0,0,426,431,3,20,10,0,427,428,5,326, - 0,0,428,430,3,20,10,0,429,427,1,0,0,0,430,433,1,0,0,0,431,429,1,0,0,0,431, - 432,1,0,0,0,432,19,1,0,0,0,433,431,1,0,0,0,434,435,7,1,0,0,435,21,1,0,0, - 0,436,438,5,99,0,0,437,439,5,239,0,0,438,437,1,0,0,0,438,439,1,0,0,0,439, - 440,1,0,0,0,440,443,3,316,158,0,441,443,3,24,12,0,442,436,1,0,0,0,442,441, - 1,0,0,0,443,23,1,0,0,0,444,445,5,99,0,0,445,446,5,101,0,0,446,451,3,316, - 158,0,447,448,5,326,0,0,448,450,3,316,158,0,449,447,1,0,0,0,450,453,1,0, - 0,0,451,449,1,0,0,0,451,452,1,0,0,0,452,25,1,0,0,0,453,451,1,0,0,0,454, - 455,5,95,0,0,455,490,7,2,0,0,456,457,5,95,0,0,457,458,5,66,0,0,458,490, - 7,3,0,0,459,460,5,95,0,0,460,463,5,96,0,0,461,462,7,4,0,0,462,464,3,316, - 158,0,463,461,1,0,0,0,463,464,1,0,0,0,464,466,1,0,0,0,465,467,3,266,133, - 0,466,465,1,0,0,0,466,467,1,0,0,0,467,490,1,0,0,0,468,469,5,95,0,0,469, - 470,5,97,0,0,470,471,7,4,0,0,471,473,3,316,158,0,472,474,3,266,133,0,473, - 472,1,0,0,0,473,474,1,0,0,0,474,490,1,0,0,0,475,476,5,95,0,0,476,477,5, - 73,0,0,477,478,7,5,0,0,478,490,3,316,158,0,479,481,5,95,0,0,480,482,5,53, - 0,0,481,480,1,0,0,0,481,482,1,0,0,0,482,483,1,0,0,0,483,490,5,103,0,0,484, - 486,5,95,0,0,485,487,5,52,0,0,486,485,1,0,0,0,486,487,1,0,0,0,487,488,1, - 0,0,0,488,490,5,101,0,0,489,454,1,0,0,0,489,456,1,0,0,0,489,459,1,0,0,0, - 489,468,1,0,0,0,489,475,1,0,0,0,489,479,1,0,0,0,489,484,1,0,0,0,490,27, - 1,0,0,0,491,492,5,212,0,0,492,493,5,100,0,0,493,496,3,316,158,0,494,495, - 5,70,0,0,495,497,3,324,162,0,496,494,1,0,0,0,496,497,1,0,0,0,497,29,1,0, - 0,0,498,499,5,213,0,0,499,500,5,100,0,0,500,501,3,316,158,0,501,31,1,0, - 0,0,502,504,5,116,0,0,503,505,3,326,163,0,504,503,1,0,0,0,504,505,1,0,0, - 0,505,33,1,0,0,0,506,508,5,117,0,0,507,509,3,328,164,0,508,507,1,0,0,0, - 508,509,1,0,0,0,509,35,1,0,0,0,510,511,7,6,0,0,511,512,5,244,0,0,512,513, - 3,112,56,0,513,37,1,0,0,0,514,515,5,6,0,0,515,516,5,244,0,0,516,517,5,70, - 0,0,517,520,5,348,0,0,518,519,5,7,0,0,519,521,3,316,158,0,520,518,1,0,0, - 0,520,521,1,0,0,0,521,554,1,0,0,0,522,523,5,6,0,0,523,524,5,245,0,0,524, - 525,5,70,0,0,525,528,5,348,0,0,526,527,5,7,0,0,527,529,3,316,158,0,528, - 526,1,0,0,0,528,529,1,0,0,0,529,532,1,0,0,0,530,531,5,113,0,0,531,533,3, - 316,158,0,532,530,1,0,0,0,532,533,1,0,0,0,533,554,1,0,0,0,534,535,5,6,0, - 0,535,536,7,7,0,0,536,537,5,70,0,0,537,538,5,348,0,0,538,539,5,113,0,0, - 539,554,3,316,158,0,540,541,5,6,0,0,541,542,5,251,0,0,542,554,5,348,0,0, - 543,544,5,6,0,0,544,545,5,252,0,0,545,546,5,245,0,0,546,547,5,70,0,0,547, - 548,5,348,0,0,548,549,5,113,0,0,549,550,3,316,158,0,550,551,5,258,0,0,551, - 552,3,316,158,0,552,554,1,0,0,0,553,514,1,0,0,0,553,522,1,0,0,0,553,534, - 1,0,0,0,553,540,1,0,0,0,553,543,1,0,0,0,554,39,1,0,0,0,555,558,3,42,21, - 0,556,558,3,44,22,0,557,555,1,0,0,0,557,556,1,0,0,0,558,41,1,0,0,0,559, - 561,5,73,0,0,560,562,5,166,0,0,561,560,1,0,0,0,561,562,1,0,0,0,562,563, - 1,0,0,0,563,565,5,74,0,0,564,566,3,320,160,0,565,564,1,0,0,0,565,566,1, - 0,0,0,566,567,1,0,0,0,567,568,3,98,49,0,568,569,5,322,0,0,569,574,3,46, - 23,0,570,571,5,326,0,0,571,573,3,46,23,0,572,570,1,0,0,0,573,576,1,0,0, - 0,574,572,1,0,0,0,574,575,1,0,0,0,575,579,1,0,0,0,576,574,1,0,0,0,577,578, - 5,326,0,0,578,580,3,80,40,0,579,577,1,0,0,0,579,580,1,0,0,0,580,583,1,0, - 0,0,581,582,5,326,0,0,582,584,3,82,41,0,583,581,1,0,0,0,583,584,1,0,0,0, - 584,587,1,0,0,0,585,586,5,326,0,0,586,588,3,86,43,0,587,585,1,0,0,0,587, - 588,1,0,0,0,588,589,1,0,0,0,589,591,5,323,0,0,590,592,3,70,35,0,591,590, - 1,0,0,0,591,592,1,0,0,0,592,594,1,0,0,0,593,595,3,88,44,0,594,593,1,0,0, - 0,594,595,1,0,0,0,595,596,1,0,0,0,596,598,3,318,159,0,597,599,3,96,48,0, - 598,597,1,0,0,0,598,599,1,0,0,0,599,43,1,0,0,0,600,601,5,73,0,0,601,603, - 5,74,0,0,602,604,3,320,160,0,603,602,1,0,0,0,603,604,1,0,0,0,604,605,1, - 0,0,0,605,606,3,98,49,0,606,609,3,318,159,0,607,608,5,7,0,0,608,610,3,156, - 78,0,609,607,1,0,0,0,609,610,1,0,0,0,610,45,1,0,0,0,611,615,3,48,24,0,612, - 615,3,72,36,0,613,615,3,76,38,0,614,611,1,0,0,0,614,612,1,0,0,0,614,613, - 1,0,0,0,615,47,1,0,0,0,616,617,3,50,25,0,617,619,3,54,27,0,618,620,3,68, - 34,0,619,618,1,0,0,0,619,620,1,0,0,0,620,622,1,0,0,0,621,623,3,70,35,0, - 622,621,1,0,0,0,622,623,1,0,0,0,623,49,1,0,0,0,624,627,3,316,158,0,625, - 627,3,260,130,0,626,624,1,0,0,0,626,625,1,0,0,0,627,51,1,0,0,0,628,629, - 5,322,0,0,629,634,3,50,25,0,630,631,5,326,0,0,631,633,3,50,25,0,632,630, - 1,0,0,0,633,636,1,0,0,0,634,632,1,0,0,0,634,635,1,0,0,0,635,637,1,0,0,0, - 636,634,1,0,0,0,637,638,5,323,0,0,638,53,1,0,0,0,639,677,7,8,0,0,640,642, - 7,9,0,0,641,643,3,56,28,0,642,641,1,0,0,0,642,643,1,0,0,0,643,677,1,0,0, - 0,644,646,5,303,0,0,645,647,3,56,28,0,646,645,1,0,0,0,646,647,1,0,0,0,647, - 654,1,0,0,0,648,650,7,10,0,0,649,651,5,224,0,0,650,649,1,0,0,0,650,651, - 1,0,0,0,651,652,1,0,0,0,652,653,5,302,0,0,653,655,5,264,0,0,654,648,1,0, - 0,0,654,655,1,0,0,0,655,677,1,0,0,0,656,658,7,11,0,0,657,659,3,58,29,0, - 658,657,1,0,0,0,658,659,1,0,0,0,659,677,1,0,0,0,660,662,7,12,0,0,661,663, - 3,62,31,0,662,661,1,0,0,0,662,663,1,0,0,0,663,677,1,0,0,0,664,666,5,285, - 0,0,665,667,3,64,32,0,666,665,1,0,0,0,666,667,1,0,0,0,667,677,1,0,0,0,668, - 670,5,308,0,0,669,671,3,66,33,0,670,669,1,0,0,0,670,671,1,0,0,0,671,677, - 1,0,0,0,672,674,5,307,0,0,673,675,3,60,30,0,674,673,1,0,0,0,674,675,1,0, - 0,0,675,677,1,0,0,0,676,639,1,0,0,0,676,640,1,0,0,0,676,644,1,0,0,0,676, - 656,1,0,0,0,676,660,1,0,0,0,676,664,1,0,0,0,676,668,1,0,0,0,676,672,1,0, - 0,0,677,55,1,0,0,0,678,679,5,322,0,0,679,680,3,348,174,0,680,681,5,323, - 0,0,681,57,1,0,0,0,682,683,5,322,0,0,683,686,3,348,174,0,684,685,5,326, - 0,0,685,687,3,348,174,0,686,684,1,0,0,0,686,687,1,0,0,0,687,688,1,0,0,0, - 688,689,5,323,0,0,689,59,1,0,0,0,690,691,5,322,0,0,691,694,3,346,173,0, - 692,693,5,326,0,0,693,695,3,346,173,0,694,692,1,0,0,0,694,695,1,0,0,0,695, - 696,1,0,0,0,696,697,5,323,0,0,697,61,1,0,0,0,698,699,5,313,0,0,699,700, - 3,54,27,0,700,701,5,312,0,0,701,63,1,0,0,0,702,703,5,313,0,0,703,704,3, - 54,27,0,704,705,5,326,0,0,705,706,3,54,27,0,706,707,1,0,0,0,707,708,5,312, - 0,0,708,65,1,0,0,0,709,710,5,313,0,0,710,711,3,50,25,0,711,718,3,54,27, - 0,712,713,5,326,0,0,713,714,3,50,25,0,714,715,3,54,27,0,715,717,1,0,0,0, - 716,712,1,0,0,0,717,720,1,0,0,0,718,716,1,0,0,0,718,719,1,0,0,0,719,721, - 1,0,0,0,720,718,1,0,0,0,721,722,5,312,0,0,722,67,1,0,0,0,723,724,5,185, - 0,0,724,726,3,84,42,0,725,723,1,0,0,0,725,726,1,0,0,0,726,727,1,0,0,0,727, - 728,5,256,0,0,728,729,5,258,0,0,729,730,5,25,0,0,730,731,5,261,0,0,731, - 69,1,0,0,0,732,733,5,115,0,0,733,734,5,343,0,0,734,71,1,0,0,0,735,736,3, - 50,25,0,736,737,3,54,27,0,737,740,5,262,0,0,738,739,5,5,0,0,739,741,3,74, - 37,0,740,738,1,0,0,0,740,741,1,0,0,0,741,743,1,0,0,0,742,744,5,263,0,0, - 743,742,1,0,0,0,743,744,1,0,0,0,744,73,1,0,0,0,745,746,5,343,0,0,746,75, - 1,0,0,0,747,748,3,50,25,0,748,749,5,7,0,0,749,751,3,78,39,0,750,752,3,70, - 35,0,751,750,1,0,0,0,751,752,1,0,0,0,752,77,1,0,0,0,753,754,3,260,130,0, - 754,79,1,0,0,0,755,756,5,226,0,0,756,757,5,37,0,0,757,758,3,260,130,0,758, - 759,5,7,0,0,759,760,3,260,130,0,760,81,1,0,0,0,761,762,5,185,0,0,762,764, - 3,84,42,0,763,761,1,0,0,0,763,764,1,0,0,0,764,765,1,0,0,0,765,766,5,256, - 0,0,766,767,5,258,0,0,767,768,3,52,26,0,768,769,5,25,0,0,769,770,5,261, - 0,0,770,83,1,0,0,0,771,772,3,304,152,0,772,85,1,0,0,0,773,774,5,259,0,0, - 774,775,5,37,0,0,775,776,5,260,0,0,776,87,1,0,0,0,777,778,5,200,0,0,778, - 779,5,13,0,0,779,780,3,90,45,0,780,89,1,0,0,0,781,782,5,322,0,0,782,787, - 3,92,46,0,783,784,5,326,0,0,784,786,3,92,46,0,785,783,1,0,0,0,786,789,1, - 0,0,0,787,785,1,0,0,0,787,788,1,0,0,0,788,790,1,0,0,0,789,787,1,0,0,0,790, - 791,5,323,0,0,791,91,1,0,0,0,792,806,3,278,139,0,793,794,3,304,152,0,794, - 795,5,322,0,0,795,800,3,94,47,0,796,797,5,326,0,0,797,799,3,94,47,0,798, - 796,1,0,0,0,799,802,1,0,0,0,800,798,1,0,0,0,800,801,1,0,0,0,801,803,1,0, - 0,0,802,800,1,0,0,0,803,804,5,323,0,0,804,806,1,0,0,0,805,792,1,0,0,0,805, - 793,1,0,0,0,806,93,1,0,0,0,807,810,3,278,139,0,808,810,3,344,172,0,809, - 807,1,0,0,0,809,808,1,0,0,0,810,95,1,0,0,0,811,812,5,29,0,0,812,821,3,98, - 49,0,813,817,5,322,0,0,814,816,3,100,50,0,815,814,1,0,0,0,816,819,1,0,0, - 0,817,815,1,0,0,0,817,818,1,0,0,0,818,820,1,0,0,0,819,817,1,0,0,0,820,822, - 5,323,0,0,821,813,1,0,0,0,821,822,1,0,0,0,822,97,1,0,0,0,823,824,3,316, - 158,0,824,99,1,0,0,0,825,826,7,13,0,0,826,830,7,14,0,0,827,828,7,15,0,0, - 828,830,7,16,0,0,829,825,1,0,0,0,829,827,1,0,0,0,830,101,1,0,0,0,831,832, - 5,73,0,0,832,833,5,239,0,0,833,834,3,316,158,0,834,835,3,318,159,0,835, - 103,1,0,0,0,836,837,5,73,0,0,837,839,5,192,0,0,838,840,3,320,160,0,839, - 838,1,0,0,0,839,840,1,0,0,0,840,841,1,0,0,0,841,843,3,316,158,0,842,844, - 3,70,35,0,843,842,1,0,0,0,843,844,1,0,0,0,844,845,1,0,0,0,845,846,3,318, - 159,0,846,105,1,0,0,0,847,849,5,73,0,0,848,850,5,166,0,0,849,848,1,0,0, - 0,849,850,1,0,0,0,850,851,1,0,0,0,851,853,5,76,0,0,852,854,3,320,160,0, - 853,852,1,0,0,0,853,854,1,0,0,0,854,855,1,0,0,0,855,857,3,316,158,0,856, - 858,3,52,26,0,857,856,1,0,0,0,857,858,1,0,0,0,858,860,1,0,0,0,859,861,3, - 70,35,0,860,859,1,0,0,0,860,861,1,0,0,0,861,862,1,0,0,0,862,863,5,7,0,0, - 863,864,3,156,78,0,864,107,1,0,0,0,865,869,5,73,0,0,866,870,5,166,0,0,867, - 868,5,166,0,0,868,870,5,232,0,0,869,866,1,0,0,0,869,867,1,0,0,0,869,870, - 1,0,0,0,870,871,1,0,0,0,871,873,5,157,0,0,872,874,3,320,160,0,873,872,1, - 0,0,0,873,874,1,0,0,0,874,875,1,0,0,0,875,876,3,316,158,0,876,877,5,7,0, - 0,877,880,3,304,152,0,878,879,5,240,0,0,879,881,7,17,0,0,880,878,1,0,0, - 0,880,881,1,0,0,0,881,883,1,0,0,0,882,884,3,110,55,0,883,882,1,0,0,0,883, - 884,1,0,0,0,884,109,1,0,0,0,885,886,5,143,0,0,886,887,5,244,0,0,887,893, - 3,112,56,0,888,889,5,326,0,0,889,890,5,244,0,0,890,892,3,112,56,0,891,888, - 1,0,0,0,892,895,1,0,0,0,893,891,1,0,0,0,893,894,1,0,0,0,894,111,1,0,0,0, - 895,893,1,0,0,0,896,897,5,343,0,0,897,113,1,0,0,0,898,899,5,112,0,0,899, - 901,5,74,0,0,900,902,3,322,161,0,901,900,1,0,0,0,901,902,1,0,0,0,902,903, - 1,0,0,0,903,909,3,316,158,0,904,910,3,116,58,0,905,910,3,118,59,0,906,910, - 3,120,60,0,907,910,3,122,61,0,908,910,3,124,62,0,909,904,1,0,0,0,909,905, - 1,0,0,0,909,906,1,0,0,0,909,907,1,0,0,0,909,908,1,0,0,0,910,115,1,0,0,0, - 911,913,5,113,0,0,912,914,3,316,158,0,913,912,1,0,0,0,913,914,1,0,0,0,914, - 915,1,0,0,0,915,916,5,109,0,0,916,917,3,316,158,0,917,117,1,0,0,0,918,919, - 5,116,0,0,919,920,3,324,162,0,920,119,1,0,0,0,921,922,5,6,0,0,922,923,5, - 185,0,0,923,924,3,84,42,0,924,925,5,256,0,0,925,926,5,258,0,0,926,928,3, - 52,26,0,927,929,3,126,63,0,928,927,1,0,0,0,928,929,1,0,0,0,929,121,1,0, - 0,0,930,931,5,104,0,0,931,932,5,185,0,0,932,933,3,84,42,0,933,123,1,0,0, - 0,934,935,5,6,0,0,935,936,5,257,0,0,936,937,3,52,26,0,937,125,1,0,0,0,938, - 939,5,25,0,0,939,940,5,261,0,0,940,127,1,0,0,0,941,942,5,112,0,0,942,943, - 5,76,0,0,943,947,3,316,158,0,944,948,3,116,58,0,945,946,5,7,0,0,946,948, - 3,156,78,0,947,944,1,0,0,0,947,945,1,0,0,0,948,129,1,0,0,0,949,950,5,112, - 0,0,950,951,5,192,0,0,951,952,3,316,158,0,952,953,3,118,59,0,953,131,1, - 0,0,0,954,958,5,112,0,0,955,959,5,166,0,0,956,957,5,166,0,0,957,959,5,232, - 0,0,958,955,1,0,0,0,958,956,1,0,0,0,958,959,1,0,0,0,959,960,1,0,0,0,960, - 962,5,157,0,0,961,963,3,322,161,0,962,961,1,0,0,0,962,963,1,0,0,0,963,964, - 1,0,0,0,964,965,3,316,158,0,965,966,5,7,0,0,966,969,3,304,152,0,967,968, - 5,240,0,0,968,970,7,17,0,0,969,967,1,0,0,0,969,970,1,0,0,0,970,133,1,0, - 0,0,971,972,5,104,0,0,972,974,5,239,0,0,973,975,3,322,161,0,974,973,1,0, - 0,0,974,975,1,0,0,0,975,976,1,0,0,0,976,977,3,316,158,0,977,135,1,0,0,0, - 978,980,5,104,0,0,979,981,5,166,0,0,980,979,1,0,0,0,980,981,1,0,0,0,981, - 982,1,0,0,0,982,984,5,74,0,0,983,985,3,322,161,0,984,983,1,0,0,0,984,985, - 1,0,0,0,985,986,1,0,0,0,986,987,3,316,158,0,987,137,1,0,0,0,988,989,5,104, - 0,0,989,991,5,192,0,0,990,992,3,322,161,0,991,990,1,0,0,0,991,992,1,0,0, - 0,992,993,1,0,0,0,993,995,3,316,158,0,994,996,7,18,0,0,995,994,1,0,0,0, - 995,996,1,0,0,0,996,139,1,0,0,0,997,999,5,104,0,0,998,1000,5,166,0,0,999, - 998,1,0,0,0,999,1000,1,0,0,0,1000,1001,1,0,0,0,1001,1003,5,76,0,0,1002, - 1004,3,322,161,0,1003,1002,1,0,0,0,1003,1004,1,0,0,0,1004,1005,1,0,0,0, - 1005,1006,3,316,158,0,1006,141,1,0,0,0,1007,1011,5,104,0,0,1008,1012,5, - 166,0,0,1009,1010,5,166,0,0,1010,1012,5,232,0,0,1011,1008,1,0,0,0,1011, - 1009,1,0,0,0,1011,1012,1,0,0,0,1012,1013,1,0,0,0,1013,1015,5,157,0,0,1014, - 1016,3,322,161,0,1015,1014,1,0,0,0,1015,1016,1,0,0,0,1016,1017,1,0,0,0, - 1017,1018,3,316,158,0,1018,143,1,0,0,0,1019,1021,5,78,0,0,1020,1019,1,0, - 0,0,1020,1021,1,0,0,0,1021,1022,1,0,0,0,1022,1026,3,146,73,0,1023,1024, - 5,78,0,0,1024,1026,3,154,77,0,1025,1020,1,0,0,0,1025,1023,1,0,0,0,1026, - 145,1,0,0,0,1027,1028,5,80,0,0,1028,1029,7,19,0,0,1029,1038,3,316,158,0, - 1030,1032,3,148,74,0,1031,1030,1,0,0,0,1031,1032,1,0,0,0,1032,1034,1,0, - 0,0,1033,1035,3,52,26,0,1034,1033,1,0,0,0,1034,1035,1,0,0,0,1035,1036,1, - 0,0,0,1036,1039,3,156,78,0,1037,1039,3,150,75,0,1038,1031,1,0,0,0,1038, - 1037,1,0,0,0,1039,147,1,0,0,0,1040,1041,5,60,0,0,1041,1042,3,324,162,0, - 1042,149,1,0,0,0,1043,1044,5,72,0,0,1044,1049,3,152,76,0,1045,1046,5,326, - 0,0,1046,1048,3,152,76,0,1047,1045,1,0,0,0,1048,1051,1,0,0,0,1049,1047, - 1,0,0,0,1049,1050,1,0,0,0,1050,151,1,0,0,0,1051,1049,1,0,0,0,1052,1053, - 5,322,0,0,1053,1058,3,344,172,0,1054,1055,5,326,0,0,1055,1057,3,344,172, - 0,1056,1054,1,0,0,0,1057,1060,1,0,0,0,1058,1056,1,0,0,0,1058,1059,1,0,0, - 0,1059,1061,1,0,0,0,1060,1058,1,0,0,0,1061,1062,5,323,0,0,1062,153,1,0, - 0,0,1063,1064,5,79,0,0,1064,1065,5,116,0,0,1065,1069,5,43,0,0,1066,1067, - 3,146,73,0,1067,1068,5,327,0,0,1068,1070,1,0,0,0,1069,1066,1,0,0,0,1070, - 1071,1,0,0,0,1071,1069,1,0,0,0,1071,1072,1,0,0,0,1072,1073,1,0,0,0,1073, - 1074,5,44,0,0,1074,155,1,0,0,0,1075,1076,6,78,-1,0,1076,1099,3,158,79,0, - 1077,1078,3,160,80,0,1078,1079,3,156,78,5,1079,1099,1,0,0,0,1080,1081,5, - 322,0,0,1081,1082,3,156,78,0,1082,1083,5,323,0,0,1083,1099,1,0,0,0,1084, - 1086,3,168,84,0,1085,1087,3,230,115,0,1086,1085,1,0,0,0,1086,1087,1,0,0, - 0,1087,1089,1,0,0,0,1088,1090,3,234,117,0,1089,1088,1,0,0,0,1089,1090,1, - 0,0,0,1090,1099,1,0,0,0,1091,1093,3,166,83,0,1092,1094,3,230,115,0,1093, - 1092,1,0,0,0,1093,1094,1,0,0,0,1094,1096,1,0,0,0,1095,1097,3,234,117,0, - 1096,1095,1,0,0,0,1096,1097,1,0,0,0,1097,1099,1,0,0,0,1098,1075,1,0,0,0, - 1098,1077,1,0,0,0,1098,1080,1,0,0,0,1098,1084,1,0,0,0,1098,1091,1,0,0,0, - 1099,1114,1,0,0,0,1100,1101,10,3,0,0,1101,1103,7,20,0,0,1102,1104,5,8,0, - 0,1103,1102,1,0,0,0,1103,1104,1,0,0,0,1104,1105,1,0,0,0,1105,1107,3,156, - 78,0,1106,1108,3,230,115,0,1107,1106,1,0,0,0,1107,1108,1,0,0,0,1108,1110, - 1,0,0,0,1109,1111,3,234,117,0,1110,1109,1,0,0,0,1110,1111,1,0,0,0,1111, - 1113,1,0,0,0,1112,1100,1,0,0,0,1113,1116,1,0,0,0,1114,1112,1,0,0,0,1114, - 1115,1,0,0,0,1115,157,1,0,0,0,1116,1114,1,0,0,0,1117,1118,5,72,0,0,1118, - 1123,3,260,130,0,1119,1120,5,326,0,0,1120,1122,3,260,130,0,1121,1119,1, - 0,0,0,1122,1125,1,0,0,0,1123,1121,1,0,0,0,1123,1124,1,0,0,0,1124,159,1, - 0,0,0,1125,1123,1,0,0,0,1126,1127,5,70,0,0,1127,1132,3,162,81,0,1128,1129, - 5,326,0,0,1129,1131,3,162,81,0,1130,1128,1,0,0,0,1131,1134,1,0,0,0,1132, - 1130,1,0,0,0,1132,1133,1,0,0,0,1133,161,1,0,0,0,1134,1132,1,0,0,0,1135, - 1147,3,164,82,0,1136,1137,5,322,0,0,1137,1142,3,50,25,0,1138,1139,5,326, - 0,0,1139,1141,3,50,25,0,1140,1138,1,0,0,0,1141,1144,1,0,0,0,1142,1140,1, - 0,0,0,1142,1143,1,0,0,0,1143,1145,1,0,0,0,1144,1142,1,0,0,0,1145,1146,5, - 323,0,0,1146,1148,1,0,0,0,1147,1136,1,0,0,0,1147,1148,1,0,0,0,1148,1149, - 1,0,0,0,1149,1150,5,7,0,0,1150,1151,5,322,0,0,1151,1152,3,156,78,0,1152, - 1153,5,323,0,0,1153,163,1,0,0,0,1154,1155,3,304,152,0,1155,165,1,0,0,0, - 1156,1157,3,168,84,0,1157,1159,3,174,87,0,1158,1160,3,204,102,0,1159,1158, - 1,0,0,0,1159,1160,1,0,0,0,1160,1162,1,0,0,0,1161,1163,3,206,103,0,1162, - 1161,1,0,0,0,1162,1163,1,0,0,0,1163,1165,1,0,0,0,1164,1166,3,220,110,0, - 1165,1164,1,0,0,0,1165,1166,1,0,0,0,1166,1168,1,0,0,0,1167,1169,3,222,111, - 0,1168,1167,1,0,0,0,1168,1169,1,0,0,0,1169,1175,1,0,0,0,1170,1171,3,168, - 84,0,1171,1172,3,174,87,0,1172,1173,3,228,114,0,1173,1175,1,0,0,0,1174, - 1156,1,0,0,0,1174,1170,1,0,0,0,1175,167,1,0,0,0,1176,1178,5,4,0,0,1177, - 1179,3,352,176,0,1178,1177,1,0,0,0,1178,1179,1,0,0,0,1179,1189,1,0,0,0, - 1180,1190,5,333,0,0,1181,1186,3,170,85,0,1182,1183,5,326,0,0,1183,1185, - 3,170,85,0,1184,1182,1,0,0,0,1185,1188,1,0,0,0,1186,1184,1,0,0,0,1186,1187, - 1,0,0,0,1187,1190,1,0,0,0,1188,1186,1,0,0,0,1189,1180,1,0,0,0,1189,1181, - 1,0,0,0,1190,169,1,0,0,0,1191,1200,3,172,86,0,1192,1197,3,260,130,0,1193, - 1195,5,7,0,0,1194,1193,1,0,0,0,1194,1195,1,0,0,0,1195,1196,1,0,0,0,1196, - 1198,3,260,130,0,1197,1194,1,0,0,0,1197,1198,1,0,0,0,1198,1200,1,0,0,0, - 1199,1191,1,0,0,0,1199,1192,1,0,0,0,1200,171,1,0,0,0,1201,1202,3,270,135, - 0,1202,1203,5,59,0,0,1203,1204,3,226,113,0,1204,1205,5,7,0,0,1205,1206, - 3,306,153,0,1206,1214,1,0,0,0,1207,1208,3,270,135,0,1208,1209,5,59,0,0, - 1209,1210,3,296,148,0,1210,1211,5,7,0,0,1211,1212,3,306,153,0,1212,1214, - 1,0,0,0,1213,1201,1,0,0,0,1213,1207,1,0,0,0,1214,173,1,0,0,0,1215,1216, - 5,5,0,0,1216,1217,3,176,88,0,1217,175,1,0,0,0,1218,1219,6,88,-1,0,1219, - 1224,3,178,89,0,1220,1221,5,326,0,0,1221,1223,3,178,89,0,1222,1220,1,0, - 0,0,1223,1226,1,0,0,0,1224,1222,1,0,0,0,1224,1225,1,0,0,0,1225,1230,1,0, - 0,0,1226,1224,1,0,0,0,1227,1230,3,188,94,0,1228,1230,3,190,95,0,1229,1218, - 1,0,0,0,1229,1227,1,0,0,0,1229,1228,1,0,0,0,1230,1252,1,0,0,0,1231,1232, - 10,3,0,0,1232,1233,5,46,0,0,1233,1234,5,45,0,0,1234,1251,3,176,88,4,1235, - 1237,10,4,0,0,1236,1238,5,54,0,0,1237,1236,1,0,0,0,1237,1238,1,0,0,0,1238, - 1240,1,0,0,0,1239,1241,7,21,0,0,1240,1239,1,0,0,0,1240,1241,1,0,0,0,1241, - 1243,1,0,0,0,1242,1244,5,47,0,0,1243,1242,1,0,0,0,1243,1244,1,0,0,0,1244, - 1245,1,0,0,0,1245,1246,5,45,0,0,1246,1248,3,176,88,0,1247,1249,3,202,101, - 0,1248,1247,1,0,0,0,1248,1249,1,0,0,0,1249,1251,1,0,0,0,1250,1231,1,0,0, - 0,1250,1235,1,0,0,0,1251,1254,1,0,0,0,1252,1250,1,0,0,0,1252,1253,1,0,0, - 0,1253,177,1,0,0,0,1254,1252,1,0,0,0,1255,1257,3,180,90,0,1256,1258,3,294, - 147,0,1257,1256,1,0,0,0,1257,1258,1,0,0,0,1258,179,1,0,0,0,1259,1261,5, - 74,0,0,1260,1259,1,0,0,0,1260,1261,1,0,0,0,1261,1262,1,0,0,0,1262,1264, - 3,182,91,0,1263,1265,3,184,92,0,1264,1263,1,0,0,0,1264,1265,1,0,0,0,1265, - 1270,1,0,0,0,1266,1268,5,7,0,0,1267,1266,1,0,0,0,1267,1268,1,0,0,0,1268, - 1269,1,0,0,0,1269,1271,3,276,138,0,1270,1267,1,0,0,0,1270,1271,1,0,0,0, - 1271,1301,1,0,0,0,1272,1273,5,57,0,0,1273,1274,5,74,0,0,1274,1275,5,322, - 0,0,1275,1276,3,272,136,0,1276,1277,5,322,0,0,1277,1282,3,260,130,0,1278, - 1279,5,326,0,0,1279,1281,3,260,130,0,1280,1278,1,0,0,0,1281,1284,1,0,0, - 0,1282,1280,1,0,0,0,1282,1283,1,0,0,0,1283,1285,1,0,0,0,1284,1282,1,0,0, - 0,1285,1286,5,323,0,0,1286,1287,5,323,0,0,1287,1301,1,0,0,0,1288,1290,5, - 57,0,0,1289,1288,1,0,0,0,1289,1290,1,0,0,0,1290,1291,1,0,0,0,1291,1292, - 5,322,0,0,1292,1293,3,156,78,0,1293,1294,5,323,0,0,1294,1301,1,0,0,0,1295, - 1296,5,227,0,0,1296,1297,5,322,0,0,1297,1298,3,260,130,0,1298,1299,5,323, - 0,0,1299,1301,1,0,0,0,1300,1260,1,0,0,0,1300,1272,1,0,0,0,1300,1289,1,0, - 0,0,1300,1295,1,0,0,0,1301,181,1,0,0,0,1302,1303,3,316,158,0,1303,183,1, - 0,0,0,1304,1305,5,37,0,0,1305,1306,5,260,0,0,1306,1307,5,7,0,0,1307,1308, - 5,136,0,0,1308,1309,3,186,93,0,1309,185,1,0,0,0,1310,1311,3,260,130,0,1311, - 187,1,0,0,0,1312,1313,5,322,0,0,1313,1314,3,150,75,0,1314,1315,5,323,0, - 0,1315,1316,3,294,147,0,1316,189,1,0,0,0,1317,1318,5,74,0,0,1318,1319,5, - 322,0,0,1319,1320,3,192,96,0,1320,1321,5,323,0,0,1321,191,1,0,0,0,1322, - 1323,3,194,97,0,1323,1324,5,322,0,0,1324,1329,3,196,98,0,1325,1326,5,326, - 0,0,1326,1328,3,196,98,0,1327,1325,1,0,0,0,1328,1331,1,0,0,0,1329,1327, - 1,0,0,0,1329,1330,1,0,0,0,1330,1332,1,0,0,0,1331,1329,1,0,0,0,1332,1333, - 5,323,0,0,1333,193,1,0,0,0,1334,1335,7,22,0,0,1335,195,1,0,0,0,1336,1337, - 5,74,0,0,1337,1352,3,218,109,0,1338,1352,3,200,100,0,1339,1352,3,258,129, - 0,1340,1341,5,118,0,0,1341,1342,5,349,0,0,1342,1343,5,74,0,0,1343,1352, - 3,218,109,0,1344,1345,5,269,0,0,1345,1346,5,349,0,0,1346,1352,3,200,100, - 0,1347,1348,3,198,99,0,1348,1349,5,349,0,0,1349,1350,3,258,129,0,1350,1352, - 1,0,0,0,1351,1336,1,0,0,0,1351,1338,1,0,0,0,1351,1339,1,0,0,0,1351,1340, - 1,0,0,0,1351,1344,1,0,0,0,1351,1347,1,0,0,0,1352,197,1,0,0,0,1353,1354, - 7,23,0,0,1354,199,1,0,0,0,1355,1356,5,268,0,0,1356,1357,5,322,0,0,1357, - 1358,3,316,158,0,1358,1359,5,323,0,0,1359,201,1,0,0,0,1360,1361,5,55,0, - 0,1361,1375,3,262,131,0,1362,1363,5,143,0,0,1363,1364,5,322,0,0,1364,1369, - 3,316,158,0,1365,1366,5,326,0,0,1366,1368,3,316,158,0,1367,1365,1,0,0,0, - 1368,1371,1,0,0,0,1369,1367,1,0,0,0,1369,1370,1,0,0,0,1370,1372,1,0,0,0, - 1371,1369,1,0,0,0,1372,1373,5,323,0,0,1373,1375,1,0,0,0,1374,1360,1,0,0, - 0,1374,1362,1,0,0,0,1375,203,1,0,0,0,1376,1377,5,11,0,0,1377,1378,3,262, - 131,0,1378,205,1,0,0,0,1379,1380,5,12,0,0,1380,1381,5,13,0,0,1381,1386, - 3,208,104,0,1382,1383,5,326,0,0,1383,1385,3,208,104,0,1384,1382,1,0,0,0, - 1385,1388,1,0,0,0,1386,1384,1,0,0,0,1386,1387,1,0,0,0,1387,207,1,0,0,0, - 1388,1386,1,0,0,0,1389,1429,3,260,130,0,1390,1429,3,214,107,0,1391,1392, - 5,322,0,0,1392,1429,5,323,0,0,1393,1394,5,322,0,0,1394,1399,3,260,130,0, - 1395,1396,5,326,0,0,1396,1398,3,260,130,0,1397,1395,1,0,0,0,1398,1401,1, - 0,0,0,1399,1397,1,0,0,0,1399,1400,1,0,0,0,1400,1402,1,0,0,0,1401,1399,1, - 0,0,0,1402,1403,5,323,0,0,1403,1429,1,0,0,0,1404,1405,3,212,106,0,1405, - 1406,5,322,0,0,1406,1411,3,260,130,0,1407,1408,5,326,0,0,1408,1410,3,260, - 130,0,1409,1407,1,0,0,0,1410,1413,1,0,0,0,1411,1409,1,0,0,0,1411,1412,1, - 0,0,0,1412,1414,1,0,0,0,1413,1411,1,0,0,0,1414,1415,5,323,0,0,1415,1429, - 1,0,0,0,1416,1417,3,210,105,0,1417,1418,5,322,0,0,1418,1423,3,208,104,0, - 1419,1420,5,326,0,0,1420,1422,3,208,104,0,1421,1419,1,0,0,0,1422,1425,1, - 0,0,0,1423,1421,1,0,0,0,1423,1424,1,0,0,0,1424,1426,1,0,0,0,1425,1423,1, - 0,0,0,1426,1427,5,323,0,0,1427,1429,1,0,0,0,1428,1389,1,0,0,0,1428,1390, - 1,0,0,0,1428,1391,1,0,0,0,1428,1393,1,0,0,0,1428,1404,1,0,0,0,1428,1416, - 1,0,0,0,1429,209,1,0,0,0,1430,1431,5,14,0,0,1431,1432,5,15,0,0,1432,211, - 1,0,0,0,1433,1434,7,24,0,0,1434,213,1,0,0,0,1435,1436,3,216,108,0,1436, - 1437,5,322,0,0,1437,1438,3,218,109,0,1438,1439,5,326,0,0,1439,1440,3,258, - 129,0,1440,1441,5,323,0,0,1441,215,1,0,0,0,1442,1443,7,25,0,0,1443,217, - 1,0,0,0,1444,1445,3,316,158,0,1445,219,1,0,0,0,1446,1447,5,19,0,0,1447, - 1448,3,262,131,0,1448,221,1,0,0,0,1449,1450,5,58,0,0,1450,1455,3,224,112, - 0,1451,1452,5,326,0,0,1452,1454,3,224,112,0,1453,1451,1,0,0,0,1454,1457, - 1,0,0,0,1455,1453,1,0,0,0,1455,1456,1,0,0,0,1456,223,1,0,0,0,1457,1455, - 1,0,0,0,1458,1459,3,296,148,0,1459,1460,5,7,0,0,1460,1461,3,226,113,0,1461, - 225,1,0,0,0,1462,1464,3,296,148,0,1463,1462,1,0,0,0,1463,1464,1,0,0,0,1464, - 1465,1,0,0,0,1465,1467,5,322,0,0,1466,1468,3,236,118,0,1467,1466,1,0,0, - 0,1467,1468,1,0,0,0,1468,1470,1,0,0,0,1469,1471,3,230,115,0,1470,1469,1, - 0,0,0,1470,1471,1,0,0,0,1471,1473,1,0,0,0,1472,1474,3,252,126,0,1473,1472, - 1,0,0,0,1473,1474,1,0,0,0,1474,1475,1,0,0,0,1475,1476,5,323,0,0,1476,227, - 1,0,0,0,1477,1478,5,275,0,0,1478,1480,5,322,0,0,1479,1481,3,236,118,0,1480, - 1479,1,0,0,0,1480,1481,1,0,0,0,1481,1483,1,0,0,0,1482,1484,3,230,115,0, - 1483,1482,1,0,0,0,1483,1484,1,0,0,0,1484,1486,1,0,0,0,1485,1487,3,240,120, - 0,1486,1485,1,0,0,0,1486,1487,1,0,0,0,1487,1489,1,0,0,0,1488,1490,3,246, - 123,0,1489,1488,1,0,0,0,1489,1490,1,0,0,0,1490,1492,1,0,0,0,1491,1493,3, - 248,124,0,1492,1491,1,0,0,0,1492,1493,1,0,0,0,1493,1495,1,0,0,0,1494,1496, - 3,242,121,0,1495,1494,1,0,0,0,1495,1496,1,0,0,0,1496,1497,1,0,0,0,1497, - 1498,3,250,125,0,1498,1503,5,323,0,0,1499,1501,5,7,0,0,1500,1499,1,0,0, - 0,1500,1501,1,0,0,0,1501,1502,1,0,0,0,1502,1504,3,306,153,0,1503,1500,1, - 0,0,0,1503,1504,1,0,0,0,1504,229,1,0,0,0,1505,1506,5,18,0,0,1506,1507,5, - 13,0,0,1507,1512,3,232,116,0,1508,1509,5,326,0,0,1509,1511,3,232,116,0, - 1510,1508,1,0,0,0,1511,1514,1,0,0,0,1512,1510,1,0,0,0,1512,1513,1,0,0,0, - 1513,231,1,0,0,0,1514,1512,1,0,0,0,1515,1517,3,260,130,0,1516,1518,7,26, - 0,0,1517,1516,1,0,0,0,1517,1518,1,0,0,0,1518,1521,1,0,0,0,1519,1520,5,34, - 0,0,1520,1522,7,27,0,0,1521,1519,1,0,0,0,1521,1522,1,0,0,0,1522,233,1,0, - 0,0,1523,1526,5,20,0,0,1524,1527,5,8,0,0,1525,1527,3,260,130,0,1526,1524, - 1,0,0,0,1526,1525,1,0,0,0,1527,235,1,0,0,0,1528,1529,5,60,0,0,1529,1530, - 5,13,0,0,1530,1535,3,260,130,0,1531,1532,5,326,0,0,1532,1534,3,260,130, - 0,1533,1531,1,0,0,0,1534,1537,1,0,0,0,1535,1533,1,0,0,0,1535,1536,1,0,0, - 0,1536,237,1,0,0,0,1537,1535,1,0,0,0,1538,1555,5,333,0,0,1539,1555,5,336, - 0,0,1540,1555,5,341,0,0,1541,1542,5,324,0,0,1542,1543,5,344,0,0,1543,1544, - 5,326,0,0,1544,1545,5,344,0,0,1545,1555,5,325,0,0,1546,1547,5,324,0,0,1547, - 1548,5,344,0,0,1548,1549,5,326,0,0,1549,1555,5,325,0,0,1550,1551,5,324, - 0,0,1551,1552,5,326,0,0,1552,1553,5,344,0,0,1553,1555,5,325,0,0,1554,1538, - 1,0,0,0,1554,1539,1,0,0,0,1554,1540,1,0,0,0,1554,1541,1,0,0,0,1554,1546, - 1,0,0,0,1554,1550,1,0,0,0,1555,239,1,0,0,0,1556,1557,5,276,0,0,1557,1562, - 3,170,85,0,1558,1559,5,326,0,0,1559,1561,3,170,85,0,1560,1558,1,0,0,0,1561, - 1564,1,0,0,0,1562,1560,1,0,0,0,1562,1563,1,0,0,0,1563,241,1,0,0,0,1564, - 1562,1,0,0,0,1565,1566,5,277,0,0,1566,1568,5,322,0,0,1567,1569,3,244,122, - 0,1568,1567,1,0,0,0,1569,1570,1,0,0,0,1570,1568,1,0,0,0,1570,1571,1,0,0, - 0,1571,1572,1,0,0,0,1572,1574,5,323,0,0,1573,1575,3,256,128,0,1574,1573, - 1,0,0,0,1574,1575,1,0,0,0,1575,243,1,0,0,0,1576,1578,3,308,154,0,1577,1579, - 3,238,119,0,1578,1577,1,0,0,0,1578,1579,1,0,0,0,1579,245,1,0,0,0,1580,1581, - 5,8,0,0,1581,1582,5,62,0,0,1582,1583,5,279,0,0,1583,1589,5,228,0,0,1584, - 1585,5,278,0,0,1585,1586,5,308,0,0,1586,1587,5,279,0,0,1587,1589,5,228, - 0,0,1588,1580,1,0,0,0,1588,1584,1,0,0,0,1589,247,1,0,0,0,1590,1591,5,68, - 0,0,1591,1592,5,228,0,0,1592,1593,5,280,0,0,1593,1594,5,281,0,0,1594,1595, - 5,69,0,0,1595,1615,5,308,0,0,1596,1597,5,68,0,0,1597,1598,5,228,0,0,1598, - 1599,5,280,0,0,1599,1600,5,109,0,0,1600,1601,5,229,0,0,1601,1615,5,308, - 0,0,1602,1603,5,68,0,0,1603,1604,5,228,0,0,1604,1605,5,280,0,0,1605,1606, - 5,109,0,0,1606,1607,5,69,0,0,1607,1615,3,308,154,0,1608,1609,5,68,0,0,1609, - 1610,5,228,0,0,1610,1611,5,280,0,0,1611,1612,5,109,0,0,1612,1613,5,67,0, - 0,1613,1615,3,308,154,0,1614,1590,1,0,0,0,1614,1596,1,0,0,0,1614,1602,1, - 0,0,0,1614,1608,1,0,0,0,1615,249,1,0,0,0,1616,1617,5,282,0,0,1617,1622, - 3,170,85,0,1618,1619,5,326,0,0,1619,1621,3,170,85,0,1620,1618,1,0,0,0,1621, - 1624,1,0,0,0,1622,1620,1,0,0,0,1622,1623,1,0,0,0,1623,251,1,0,0,0,1624, - 1622,1,0,0,0,1625,1626,5,61,0,0,1626,1627,5,28,0,0,1627,1628,3,258,129, - 0,1628,1629,3,254,127,0,1629,1635,1,0,0,0,1630,1631,5,62,0,0,1631,1632, - 5,28,0,0,1632,1633,5,344,0,0,1633,1635,3,254,127,0,1634,1625,1,0,0,0,1634, - 1630,1,0,0,0,1635,253,1,0,0,0,1636,1637,5,64,0,0,1637,1638,5,23,0,0,1638, - 1639,5,66,0,0,1639,1640,5,308,0,0,1640,255,1,0,0,0,1641,1642,5,230,0,0, - 1642,1643,3,258,129,0,1643,257,1,0,0,0,1644,1645,5,38,0,0,1645,1646,5,343, - 0,0,1646,1647,5,347,0,0,1647,259,1,0,0,0,1648,1649,3,262,131,0,1649,261, - 1,0,0,0,1650,1651,6,131,-1,0,1651,1652,5,25,0,0,1652,1663,3,262,131,5,1653, - 1654,5,27,0,0,1654,1655,5,322,0,0,1655,1656,3,156,78,0,1656,1657,5,323, - 0,0,1657,1663,1,0,0,0,1658,1660,3,268,134,0,1659,1661,3,264,132,0,1660, - 1659,1,0,0,0,1660,1661,1,0,0,0,1661,1663,1,0,0,0,1662,1650,1,0,0,0,1662, - 1653,1,0,0,0,1662,1658,1,0,0,0,1663,1672,1,0,0,0,1664,1665,10,2,0,0,1665, - 1666,5,23,0,0,1666,1671,3,262,131,3,1667,1668,10,1,0,0,1668,1669,5,22,0, - 0,1669,1671,3,262,131,2,1670,1664,1,0,0,0,1670,1667,1,0,0,0,1671,1674,1, - 0,0,0,1672,1670,1,0,0,0,1672,1673,1,0,0,0,1673,263,1,0,0,0,1674,1672,1, - 0,0,0,1675,1677,5,25,0,0,1676,1675,1,0,0,0,1676,1677,1,0,0,0,1677,1678, - 1,0,0,0,1678,1679,5,28,0,0,1679,1680,3,268,134,0,1680,1681,5,23,0,0,1681, - 1682,3,268,134,0,1682,1759,1,0,0,0,1683,1685,5,25,0,0,1684,1683,1,0,0,0, - 1684,1685,1,0,0,0,1685,1686,1,0,0,0,1686,1687,5,24,0,0,1687,1688,5,322, - 0,0,1688,1693,3,260,130,0,1689,1690,5,326,0,0,1690,1692,3,260,130,0,1691, - 1689,1,0,0,0,1692,1695,1,0,0,0,1693,1691,1,0,0,0,1693,1694,1,0,0,0,1694, - 1696,1,0,0,0,1695,1693,1,0,0,0,1696,1697,5,323,0,0,1697,1759,1,0,0,0,1698, - 1700,5,25,0,0,1699,1698,1,0,0,0,1699,1700,1,0,0,0,1700,1701,1,0,0,0,1701, - 1702,5,24,0,0,1702,1703,5,322,0,0,1703,1704,3,156,78,0,1704,1705,5,323, - 0,0,1705,1759,1,0,0,0,1706,1707,5,27,0,0,1707,1708,5,322,0,0,1708,1709, - 3,156,78,0,1709,1710,5,323,0,0,1710,1759,1,0,0,0,1711,1713,5,25,0,0,1712, - 1711,1,0,0,0,1712,1713,1,0,0,0,1713,1714,1,0,0,0,1714,1715,5,30,0,0,1715, - 1759,3,268,134,0,1716,1718,5,25,0,0,1717,1716,1,0,0,0,1717,1718,1,0,0,0, - 1718,1719,1,0,0,0,1719,1720,5,29,0,0,1720,1734,7,28,0,0,1721,1722,5,322, - 0,0,1722,1735,5,323,0,0,1723,1724,5,322,0,0,1724,1729,3,260,130,0,1725, - 1726,5,326,0,0,1726,1728,3,260,130,0,1727,1725,1,0,0,0,1728,1731,1,0,0, - 0,1729,1727,1,0,0,0,1729,1730,1,0,0,0,1730,1732,1,0,0,0,1731,1729,1,0,0, - 0,1732,1733,5,323,0,0,1733,1735,1,0,0,0,1734,1721,1,0,0,0,1734,1723,1,0, - 0,0,1735,1759,1,0,0,0,1736,1738,5,25,0,0,1737,1736,1,0,0,0,1737,1738,1, - 0,0,0,1738,1739,1,0,0,0,1739,1740,5,29,0,0,1740,1759,3,268,134,0,1741,1743, - 5,31,0,0,1742,1744,5,25,0,0,1743,1742,1,0,0,0,1743,1744,1,0,0,0,1744,1745, - 1,0,0,0,1745,1759,5,309,0,0,1746,1748,5,31,0,0,1747,1749,5,25,0,0,1748, - 1747,1,0,0,0,1748,1749,1,0,0,0,1749,1750,1,0,0,0,1750,1759,7,29,0,0,1751, - 1753,5,31,0,0,1752,1754,5,25,0,0,1753,1752,1,0,0,0,1753,1754,1,0,0,0,1754, - 1755,1,0,0,0,1755,1756,5,10,0,0,1756,1757,5,5,0,0,1757,1759,3,268,134,0, - 1758,1676,1,0,0,0,1758,1684,1,0,0,0,1758,1699,1,0,0,0,1758,1706,1,0,0,0, - 1758,1712,1,0,0,0,1758,1717,1,0,0,0,1758,1737,1,0,0,0,1758,1741,1,0,0,0, - 1758,1746,1,0,0,0,1758,1751,1,0,0,0,1759,265,1,0,0,0,1760,1762,5,25,0,0, - 1761,1760,1,0,0,0,1761,1762,1,0,0,0,1762,1763,1,0,0,0,1763,1764,5,29,0, - 0,1764,1778,7,28,0,0,1765,1766,5,322,0,0,1766,1779,5,323,0,0,1767,1768, - 5,322,0,0,1768,1773,3,260,130,0,1769,1770,5,326,0,0,1770,1772,3,260,130, - 0,1771,1769,1,0,0,0,1772,1775,1,0,0,0,1773,1771,1,0,0,0,1773,1774,1,0,0, - 0,1774,1776,1,0,0,0,1775,1773,1,0,0,0,1776,1777,5,323,0,0,1777,1779,1,0, - 0,0,1778,1765,1,0,0,0,1778,1767,1,0,0,0,1779,1786,1,0,0,0,1780,1782,5,25, - 0,0,1781,1780,1,0,0,0,1781,1782,1,0,0,0,1782,1783,1,0,0,0,1783,1784,5,29, - 0,0,1784,1786,3,268,134,0,1785,1761,1,0,0,0,1785,1781,1,0,0,0,1786,267, - 1,0,0,0,1787,1788,6,134,-1,0,1788,1792,3,270,135,0,1789,1790,7,30,0,0,1790, - 1792,3,268,134,7,1791,1787,1,0,0,0,1791,1789,1,0,0,0,1792,1814,1,0,0,0, - 1793,1794,10,6,0,0,1794,1795,7,31,0,0,1795,1813,3,268,134,7,1796,1797,10, - 5,0,0,1797,1798,7,32,0,0,1798,1813,3,268,134,6,1799,1800,10,4,0,0,1800, - 1801,5,317,0,0,1801,1813,3,268,134,5,1802,1803,10,3,0,0,1803,1804,5,318, - 0,0,1804,1813,3,268,134,4,1805,1806,10,2,0,0,1806,1807,5,316,0,0,1807,1813, - 3,268,134,3,1808,1809,10,1,0,0,1809,1810,3,334,167,0,1810,1811,3,268,134, - 2,1811,1813,1,0,0,0,1812,1793,1,0,0,0,1812,1796,1,0,0,0,1812,1799,1,0,0, - 0,1812,1802,1,0,0,0,1812,1805,1,0,0,0,1812,1808,1,0,0,0,1813,1816,1,0,0, - 0,1814,1812,1,0,0,0,1814,1815,1,0,0,0,1815,269,1,0,0,0,1816,1814,1,0,0, - 0,1817,1818,6,135,-1,0,1818,1820,5,39,0,0,1819,1821,3,312,156,0,1820,1819, - 1,0,0,0,1821,1822,1,0,0,0,1822,1820,1,0,0,0,1822,1823,1,0,0,0,1823,1826, - 1,0,0,0,1824,1825,5,42,0,0,1825,1827,3,260,130,0,1826,1824,1,0,0,0,1826, - 1827,1,0,0,0,1827,1828,1,0,0,0,1828,1829,5,44,0,0,1829,1909,1,0,0,0,1830, - 1831,5,39,0,0,1831,1833,3,260,130,0,1832,1834,3,312,156,0,1833,1832,1,0, - 0,0,1834,1835,1,0,0,0,1835,1833,1,0,0,0,1835,1836,1,0,0,0,1836,1839,1,0, - 0,0,1837,1838,5,42,0,0,1838,1840,3,260,130,0,1839,1837,1,0,0,0,1839,1840, - 1,0,0,0,1840,1841,1,0,0,0,1841,1842,5,44,0,0,1842,1909,1,0,0,0,1843,1844, - 5,94,0,0,1844,1845,5,322,0,0,1845,1846,3,260,130,0,1846,1847,5,7,0,0,1847, - 1848,3,54,27,0,1848,1849,5,323,0,0,1849,1909,1,0,0,0,1850,1851,5,67,0,0, - 1851,1852,5,322,0,0,1852,1855,3,260,130,0,1853,1854,5,124,0,0,1854,1856, - 5,34,0,0,1855,1853,1,0,0,0,1855,1856,1,0,0,0,1856,1857,1,0,0,0,1857,1858, - 5,323,0,0,1858,1909,1,0,0,0,1859,1860,5,69,0,0,1860,1861,5,322,0,0,1861, - 1864,3,260,130,0,1862,1863,5,124,0,0,1863,1865,5,34,0,0,1864,1862,1,0,0, - 0,1864,1865,1,0,0,0,1865,1866,1,0,0,0,1866,1867,5,323,0,0,1867,1909,1,0, - 0,0,1868,1869,5,129,0,0,1869,1870,5,322,0,0,1870,1871,3,268,134,0,1871, - 1872,5,24,0,0,1872,1873,3,268,134,0,1873,1874,5,323,0,0,1874,1909,1,0,0, - 0,1875,1909,3,344,172,0,1876,1909,5,333,0,0,1877,1878,3,316,158,0,1878, - 1879,5,319,0,0,1879,1880,5,333,0,0,1880,1909,1,0,0,0,1881,1882,5,322,0, - 0,1882,1883,3,156,78,0,1883,1884,5,323,0,0,1884,1909,1,0,0,0,1885,1886, - 3,272,136,0,1886,1898,5,322,0,0,1887,1889,3,352,176,0,1888,1887,1,0,0,0, - 1888,1889,1,0,0,0,1889,1890,1,0,0,0,1890,1895,3,260,130,0,1891,1892,5,326, - 0,0,1892,1894,3,260,130,0,1893,1891,1,0,0,0,1894,1897,1,0,0,0,1895,1893, - 1,0,0,0,1895,1896,1,0,0,0,1896,1899,1,0,0,0,1897,1895,1,0,0,0,1898,1888, - 1,0,0,0,1898,1899,1,0,0,0,1899,1900,1,0,0,0,1900,1901,5,323,0,0,1901,1909, - 1,0,0,0,1902,1909,3,304,152,0,1903,1909,3,274,137,0,1904,1905,5,322,0,0, - 1905,1906,3,260,130,0,1906,1907,5,323,0,0,1907,1909,1,0,0,0,1908,1817,1, - 0,0,0,1908,1830,1,0,0,0,1908,1843,1,0,0,0,1908,1850,1,0,0,0,1908,1859,1, - 0,0,0,1908,1868,1,0,0,0,1908,1875,1,0,0,0,1908,1876,1,0,0,0,1908,1877,1, - 0,0,0,1908,1881,1,0,0,0,1908,1885,1,0,0,0,1908,1902,1,0,0,0,1908,1903,1, - 0,0,0,1908,1904,1,0,0,0,1909,1917,1,0,0,0,1910,1911,10,4,0,0,1911,1912, - 5,320,0,0,1912,1913,3,268,134,0,1913,1914,5,321,0,0,1914,1916,1,0,0,0,1915, - 1910,1,0,0,0,1916,1919,1,0,0,0,1917,1915,1,0,0,0,1917,1918,1,0,0,0,1918, - 271,1,0,0,0,1919,1917,1,0,0,0,1920,1921,3,316,158,0,1921,273,1,0,0,0,1922, - 1923,3,316,158,0,1923,275,1,0,0,0,1924,1925,3,304,152,0,1925,277,1,0,0, - 0,1926,1929,3,304,152,0,1927,1929,3,274,137,0,1928,1926,1,0,0,0,1928,1927, - 1,0,0,0,1929,279,1,0,0,0,1930,1933,5,38,0,0,1931,1934,3,282,141,0,1932, - 1934,3,286,143,0,1933,1931,1,0,0,0,1933,1932,1,0,0,0,1933,1934,1,0,0,0, - 1934,281,1,0,0,0,1935,1937,3,284,142,0,1936,1938,3,288,144,0,1937,1936, - 1,0,0,0,1937,1938,1,0,0,0,1938,283,1,0,0,0,1939,1940,3,290,145,0,1940,1941, - 3,304,152,0,1941,1943,1,0,0,0,1942,1939,1,0,0,0,1943,1944,1,0,0,0,1944, - 1942,1,0,0,0,1944,1945,1,0,0,0,1945,285,1,0,0,0,1946,1949,3,288,144,0,1947, - 1950,3,284,142,0,1948,1950,3,288,144,0,1949,1947,1,0,0,0,1949,1948,1,0, - 0,0,1949,1950,1,0,0,0,1950,287,1,0,0,0,1951,1952,3,290,145,0,1952,1953, - 3,304,152,0,1953,1954,5,109,0,0,1954,1955,3,304,152,0,1955,289,1,0,0,0, - 1956,1958,7,33,0,0,1957,1956,1,0,0,0,1957,1958,1,0,0,0,1958,1959,1,0,0, - 0,1959,1962,7,34,0,0,1960,1962,5,343,0,0,1961,1957,1,0,0,0,1961,1960,1, - 0,0,0,1962,291,1,0,0,0,1963,1965,5,7,0,0,1964,1963,1,0,0,0,1964,1965,1, - 0,0,0,1965,1966,1,0,0,0,1966,1968,3,306,153,0,1967,1969,3,300,150,0,1968, - 1967,1,0,0,0,1968,1969,1,0,0,0,1969,293,1,0,0,0,1970,1972,5,7,0,0,1971, - 1970,1,0,0,0,1971,1972,1,0,0,0,1972,1973,1,0,0,0,1973,1975,3,306,153,0, - 1974,1976,3,300,150,0,1975,1974,1,0,0,0,1975,1976,1,0,0,0,1976,295,1,0, - 0,0,1977,1978,3,304,152,0,1978,1979,3,298,149,0,1979,297,1,0,0,0,1980,1981, - 5,131,0,0,1981,1983,3,304,152,0,1982,1980,1,0,0,0,1983,1984,1,0,0,0,1984, - 1982,1,0,0,0,1984,1985,1,0,0,0,1985,1988,1,0,0,0,1986,1988,1,0,0,0,1987, - 1982,1,0,0,0,1987,1986,1,0,0,0,1988,299,1,0,0,0,1989,1990,5,322,0,0,1990, - 1991,3,302,151,0,1991,1992,5,323,0,0,1992,301,1,0,0,0,1993,1998,3,304,152, - 0,1994,1995,5,326,0,0,1995,1997,3,304,152,0,1996,1994,1,0,0,0,1997,2000, - 1,0,0,0,1998,1996,1,0,0,0,1998,1999,1,0,0,0,1999,303,1,0,0,0,2000,1998, - 1,0,0,0,2001,2004,3,306,153,0,2002,2004,3,356,178,0,2003,2001,1,0,0,0,2003, - 2002,1,0,0,0,2004,305,1,0,0,0,2005,2010,3,308,154,0,2006,2010,3,310,155, - 0,2007,2010,3,354,177,0,2008,2010,3,358,179,0,2009,2005,1,0,0,0,2009,2006, - 1,0,0,0,2009,2007,1,0,0,0,2009,2008,1,0,0,0,2010,307,1,0,0,0,2011,2012, - 7,35,0,0,2012,309,1,0,0,0,2013,2014,5,343,0,0,2014,311,1,0,0,0,2015,2016, - 5,40,0,0,2016,2017,3,260,130,0,2017,2018,5,41,0,0,2018,2019,3,260,130,0, - 2019,313,1,0,0,0,2020,2025,3,316,158,0,2021,2022,5,326,0,0,2022,2024,3, - 316,158,0,2023,2021,1,0,0,0,2024,2027,1,0,0,0,2025,2023,1,0,0,0,2025,2026, - 1,0,0,0,2026,315,1,0,0,0,2027,2025,1,0,0,0,2028,2032,5,347,0,0,2029,2031, - 5,342,0,0,2030,2029,1,0,0,0,2031,2034,1,0,0,0,2032,2033,1,0,0,0,2032,2030, - 1,0,0,0,2033,317,1,0,0,0,2034,2032,1,0,0,0,2035,2036,5,70,0,0,2036,2037, - 3,324,162,0,2037,319,1,0,0,0,2038,2039,5,128,0,0,2039,2040,5,25,0,0,2040, - 2041,5,27,0,0,2041,321,1,0,0,0,2042,2043,5,128,0,0,2043,2044,5,27,0,0,2044, - 323,1,0,0,0,2045,2046,5,322,0,0,2046,2051,3,326,163,0,2047,2048,5,326,0, - 0,2048,2050,3,326,163,0,2049,2047,1,0,0,0,2050,2053,1,0,0,0,2051,2049,1, - 0,0,0,2051,2052,1,0,0,0,2052,2054,1,0,0,0,2053,2051,1,0,0,0,2054,2055,5, - 323,0,0,2055,325,1,0,0,0,2056,2061,3,328,164,0,2057,2059,5,311,0,0,2058, - 2057,1,0,0,0,2058,2059,1,0,0,0,2059,2060,1,0,0,0,2060,2062,3,330,165,0, - 2061,2058,1,0,0,0,2061,2062,1,0,0,0,2062,327,1,0,0,0,2063,2067,3,304,152, - 0,2064,2067,3,274,137,0,2065,2067,5,343,0,0,2066,2063,1,0,0,0,2066,2064, - 1,0,0,0,2066,2065,1,0,0,0,2067,329,1,0,0,0,2068,2073,5,344,0,0,2069,2073, - 5,345,0,0,2070,2073,3,350,175,0,2071,2073,5,343,0,0,2072,2068,1,0,0,0,2072, - 2069,1,0,0,0,2072,2070,1,0,0,0,2072,2071,1,0,0,0,2073,331,1,0,0,0,2074, - 2081,5,23,0,0,2075,2076,5,317,0,0,2076,2081,5,317,0,0,2077,2081,5,22,0, - 0,2078,2079,5,316,0,0,2079,2081,5,316,0,0,2080,2074,1,0,0,0,2080,2075,1, - 0,0,0,2080,2077,1,0,0,0,2080,2078,1,0,0,0,2081,333,1,0,0,0,2082,2097,5, - 311,0,0,2083,2097,5,312,0,0,2084,2097,5,313,0,0,2085,2086,5,313,0,0,2086, - 2097,5,311,0,0,2087,2088,5,312,0,0,2088,2097,5,311,0,0,2089,2090,5,313, - 0,0,2090,2097,5,312,0,0,2091,2092,5,314,0,0,2092,2097,5,311,0,0,2093,2094, - 5,313,0,0,2094,2095,5,311,0,0,2095,2097,5,312,0,0,2096,2082,1,0,0,0,2096, - 2083,1,0,0,0,2096,2084,1,0,0,0,2096,2085,1,0,0,0,2096,2087,1,0,0,0,2096, - 2089,1,0,0,0,2096,2091,1,0,0,0,2096,2093,1,0,0,0,2097,335,1,0,0,0,2098, - 2099,5,313,0,0,2099,2106,5,313,0,0,2100,2101,5,312,0,0,2101,2106,5,312, - 0,0,2102,2106,5,317,0,0,2103,2106,5,318,0,0,2104,2106,5,316,0,0,2105,2098, - 1,0,0,0,2105,2100,1,0,0,0,2105,2102,1,0,0,0,2105,2103,1,0,0,0,2105,2104, - 1,0,0,0,2106,337,1,0,0,0,2107,2108,7,36,0,0,2108,339,1,0,0,0,2109,2110, - 7,37,0,0,2110,341,1,0,0,0,2111,2112,3,316,158,0,2112,343,1,0,0,0,2113,2126, - 3,346,173,0,2114,2126,3,348,174,0,2115,2126,3,280,140,0,2116,2117,5,335, - 0,0,2117,2126,3,348,174,0,2118,2126,3,350,175,0,2119,2126,5,345,0,0,2120, - 2126,5,346,0,0,2121,2123,5,25,0,0,2122,2121,1,0,0,0,2122,2123,1,0,0,0,2123, - 2124,1,0,0,0,2124,2126,5,309,0,0,2125,2113,1,0,0,0,2125,2114,1,0,0,0,2125, - 2115,1,0,0,0,2125,2116,1,0,0,0,2125,2118,1,0,0,0,2125,2119,1,0,0,0,2125, - 2120,1,0,0,0,2125,2122,1,0,0,0,2126,345,1,0,0,0,2127,2128,5,343,0,0,2128, - 347,1,0,0,0,2129,2130,5,344,0,0,2130,349,1,0,0,0,2131,2132,7,29,0,0,2132, - 351,1,0,0,0,2133,2134,7,38,0,0,2134,353,1,0,0,0,2135,2136,7,39,0,0,2136, - 355,1,0,0,0,2137,2138,7,40,0,0,2138,357,1,0,0,0,2139,2140,7,41,0,0,2140, - 359,1,0,0,0,244,368,371,373,388,406,410,419,424,431,438,442,451,463,466, - 473,481,486,489,496,504,508,520,528,532,553,557,561,565,574,579,583,587, - 591,594,598,603,609,614,619,622,626,634,642,646,650,654,658,662,666,670, - 674,676,686,694,718,725,740,743,751,763,787,800,805,809,817,821,829,839, - 843,849,853,857,860,869,873,880,883,893,901,909,913,928,947,958,962,969, - 974,980,984,991,995,999,1003,1011,1015,1020,1025,1031,1034,1038,1049,1058, - 1071,1086,1089,1093,1096,1098,1103,1107,1110,1114,1123,1132,1142,1147,1159, - 1162,1165,1168,1174,1178,1186,1189,1194,1197,1199,1213,1224,1229,1237,1240, - 1243,1248,1250,1252,1257,1260,1264,1267,1270,1282,1289,1300,1329,1351,1369, - 1374,1386,1399,1411,1423,1428,1455,1463,1467,1470,1473,1480,1483,1486,1489, - 1492,1495,1500,1503,1512,1517,1521,1526,1535,1554,1562,1570,1574,1578,1588, - 1614,1622,1634,1660,1662,1670,1672,1676,1684,1693,1699,1712,1717,1729,1734, - 1737,1743,1748,1753,1758,1761,1773,1778,1781,1785,1791,1812,1814,1822,1826, - 1835,1839,1855,1864,1888,1895,1898,1908,1917,1928,1933,1937,1944,1949,1957, - 1961,1964,1968,1971,1975,1984,1987,1998,2003,2009,2025,2032,2051,2058,2061, - 2066,2072,2080,2096,2105,2122,2125]; + 7,175,1,0,1,0,1,0,1,1,1,1,1,1,1,2,1,2,3,2,361,8,2,1,2,5,2,364,8,2,10,2, + 12,2,367,9,2,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,381,8, + 3,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,1,5,3,5,399, + 8,5,1,6,1,6,3,6,403,8,6,1,7,1,7,1,7,1,8,1,8,1,8,1,8,3,8,412,8,8,1,8,1,8, + 1,8,3,8,417,8,8,1,9,1,9,1,9,5,9,422,8,9,10,9,12,9,425,9,9,1,10,1,10,1,11, + 1,11,3,11,431,8,11,1,11,1,11,3,11,435,8,11,1,12,1,12,1,12,1,12,1,12,5,12, + 442,8,12,10,12,12,12,445,9,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1, + 13,3,13,456,8,13,1,13,3,13,459,8,13,1,13,1,13,1,13,1,13,1,13,3,13,466,8, + 13,1,13,1,13,1,13,1,13,1,13,1,13,3,13,474,8,13,1,13,1,13,1,13,3,13,479, + 8,13,1,13,3,13,482,8,13,1,14,1,14,1,14,1,14,1,14,3,14,489,8,14,1,15,1,15, + 1,15,1,15,1,16,1,16,3,16,497,8,16,1,17,1,17,3,17,501,8,17,1,18,1,18,1,18, + 1,18,1,19,1,19,1,19,1,19,1,19,1,19,3,19,513,8,19,1,19,1,19,1,19,1,19,1, + 19,1,19,3,19,521,8,19,1,19,1,19,3,19,525,8,19,1,19,1,19,1,19,1,19,1,19, + 1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,1,19,3, + 19,546,8,19,1,20,1,20,3,20,550,8,20,1,21,1,21,3,21,554,8,21,1,21,1,21,3, + 21,558,8,21,1,21,1,21,1,21,1,21,1,21,5,21,565,8,21,10,21,12,21,568,9,21, + 1,21,1,21,3,21,572,8,21,1,21,1,21,3,21,576,8,21,1,21,1,21,3,21,580,8,21, + 1,21,1,21,3,21,584,8,21,1,21,3,21,587,8,21,1,21,1,21,3,21,591,8,21,1,22, + 1,22,1,22,3,22,596,8,22,1,22,1,22,1,22,1,22,3,22,602,8,22,1,23,1,23,1,23, + 3,23,607,8,23,1,24,1,24,1,24,3,24,612,8,24,1,24,3,24,615,8,24,1,25,1,25, + 3,25,619,8,25,1,26,1,26,1,26,1,26,5,26,625,8,26,10,26,12,26,628,9,26,1, + 26,1,26,1,27,1,27,1,27,3,27,635,8,27,1,27,1,27,3,27,639,8,27,1,27,1,27, + 3,27,643,8,27,1,27,1,27,3,27,647,8,27,1,27,1,27,3,27,651,8,27,1,27,1,27, + 3,27,655,8,27,1,27,1,27,3,27,659,8,27,1,27,1,27,3,27,663,8,27,1,27,1,27, + 3,27,667,8,27,3,27,669,8,27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,3,29, + 679,8,29,1,29,1,29,1,30,1,30,1,30,1,30,3,30,687,8,30,1,30,1,30,1,31,1,31, + 1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1, + 33,1,33,5,33,709,8,33,10,33,12,33,712,9,33,1,33,1,33,1,34,1,34,3,34,718, + 8,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,3, + 36,733,8,36,1,36,3,36,736,8,36,1,37,1,37,1,38,1,38,1,38,1,38,3,38,744,8, + 38,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,3,41,756,8,41,1,41, + 1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1, + 44,1,45,1,45,1,45,1,45,5,45,778,8,45,10,45,12,45,781,9,45,1,45,1,45,1,46, + 1,46,1,46,1,46,1,46,1,46,5,46,791,8,46,10,46,12,46,794,9,46,1,46,1,46,3, + 46,798,8,46,1,47,1,47,3,47,802,8,47,1,48,1,48,1,48,1,48,5,48,808,8,48,10, + 48,12,48,811,9,48,1,48,3,48,814,8,48,1,49,1,49,1,50,1,50,1,50,1,50,3,50, + 822,8,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,3,52,832,8,52,1,52,1,52, + 3,52,836,8,52,1,52,1,52,1,53,1,53,3,53,842,8,53,1,53,1,53,3,53,846,8,53, + 1,53,1,53,3,53,850,8,53,1,53,3,53,853,8,53,1,53,1,53,1,53,1,54,1,54,1,54, + 1,54,3,54,862,8,54,1,54,1,54,3,54,866,8,54,1,54,1,54,1,54,1,54,1,54,3,54, + 873,8,54,1,54,3,54,876,8,54,1,55,1,55,1,55,1,55,1,55,1,55,5,55,884,8,55, + 10,55,12,55,887,9,55,1,56,1,56,1,57,1,57,1,57,3,57,894,8,57,1,57,1,57,1, + 57,1,57,1,57,1,57,3,57,902,8,57,1,58,1,58,3,58,906,8,58,1,58,1,58,1,58, + 1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,921,8,60,1,61,1, + 61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64, + 1,64,3,64,940,8,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,3,66,951, + 8,66,1,66,1,66,3,66,955,8,66,1,66,1,66,1,66,1,66,1,66,3,66,962,8,66,1,67, + 1,67,1,67,3,67,967,8,67,1,67,1,67,1,68,1,68,3,68,973,8,68,1,68,1,68,3,68, + 977,8,68,1,68,1,68,1,69,1,69,1,69,3,69,984,8,69,1,69,1,69,3,69,988,8,69, + 1,70,1,70,3,70,992,8,70,1,70,1,70,3,70,996,8,70,1,70,1,70,1,71,1,71,1,71, + 1,71,3,71,1004,8,71,1,71,1,71,3,71,1008,8,71,1,71,1,71,1,72,3,72,1013,8, + 72,1,72,1,72,1,72,3,72,1018,8,72,1,73,1,73,1,73,1,73,3,73,1024,8,73,1,73, + 3,73,1027,8,73,1,73,1,73,3,73,1031,8,73,1,74,1,74,1,74,1,75,1,75,1,75,1, + 75,5,75,1040,8,75,10,75,12,75,1043,9,75,1,76,1,76,1,76,1,76,5,76,1049,8, + 76,10,76,12,76,1052,9,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,4,77,1062, + 8,77,11,77,12,77,1063,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, + 1,78,1,78,1,78,3,78,1079,8,78,1,78,3,78,1082,8,78,1,78,1,78,3,78,1086,8, + 78,1,78,3,78,1089,8,78,3,78,1091,8,78,1,78,1,78,1,78,3,78,1096,8,78,1,78, + 1,78,3,78,1100,8,78,1,78,3,78,1103,8,78,5,78,1105,8,78,10,78,12,78,1108, + 9,78,1,79,1,79,1,79,1,79,5,79,1114,8,79,10,79,12,79,1117,9,79,1,80,1,80, + 1,80,1,80,5,80,1123,8,80,10,80,12,80,1126,9,80,1,81,1,81,1,81,1,81,1,81, + 5,81,1133,8,81,10,81,12,81,1136,9,81,1,81,1,81,3,81,1140,8,81,1,81,1,81, + 1,81,1,81,1,81,1,82,1,82,1,83,1,83,1,83,3,83,1152,8,83,1,83,3,83,1155,8, + 83,1,83,3,83,1158,8,83,1,83,3,83,1161,8,83,1,83,1,83,1,83,1,83,3,83,1167, + 8,83,1,84,1,84,3,84,1171,8,84,1,84,1,84,1,84,1,84,5,84,1177,8,84,10,84, + 12,84,1180,9,84,3,84,1182,8,84,1,85,1,85,1,85,3,85,1187,8,85,1,85,3,85, + 1190,8,85,3,85,1192,8,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1, + 86,1,86,1,86,3,86,1206,8,86,1,87,1,87,1,87,1,88,1,88,1,88,1,88,5,88,1215, + 8,88,10,88,12,88,1218,9,88,1,88,1,88,3,88,1222,8,88,1,88,1,88,1,88,1,88, + 1,88,1,88,3,88,1230,8,88,1,88,3,88,1233,8,88,1,88,3,88,1236,8,88,1,88,1, + 88,1,88,3,88,1241,8,88,5,88,1243,8,88,10,88,12,88,1246,9,88,1,89,1,89,3, + 89,1250,8,89,1,90,3,90,1253,8,90,1,90,1,90,3,90,1257,8,90,1,90,3,90,1260, + 8,90,1,90,3,90,1263,8,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,5,90,1273, + 8,90,10,90,12,90,1276,9,90,1,90,1,90,1,90,1,90,3,90,1282,8,90,1,90,1,90, + 1,90,1,90,1,90,1,90,1,90,1,90,1,90,3,90,1293,8,90,1,91,1,91,1,92,1,92,1, + 92,1,92,1,92,1,92,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95, + 1,95,1,96,1,96,1,96,1,96,1,96,5,96,1320,8,96,10,96,12,96,1323,9,96,1,96, + 1,96,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1, + 98,1,98,1,98,1,98,3,98,1344,8,98,1,99,1,99,1,100,1,100,1,100,1,100,1,100, + 1,101,1,101,1,101,1,101,1,101,1,101,1,101,5,101,1360,8,101,10,101,12,101, + 1363,9,101,1,101,1,101,3,101,1367,8,101,1,102,1,102,1,102,1,103,1,103,1, + 103,1,103,1,103,5,103,1377,8,103,10,103,12,103,1380,9,103,1,104,1,104,1, + 104,1,104,1,104,1,104,1,104,1,104,5,104,1390,8,104,10,104,12,104,1393,9, + 104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,5,104,1402,8,104,10,104,12, + 104,1405,9,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,5,104,1414,8,104, + 10,104,12,104,1417,9,104,1,104,1,104,3,104,1421,8,104,1,105,1,105,1,105, + 1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,109, + 1,109,1,110,1,110,1,110,1,111,1,111,1,111,1,111,5,111,1446,8,111,10,111, + 12,111,1449,9,111,1,112,1,112,1,112,1,112,1,113,3,113,1456,8,113,1,113, + 1,113,3,113,1460,8,113,1,113,3,113,1463,8,113,1,113,3,113,1466,8,113,1, + 113,1,113,1,114,1,114,1,114,3,114,1473,8,114,1,114,3,114,1476,8,114,1,114, + 3,114,1479,8,114,1,114,3,114,1482,8,114,1,114,3,114,1485,8,114,1,114,3, + 114,1488,8,114,1,114,1,114,1,114,3,114,1493,8,114,1,114,3,114,1496,8,114, + 1,115,1,115,1,115,1,115,1,115,5,115,1503,8,115,10,115,12,115,1506,9,115, + 1,116,1,116,3,116,1510,8,116,1,116,1,116,3,116,1514,8,116,1,117,1,117,1, + 117,3,117,1519,8,117,1,118,1,118,1,118,1,118,1,118,5,118,1526,8,118,10, + 118,12,118,1529,9,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1, + 119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,3,119,1547,8,119,1,120,1, + 120,1,120,1,120,5,120,1553,8,120,10,120,12,120,1556,9,120,1,121,1,121,1, + 121,4,121,1561,8,121,11,121,12,121,1562,1,121,1,121,3,121,1567,8,121,1, + 122,1,122,3,122,1571,8,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1, + 123,3,123,1581,8,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1, + 124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1, + 124,1,124,1,124,1,124,3,124,1607,8,124,1,125,1,125,1,125,1,125,5,125,1613, + 8,125,10,125,12,125,1616,9,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126, + 1,126,1,126,3,126,1627,8,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128, + 1,128,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130, + 1,130,3,130,1649,8,130,3,130,1651,8,130,1,130,1,130,1,130,1,130,1,130,1, + 130,5,130,1659,8,130,10,130,12,130,1662,9,130,1,131,3,131,1665,8,131,1, + 131,1,131,1,131,1,131,1,131,1,131,3,131,1673,8,131,1,131,1,131,1,131,1, + 131,1,131,5,131,1680,8,131,10,131,12,131,1683,9,131,1,131,1,131,1,131,3, + 131,1688,8,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1, + 131,1,131,3,131,1701,8,131,1,131,1,131,1,131,3,131,1706,8,131,1,131,1,131, + 1,131,1,131,1,131,1,131,1,131,1,131,5,131,1716,8,131,10,131,12,131,1719, + 9,131,1,131,1,131,3,131,1723,8,131,1,131,3,131,1726,8,131,1,131,1,131,1, + 131,1,131,3,131,1732,8,131,1,131,1,131,1,131,3,131,1737,8,131,1,131,1,131, + 1,131,3,131,1742,8,131,1,131,1,131,1,131,3,131,1747,8,131,1,132,3,132,1750, + 8,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,5,132,1760,8,132, + 10,132,12,132,1763,9,132,1,132,1,132,3,132,1767,8,132,1,132,3,132,1770, + 8,132,1,132,1,132,3,132,1774,8,132,1,133,1,133,1,133,1,133,3,133,1780,8, + 133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1, + 133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,5,133,1801,8,133,10,133,12, + 133,1804,9,133,1,134,1,134,1,134,4,134,1809,8,134,11,134,12,134,1810,1, + 134,1,134,3,134,1815,8,134,1,134,1,134,1,134,1,134,1,134,4,134,1822,8,134, + 11,134,12,134,1823,1,134,1,134,3,134,1828,8,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1844, + 8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1853,8,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1877,8,134, + 1,134,1,134,1,134,5,134,1882,8,134,10,134,12,134,1885,9,134,3,134,1887, + 8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1897,8,134, + 1,134,1,134,1,134,1,134,1,134,5,134,1904,8,134,10,134,12,134,1907,9,134, + 1,135,1,135,1,135,3,135,1912,8,135,1,136,1,136,1,137,1,137,1,138,1,138, + 3,138,1920,8,138,1,139,1,139,1,139,3,139,1925,8,139,1,140,1,140,3,140,1929, + 8,140,1,141,1,141,1,141,4,141,1934,8,141,11,141,12,141,1935,1,142,1,142, + 1,142,3,142,1941,8,142,1,143,1,143,1,143,1,143,1,143,1,144,3,144,1949,8, + 144,1,144,1,144,3,144,1953,8,144,1,145,1,145,3,145,1957,8,145,1,146,3,146, + 1960,8,146,1,146,1,146,3,146,1964,8,146,1,147,3,147,1967,8,147,1,147,1, + 147,3,147,1971,8,147,1,148,1,148,1,148,1,149,1,149,4,149,1978,8,149,11, + 149,12,149,1979,1,149,3,149,1983,8,149,1,150,1,150,1,150,1,150,1,151,1, + 151,1,151,5,151,1992,8,151,10,151,12,151,1995,9,151,1,152,1,152,1,152,3, + 152,2000,8,152,1,153,1,153,1,154,1,154,1,155,1,155,1,155,1,155,1,155,1, + 156,1,156,1,156,5,156,2014,8,156,10,156,12,156,2017,9,156,1,157,1,157,1, + 157,1,158,1,158,1,158,1,158,1,159,1,159,1,159,1,160,1,160,1,160,1,160,5, + 160,2033,8,160,10,160,12,160,2036,9,160,1,160,1,160,1,161,1,161,3,161,2042, + 8,161,1,161,3,161,2045,8,161,1,162,1,162,1,162,3,162,2050,8,162,1,163,1, + 163,1,163,1,163,3,163,2056,8,163,1,164,1,164,1,164,1,164,1,164,1,164,3, + 164,2064,8,164,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1, + 165,1,165,1,165,1,165,1,165,3,165,2080,8,165,1,166,1,166,1,166,1,166,1, + 166,1,166,1,166,3,166,2089,8,166,1,167,1,167,1,168,1,168,1,169,1,169,1, + 169,1,169,1,169,1,169,1,169,1,169,1,169,3,169,2104,8,169,1,169,3,169,2107, + 8,169,1,170,1,170,1,171,1,171,1,172,1,172,1,173,1,173,1,174,1,174,1,175, + 1,175,1,175,1,2015,5,156,176,260,266,268,176,0,2,4,6,8,10,12,14,16,18,20, + 22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68, + 70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112, + 114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148, + 150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184, + 186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220, + 222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256, + 258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292, + 294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328, + 330,332,334,336,338,340,342,344,346,348,350,0,41,2,0,30,30,231,231,3,0, + 16,16,37,37,67,67,4,0,13,13,26,26,64,64,166,166,2,0,12,12,25,25,2,0,248, + 248,259,259,2,0,165,165,337,337,2,0,4,4,117,117,1,0,107,111,3,0,192,192, + 222,222,295,295,11,0,10,10,145,145,151,151,188,189,201,201,223,223,264, + 265,329,329,340,340,342,342,356,357,2,0,361,361,363,363,4,0,225,226,233, + 233,246,246,296,296,2,0,182,182,289,289,2,0,40,40,260,260,3,0,21,21,95, + 95,176,176,3,0,40,40,93,93,260,260,3,0,52,52,89,89,169,169,3,0,65,65,106, + 106,125,125,2,0,11,11,122,122,2,0,92,92,268,268,3,0,239,239,266,266,346, + 346,4,0,249,249,261,261,275,275,318,318,3,0,23,23,56,56,155,155,5,0,24, + 24,138,139,144,144,150,150,298,298,2,0,218,218,321,321,3,0,56,56,135,135, + 155,155,2,0,8,8,30,30,2,0,44,44,72,72,2,0,176,176,180,180,2,0,245,245,344, + 344,2,0,369,369,389,390,4,0,32,32,387,387,391,391,394,394,2,0,389,390,392, + 392,1,0,389,390,1,0,398,399,2,0,398,398,401,401,4,0,32,32,387,387,389,391, + 393,394,3,0,294,294,368,369,389,390,2,0,176,176,232,232,1,0,175,364,1,0, + 4,174,2302,0,352,1,0,0,0,2,355,1,0,0,0,4,365,1,0,0,0,6,380,1,0,0,0,8,382, + 1,0,0,0,10,398,1,0,0,0,12,402,1,0,0,0,14,404,1,0,0,0,16,407,1,0,0,0,18, + 418,1,0,0,0,20,426,1,0,0,0,22,434,1,0,0,0,24,436,1,0,0,0,26,481,1,0,0,0, + 28,483,1,0,0,0,30,490,1,0,0,0,32,494,1,0,0,0,34,498,1,0,0,0,36,502,1,0, + 0,0,38,545,1,0,0,0,40,549,1,0,0,0,42,551,1,0,0,0,44,592,1,0,0,0,46,606, + 1,0,0,0,48,608,1,0,0,0,50,618,1,0,0,0,52,620,1,0,0,0,54,668,1,0,0,0,56, + 670,1,0,0,0,58,674,1,0,0,0,60,682,1,0,0,0,62,690,1,0,0,0,64,694,1,0,0,0, + 66,701,1,0,0,0,68,717,1,0,0,0,70,724,1,0,0,0,72,727,1,0,0,0,74,737,1,0, + 0,0,76,739,1,0,0,0,78,745,1,0,0,0,80,747,1,0,0,0,82,755,1,0,0,0,84,763, + 1,0,0,0,86,765,1,0,0,0,88,769,1,0,0,0,90,773,1,0,0,0,92,797,1,0,0,0,94, + 801,1,0,0,0,96,803,1,0,0,0,98,815,1,0,0,0,100,821,1,0,0,0,102,823,1,0,0, + 0,104,828,1,0,0,0,106,839,1,0,0,0,108,857,1,0,0,0,110,877,1,0,0,0,112,888, + 1,0,0,0,114,890,1,0,0,0,116,903,1,0,0,0,118,910,1,0,0,0,120,913,1,0,0,0, + 122,922,1,0,0,0,124,926,1,0,0,0,126,930,1,0,0,0,128,933,1,0,0,0,130,941, + 1,0,0,0,132,946,1,0,0,0,134,963,1,0,0,0,136,970,1,0,0,0,138,980,1,0,0,0, + 140,989,1,0,0,0,142,999,1,0,0,0,144,1017,1,0,0,0,146,1019,1,0,0,0,148,1032, + 1,0,0,0,150,1035,1,0,0,0,152,1044,1,0,0,0,154,1055,1,0,0,0,156,1090,1,0, + 0,0,158,1109,1,0,0,0,160,1118,1,0,0,0,162,1127,1,0,0,0,164,1146,1,0,0,0, + 166,1166,1,0,0,0,168,1168,1,0,0,0,170,1191,1,0,0,0,172,1205,1,0,0,0,174, + 1207,1,0,0,0,176,1221,1,0,0,0,178,1247,1,0,0,0,180,1292,1,0,0,0,182,1294, + 1,0,0,0,184,1296,1,0,0,0,186,1302,1,0,0,0,188,1304,1,0,0,0,190,1309,1,0, + 0,0,192,1314,1,0,0,0,194,1326,1,0,0,0,196,1343,1,0,0,0,198,1345,1,0,0,0, + 200,1347,1,0,0,0,202,1366,1,0,0,0,204,1368,1,0,0,0,206,1371,1,0,0,0,208, + 1420,1,0,0,0,210,1422,1,0,0,0,212,1425,1,0,0,0,214,1427,1,0,0,0,216,1434, + 1,0,0,0,218,1436,1,0,0,0,220,1438,1,0,0,0,222,1441,1,0,0,0,224,1450,1,0, + 0,0,226,1455,1,0,0,0,228,1469,1,0,0,0,230,1497,1,0,0,0,232,1507,1,0,0,0, + 234,1515,1,0,0,0,236,1520,1,0,0,0,238,1546,1,0,0,0,240,1548,1,0,0,0,242, + 1557,1,0,0,0,244,1568,1,0,0,0,246,1580,1,0,0,0,248,1606,1,0,0,0,250,1608, + 1,0,0,0,252,1626,1,0,0,0,254,1628,1,0,0,0,256,1633,1,0,0,0,258,1636,1,0, + 0,0,260,1650,1,0,0,0,262,1746,1,0,0,0,264,1773,1,0,0,0,266,1779,1,0,0,0, + 268,1896,1,0,0,0,270,1911,1,0,0,0,272,1913,1,0,0,0,274,1915,1,0,0,0,276, + 1919,1,0,0,0,278,1921,1,0,0,0,280,1926,1,0,0,0,282,1933,1,0,0,0,284,1937, + 1,0,0,0,286,1942,1,0,0,0,288,1952,1,0,0,0,290,1956,1,0,0,0,292,1959,1,0, + 0,0,294,1966,1,0,0,0,296,1972,1,0,0,0,298,1982,1,0,0,0,300,1984,1,0,0,0, + 302,1988,1,0,0,0,304,1999,1,0,0,0,306,2001,1,0,0,0,308,2003,1,0,0,0,310, + 2005,1,0,0,0,312,2010,1,0,0,0,314,2018,1,0,0,0,316,2021,1,0,0,0,318,2025, + 1,0,0,0,320,2028,1,0,0,0,322,2039,1,0,0,0,324,2049,1,0,0,0,326,2055,1,0, + 0,0,328,2063,1,0,0,0,330,2079,1,0,0,0,332,2088,1,0,0,0,334,2090,1,0,0,0, + 336,2092,1,0,0,0,338,2106,1,0,0,0,340,2108,1,0,0,0,342,2110,1,0,0,0,344, + 2112,1,0,0,0,346,2114,1,0,0,0,348,2116,1,0,0,0,350,2118,1,0,0,0,352,353, + 3,2,1,0,353,354,5,0,0,1,354,1,1,0,0,0,355,356,3,4,2,0,356,357,5,0,0,1,357, + 3,1,0,0,0,358,360,3,6,3,0,359,361,5,381,0,0,360,359,1,0,0,0,360,361,1,0, + 0,0,361,364,1,0,0,0,362,364,3,8,4,0,363,358,1,0,0,0,363,362,1,0,0,0,364, + 367,1,0,0,0,365,363,1,0,0,0,365,366,1,0,0,0,366,5,1,0,0,0,367,365,1,0,0, + 0,368,381,3,10,5,0,369,381,3,12,6,0,370,381,3,14,7,0,371,381,3,16,8,0,372, + 381,3,22,11,0,373,381,3,26,13,0,374,381,3,28,14,0,375,381,3,30,15,0,376, + 381,3,32,16,0,377,381,3,34,17,0,378,381,3,36,18,0,379,381,3,38,19,0,380, + 368,1,0,0,0,380,369,1,0,0,0,380,370,1,0,0,0,380,371,1,0,0,0,380,372,1,0, + 0,0,380,373,1,0,0,0,380,374,1,0,0,0,380,375,1,0,0,0,380,376,1,0,0,0,380, + 377,1,0,0,0,380,378,1,0,0,0,380,379,1,0,0,0,381,7,1,0,0,0,382,383,5,381, + 0,0,383,9,1,0,0,0,384,399,3,40,20,0,385,399,3,104,52,0,386,399,3,106,53, + 0,387,399,3,108,54,0,388,399,3,102,51,0,389,399,3,114,57,0,390,399,3,128, + 64,0,391,399,3,130,65,0,392,399,3,132,66,0,393,399,3,134,67,0,394,399,3, + 136,68,0,395,399,3,138,69,0,396,399,3,140,70,0,397,399,3,142,71,0,398,384, + 1,0,0,0,398,385,1,0,0,0,398,386,1,0,0,0,398,387,1,0,0,0,398,388,1,0,0,0, + 398,389,1,0,0,0,398,390,1,0,0,0,398,391,1,0,0,0,398,392,1,0,0,0,398,393, + 1,0,0,0,398,394,1,0,0,0,398,395,1,0,0,0,398,396,1,0,0,0,398,397,1,0,0,0, + 399,11,1,0,0,0,400,403,3,156,78,0,401,403,3,144,72,0,402,400,1,0,0,0,402, + 401,1,0,0,0,403,13,1,0,0,0,404,405,7,0,0,0,405,406,3,312,156,0,406,15,1, + 0,0,0,407,411,5,242,0,0,408,412,3,18,9,0,409,410,5,100,0,0,410,412,5,247, + 0,0,411,408,1,0,0,0,411,409,1,0,0,0,411,412,1,0,0,0,412,416,1,0,0,0,413, + 417,3,12,6,0,414,417,3,146,73,0,415,417,3,154,77,0,416,413,1,0,0,0,416, + 414,1,0,0,0,416,415,1,0,0,0,417,17,1,0,0,0,418,423,3,20,10,0,419,420,5, + 380,0,0,420,422,3,20,10,0,421,419,1,0,0,0,422,425,1,0,0,0,423,421,1,0,0, + 0,423,424,1,0,0,0,424,19,1,0,0,0,425,423,1,0,0,0,426,427,7,1,0,0,427,21, + 1,0,0,0,428,430,5,160,0,0,429,431,5,12,0,0,430,429,1,0,0,0,430,431,1,0, + 0,0,431,432,1,0,0,0,432,435,3,312,156,0,433,435,3,24,12,0,434,428,1,0,0, + 0,434,433,1,0,0,0,435,23,1,0,0,0,436,437,5,160,0,0,437,438,5,83,0,0,438, + 443,3,312,156,0,439,440,5,380,0,0,440,442,3,312,156,0,441,439,1,0,0,0,442, + 445,1,0,0,0,443,441,1,0,0,0,443,444,1,0,0,0,444,25,1,0,0,0,445,443,1,0, + 0,0,446,447,5,327,0,0,447,482,7,2,0,0,448,449,5,327,0,0,449,450,5,219,0, + 0,450,482,7,3,0,0,451,452,5,327,0,0,452,455,5,148,0,0,453,454,7,4,0,0,454, + 456,3,312,156,0,455,453,1,0,0,0,455,456,1,0,0,0,456,458,1,0,0,0,457,459, + 3,264,132,0,458,457,1,0,0,0,458,459,1,0,0,0,459,482,1,0,0,0,460,461,5,327, + 0,0,461,462,5,20,0,0,462,463,7,4,0,0,463,465,3,312,156,0,464,466,3,264, + 132,0,465,464,1,0,0,0,465,466,1,0,0,0,466,482,1,0,0,0,467,468,5,327,0,0, + 468,469,5,216,0,0,469,470,7,5,0,0,470,482,3,312,156,0,471,473,5,327,0,0, + 472,474,5,352,0,0,473,472,1,0,0,0,473,474,1,0,0,0,474,475,1,0,0,0,475,482, + 5,50,0,0,476,478,5,327,0,0,477,479,5,249,0,0,478,477,1,0,0,0,478,479,1, + 0,0,0,479,480,1,0,0,0,480,482,5,83,0,0,481,446,1,0,0,0,481,448,1,0,0,0, + 481,451,1,0,0,0,481,460,1,0,0,0,481,467,1,0,0,0,481,471,1,0,0,0,481,476, + 1,0,0,0,482,27,1,0,0,0,483,484,5,75,0,0,484,485,5,287,0,0,485,488,3,312, + 156,0,486,487,5,361,0,0,487,489,3,320,160,0,488,486,1,0,0,0,488,489,1,0, + 0,0,489,29,1,0,0,0,490,491,5,158,0,0,491,492,5,287,0,0,492,493,3,312,156, + 0,493,31,1,0,0,0,494,496,5,326,0,0,495,497,3,322,161,0,496,495,1,0,0,0, + 496,497,1,0,0,0,497,33,1,0,0,0,498,500,5,316,0,0,499,501,3,324,162,0,500, + 499,1,0,0,0,500,501,1,0,0,0,501,35,1,0,0,0,502,503,7,6,0,0,503,504,5,63, + 0,0,504,505,3,112,56,0,505,37,1,0,0,0,506,507,5,4,0,0,507,508,5,63,0,0, + 508,509,5,361,0,0,509,512,5,402,0,0,510,511,5,183,0,0,511,513,3,312,156, + 0,512,510,1,0,0,0,512,513,1,0,0,0,513,546,1,0,0,0,514,515,5,4,0,0,515,516, + 5,42,0,0,516,517,5,361,0,0,517,520,5,402,0,0,518,519,5,183,0,0,519,521, + 3,312,156,0,520,518,1,0,0,0,520,521,1,0,0,0,521,524,1,0,0,0,522,523,5,118, + 0,0,523,525,3,312,156,0,524,522,1,0,0,0,524,525,1,0,0,0,525,546,1,0,0,0, + 526,527,5,4,0,0,527,528,7,7,0,0,528,529,5,361,0,0,529,530,5,402,0,0,530, + 531,5,118,0,0,531,546,3,312,156,0,532,533,5,4,0,0,533,534,5,112,0,0,534, + 546,5,402,0,0,535,536,5,4,0,0,536,537,5,35,0,0,537,538,5,42,0,0,538,539, + 5,361,0,0,539,540,5,402,0,0,540,541,5,118,0,0,541,542,3,312,156,0,542,543, + 5,68,0,0,543,544,3,312,156,0,544,546,1,0,0,0,545,506,1,0,0,0,545,514,1, + 0,0,0,545,526,1,0,0,0,545,532,1,0,0,0,545,535,1,0,0,0,546,39,1,0,0,0,547, + 550,3,42,21,0,548,550,3,44,22,0,549,547,1,0,0,0,549,548,1,0,0,0,550,41, + 1,0,0,0,551,553,5,216,0,0,552,554,5,149,0,0,553,552,1,0,0,0,553,554,1,0, + 0,0,554,555,1,0,0,0,555,557,5,337,0,0,556,558,3,316,158,0,557,556,1,0,0, + 0,557,558,1,0,0,0,558,559,1,0,0,0,559,560,3,98,49,0,560,561,5,376,0,0,561, + 566,3,46,23,0,562,563,5,380,0,0,563,565,3,46,23,0,564,562,1,0,0,0,565,568, + 1,0,0,0,566,564,1,0,0,0,566,567,1,0,0,0,567,571,1,0,0,0,568,566,1,0,0,0, + 569,570,5,380,0,0,570,572,3,80,40,0,571,569,1,0,0,0,571,572,1,0,0,0,572, + 575,1,0,0,0,573,574,5,380,0,0,574,576,3,82,41,0,575,573,1,0,0,0,575,576, + 1,0,0,0,576,579,1,0,0,0,577,578,5,380,0,0,578,580,3,86,43,0,579,577,1,0, + 0,0,579,580,1,0,0,0,580,581,1,0,0,0,581,583,5,377,0,0,582,584,3,70,35,0, + 583,582,1,0,0,0,583,584,1,0,0,0,584,586,1,0,0,0,585,587,3,88,44,0,586,585, + 1,0,0,0,586,587,1,0,0,0,587,588,1,0,0,0,588,590,3,314,157,0,589,591,3,96, + 48,0,590,589,1,0,0,0,590,591,1,0,0,0,591,43,1,0,0,0,592,593,5,216,0,0,593, + 595,5,337,0,0,594,596,3,316,158,0,595,594,1,0,0,0,595,596,1,0,0,0,596,597, + 1,0,0,0,597,598,3,98,49,0,598,601,3,314,157,0,599,600,5,183,0,0,600,602, + 3,156,78,0,601,599,1,0,0,0,601,602,1,0,0,0,602,45,1,0,0,0,603,607,3,48, + 24,0,604,607,3,72,36,0,605,607,3,76,38,0,606,603,1,0,0,0,606,604,1,0,0, + 0,606,605,1,0,0,0,607,47,1,0,0,0,608,609,3,50,25,0,609,611,3,54,27,0,610, + 612,3,68,34,0,611,610,1,0,0,0,611,612,1,0,0,0,612,614,1,0,0,0,613,615,3, + 70,35,0,614,613,1,0,0,0,614,615,1,0,0,0,615,49,1,0,0,0,616,619,3,312,156, + 0,617,619,3,258,129,0,618,616,1,0,0,0,618,617,1,0,0,0,619,51,1,0,0,0,620, + 621,5,376,0,0,621,626,3,50,25,0,622,623,5,380,0,0,623,625,3,50,25,0,624, + 622,1,0,0,0,625,628,1,0,0,0,626,624,1,0,0,0,626,627,1,0,0,0,627,629,1,0, + 0,0,628,626,1,0,0,0,629,630,5,377,0,0,630,53,1,0,0,0,631,669,7,8,0,0,632, + 634,7,9,0,0,633,635,3,56,28,0,634,633,1,0,0,0,634,635,1,0,0,0,635,669,1, + 0,0,0,636,638,5,341,0,0,637,639,3,56,28,0,638,637,1,0,0,0,638,639,1,0,0, + 0,639,646,1,0,0,0,640,642,7,10,0,0,641,643,5,278,0,0,642,641,1,0,0,0,642, + 643,1,0,0,0,643,644,1,0,0,0,644,645,5,340,0,0,645,647,5,174,0,0,646,640, + 1,0,0,0,646,647,1,0,0,0,647,669,1,0,0,0,648,650,7,11,0,0,649,651,3,58,29, + 0,650,649,1,0,0,0,650,651,1,0,0,0,651,669,1,0,0,0,652,654,7,12,0,0,653, + 655,3,62,31,0,654,653,1,0,0,0,654,655,1,0,0,0,655,669,1,0,0,0,656,658,5, + 76,0,0,657,659,3,64,32,0,658,657,1,0,0,0,658,659,1,0,0,0,659,669,1,0,0, + 0,660,662,5,322,0,0,661,663,3,66,33,0,662,661,1,0,0,0,662,663,1,0,0,0,663, + 669,1,0,0,0,664,666,5,114,0,0,665,667,3,60,30,0,666,665,1,0,0,0,666,667, + 1,0,0,0,667,669,1,0,0,0,668,631,1,0,0,0,668,632,1,0,0,0,668,636,1,0,0,0, + 668,648,1,0,0,0,668,652,1,0,0,0,668,656,1,0,0,0,668,660,1,0,0,0,668,664, + 1,0,0,0,669,55,1,0,0,0,670,671,5,376,0,0,671,672,3,342,171,0,672,673,5, + 377,0,0,673,57,1,0,0,0,674,675,5,376,0,0,675,678,3,342,171,0,676,677,5, + 380,0,0,677,679,3,342,171,0,678,676,1,0,0,0,678,679,1,0,0,0,679,680,1,0, + 0,0,680,681,5,377,0,0,681,59,1,0,0,0,682,683,5,376,0,0,683,686,3,340,170, + 0,684,685,5,380,0,0,685,687,3,340,170,0,686,684,1,0,0,0,686,687,1,0,0,0, + 687,688,1,0,0,0,688,689,5,377,0,0,689,61,1,0,0,0,690,691,5,367,0,0,691, + 692,3,54,27,0,692,693,5,366,0,0,693,63,1,0,0,0,694,695,5,367,0,0,695,696, + 3,54,27,0,696,697,5,380,0,0,697,698,3,54,27,0,698,699,1,0,0,0,699,700,5, + 366,0,0,700,65,1,0,0,0,701,702,5,367,0,0,702,703,3,50,25,0,703,710,3,54, + 27,0,704,705,5,380,0,0,705,706,3,50,25,0,706,707,3,54,27,0,707,709,1,0, + 0,0,708,704,1,0,0,0,709,712,1,0,0,0,710,708,1,0,0,0,710,711,1,0,0,0,711, + 713,1,0,0,0,712,710,1,0,0,0,713,714,5,366,0,0,714,67,1,0,0,0,715,716,5, + 212,0,0,716,718,3,84,42,0,717,715,1,0,0,0,717,718,1,0,0,0,718,719,1,0,0, + 0,719,720,5,313,0,0,720,721,5,68,0,0,721,722,5,294,0,0,722,723,5,34,0,0, + 723,69,1,0,0,0,724,725,5,18,0,0,725,726,5,397,0,0,726,71,1,0,0,0,727,728, + 3,50,25,0,728,729,3,54,27,0,729,732,5,283,0,0,730,731,5,248,0,0,731,733, + 3,74,37,0,732,730,1,0,0,0,732,733,1,0,0,0,733,735,1,0,0,0,734,736,5,167, + 0,0,735,734,1,0,0,0,735,736,1,0,0,0,736,73,1,0,0,0,737,738,5,397,0,0,738, + 75,1,0,0,0,739,740,3,50,25,0,740,741,5,183,0,0,741,743,3,78,39,0,742,744, + 3,70,35,0,743,742,1,0,0,0,743,744,1,0,0,0,744,77,1,0,0,0,745,746,3,258, + 129,0,746,79,1,0,0,0,747,748,5,168,0,0,748,749,5,247,0,0,749,750,3,258, + 129,0,750,751,5,183,0,0,751,752,3,258,129,0,752,81,1,0,0,0,753,754,5,212, + 0,0,754,756,3,84,42,0,755,753,1,0,0,0,755,756,1,0,0,0,756,757,1,0,0,0,757, + 758,5,313,0,0,758,759,5,68,0,0,759,760,3,52,26,0,760,761,5,294,0,0,761, + 762,5,34,0,0,762,83,1,0,0,0,763,764,3,304,152,0,764,85,1,0,0,0,765,766, + 5,311,0,0,766,767,5,247,0,0,767,768,5,335,0,0,768,87,1,0,0,0,769,770,5, + 94,0,0,770,771,5,194,0,0,771,772,3,90,45,0,772,89,1,0,0,0,773,774,5,376, + 0,0,774,779,3,92,46,0,775,776,5,380,0,0,776,778,3,92,46,0,777,775,1,0,0, + 0,778,781,1,0,0,0,779,777,1,0,0,0,779,780,1,0,0,0,780,782,1,0,0,0,781,779, + 1,0,0,0,782,783,5,377,0,0,783,91,1,0,0,0,784,798,3,276,138,0,785,786,3, + 304,152,0,786,787,5,376,0,0,787,792,3,94,47,0,788,789,5,380,0,0,789,791, + 3,94,47,0,790,788,1,0,0,0,791,794,1,0,0,0,792,790,1,0,0,0,792,793,1,0,0, + 0,793,795,1,0,0,0,794,792,1,0,0,0,795,796,5,377,0,0,796,798,1,0,0,0,797, + 784,1,0,0,0,797,785,1,0,0,0,798,93,1,0,0,0,799,802,3,276,138,0,800,802, + 3,338,169,0,801,799,1,0,0,0,801,800,1,0,0,0,802,95,1,0,0,0,803,804,5,276, + 0,0,804,813,3,98,49,0,805,809,5,376,0,0,806,808,3,100,50,0,807,806,1,0, + 0,0,808,811,1,0,0,0,809,807,1,0,0,0,809,810,1,0,0,0,810,812,1,0,0,0,811, + 809,1,0,0,0,812,814,5,377,0,0,813,805,1,0,0,0,813,814,1,0,0,0,814,97,1, + 0,0,0,815,816,3,312,156,0,816,99,1,0,0,0,817,818,7,13,0,0,818,822,7,14, + 0,0,819,820,7,15,0,0,820,822,7,16,0,0,821,817,1,0,0,0,821,819,1,0,0,0,822, + 101,1,0,0,0,823,824,5,216,0,0,824,825,5,12,0,0,825,826,3,312,156,0,826, + 827,3,314,157,0,827,103,1,0,0,0,828,829,5,216,0,0,829,831,5,25,0,0,830, + 832,3,316,158,0,831,830,1,0,0,0,831,832,1,0,0,0,832,833,1,0,0,0,833,835, + 3,312,156,0,834,836,3,70,35,0,835,834,1,0,0,0,835,836,1,0,0,0,836,837,1, + 0,0,0,837,838,3,314,157,0,838,105,1,0,0,0,839,841,5,216,0,0,840,842,5,149, + 0,0,841,840,1,0,0,0,841,842,1,0,0,0,842,843,1,0,0,0,843,845,5,165,0,0,844, + 846,3,316,158,0,845,844,1,0,0,0,845,846,1,0,0,0,846,847,1,0,0,0,847,849, + 3,312,156,0,848,850,3,52,26,0,849,848,1,0,0,0,849,850,1,0,0,0,850,852,1, + 0,0,0,851,853,3,70,35,0,852,851,1,0,0,0,852,853,1,0,0,0,853,854,1,0,0,0, + 854,855,5,183,0,0,855,856,3,156,78,0,856,107,1,0,0,0,857,861,5,216,0,0, + 858,862,5,149,0,0,859,860,5,149,0,0,860,862,5,334,0,0,861,858,1,0,0,0,861, + 859,1,0,0,0,861,862,1,0,0,0,862,863,1,0,0,0,863,865,5,250,0,0,864,866,3, + 316,158,0,865,864,1,0,0,0,865,866,1,0,0,0,866,867,1,0,0,0,867,868,3,312, + 156,0,868,869,5,183,0,0,869,872,3,304,152,0,870,871,5,272,0,0,871,873,7, + 17,0,0,872,870,1,0,0,0,872,873,1,0,0,0,873,875,1,0,0,0,874,876,3,110,55, + 0,875,874,1,0,0,0,875,876,1,0,0,0,876,109,1,0,0,0,877,878,5,353,0,0,878, + 879,5,63,0,0,879,885,3,112,56,0,880,881,5,380,0,0,881,882,5,63,0,0,882, + 884,3,112,56,0,883,880,1,0,0,0,884,887,1,0,0,0,885,883,1,0,0,0,885,886, + 1,0,0,0,886,111,1,0,0,0,887,885,1,0,0,0,888,889,5,397,0,0,889,113,1,0,0, + 0,890,891,5,178,0,0,891,893,5,337,0,0,892,894,3,318,159,0,893,892,1,0,0, + 0,893,894,1,0,0,0,894,895,1,0,0,0,895,901,3,312,156,0,896,902,3,116,58, + 0,897,902,3,118,59,0,898,902,3,120,60,0,899,902,3,122,61,0,900,902,3,124, + 62,0,901,896,1,0,0,0,901,897,1,0,0,0,901,898,1,0,0,0,901,899,1,0,0,0,901, + 900,1,0,0,0,902,115,1,0,0,0,903,905,5,118,0,0,904,906,3,312,156,0,905,904, + 1,0,0,0,905,906,1,0,0,0,906,907,1,0,0,0,907,908,5,343,0,0,908,909,3,312, + 156,0,909,117,1,0,0,0,910,911,5,326,0,0,911,912,3,320,160,0,912,119,1,0, + 0,0,913,914,5,4,0,0,914,915,5,212,0,0,915,916,3,84,42,0,916,917,5,313,0, + 0,917,918,5,68,0,0,918,920,3,52,26,0,919,921,3,126,63,0,920,919,1,0,0,0, + 920,921,1,0,0,0,921,121,1,0,0,0,922,923,5,234,0,0,923,924,5,212,0,0,924, + 925,3,84,42,0,925,123,1,0,0,0,926,927,5,4,0,0,927,928,5,347,0,0,928,929, + 3,52,26,0,929,125,1,0,0,0,930,931,5,294,0,0,931,932,5,34,0,0,932,127,1, + 0,0,0,933,934,5,178,0,0,934,935,5,165,0,0,935,939,3,312,156,0,936,940,3, + 116,58,0,937,938,5,183,0,0,938,940,3,156,78,0,939,936,1,0,0,0,939,937,1, + 0,0,0,940,129,1,0,0,0,941,942,5,178,0,0,942,943,5,25,0,0,943,944,3,312, + 156,0,944,945,3,118,59,0,945,131,1,0,0,0,946,950,5,178,0,0,947,951,5,149, + 0,0,948,949,5,149,0,0,949,951,5,334,0,0,950,947,1,0,0,0,950,948,1,0,0,0, + 950,951,1,0,0,0,951,952,1,0,0,0,952,954,5,250,0,0,953,955,3,318,159,0,954, + 953,1,0,0,0,954,955,1,0,0,0,955,956,1,0,0,0,956,957,3,312,156,0,957,958, + 5,183,0,0,958,961,3,304,152,0,959,960,5,272,0,0,960,962,7,17,0,0,961,959, + 1,0,0,0,961,962,1,0,0,0,962,133,1,0,0,0,963,964,5,234,0,0,964,966,5,12, + 0,0,965,967,3,318,159,0,966,965,1,0,0,0,966,967,1,0,0,0,967,968,1,0,0,0, + 968,969,3,312,156,0,969,135,1,0,0,0,970,972,5,234,0,0,971,973,5,149,0,0, + 972,971,1,0,0,0,972,973,1,0,0,0,973,974,1,0,0,0,974,976,5,337,0,0,975,977, + 3,318,159,0,976,975,1,0,0,0,976,977,1,0,0,0,977,978,1,0,0,0,978,979,3,312, + 156,0,979,137,1,0,0,0,980,981,5,234,0,0,981,983,5,25,0,0,982,984,3,318, + 159,0,983,982,1,0,0,0,983,984,1,0,0,0,984,985,1,0,0,0,985,987,3,312,156, + 0,986,988,7,18,0,0,987,986,1,0,0,0,987,988,1,0,0,0,988,139,1,0,0,0,989, + 991,5,234,0,0,990,992,5,149,0,0,991,990,1,0,0,0,991,992,1,0,0,0,992,993, + 1,0,0,0,993,995,5,165,0,0,994,996,3,318,159,0,995,994,1,0,0,0,995,996,1, + 0,0,0,996,997,1,0,0,0,997,998,3,312,156,0,998,141,1,0,0,0,999,1003,5,234, + 0,0,1000,1004,5,149,0,0,1001,1002,5,149,0,0,1002,1004,5,334,0,0,1003,1000, + 1,0,0,0,1003,1001,1,0,0,0,1003,1004,1,0,0,0,1004,1005,1,0,0,0,1005,1007, + 5,250,0,0,1006,1008,3,318,159,0,1007,1006,1,0,0,0,1007,1008,1,0,0,0,1008, + 1009,1,0,0,0,1009,1010,3,312,156,0,1010,143,1,0,0,0,1011,1013,5,240,0,0, + 1012,1011,1,0,0,0,1012,1013,1,0,0,0,1013,1014,1,0,0,0,1014,1018,3,146,73, + 0,1015,1016,5,240,0,0,1016,1018,3,154,77,0,1017,1012,1,0,0,0,1017,1015, + 1,0,0,0,1018,145,1,0,0,0,1019,1020,5,263,0,0,1020,1021,7,19,0,0,1021,1030, + 3,312,156,0,1022,1024,3,148,74,0,1023,1022,1,0,0,0,1023,1024,1,0,0,0,1024, + 1026,1,0,0,0,1025,1027,3,52,26,0,1026,1025,1,0,0,0,1026,1027,1,0,0,0,1027, + 1028,1,0,0,0,1028,1031,3,156,78,0,1029,1031,3,150,75,0,1030,1023,1,0,0, + 0,1030,1029,1,0,0,0,1031,147,1,0,0,0,1032,1033,5,307,0,0,1033,1034,3,320, + 160,0,1034,149,1,0,0,0,1035,1036,5,355,0,0,1036,1041,3,152,76,0,1037,1038, + 5,380,0,0,1038,1040,3,152,76,0,1039,1037,1,0,0,0,1040,1043,1,0,0,0,1041, + 1039,1,0,0,0,1041,1042,1,0,0,0,1042,151,1,0,0,0,1043,1041,1,0,0,0,1044, + 1045,5,376,0,0,1045,1050,3,338,169,0,1046,1047,5,380,0,0,1047,1049,3,338, + 169,0,1048,1046,1,0,0,0,1049,1052,1,0,0,0,1050,1048,1,0,0,0,1050,1051,1, + 0,0,0,1051,1053,1,0,0,0,1052,1050,1,0,0,0,1053,1054,5,377,0,0,1054,153, + 1,0,0,0,1055,1056,5,143,0,0,1056,1057,5,326,0,0,1057,1061,5,186,0,0,1058, + 1059,3,146,73,0,1059,1060,5,381,0,0,1060,1062,1,0,0,0,1061,1058,1,0,0,0, + 1062,1063,1,0,0,0,1063,1061,1,0,0,0,1063,1064,1,0,0,0,1064,1065,1,0,0,0, + 1065,1066,5,237,0,0,1066,155,1,0,0,0,1067,1068,6,78,-1,0,1068,1091,3,158, + 79,0,1069,1070,3,160,80,0,1070,1071,3,156,78,5,1071,1091,1,0,0,0,1072,1073, + 5,376,0,0,1073,1074,3,156,78,0,1074,1075,5,377,0,0,1075,1091,1,0,0,0,1076, + 1078,3,168,84,0,1077,1079,3,230,115,0,1078,1077,1,0,0,0,1078,1079,1,0,0, + 0,1079,1081,1,0,0,0,1080,1082,3,234,117,0,1081,1080,1,0,0,0,1081,1082,1, + 0,0,0,1082,1091,1,0,0,0,1083,1085,3,166,83,0,1084,1086,3,230,115,0,1085, + 1084,1,0,0,0,1085,1086,1,0,0,0,1086,1088,1,0,0,0,1087,1089,3,234,117,0, + 1088,1087,1,0,0,0,1088,1089,1,0,0,0,1089,1091,1,0,0,0,1090,1067,1,0,0,0, + 1090,1069,1,0,0,0,1090,1072,1,0,0,0,1090,1076,1,0,0,0,1090,1083,1,0,0,0, + 1091,1106,1,0,0,0,1092,1093,10,3,0,0,1093,1095,7,20,0,0,1094,1096,5,176, + 0,0,1095,1094,1,0,0,0,1095,1096,1,0,0,0,1096,1097,1,0,0,0,1097,1099,3,156, + 78,0,1098,1100,3,230,115,0,1099,1098,1,0,0,0,1099,1100,1,0,0,0,1100,1102, + 1,0,0,0,1101,1103,3,234,117,0,1102,1101,1,0,0,0,1102,1103,1,0,0,0,1103, + 1105,1,0,0,0,1104,1092,1,0,0,0,1105,1108,1,0,0,0,1106,1104,1,0,0,0,1106, + 1107,1,0,0,0,1107,157,1,0,0,0,1108,1106,1,0,0,0,1109,1110,5,355,0,0,1110, + 1115,3,258,129,0,1111,1112,5,380,0,0,1112,1114,3,258,129,0,1113,1111,1, + 0,0,0,1114,1117,1,0,0,0,1115,1113,1,0,0,0,1115,1116,1,0,0,0,1116,159,1, + 0,0,0,1117,1115,1,0,0,0,1118,1119,5,361,0,0,1119,1124,3,162,81,0,1120,1121, + 5,380,0,0,1121,1123,3,162,81,0,1122,1120,1,0,0,0,1123,1126,1,0,0,0,1124, + 1122,1,0,0,0,1124,1125,1,0,0,0,1125,161,1,0,0,0,1126,1124,1,0,0,0,1127, + 1139,3,164,82,0,1128,1129,5,376,0,0,1129,1134,3,50,25,0,1130,1131,5,380, + 0,0,1131,1133,3,50,25,0,1132,1130,1,0,0,0,1133,1136,1,0,0,0,1134,1132,1, + 0,0,0,1134,1135,1,0,0,0,1135,1137,1,0,0,0,1136,1134,1,0,0,0,1137,1138,5, + 377,0,0,1138,1140,1,0,0,0,1139,1128,1,0,0,0,1139,1140,1,0,0,0,1140,1141, + 1,0,0,0,1141,1142,5,183,0,0,1142,1143,5,376,0,0,1143,1144,3,156,78,0,1144, + 1145,5,377,0,0,1145,163,1,0,0,0,1146,1147,3,304,152,0,1147,165,1,0,0,0, + 1148,1149,3,168,84,0,1149,1151,3,174,87,0,1150,1152,3,204,102,0,1151,1150, + 1,0,0,0,1151,1152,1,0,0,0,1152,1154,1,0,0,0,1153,1155,3,206,103,0,1154, + 1153,1,0,0,0,1154,1155,1,0,0,0,1155,1157,1,0,0,0,1156,1158,3,220,110,0, + 1157,1156,1,0,0,0,1157,1158,1,0,0,0,1158,1160,1,0,0,0,1159,1161,3,222,111, + 0,1160,1159,1,0,0,0,1160,1161,1,0,0,0,1161,1167,1,0,0,0,1162,1163,3,168, + 84,0,1163,1164,3,174,87,0,1164,1165,3,228,114,0,1165,1167,1,0,0,0,1166, + 1148,1,0,0,0,1166,1162,1,0,0,0,1167,167,1,0,0,0,1168,1170,5,325,0,0,1169, + 1171,3,346,173,0,1170,1169,1,0,0,0,1170,1171,1,0,0,0,1171,1181,1,0,0,0, + 1172,1182,5,387,0,0,1173,1178,3,170,85,0,1174,1175,5,380,0,0,1175,1177, + 3,170,85,0,1176,1174,1,0,0,0,1177,1180,1,0,0,0,1178,1176,1,0,0,0,1178,1179, + 1,0,0,0,1179,1182,1,0,0,0,1180,1178,1,0,0,0,1181,1172,1,0,0,0,1181,1173, + 1,0,0,0,1182,169,1,0,0,0,1183,1192,3,172,86,0,1184,1189,3,258,129,0,1185, + 1187,5,183,0,0,1186,1185,1,0,0,0,1186,1187,1,0,0,0,1187,1188,1,0,0,0,1188, + 1190,3,258,129,0,1189,1186,1,0,0,0,1189,1190,1,0,0,0,1190,1192,1,0,0,0, + 1191,1183,1,0,0,0,1191,1184,1,0,0,0,1192,171,1,0,0,0,1193,1194,3,268,134, + 0,1194,1195,5,305,0,0,1195,1196,3,226,113,0,1196,1197,5,183,0,0,1197,1198, + 3,304,152,0,1198,1206,1,0,0,0,1199,1200,3,268,134,0,1200,1201,5,305,0,0, + 1201,1202,3,296,148,0,1202,1203,5,183,0,0,1203,1204,3,304,152,0,1204,1206, + 1,0,0,0,1205,1193,1,0,0,0,1205,1199,1,0,0,0,1206,173,1,0,0,0,1207,1208, + 5,248,0,0,1208,1209,3,176,88,0,1209,175,1,0,0,0,1210,1211,6,88,-1,0,1211, + 1216,3,178,89,0,1212,1213,5,380,0,0,1213,1215,3,178,89,0,1214,1212,1,0, + 0,0,1215,1218,1,0,0,0,1216,1214,1,0,0,0,1216,1217,1,0,0,0,1217,1222,1,0, + 0,0,1218,1216,1,0,0,0,1219,1222,3,188,94,0,1220,1222,3,190,95,0,1221,1210, + 1,0,0,0,1221,1219,1,0,0,0,1221,1220,1,0,0,0,1222,1244,1,0,0,0,1223,1224, + 10,3,0,0,1224,1225,5,217,0,0,1225,1226,5,270,0,0,1226,1243,3,176,88,4,1227, + 1229,10,4,0,0,1228,1230,5,290,0,0,1229,1228,1,0,0,0,1229,1230,1,0,0,0,1230, + 1232,1,0,0,0,1231,1233,7,21,0,0,1232,1231,1,0,0,0,1232,1233,1,0,0,0,1233, + 1235,1,0,0,0,1234,1236,5,304,0,0,1235,1234,1,0,0,0,1235,1236,1,0,0,0,1236, + 1237,1,0,0,0,1237,1238,5,270,0,0,1238,1240,3,176,88,0,1239,1241,3,202,101, + 0,1240,1239,1,0,0,0,1240,1241,1,0,0,0,1241,1243,1,0,0,0,1242,1223,1,0,0, + 0,1242,1227,1,0,0,0,1243,1246,1,0,0,0,1244,1242,1,0,0,0,1244,1245,1,0,0, + 0,1245,177,1,0,0,0,1246,1244,1,0,0,0,1247,1249,3,180,90,0,1248,1250,3,294, + 147,0,1249,1248,1,0,0,0,1249,1250,1,0,0,0,1250,179,1,0,0,0,1251,1253,5, + 337,0,0,1252,1251,1,0,0,0,1252,1253,1,0,0,0,1253,1254,1,0,0,0,1254,1256, + 3,182,91,0,1255,1257,3,184,92,0,1256,1255,1,0,0,0,1256,1257,1,0,0,0,1257, + 1262,1,0,0,0,1258,1260,5,183,0,0,1259,1258,1,0,0,0,1259,1260,1,0,0,0,1260, + 1261,1,0,0,0,1261,1263,3,274,137,0,1262,1259,1,0,0,0,1262,1263,1,0,0,0, + 1263,1293,1,0,0,0,1264,1265,5,273,0,0,1265,1266,5,337,0,0,1266,1267,5,376, + 0,0,1267,1268,3,270,135,0,1268,1269,5,376,0,0,1269,1274,3,258,129,0,1270, + 1271,5,380,0,0,1271,1273,3,258,129,0,1272,1270,1,0,0,0,1273,1276,1,0,0, + 0,1274,1272,1,0,0,0,1274,1275,1,0,0,0,1275,1277,1,0,0,0,1276,1274,1,0,0, + 0,1277,1278,5,377,0,0,1278,1279,5,377,0,0,1279,1293,1,0,0,0,1280,1282,5, + 273,0,0,1281,1280,1,0,0,0,1281,1282,1,0,0,0,1282,1283,1,0,0,0,1283,1284, + 5,376,0,0,1284,1285,3,156,78,0,1285,1286,5,377,0,0,1286,1293,1,0,0,0,1287, + 1288,5,349,0,0,1288,1289,5,376,0,0,1289,1290,3,258,129,0,1290,1291,5,377, + 0,0,1291,1293,1,0,0,0,1292,1252,1,0,0,0,1292,1264,1,0,0,0,1292,1281,1,0, + 0,0,1292,1287,1,0,0,0,1293,181,1,0,0,0,1294,1295,3,312,156,0,1295,183,1, + 0,0,0,1296,1297,5,247,0,0,1297,1298,5,335,0,0,1298,1299,5,183,0,0,1299, + 1300,5,297,0,0,1300,1301,3,186,93,0,1301,185,1,0,0,0,1302,1303,3,258,129, + 0,1303,187,1,0,0,0,1304,1305,5,376,0,0,1305,1306,3,150,75,0,1306,1307,5, + 377,0,0,1307,1308,3,294,147,0,1308,189,1,0,0,0,1309,1310,5,337,0,0,1310, + 1311,5,376,0,0,1311,1312,3,192,96,0,1312,1313,5,377,0,0,1313,191,1,0,0, + 0,1314,1315,3,194,97,0,1315,1316,5,376,0,0,1316,1321,3,196,98,0,1317,1318, + 5,380,0,0,1318,1320,3,196,98,0,1319,1317,1,0,0,0,1320,1323,1,0,0,0,1321, + 1319,1,0,0,0,1321,1322,1,0,0,0,1322,1324,1,0,0,0,1323,1321,1,0,0,0,1324, + 1325,5,377,0,0,1325,193,1,0,0,0,1326,1327,7,22,0,0,1327,195,1,0,0,0,1328, + 1329,5,337,0,0,1329,1344,3,218,109,0,1330,1344,3,200,100,0,1331,1344,3, + 278,139,0,1332,1333,5,24,0,0,1333,1334,5,396,0,0,1334,1335,5,337,0,0,1335, + 1344,3,218,109,0,1336,1337,5,150,0,0,1337,1338,5,396,0,0,1338,1344,3,200, + 100,0,1339,1340,3,198,99,0,1340,1341,5,396,0,0,1341,1342,3,278,139,0,1342, + 1344,1,0,0,0,1343,1328,1,0,0,0,1343,1330,1,0,0,0,1343,1331,1,0,0,0,1343, + 1332,1,0,0,0,1343,1336,1,0,0,0,1343,1339,1,0,0,0,1344,197,1,0,0,0,1345, + 1346,7,23,0,0,1346,199,1,0,0,0,1347,1348,5,31,0,0,1348,1349,5,376,0,0,1349, + 1350,3,312,156,0,1350,1351,5,377,0,0,1351,201,1,0,0,0,1352,1353,5,299,0, + 0,1353,1367,3,260,130,0,1354,1355,5,353,0,0,1355,1356,5,376,0,0,1356,1361, + 3,312,156,0,1357,1358,5,380,0,0,1358,1360,3,312,156,0,1359,1357,1,0,0,0, + 1360,1363,1,0,0,0,1361,1359,1,0,0,0,1361,1362,1,0,0,0,1362,1364,1,0,0,0, + 1363,1361,1,0,0,0,1364,1365,5,377,0,0,1365,1367,1,0,0,0,1366,1352,1,0,0, + 0,1366,1354,1,0,0,0,1367,203,1,0,0,0,1368,1369,5,359,0,0,1369,1370,3,260, + 130,0,1370,205,1,0,0,0,1371,1372,5,253,0,0,1372,1373,5,194,0,0,1373,1378, + 3,208,104,0,1374,1375,5,380,0,0,1375,1377,3,208,104,0,1376,1374,1,0,0,0, + 1377,1380,1,0,0,0,1378,1376,1,0,0,0,1378,1379,1,0,0,0,1379,207,1,0,0,0, + 1380,1378,1,0,0,0,1381,1421,3,258,129,0,1382,1421,3,214,107,0,1383,1384, + 5,376,0,0,1384,1421,5,377,0,0,1385,1386,5,376,0,0,1386,1391,3,258,129,0, + 1387,1388,5,380,0,0,1388,1390,3,258,129,0,1389,1387,1,0,0,0,1390,1393,1, + 0,0,0,1391,1389,1,0,0,0,1391,1392,1,0,0,0,1392,1394,1,0,0,0,1393,1391,1, + 0,0,0,1394,1395,5,377,0,0,1395,1421,1,0,0,0,1396,1397,3,212,106,0,1397, + 1398,5,376,0,0,1398,1403,3,258,129,0,1399,1400,5,380,0,0,1400,1402,3,258, + 129,0,1401,1399,1,0,0,0,1402,1405,1,0,0,0,1403,1401,1,0,0,0,1403,1404,1, + 0,0,0,1404,1406,1,0,0,0,1405,1403,1,0,0,0,1406,1407,5,377,0,0,1407,1421, + 1,0,0,0,1408,1409,3,210,105,0,1409,1410,5,376,0,0,1410,1415,3,208,104,0, + 1411,1412,5,380,0,0,1412,1414,3,208,104,0,1413,1411,1,0,0,0,1414,1417,1, + 0,0,0,1415,1413,1,0,0,0,1415,1416,1,0,0,0,1416,1418,1,0,0,0,1417,1415,1, + 0,0,0,1418,1419,5,377,0,0,1419,1421,1,0,0,0,1420,1381,1,0,0,0,1420,1382, + 1,0,0,0,1420,1383,1,0,0,0,1420,1385,1,0,0,0,1420,1396,1,0,0,0,1420,1408, + 1,0,0,0,1421,209,1,0,0,0,1422,1423,5,254,0,0,1423,1424,5,136,0,0,1424,211, + 1,0,0,0,1425,1426,7,24,0,0,1426,213,1,0,0,0,1427,1428,3,216,108,0,1428, + 1429,5,376,0,0,1429,1430,3,218,109,0,1430,1431,5,380,0,0,1431,1432,3,278, + 139,0,1432,1433,5,377,0,0,1433,215,1,0,0,0,1434,1435,7,25,0,0,1435,217, + 1,0,0,0,1436,1437,3,312,156,0,1437,219,1,0,0,0,1438,1439,5,256,0,0,1439, + 1440,3,260,130,0,1440,221,1,0,0,0,1441,1442,5,360,0,0,1442,1447,3,224,112, + 0,1443,1444,5,380,0,0,1444,1446,3,224,112,0,1445,1443,1,0,0,0,1446,1449, + 1,0,0,0,1447,1445,1,0,0,0,1447,1448,1,0,0,0,1448,223,1,0,0,0,1449,1447, + 1,0,0,0,1450,1451,3,296,148,0,1451,1452,5,183,0,0,1452,1453,3,226,113,0, + 1453,225,1,0,0,0,1454,1456,3,296,148,0,1455,1454,1,0,0,0,1455,1456,1,0, + 0,0,1456,1457,1,0,0,0,1457,1459,5,376,0,0,1458,1460,3,236,118,0,1459,1458, + 1,0,0,0,1459,1460,1,0,0,0,1460,1462,1,0,0,0,1461,1463,3,230,115,0,1462, + 1461,1,0,0,0,1462,1463,1,0,0,0,1463,1465,1,0,0,0,1464,1466,3,252,126,0, + 1465,1464,1,0,0,0,1465,1466,1,0,0,0,1466,1467,1,0,0,0,1467,1468,5,377,0, + 0,1468,227,1,0,0,0,1469,1470,5,280,0,0,1470,1472,5,376,0,0,1471,1473,3, + 236,118,0,1472,1471,1,0,0,0,1472,1473,1,0,0,0,1473,1475,1,0,0,0,1474,1476, + 3,230,115,0,1475,1474,1,0,0,0,1475,1476,1,0,0,0,1476,1478,1,0,0,0,1477, + 1479,3,240,120,0,1478,1477,1,0,0,0,1478,1479,1,0,0,0,1479,1481,1,0,0,0, + 1480,1482,3,246,123,0,1481,1480,1,0,0,0,1481,1482,1,0,0,0,1482,1484,1,0, + 0,0,1483,1485,3,248,124,0,1484,1483,1,0,0,0,1484,1485,1,0,0,0,1485,1487, + 1,0,0,0,1486,1488,3,242,121,0,1487,1486,1,0,0,0,1487,1488,1,0,0,0,1488, + 1489,1,0,0,0,1489,1490,3,250,125,0,1490,1495,5,377,0,0,1491,1493,5,183, + 0,0,1492,1491,1,0,0,0,1492,1493,1,0,0,0,1493,1494,1,0,0,0,1494,1496,3,304, + 152,0,1495,1492,1,0,0,0,1495,1496,1,0,0,0,1496,229,1,0,0,0,1497,1498,5, + 302,0,0,1498,1499,5,194,0,0,1499,1504,3,232,116,0,1500,1501,5,380,0,0,1501, + 1503,3,232,116,0,1502,1500,1,0,0,0,1503,1506,1,0,0,0,1504,1502,1,0,0,0, + 1504,1505,1,0,0,0,1505,231,1,0,0,0,1506,1504,1,0,0,0,1507,1509,3,258,129, + 0,1508,1510,7,26,0,0,1509,1508,1,0,0,0,1509,1510,1,0,0,0,1510,1513,1,0, + 0,0,1511,1512,5,86,0,0,1512,1514,7,27,0,0,1513,1511,1,0,0,0,1513,1514,1, + 0,0,0,1514,233,1,0,0,0,1515,1518,5,277,0,0,1516,1519,5,176,0,0,1517,1519, + 3,258,129,0,1518,1516,1,0,0,0,1518,1517,1,0,0,0,1519,235,1,0,0,0,1520,1521, + 5,307,0,0,1521,1522,5,194,0,0,1522,1527,3,258,129,0,1523,1524,5,380,0,0, + 1524,1526,3,258,129,0,1525,1523,1,0,0,0,1526,1529,1,0,0,0,1527,1525,1,0, + 0,0,1527,1528,1,0,0,0,1528,237,1,0,0,0,1529,1527,1,0,0,0,1530,1547,5,387, + 0,0,1531,1547,5,390,0,0,1532,1547,5,395,0,0,1533,1534,5,378,0,0,1534,1535, + 5,398,0,0,1535,1536,5,380,0,0,1536,1537,5,398,0,0,1537,1547,5,379,0,0,1538, + 1539,5,378,0,0,1539,1540,5,398,0,0,1540,1541,5,380,0,0,1541,1547,5,379, + 0,0,1542,1543,5,378,0,0,1543,1544,5,380,0,0,1544,1545,5,398,0,0,1545,1547, + 5,379,0,0,1546,1530,1,0,0,0,1546,1531,1,0,0,0,1546,1532,1,0,0,0,1546,1533, + 1,0,0,0,1546,1538,1,0,0,0,1546,1542,1,0,0,0,1547,239,1,0,0,0,1548,1549, + 5,281,0,0,1549,1554,3,170,85,0,1550,1551,5,380,0,0,1551,1553,3,170,85,0, + 1552,1550,1,0,0,0,1553,1556,1,0,0,0,1554,1552,1,0,0,0,1554,1555,1,0,0,0, + 1555,241,1,0,0,0,1556,1554,1,0,0,0,1557,1558,5,308,0,0,1558,1560,5,376, + 0,0,1559,1561,3,244,122,0,1560,1559,1,0,0,0,1561,1562,1,0,0,0,1562,1560, + 1,0,0,0,1562,1563,1,0,0,0,1563,1564,1,0,0,0,1564,1566,5,377,0,0,1565,1567, + 3,256,128,0,1566,1565,1,0,0,0,1566,1567,1,0,0,0,1567,243,1,0,0,0,1568,1570, + 3,306,153,0,1569,1571,3,238,119,0,1570,1569,1,0,0,0,1570,1571,1,0,0,0,1571, + 245,1,0,0,0,1572,1573,5,176,0,0,1573,1574,5,323,0,0,1574,1575,5,309,0,0, + 1575,1581,5,279,0,0,1576,1577,5,300,0,0,1577,1578,5,322,0,0,1578,1579,5, + 309,0,0,1579,1581,5,279,0,0,1580,1572,1,0,0,0,1580,1576,1,0,0,0,1581,247, + 1,0,0,0,1582,1583,5,6,0,0,1583,1584,5,279,0,0,1584,1585,5,328,0,0,1585, + 1586,5,97,0,0,1586,1587,5,72,0,0,1587,1607,5,322,0,0,1588,1589,5,6,0,0, + 1589,1590,5,279,0,0,1590,1591,5,328,0,0,1591,1592,5,343,0,0,1592,1593,5, + 291,0,0,1593,1607,5,322,0,0,1594,1595,5,6,0,0,1595,1596,5,279,0,0,1596, + 1597,5,328,0,0,1597,1598,5,343,0,0,1598,1599,5,72,0,0,1599,1607,3,306,153, + 0,1600,1601,5,6,0,0,1601,1602,5,279,0,0,1602,1603,5,328,0,0,1603,1604,5, + 343,0,0,1604,1605,5,44,0,0,1605,1607,3,306,153,0,1606,1582,1,0,0,0,1606, + 1588,1,0,0,0,1606,1594,1,0,0,0,1606,1600,1,0,0,0,1607,249,1,0,0,0,1608, + 1609,5,229,0,0,1609,1614,3,170,85,0,1610,1611,5,380,0,0,1611,1613,3,170, + 85,0,1612,1610,1,0,0,0,1613,1616,1,0,0,0,1614,1612,1,0,0,0,1614,1615,1, + 0,0,0,1615,251,1,0,0,0,1616,1614,1,0,0,0,1617,1618,5,314,0,0,1618,1619, + 5,187,0,0,1619,1620,3,278,139,0,1620,1621,3,254,127,0,1621,1627,1,0,0,0, + 1622,1623,5,323,0,0,1623,1624,5,187,0,0,1624,1625,5,398,0,0,1625,1627,3, + 254,127,0,1626,1617,1,0,0,0,1626,1622,1,0,0,0,1627,253,1,0,0,0,1628,1629, + 5,101,0,0,1629,1630,5,179,0,0,1630,1631,5,219,0,0,1631,1632,5,322,0,0,1632, + 255,1,0,0,0,1633,1634,5,362,0,0,1634,1635,3,278,139,0,1635,257,1,0,0,0, + 1636,1637,3,260,130,0,1637,259,1,0,0,0,1638,1639,6,130,-1,0,1639,1640,5, + 294,0,0,1640,1651,3,260,130,5,1641,1642,5,241,0,0,1642,1643,5,376,0,0,1643, + 1644,3,156,78,0,1644,1645,5,377,0,0,1645,1651,1,0,0,0,1646,1648,3,266,133, + 0,1647,1649,3,262,131,0,1648,1647,1,0,0,0,1648,1649,1,0,0,0,1649,1651,1, + 0,0,0,1650,1638,1,0,0,0,1650,1641,1,0,0,0,1650,1646,1,0,0,0,1651,1660,1, + 0,0,0,1652,1653,10,2,0,0,1653,1654,5,179,0,0,1654,1659,3,260,130,3,1655, + 1656,10,1,0,0,1656,1657,5,301,0,0,1657,1659,3,260,130,2,1658,1652,1,0,0, + 0,1658,1655,1,0,0,0,1659,1662,1,0,0,0,1660,1658,1,0,0,0,1660,1661,1,0,0, + 0,1661,261,1,0,0,0,1662,1660,1,0,0,0,1663,1665,5,294,0,0,1664,1663,1,0, + 0,0,1664,1665,1,0,0,0,1665,1666,1,0,0,0,1666,1667,5,187,0,0,1667,1668,3, + 266,133,0,1668,1669,5,179,0,0,1669,1670,3,266,133,0,1670,1747,1,0,0,0,1671, + 1673,5,294,0,0,1672,1671,1,0,0,0,1672,1673,1,0,0,0,1673,1674,1,0,0,0,1674, + 1675,5,259,0,0,1675,1676,5,376,0,0,1676,1681,3,258,129,0,1677,1678,5,380, + 0,0,1678,1680,3,258,129,0,1679,1677,1,0,0,0,1680,1683,1,0,0,0,1681,1679, + 1,0,0,0,1681,1682,1,0,0,0,1682,1684,1,0,0,0,1683,1681,1,0,0,0,1684,1685, + 5,377,0,0,1685,1747,1,0,0,0,1686,1688,5,294,0,0,1687,1686,1,0,0,0,1687, + 1688,1,0,0,0,1688,1689,1,0,0,0,1689,1690,5,259,0,0,1690,1691,5,376,0,0, + 1691,1692,3,156,78,0,1692,1693,5,377,0,0,1693,1747,1,0,0,0,1694,1695,5, + 241,0,0,1695,1696,5,376,0,0,1696,1697,3,156,78,0,1697,1698,5,377,0,0,1698, + 1747,1,0,0,0,1699,1701,5,294,0,0,1700,1699,1,0,0,0,1700,1701,1,0,0,0,1701, + 1702,1,0,0,0,1702,1703,5,319,0,0,1703,1747,3,266,133,0,1704,1706,5,294, + 0,0,1705,1704,1,0,0,0,1705,1706,1,0,0,0,1706,1707,1,0,0,0,1707,1708,5,276, + 0,0,1708,1722,7,28,0,0,1709,1710,5,376,0,0,1710,1723,5,377,0,0,1711,1712, + 5,376,0,0,1712,1717,3,258,129,0,1713,1714,5,380,0,0,1714,1716,3,258,129, + 0,1715,1713,1,0,0,0,1716,1719,1,0,0,0,1717,1715,1,0,0,0,1717,1718,1,0,0, + 0,1718,1720,1,0,0,0,1719,1717,1,0,0,0,1720,1721,5,377,0,0,1721,1723,1,0, + 0,0,1722,1709,1,0,0,0,1722,1711,1,0,0,0,1723,1747,1,0,0,0,1724,1726,5,294, + 0,0,1725,1724,1,0,0,0,1725,1726,1,0,0,0,1726,1727,1,0,0,0,1727,1728,5,276, + 0,0,1728,1747,3,266,133,0,1729,1731,5,269,0,0,1730,1732,5,294,0,0,1731, + 1730,1,0,0,0,1731,1732,1,0,0,0,1732,1733,1,0,0,0,1733,1747,5,295,0,0,1734, + 1736,5,269,0,0,1735,1737,5,294,0,0,1736,1735,1,0,0,0,1736,1737,1,0,0,0, + 1737,1738,1,0,0,0,1738,1747,7,29,0,0,1739,1741,5,269,0,0,1740,1742,5,294, + 0,0,1741,1740,1,0,0,0,1741,1742,1,0,0,0,1742,1743,1,0,0,0,1743,1744,5,232, + 0,0,1744,1745,5,248,0,0,1745,1747,3,266,133,0,1746,1664,1,0,0,0,1746,1672, + 1,0,0,0,1746,1687,1,0,0,0,1746,1694,1,0,0,0,1746,1700,1,0,0,0,1746,1705, + 1,0,0,0,1746,1725,1,0,0,0,1746,1729,1,0,0,0,1746,1734,1,0,0,0,1746,1739, + 1,0,0,0,1747,263,1,0,0,0,1748,1750,5,294,0,0,1749,1748,1,0,0,0,1749,1750, + 1,0,0,0,1750,1751,1,0,0,0,1751,1752,5,276,0,0,1752,1766,7,28,0,0,1753,1754, + 5,376,0,0,1754,1767,5,377,0,0,1755,1756,5,376,0,0,1756,1761,3,258,129,0, + 1757,1758,5,380,0,0,1758,1760,3,258,129,0,1759,1757,1,0,0,0,1760,1763,1, + 0,0,0,1761,1759,1,0,0,0,1761,1762,1,0,0,0,1762,1764,1,0,0,0,1763,1761,1, + 0,0,0,1764,1765,5,377,0,0,1765,1767,1,0,0,0,1766,1753,1,0,0,0,1766,1755, + 1,0,0,0,1767,1774,1,0,0,0,1768,1770,5,294,0,0,1769,1768,1,0,0,0,1769,1770, + 1,0,0,0,1770,1771,1,0,0,0,1771,1772,5,276,0,0,1772,1774,3,266,133,0,1773, + 1749,1,0,0,0,1773,1769,1,0,0,0,1774,265,1,0,0,0,1775,1776,6,133,-1,0,1776, + 1780,3,268,134,0,1777,1778,7,30,0,0,1778,1780,3,266,133,7,1779,1775,1,0, + 0,0,1779,1777,1,0,0,0,1780,1802,1,0,0,0,1781,1782,10,6,0,0,1782,1783,7, + 31,0,0,1783,1801,3,266,133,7,1784,1785,10,5,0,0,1785,1786,7,32,0,0,1786, + 1801,3,266,133,6,1787,1788,10,4,0,0,1788,1789,5,371,0,0,1789,1801,3,266, + 133,5,1790,1791,10,3,0,0,1791,1792,5,372,0,0,1792,1801,3,266,133,4,1793, + 1794,10,2,0,0,1794,1795,5,370,0,0,1795,1801,3,266,133,3,1796,1797,10,1, + 0,0,1797,1798,3,330,165,0,1798,1799,3,266,133,2,1799,1801,1,0,0,0,1800, + 1781,1,0,0,0,1800,1784,1,0,0,0,1800,1787,1,0,0,0,1800,1790,1,0,0,0,1800, + 1793,1,0,0,0,1800,1796,1,0,0,0,1801,1804,1,0,0,0,1802,1800,1,0,0,0,1802, + 1803,1,0,0,0,1803,267,1,0,0,0,1804,1802,1,0,0,0,1805,1806,6,134,-1,0,1806, + 1808,5,198,0,0,1807,1809,3,310,155,0,1808,1807,1,0,0,0,1809,1810,1,0,0, + 0,1810,1808,1,0,0,0,1810,1811,1,0,0,0,1811,1814,1,0,0,0,1812,1813,5,236, + 0,0,1813,1815,3,258,129,0,1814,1812,1,0,0,0,1814,1815,1,0,0,0,1815,1816, + 1,0,0,0,1816,1817,5,237,0,0,1817,1897,1,0,0,0,1818,1819,5,198,0,0,1819, + 1821,3,258,129,0,1820,1822,3,310,155,0,1821,1820,1,0,0,0,1822,1823,1,0, + 0,0,1823,1821,1,0,0,0,1823,1824,1,0,0,0,1824,1827,1,0,0,0,1825,1826,5,236, + 0,0,1826,1828,3,258,129,0,1827,1825,1,0,0,0,1827,1828,1,0,0,0,1828,1829, + 1,0,0,0,1829,1830,5,237,0,0,1830,1897,1,0,0,0,1831,1832,5,199,0,0,1832, + 1833,5,376,0,0,1833,1834,3,258,129,0,1834,1835,5,183,0,0,1835,1836,3,54, + 27,0,1836,1837,5,377,0,0,1837,1897,1,0,0,0,1838,1839,5,44,0,0,1839,1840, + 5,376,0,0,1840,1843,3,258,129,0,1841,1842,5,59,0,0,1842,1844,5,86,0,0,1843, + 1841,1,0,0,0,1843,1844,1,0,0,0,1844,1845,1,0,0,0,1845,1846,5,377,0,0,1846, + 1897,1,0,0,0,1847,1848,5,72,0,0,1848,1849,5,376,0,0,1849,1852,3,258,129, + 0,1850,1851,5,59,0,0,1851,1853,5,86,0,0,1852,1850,1,0,0,0,1852,1853,1,0, + 0,0,1853,1854,1,0,0,0,1854,1855,5,377,0,0,1855,1897,1,0,0,0,1856,1857,5, + 312,0,0,1857,1858,5,376,0,0,1858,1859,3,266,133,0,1859,1860,5,259,0,0,1860, + 1861,3,266,133,0,1861,1862,5,377,0,0,1862,1897,1,0,0,0,1863,1897,3,338, + 169,0,1864,1897,5,387,0,0,1865,1866,3,312,156,0,1866,1867,5,373,0,0,1867, + 1868,5,387,0,0,1868,1897,1,0,0,0,1869,1870,5,376,0,0,1870,1871,3,156,78, + 0,1871,1872,5,377,0,0,1872,1897,1,0,0,0,1873,1874,3,270,135,0,1874,1886, + 5,376,0,0,1875,1877,3,346,173,0,1876,1875,1,0,0,0,1876,1877,1,0,0,0,1877, + 1878,1,0,0,0,1878,1883,3,258,129,0,1879,1880,5,380,0,0,1880,1882,3,258, + 129,0,1881,1879,1,0,0,0,1882,1885,1,0,0,0,1883,1881,1,0,0,0,1883,1884,1, + 0,0,0,1884,1887,1,0,0,0,1885,1883,1,0,0,0,1886,1876,1,0,0,0,1886,1887,1, + 0,0,0,1887,1888,1,0,0,0,1888,1889,5,377,0,0,1889,1897,1,0,0,0,1890,1897, + 3,304,152,0,1891,1897,3,272,136,0,1892,1893,5,376,0,0,1893,1894,3,258,129, + 0,1894,1895,5,377,0,0,1895,1897,1,0,0,0,1896,1805,1,0,0,0,1896,1818,1,0, + 0,0,1896,1831,1,0,0,0,1896,1838,1,0,0,0,1896,1847,1,0,0,0,1896,1856,1,0, + 0,0,1896,1863,1,0,0,0,1896,1864,1,0,0,0,1896,1865,1,0,0,0,1896,1869,1,0, + 0,0,1896,1873,1,0,0,0,1896,1890,1,0,0,0,1896,1891,1,0,0,0,1896,1892,1,0, + 0,0,1897,1905,1,0,0,0,1898,1899,10,4,0,0,1899,1900,5,374,0,0,1900,1901, + 3,266,133,0,1901,1902,5,375,0,0,1902,1904,1,0,0,0,1903,1898,1,0,0,0,1904, + 1907,1,0,0,0,1905,1903,1,0,0,0,1905,1906,1,0,0,0,1906,269,1,0,0,0,1907, + 1905,1,0,0,0,1908,1912,3,348,174,0,1909,1912,3,350,175,0,1910,1912,3,312, + 156,0,1911,1908,1,0,0,0,1911,1909,1,0,0,0,1911,1910,1,0,0,0,1912,271,1, + 0,0,0,1913,1914,3,312,156,0,1914,273,1,0,0,0,1915,1916,3,304,152,0,1916, + 275,1,0,0,0,1917,1920,3,304,152,0,1918,1920,3,272,136,0,1919,1917,1,0,0, + 0,1919,1918,1,0,0,0,1920,277,1,0,0,0,1921,1924,5,267,0,0,1922,1925,3,280, + 140,0,1923,1925,3,284,142,0,1924,1922,1,0,0,0,1924,1923,1,0,0,0,1924,1925, + 1,0,0,0,1925,279,1,0,0,0,1926,1928,3,282,141,0,1927,1929,3,286,143,0,1928, + 1927,1,0,0,0,1928,1929,1,0,0,0,1929,281,1,0,0,0,1930,1931,3,288,144,0,1931, + 1932,3,290,145,0,1932,1934,1,0,0,0,1933,1930,1,0,0,0,1934,1935,1,0,0,0, + 1935,1933,1,0,0,0,1935,1936,1,0,0,0,1936,283,1,0,0,0,1937,1940,3,286,143, + 0,1938,1941,3,282,141,0,1939,1941,3,286,143,0,1940,1938,1,0,0,0,1940,1939, + 1,0,0,0,1940,1941,1,0,0,0,1941,285,1,0,0,0,1942,1943,3,288,144,0,1943,1944, + 3,290,145,0,1944,1945,5,343,0,0,1945,1946,3,290,145,0,1946,287,1,0,0,0, + 1947,1949,7,33,0,0,1948,1947,1,0,0,0,1948,1949,1,0,0,0,1949,1950,1,0,0, + 0,1950,1953,7,34,0,0,1951,1953,5,397,0,0,1952,1948,1,0,0,0,1952,1951,1, + 0,0,0,1953,289,1,0,0,0,1954,1957,3,304,152,0,1955,1957,3,348,174,0,1956, + 1954,1,0,0,0,1956,1955,1,0,0,0,1957,291,1,0,0,0,1958,1960,5,183,0,0,1959, + 1958,1,0,0,0,1959,1960,1,0,0,0,1960,1961,1,0,0,0,1961,1963,3,304,152,0, + 1962,1964,3,300,150,0,1963,1962,1,0,0,0,1963,1964,1,0,0,0,1964,293,1,0, + 0,0,1965,1967,5,183,0,0,1966,1965,1,0,0,0,1966,1967,1,0,0,0,1967,1968,1, + 0,0,0,1968,1970,3,304,152,0,1969,1971,3,300,150,0,1970,1969,1,0,0,0,1970, + 1971,1,0,0,0,1971,295,1,0,0,0,1972,1973,3,304,152,0,1973,1974,3,298,149, + 0,1974,297,1,0,0,0,1975,1976,5,284,0,0,1976,1978,3,304,152,0,1977,1975, + 1,0,0,0,1978,1979,1,0,0,0,1979,1977,1,0,0,0,1979,1980,1,0,0,0,1980,1983, + 1,0,0,0,1981,1983,1,0,0,0,1982,1977,1,0,0,0,1982,1981,1,0,0,0,1983,299, + 1,0,0,0,1984,1985,5,376,0,0,1985,1986,3,302,151,0,1986,1987,5,377,0,0,1987, + 301,1,0,0,0,1988,1993,3,304,152,0,1989,1990,5,380,0,0,1990,1992,3,304,152, + 0,1991,1989,1,0,0,0,1992,1995,1,0,0,0,1993,1991,1,0,0,0,1993,1994,1,0,0, + 0,1994,303,1,0,0,0,1995,1993,1,0,0,0,1996,2000,3,306,153,0,1997,2000,3, + 308,154,0,1998,2000,3,350,175,0,1999,1996,1,0,0,0,1999,1997,1,0,0,0,1999, + 1998,1,0,0,0,2000,305,1,0,0,0,2001,2002,7,35,0,0,2002,307,1,0,0,0,2003, + 2004,5,397,0,0,2004,309,1,0,0,0,2005,2006,5,358,0,0,2006,2007,3,258,129, + 0,2007,2008,5,339,0,0,2008,2009,3,258,129,0,2009,311,1,0,0,0,2010,2015, + 3,304,152,0,2011,2012,5,373,0,0,2012,2014,3,304,152,0,2013,2011,1,0,0,0, + 2014,2017,1,0,0,0,2015,2016,1,0,0,0,2015,2013,1,0,0,0,2016,313,1,0,0,0, + 2017,2015,1,0,0,0,2018,2019,5,361,0,0,2019,2020,3,320,160,0,2020,315,1, + 0,0,0,2021,2022,5,58,0,0,2022,2023,5,294,0,0,2023,2024,5,241,0,0,2024,317, + 1,0,0,0,2025,2026,5,58,0,0,2026,2027,5,241,0,0,2027,319,1,0,0,0,2028,2029, + 5,376,0,0,2029,2034,3,322,161,0,2030,2031,5,380,0,0,2031,2033,3,322,161, + 0,2032,2030,1,0,0,0,2033,2036,1,0,0,0,2034,2032,1,0,0,0,2034,2035,1,0,0, + 0,2035,2037,1,0,0,0,2036,2034,1,0,0,0,2037,2038,5,377,0,0,2038,321,1,0, + 0,0,2039,2044,3,324,162,0,2040,2042,5,365,0,0,2041,2040,1,0,0,0,2041,2042, + 1,0,0,0,2042,2043,1,0,0,0,2043,2045,3,326,163,0,2044,2041,1,0,0,0,2044, + 2045,1,0,0,0,2045,323,1,0,0,0,2046,2050,3,304,152,0,2047,2050,3,272,136, + 0,2048,2050,5,397,0,0,2049,2046,1,0,0,0,2049,2047,1,0,0,0,2049,2048,1,0, + 0,0,2050,325,1,0,0,0,2051,2056,5,398,0,0,2052,2056,5,399,0,0,2053,2056, + 3,344,172,0,2054,2056,5,397,0,0,2055,2051,1,0,0,0,2055,2052,1,0,0,0,2055, + 2053,1,0,0,0,2055,2054,1,0,0,0,2056,327,1,0,0,0,2057,2064,5,179,0,0,2058, + 2059,5,371,0,0,2059,2064,5,371,0,0,2060,2064,5,301,0,0,2061,2062,5,370, + 0,0,2062,2064,5,370,0,0,2063,2057,1,0,0,0,2063,2058,1,0,0,0,2063,2060,1, + 0,0,0,2063,2061,1,0,0,0,2064,329,1,0,0,0,2065,2080,5,365,0,0,2066,2080, + 5,366,0,0,2067,2080,5,367,0,0,2068,2069,5,367,0,0,2069,2080,5,365,0,0,2070, + 2071,5,366,0,0,2071,2080,5,365,0,0,2072,2073,5,367,0,0,2073,2080,5,366, + 0,0,2074,2075,5,368,0,0,2075,2080,5,365,0,0,2076,2077,5,367,0,0,2077,2078, + 5,365,0,0,2078,2080,5,366,0,0,2079,2065,1,0,0,0,2079,2066,1,0,0,0,2079, + 2067,1,0,0,0,2079,2068,1,0,0,0,2079,2070,1,0,0,0,2079,2072,1,0,0,0,2079, + 2074,1,0,0,0,2079,2076,1,0,0,0,2080,331,1,0,0,0,2081,2082,5,367,0,0,2082, + 2089,5,367,0,0,2083,2084,5,366,0,0,2084,2089,5,366,0,0,2085,2089,5,371, + 0,0,2086,2089,5,372,0,0,2087,2089,5,370,0,0,2088,2081,1,0,0,0,2088,2083, + 1,0,0,0,2088,2085,1,0,0,0,2088,2086,1,0,0,0,2088,2087,1,0,0,0,2089,333, + 1,0,0,0,2090,2091,7,36,0,0,2091,335,1,0,0,0,2092,2093,7,37,0,0,2093,337, + 1,0,0,0,2094,2107,3,340,170,0,2095,2107,3,342,171,0,2096,2107,3,278,139, + 0,2097,2098,5,389,0,0,2098,2107,3,342,171,0,2099,2107,3,344,172,0,2100, + 2107,5,399,0,0,2101,2107,5,400,0,0,2102,2104,5,294,0,0,2103,2102,1,0,0, + 0,2103,2104,1,0,0,0,2104,2105,1,0,0,0,2105,2107,5,295,0,0,2106,2094,1,0, + 0,0,2106,2095,1,0,0,0,2106,2096,1,0,0,0,2106,2097,1,0,0,0,2106,2099,1,0, + 0,0,2106,2100,1,0,0,0,2106,2101,1,0,0,0,2106,2103,1,0,0,0,2107,339,1,0, + 0,0,2108,2109,5,397,0,0,2109,341,1,0,0,0,2110,2111,5,398,0,0,2111,343,1, + 0,0,0,2112,2113,7,29,0,0,2113,345,1,0,0,0,2114,2115,7,38,0,0,2115,347,1, + 0,0,0,2116,2117,7,39,0,0,2117,349,1,0,0,0,2118,2119,7,40,0,0,2119,351,1, + 0,0,0,244,360,363,365,380,398,402,411,416,423,430,434,443,455,458,465,473, + 478,481,488,496,500,512,520,524,545,549,553,557,566,571,575,579,583,586, + 590,595,601,606,611,614,618,626,634,638,642,646,650,654,658,662,666,668, + 678,686,710,717,732,735,743,755,779,792,797,801,809,813,821,831,835,841, + 845,849,852,861,865,872,875,885,893,901,905,920,939,950,954,961,966,972, + 976,983,987,991,995,1003,1007,1012,1017,1023,1026,1030,1041,1050,1063,1078, + 1081,1085,1088,1090,1095,1099,1102,1106,1115,1124,1134,1139,1151,1154,1157, + 1160,1166,1170,1178,1181,1186,1189,1191,1205,1216,1221,1229,1232,1235,1240, + 1242,1244,1249,1252,1256,1259,1262,1274,1281,1292,1321,1343,1361,1366,1378, + 1391,1403,1415,1420,1447,1455,1459,1462,1465,1472,1475,1478,1481,1484,1487, + 1492,1495,1504,1509,1513,1518,1527,1546,1554,1562,1566,1570,1580,1606,1614, + 1626,1648,1650,1658,1660,1664,1672,1681,1687,1700,1705,1717,1722,1725,1731, + 1736,1741,1746,1749,1761,1766,1769,1773,1779,1800,1802,1810,1814,1823,1827, + 1843,1852,1876,1883,1886,1896,1905,1911,1919,1924,1928,1935,1940,1948,1952, + 1956,1959,1963,1966,1970,1979,1982,1993,1999,2015,2034,2041,2044,2049,2055, + 2063,2079,2088,2103,2106]; private static __ATN: ATN; public static get _ATN(): ATN { @@ -12140,11 +12753,11 @@ export class DescribeStatementContext extends ParserRuleContext { public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public DESCRIBE(): TerminalNode { - return this.getToken(FlinkSqlParser.DESCRIBE, 0); + public KW_DESCRIBE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DESCRIBE, 0); } - public DESC(): TerminalNode { - return this.getToken(FlinkSqlParser.DESC, 0); + public KW_DESC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DESC, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_describeStatement; @@ -12175,8 +12788,8 @@ export class ExplainStatementContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public EXPLAIN(): TerminalNode { - return this.getToken(FlinkSqlParser.EXPLAIN, 0); + public KW_EXPLAIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXPLAIN, 0); } public dmlStatement(): DmlStatementContext { return this.getTypedRuleContext(DmlStatementContext, 0) as DmlStatementContext; @@ -12190,11 +12803,11 @@ export class ExplainStatementContext extends ParserRuleContext { public explainDetails(): ExplainDetailsContext { return this.getTypedRuleContext(ExplainDetailsContext, 0) as ExplainDetailsContext; } - public PLAN(): TerminalNode { - return this.getToken(FlinkSqlParser.PLAN, 0); + public KW_PLAN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PLAN, 0); } - public FOR(): TerminalNode { - return this.getToken(FlinkSqlParser.FOR, 0); + public KW_FOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FOR, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_explainStatement; @@ -12266,14 +12879,14 @@ export class ExplainDetailContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public CHANGELOG_MODE(): TerminalNode { - return this.getToken(FlinkSqlParser.CHANGELOG_MODE, 0); + public KW_CHANGELOG_MODE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CHANGELOG_MODE, 0); } - public JSON_EXECUTION_PLAN(): TerminalNode { - return this.getToken(FlinkSqlParser.JSON_EXECUTION_PLAN, 0); + public KW_JSON_EXECUTION_PLAN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JSON_EXECUTION_PLAN, 0); } - public ESTIMATED_COST(): TerminalNode { - return this.getToken(FlinkSqlParser.ESTIMATED_COST, 0); + public KW_ESTIMATED_COST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ESTIMATED_COST, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_explainDetail; @@ -12304,14 +12917,14 @@ export class UseStatementContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public USE(): TerminalNode { - return this.getToken(FlinkSqlParser.USE, 0); + public KW_USE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USE, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public CATALOG(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOG, 0); + public KW_CATALOG(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CATALOG, 0); } public useModuleStatement(): UseModuleStatementContext { return this.getTypedRuleContext(UseModuleStatementContext, 0) as UseModuleStatementContext; @@ -12345,11 +12958,11 @@ export class UseModuleStatementContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public USE(): TerminalNode { - return this.getToken(FlinkSqlParser.USE, 0); + public KW_USE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USE, 0); } - public MODULES(): TerminalNode { - return this.getToken(FlinkSqlParser.MODULES, 0); + public KW_MODULES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MODULES, 0); } public uid_list(): UidContext[] { return this.getTypedRuleContexts(UidContext) as UidContext[]; @@ -12392,32 +13005,32 @@ export class ShowStatememtContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public SHOW(): TerminalNode { - return this.getToken(FlinkSqlParser.SHOW, 0); + public KW_SHOW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SHOW, 0); } - public CATALOGS(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOGS, 0); + public KW_CATALOGS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CATALOGS, 0); } - public DATABASES(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASES, 0); + public KW_DATABASES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATABASES, 0); } - public VIEWS(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEWS, 0); + public KW_VIEWS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIEWS, 0); } - public JARS(): TerminalNode { - return this.getToken(FlinkSqlParser.JARS, 0); + public KW_JARS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JARS, 0); } - public CURRENT(): TerminalNode { - return this.getToken(FlinkSqlParser.CURRENT, 0); + public KW_CURRENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CURRENT, 0); } - public CATALOG(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOG, 0); + public KW_CATALOG(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CATALOG, 0); } - public DATABASE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASE, 0); + public KW_DATABASE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATABASE, 0); } - public TABLES(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLES, 0); + public KW_TABLES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLES, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -12425,35 +13038,35 @@ export class ShowStatememtContext extends ParserRuleContext { public likePredicate(): LikePredicateContext { return this.getTypedRuleContext(LikePredicateContext, 0) as LikePredicateContext; } - public FROM(): TerminalNode { - return this.getToken(FlinkSqlParser.FROM, 0); + public KW_FROM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FROM, 0); } - public IN(): TerminalNode { - return this.getToken(FlinkSqlParser.IN, 0); + public KW_IN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IN, 0); } - public COLUMNS(): TerminalNode { - return this.getToken(FlinkSqlParser.COLUMNS, 0); + public KW_COLUMNS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COLUMNS, 0); } - public CREATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CREATE, 0); + public KW_CREATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CREATE, 0); } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } - public VIEW(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEW, 0); + public KW_VIEW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIEW, 0); } - public FUNCTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.FUNCTIONS, 0); + public KW_FUNCTIONS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FUNCTIONS, 0); } - public USER(): TerminalNode { - return this.getToken(FlinkSqlParser.USER, 0); + public KW_USER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USER, 0); } - public MODULES(): TerminalNode { - return this.getToken(FlinkSqlParser.MODULES, 0); + public KW_MODULES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MODULES, 0); } - public FULL(): TerminalNode { - return this.getToken(FlinkSqlParser.FULL, 0); + public KW_FULL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FULL, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_showStatememt; @@ -12484,17 +13097,17 @@ export class LoadStatementContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public LOAD(): TerminalNode { - return this.getToken(FlinkSqlParser.LOAD, 0); + public KW_LOAD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LOAD, 0); } - public MODULE(): TerminalNode { - return this.getToken(FlinkSqlParser.MODULE, 0); + public KW_MODULE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MODULE, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public WITH(): TerminalNode { - return this.getToken(FlinkSqlParser.WITH, 0); + public KW_WITH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITH, 0); } public tablePropertyList(): TablePropertyListContext { return this.getTypedRuleContext(TablePropertyListContext, 0) as TablePropertyListContext; @@ -12528,11 +13141,11 @@ export class UnloadStatememtContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public UNLOAD(): TerminalNode { - return this.getToken(FlinkSqlParser.UNLOAD, 0); + public KW_UNLOAD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNLOAD, 0); } - public MODULE(): TerminalNode { - return this.getToken(FlinkSqlParser.MODULE, 0); + public KW_MODULE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MODULE, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -12566,8 +13179,8 @@ export class SetStatememtContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public SET(): TerminalNode { - return this.getToken(FlinkSqlParser.SET, 0); + public KW_SET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SET, 0); } public tableProperty(): TablePropertyContext { return this.getTypedRuleContext(TablePropertyContext, 0) as TablePropertyContext; @@ -12601,8 +13214,8 @@ export class ResetStatememtContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public RESET(): TerminalNode { - return this.getToken(FlinkSqlParser.RESET, 0); + public KW_RESET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RESET, 0); } public tablePropertyKey(): TablePropertyKeyContext { return this.getTypedRuleContext(TablePropertyKeyContext, 0) as TablePropertyKeyContext; @@ -12636,17 +13249,17 @@ export class JarStatememtContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public JAR(): TerminalNode { - return this.getToken(FlinkSqlParser.JAR, 0); + public KW_JAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JAR, 0); } public jarFileName(): JarFileNameContext { return this.getTypedRuleContext(JarFileNameContext, 0) as JarFileNameContext; } - public ADD(): TerminalNode { - return this.getToken(FlinkSqlParser.ADD, 0); + public KW_ADD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ADD, 0); } - public REMOVE(): TerminalNode { - return this.getToken(FlinkSqlParser.REMOVE, 0); + public KW_REMOVE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_REMOVE, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_jarStatememt; @@ -12677,20 +13290,20 @@ export class DtAddStatementContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ADD(): TerminalNode { - return this.getToken(FlinkSqlParser.ADD, 0); + public KW_ADD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ADD, 0); } - public JAR(): TerminalNode { - return this.getToken(FlinkSqlParser.JAR, 0); + public KW_JAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JAR, 0); } - public WITH(): TerminalNode { - return this.getToken(FlinkSqlParser.WITH, 0); + public KW_WITH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITH, 0); } public FILE_PATH(): TerminalNode { return this.getToken(FlinkSqlParser.FILE_PATH, 0); } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public uid_list(): UidContext[] { return this.getTypedRuleContexts(UidContext) as UidContext[]; @@ -12698,35 +13311,35 @@ export class DtAddStatementContext extends ParserRuleContext { public uid(i: number): UidContext { return this.getTypedRuleContext(UidContext, i) as UidContext; } - public FILE(): TerminalNode { - return this.getToken(FlinkSqlParser.FILE, 0); + public KW_FILE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FILE, 0); } - public RENAME(): TerminalNode { - return this.getToken(FlinkSqlParser.RENAME, 0); + public KW_RENAME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RENAME, 0); } - public PYTHON_FILES(): TerminalNode { - return this.getToken(FlinkSqlParser.PYTHON_FILES, 0); + public KW_PYTHON_FILES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_FILES, 0); } - public PYTHON_REQUIREMENTS(): TerminalNode { - return this.getToken(FlinkSqlParser.PYTHON_REQUIREMENTS, 0); + public KW_PYTHON_REQUIREMENTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_REQUIREMENTS, 0); } - public PYTHON_DEPENDENCIES(): TerminalNode { - return this.getToken(FlinkSqlParser.PYTHON_DEPENDENCIES, 0); + public KW_PYTHON_DEPENDENCIES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_DEPENDENCIES, 0); } - public PYTHON_JAR(): TerminalNode { - return this.getToken(FlinkSqlParser.PYTHON_JAR, 0); + public KW_PYTHON_JAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_JAR, 0); } - public PYTHON_ARCHIVES(): TerminalNode { - return this.getToken(FlinkSqlParser.PYTHON_ARCHIVES, 0); + public KW_PYTHON_ARCHIVES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_ARCHIVES, 0); } - public PYTHON_PARAMETER(): TerminalNode { - return this.getToken(FlinkSqlParser.PYTHON_PARAMETER, 0); + public KW_PYTHON_PARAMETER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_PARAMETER, 0); } - public ENGINE(): TerminalNode { - return this.getToken(FlinkSqlParser.ENGINE, 0); + public KW_ENGINE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ENGINE, 0); } - public KEY(): TerminalNode { - return this.getToken(FlinkSqlParser.KEY, 0); + public KW_KEY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_KEY, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_dtAddStatement; @@ -12792,11 +13405,11 @@ export class SimpleCreateTableContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public CREATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CREATE, 0); + public KW_CREATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CREATE, 0); } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } public sourceTable(): SourceTableContext { return this.getTypedRuleContext(SourceTableContext, 0) as SourceTableContext; @@ -12816,8 +13429,8 @@ export class SimpleCreateTableContext extends ParserRuleContext { public withOption(): WithOptionContext { return this.getTypedRuleContext(WithOptionContext, 0) as WithOptionContext; } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); + public KW_TEMPORARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TEMPORARY, 0); } public ifNotExists(): IfNotExistsContext { return this.getTypedRuleContext(IfNotExistsContext, 0) as IfNotExistsContext; @@ -12875,11 +13488,11 @@ export class CreateTableAsSelectContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public CREATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CREATE, 0); + public KW_CREATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CREATE, 0); } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } public sourceTable(): SourceTableContext { return this.getTypedRuleContext(SourceTableContext, 0) as SourceTableContext; @@ -12890,8 +13503,8 @@ export class CreateTableAsSelectContext extends ParserRuleContext { public ifNotExists(): IfNotExistsContext { return this.getTypedRuleContext(IfNotExistsContext, 0) as IfNotExistsContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public queryStatement(): QueryStatementContext { return this.getTypedRuleContext(QueryStatementContext, 0) as QueryStatementContext; @@ -13088,116 +13701,116 @@ export class ColumnTypeContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DATE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATE, 0); + public KW_DATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATE, 0); } - public BOOLEAN(): TerminalNode { - return this.getToken(FlinkSqlParser.BOOLEAN, 0); + public KW_BOOLEAN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BOOLEAN, 0); } - public NULL(): TerminalNode { - return this.getToken(FlinkSqlParser.NULL, 0); + public KW_NULL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULL, 0); } - public CHAR(): TerminalNode { - return this.getToken(FlinkSqlParser.CHAR, 0); + public KW_CHAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CHAR, 0); } - public VARCHAR(): TerminalNode { - return this.getToken(FlinkSqlParser.VARCHAR, 0); + public KW_VARCHAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VARCHAR, 0); } - public STRING(): TerminalNode { - return this.getToken(FlinkSqlParser.STRING, 0); + public KW_STRING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STRING, 0); } - public BINARY(): TerminalNode { - return this.getToken(FlinkSqlParser.BINARY, 0); + public KW_BINARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BINARY, 0); } - public VARBINARY(): TerminalNode { - return this.getToken(FlinkSqlParser.VARBINARY, 0); + public KW_VARBINARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VARBINARY, 0); } - public BYTES(): TerminalNode { - return this.getToken(FlinkSqlParser.BYTES, 0); + public KW_BYTES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BYTES, 0); } - public TINYINT(): TerminalNode { - return this.getToken(FlinkSqlParser.TINYINT, 0); + public KW_TINYINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TINYINT, 0); } - public SMALLINT(): TerminalNode { - return this.getToken(FlinkSqlParser.SMALLINT, 0); + public KW_SMALLINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SMALLINT, 0); } - public INT(): TerminalNode { - return this.getToken(FlinkSqlParser.INT, 0); + public KW_INT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INT, 0); } - public INTEGER(): TerminalNode { - return this.getToken(FlinkSqlParser.INTEGER, 0); + public KW_INTEGER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INTEGER, 0); } - public BIGINT(): TerminalNode { - return this.getToken(FlinkSqlParser.BIGINT, 0); + public KW_BIGINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BIGINT, 0); } - public TIME(): TerminalNode { - return this.getToken(FlinkSqlParser.TIME, 0); + public KW_TIME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIME, 0); } - public TIMESTAMP_LTZ(): TerminalNode { - return this.getToken(FlinkSqlParser.TIMESTAMP_LTZ, 0); + public KW_TIMESTAMP_LTZ(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMESTAMP_LTZ, 0); } - public DATETIME(): TerminalNode { - return this.getToken(FlinkSqlParser.DATETIME, 0); + public KW_DATETIME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATETIME, 0); } public lengthOneDimension(): LengthOneDimensionContext { return this.getTypedRuleContext(LengthOneDimensionContext, 0) as LengthOneDimensionContext; } - public TIMESTAMP(): TerminalNode { - return this.getToken(FlinkSqlParser.TIMESTAMP, 0); + public KW_TIMESTAMP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMESTAMP, 0); } - public ZONE(): TerminalNode { - return this.getToken(FlinkSqlParser.ZONE, 0); + public KW_ZONE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ZONE, 0); } - public WITHOUT(): TerminalNode { - return this.getToken(FlinkSqlParser.WITHOUT, 0); + public KW_WITHOUT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITHOUT, 0); } - public WITH(): TerminalNode { - return this.getToken(FlinkSqlParser.WITH, 0); + public KW_WITH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITH, 0); } - public LOCAL(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCAL, 0); + public KW_LOCAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LOCAL, 0); } - public DECIMAL(): TerminalNode { - return this.getToken(FlinkSqlParser.DECIMAL, 0); + public KW_DECIMAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DECIMAL, 0); } - public DEC(): TerminalNode { - return this.getToken(FlinkSqlParser.DEC, 0); + public KW_DEC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DEC, 0); } - public NUMERIC(): TerminalNode { - return this.getToken(FlinkSqlParser.NUMERIC, 0); + public KW_NUMERIC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NUMERIC, 0); } - public FLOAT(): TerminalNode { - return this.getToken(FlinkSqlParser.FLOAT, 0); + public KW_FLOAT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FLOAT, 0); } - public DOUBLE(): TerminalNode { - return this.getToken(FlinkSqlParser.DOUBLE, 0); + public KW_DOUBLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DOUBLE, 0); } public lengthTwoOptionalDimension(): LengthTwoOptionalDimensionContext { return this.getTypedRuleContext(LengthTwoOptionalDimensionContext, 0) as LengthTwoOptionalDimensionContext; } - public ARRAY(): TerminalNode { - return this.getToken(FlinkSqlParser.ARRAY, 0); + public KW_ARRAY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ARRAY, 0); } - public MULTISET(): TerminalNode { - return this.getToken(FlinkSqlParser.MULTISET, 0); + public KW_MULTISET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MULTISET, 0); } public lengthOneTypeDimension(): LengthOneTypeDimensionContext { return this.getTypedRuleContext(LengthOneTypeDimensionContext, 0) as LengthOneTypeDimensionContext; } - public MAP(): TerminalNode { - return this.getToken(FlinkSqlParser.MAP, 0); + public KW_MAP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MAP, 0); } public mapTypeDimension(): MapTypeDimensionContext { return this.getTypedRuleContext(MapTypeDimensionContext, 0) as MapTypeDimensionContext; } - public ROW(): TerminalNode { - return this.getToken(FlinkSqlParser.ROW, 0); + public KW_ROW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROW, 0); } public rowTypeDimension(): RowTypeDimensionContext { return this.getTypedRuleContext(RowTypeDimensionContext, 0) as RowTypeDimensionContext; } - public RAW(): TerminalNode { - return this.getToken(FlinkSqlParser.RAW, 0); + public KW_RAW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RAW, 0); } public lengthTwoStringDimension(): LengthTwoStringDimensionContext { return this.getTypedRuleContext(LengthTwoStringDimensionContext, 0) as LengthTwoStringDimensionContext; @@ -13492,20 +14105,20 @@ export class ColumnConstraintContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public PRIMARY(): TerminalNode { - return this.getToken(FlinkSqlParser.PRIMARY, 0); + public KW_PRIMARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRIMARY, 0); } - public KEY(): TerminalNode { - return this.getToken(FlinkSqlParser.KEY, 0); + public KW_KEY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_KEY, 0); } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } - public ENFORCED(): TerminalNode { - return this.getToken(FlinkSqlParser.ENFORCED, 0); + public KW_ENFORCED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ENFORCED, 0); } - public CONSTRAINT(): TerminalNode { - return this.getToken(FlinkSqlParser.CONSTRAINT, 0); + public KW_CONSTRAINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRAINT, 0); } public constraintName(): ConstraintNameContext { return this.getTypedRuleContext(ConstraintNameContext, 0) as ConstraintNameContext; @@ -13539,8 +14152,8 @@ export class CommentSpecContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public COMMENT(): TerminalNode { - return this.getToken(FlinkSqlParser.COMMENT, 0); + public KW_COMMENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COMMENT, 0); } public STRING_LITERAL(): TerminalNode { return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); @@ -13580,17 +14193,17 @@ export class MetadataColumnDefinitionContext extends ParserRuleContext { public columnType(): ColumnTypeContext { return this.getTypedRuleContext(ColumnTypeContext, 0) as ColumnTypeContext; } - public METADATA(): TerminalNode { - return this.getToken(FlinkSqlParser.METADATA, 0); + public KW_METADATA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_METADATA, 0); } - public FROM(): TerminalNode { - return this.getToken(FlinkSqlParser.FROM, 0); + public KW_FROM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FROM, 0); } public metadataKey(): MetadataKeyContext { return this.getTypedRuleContext(MetadataKeyContext, 0) as MetadataKeyContext; } - public VIRTUAL(): TerminalNode { - return this.getToken(FlinkSqlParser.VIRTUAL, 0); + public KW_VIRTUAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIRTUAL, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_metadataColumnDefinition; @@ -13656,8 +14269,8 @@ export class ComputedColumnDefinitionContext extends ParserRuleContext { public columnName(): ColumnNameContext { return this.getTypedRuleContext(ColumnNameContext, 0) as ColumnNameContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public computedColumnExpression(): ComputedColumnExpressionContext { return this.getTypedRuleContext(ComputedColumnExpressionContext, 0) as ComputedColumnExpressionContext; @@ -13726,11 +14339,11 @@ export class WatermarkDefinitionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public WATERMARK(): TerminalNode { - return this.getToken(FlinkSqlParser.WATERMARK, 0); + public KW_WATERMARK(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WATERMARK, 0); } - public FOR(): TerminalNode { - return this.getToken(FlinkSqlParser.FOR, 0); + public KW_FOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FOR, 0); } public expression_list(): ExpressionContext[] { return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; @@ -13738,8 +14351,8 @@ export class WatermarkDefinitionContext extends ParserRuleContext { public expression(i: number): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_watermarkDefinition; @@ -13770,23 +14383,23 @@ export class TableConstraintContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public PRIMARY(): TerminalNode { - return this.getToken(FlinkSqlParser.PRIMARY, 0); + public KW_PRIMARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRIMARY, 0); } - public KEY(): TerminalNode { - return this.getToken(FlinkSqlParser.KEY, 0); + public KW_KEY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_KEY, 0); } public columnNameList(): ColumnNameListContext { return this.getTypedRuleContext(ColumnNameListContext, 0) as ColumnNameListContext; } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } - public ENFORCED(): TerminalNode { - return this.getToken(FlinkSqlParser.ENFORCED, 0); + public KW_ENFORCED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ENFORCED, 0); } - public CONSTRAINT(): TerminalNode { - return this.getToken(FlinkSqlParser.CONSTRAINT, 0); + public KW_CONSTRAINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRAINT, 0); } public constraintName(): ConstraintNameContext { return this.getTypedRuleContext(ConstraintNameContext, 0) as ConstraintNameContext; @@ -13852,14 +14465,14 @@ export class SelfDefinitionClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public PERIOD(): TerminalNode { - return this.getToken(FlinkSqlParser.PERIOD, 0); + public KW_PERIOD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PERIOD, 0); } - public FOR(): TerminalNode { - return this.getToken(FlinkSqlParser.FOR, 0); + public KW_FOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FOR, 0); } - public SYSTEM_TIME(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM_TIME, 0); + public KW_SYSTEM_TIME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SYSTEM_TIME, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_selfDefinitionClause; @@ -13890,11 +14503,11 @@ export class PartitionDefinitionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public PARTITIONED(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITIONED, 0); + public KW_PARTITIONED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PARTITIONED, 0); } - public BY(): TerminalNode { - return this.getToken(FlinkSqlParser.BY, 0); + public KW_BY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BY, 0); } public transformList(): TransformListContext { return this.getTypedRuleContext(TransformListContext, 0) as TransformListContext; @@ -14097,8 +14710,8 @@ export class LikeDefinitionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public LIKE(): TerminalNode { - return this.getToken(FlinkSqlParser.LIKE, 0); + public KW_LIKE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LIKE, 0); } public sourceTable(): SourceTableContext { return this.getTypedRuleContext(SourceTableContext, 0) as SourceTableContext; @@ -14176,32 +14789,32 @@ export class LikeOptionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public INCLUDING(): TerminalNode { - return this.getToken(FlinkSqlParser.INCLUDING, 0); + public KW_INCLUDING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INCLUDING, 0); } - public EXCLUDING(): TerminalNode { - return this.getToken(FlinkSqlParser.EXCLUDING, 0); + public KW_EXCLUDING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXCLUDING, 0); } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); + public KW_ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALL, 0); } - public CONSTRAINTS(): TerminalNode { - return this.getToken(FlinkSqlParser.CONSTRAINTS, 0); + public KW_CONSTRAINTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRAINTS, 0); } - public PARTITIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITIONS, 0); + public KW_PARTITIONS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PARTITIONS, 0); } - public OVERWRITING(): TerminalNode { - return this.getToken(FlinkSqlParser.OVERWRITING, 0); + public KW_OVERWRITING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OVERWRITING, 0); } - public GENERATED(): TerminalNode { - return this.getToken(FlinkSqlParser.GENERATED, 0); + public KW_GENERATED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GENERATED, 0); } - public OPTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.OPTIONS, 0); + public KW_OPTIONS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OPTIONS, 0); } - public WATERMARKS(): TerminalNode { - return this.getToken(FlinkSqlParser.WATERMARKS, 0); + public KW_WATERMARKS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WATERMARKS, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_likeOption; @@ -14232,11 +14845,11 @@ export class CreateCatalogContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public CREATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CREATE, 0); + public KW_CREATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CREATE, 0); } - public CATALOG(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOG, 0); + public KW_CATALOG(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CATALOG, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -14273,11 +14886,11 @@ export class CreateDatabaseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public CREATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CREATE, 0); + public KW_CREATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CREATE, 0); } - public DATABASE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASE, 0); + public KW_DATABASE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATABASE, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -14320,23 +14933,23 @@ export class CreateViewContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public CREATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CREATE, 0); + public KW_CREATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CREATE, 0); } - public VIEW(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEW, 0); + public KW_VIEW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIEW, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public queryStatement(): QueryStatementContext { return this.getTypedRuleContext(QueryStatementContext, 0) as QueryStatementContext; } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); + public KW_TEMPORARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TEMPORARY, 0); } public ifNotExists(): IfNotExistsContext { return this.getTypedRuleContext(IfNotExistsContext, 0) as IfNotExistsContext; @@ -14376,44 +14989,44 @@ export class CreateFunctionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public CREATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CREATE, 0); + public KW_CREATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CREATE, 0); } - public FUNCTION(): TerminalNode { - return this.getToken(FlinkSqlParser.FUNCTION, 0); + public KW_FUNCTION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FUNCTION, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public identifier(): IdentifierContext { return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); + public KW_TEMPORARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TEMPORARY, 0); } - public SYSTEM(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM, 0); + public KW_SYSTEM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SYSTEM, 0); } public ifNotExists(): IfNotExistsContext { return this.getTypedRuleContext(IfNotExistsContext, 0) as IfNotExistsContext; } - public LANGUAGE(): TerminalNode { - return this.getToken(FlinkSqlParser.LANGUAGE, 0); + public KW_LANGUAGE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LANGUAGE, 0); } public usingClause(): UsingClauseContext { return this.getTypedRuleContext(UsingClauseContext, 0) as UsingClauseContext; } - public JAVA(): TerminalNode { - return this.getToken(FlinkSqlParser.JAVA, 0); + public KW_JAVA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JAVA, 0); } - public SCALA(): TerminalNode { - return this.getToken(FlinkSqlParser.SCALA, 0); + public KW_SCALA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SCALA, 0); } - public PYTHON(): TerminalNode { - return this.getToken(FlinkSqlParser.PYTHON, 0); + public KW_PYTHON(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_createFunction; @@ -14444,14 +15057,14 @@ export class UsingClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public USING(): TerminalNode { - return this.getToken(FlinkSqlParser.USING, 0); + public KW_USING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USING, 0); } - public JAR_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.JAR); + public KW_JAR_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.KW_JAR); } - public JAR(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.JAR, i); + public KW_JAR(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JAR, i); } public jarFileName_list(): JarFileNameContext[] { return this.getTypedRuleContexts(JarFileNameContext) as JarFileNameContext[]; @@ -14526,11 +15139,11 @@ export class AlterTableContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ALTER(): TerminalNode { - return this.getToken(FlinkSqlParser.ALTER, 0); + public KW_ALTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALTER, 0); } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -14582,11 +15195,11 @@ export class RenameDefinitionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public RENAME(): TerminalNode { - return this.getToken(FlinkSqlParser.RENAME, 0); + public KW_RENAME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RENAME, 0); } - public TO(): TerminalNode { - return this.getToken(FlinkSqlParser.TO, 0); + public KW_TO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TO, 0); } public uid_list(): UidContext[] { return this.getTypedRuleContexts(UidContext) as UidContext[]; @@ -14623,8 +15236,8 @@ export class SetKeyValueDefinitionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public SET(): TerminalNode { - return this.getToken(FlinkSqlParser.SET, 0); + public KW_SET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SET, 0); } public tablePropertyList(): TablePropertyListContext { return this.getTypedRuleContext(TablePropertyListContext, 0) as TablePropertyListContext; @@ -14658,20 +15271,20 @@ export class AddConstraintContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ADD(): TerminalNode { - return this.getToken(FlinkSqlParser.ADD, 0); + public KW_ADD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ADD, 0); } - public CONSTRAINT(): TerminalNode { - return this.getToken(FlinkSqlParser.CONSTRAINT, 0); + public KW_CONSTRAINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRAINT, 0); } public constraintName(): ConstraintNameContext { return this.getTypedRuleContext(ConstraintNameContext, 0) as ConstraintNameContext; } - public PRIMARY(): TerminalNode { - return this.getToken(FlinkSqlParser.PRIMARY, 0); + public KW_PRIMARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRIMARY, 0); } - public KEY(): TerminalNode { - return this.getToken(FlinkSqlParser.KEY, 0); + public KW_KEY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_KEY, 0); } public columnNameList(): ColumnNameListContext { return this.getTypedRuleContext(ColumnNameListContext, 0) as ColumnNameListContext; @@ -14708,11 +15321,11 @@ export class DropConstraintContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DROP(): TerminalNode { - return this.getToken(FlinkSqlParser.DROP, 0); + public KW_DROP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DROP, 0); } - public CONSTRAINT(): TerminalNode { - return this.getToken(FlinkSqlParser.CONSTRAINT, 0); + public KW_CONSTRAINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRAINT, 0); } public constraintName(): ConstraintNameContext { return this.getTypedRuleContext(ConstraintNameContext, 0) as ConstraintNameContext; @@ -14746,11 +15359,11 @@ export class AddUniqueContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ADD(): TerminalNode { - return this.getToken(FlinkSqlParser.ADD, 0); + public KW_ADD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ADD, 0); } - public UNIQUE(): TerminalNode { - return this.getToken(FlinkSqlParser.UNIQUE, 0); + public KW_UNIQUE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNIQUE, 0); } public columnNameList(): ColumnNameListContext { return this.getTypedRuleContext(ColumnNameListContext, 0) as ColumnNameListContext; @@ -14784,11 +15397,11 @@ export class NotForcedContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } - public ENFORCED(): TerminalNode { - return this.getToken(FlinkSqlParser.ENFORCED, 0); + public KW_ENFORCED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ENFORCED, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_notForced; @@ -14819,11 +15432,11 @@ export class AlertViewContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ALTER(): TerminalNode { - return this.getToken(FlinkSqlParser.ALTER, 0); + public KW_ALTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALTER, 0); } - public VIEW(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEW, 0); + public KW_VIEW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIEW, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -14831,8 +15444,8 @@ export class AlertViewContext extends ParserRuleContext { public renameDefinition(): RenameDefinitionContext { return this.getTypedRuleContext(RenameDefinitionContext, 0) as RenameDefinitionContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public queryStatement(): QueryStatementContext { return this.getTypedRuleContext(QueryStatementContext, 0) as QueryStatementContext; @@ -14866,11 +15479,11 @@ export class AlterDatabaseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ALTER(): TerminalNode { - return this.getToken(FlinkSqlParser.ALTER, 0); + public KW_ALTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALTER, 0); } - public DATABASE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASE, 0); + public KW_DATABASE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATABASE, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -14907,41 +15520,41 @@ export class AlterFunctionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ALTER(): TerminalNode { - return this.getToken(FlinkSqlParser.ALTER, 0); + public KW_ALTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALTER, 0); } - public FUNCTION(): TerminalNode { - return this.getToken(FlinkSqlParser.FUNCTION, 0); + public KW_FUNCTION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FUNCTION, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public identifier(): IdentifierContext { return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); + public KW_TEMPORARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TEMPORARY, 0); } - public SYSTEM(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM, 0); + public KW_SYSTEM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SYSTEM, 0); } public ifExists(): IfExistsContext { return this.getTypedRuleContext(IfExistsContext, 0) as IfExistsContext; } - public LANGUAGE(): TerminalNode { - return this.getToken(FlinkSqlParser.LANGUAGE, 0); + public KW_LANGUAGE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LANGUAGE, 0); } - public JAVA(): TerminalNode { - return this.getToken(FlinkSqlParser.JAVA, 0); + public KW_JAVA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JAVA, 0); } - public SCALA(): TerminalNode { - return this.getToken(FlinkSqlParser.SCALA, 0); + public KW_SCALA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SCALA, 0); } - public PYTHON(): TerminalNode { - return this.getToken(FlinkSqlParser.PYTHON, 0); + public KW_PYTHON(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_alterFunction; @@ -14972,11 +15585,11 @@ export class DropCatalogContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DROP(): TerminalNode { - return this.getToken(FlinkSqlParser.DROP, 0); + public KW_DROP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DROP, 0); } - public CATALOG(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOG, 0); + public KW_CATALOG(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CATALOG, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -15013,17 +15626,17 @@ export class DropTableContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DROP(): TerminalNode { - return this.getToken(FlinkSqlParser.DROP, 0); + public KW_DROP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DROP, 0); } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); + public KW_TEMPORARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TEMPORARY, 0); } public ifExists(): IfExistsContext { return this.getTypedRuleContext(IfExistsContext, 0) as IfExistsContext; @@ -15058,11 +15671,11 @@ export class DropDatabaseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DROP(): TerminalNode { - return this.getToken(FlinkSqlParser.DROP, 0); + public KW_DROP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DROP, 0); } - public DATABASE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASE, 0); + public KW_DATABASE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATABASE, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; @@ -15070,11 +15683,11 @@ export class DropDatabaseContext extends ParserRuleContext { public ifExists(): IfExistsContext { return this.getTypedRuleContext(IfExistsContext, 0) as IfExistsContext; } - public RESTRICT(): TerminalNode { - return this.getToken(FlinkSqlParser.RESTRICT, 0); + public KW_RESTRICT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RESTRICT, 0); } - public CASCADE(): TerminalNode { - return this.getToken(FlinkSqlParser.CASCADE, 0); + public KW_CASCADE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CASCADE, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_dropDatabase; @@ -15105,17 +15718,17 @@ export class DropViewContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DROP(): TerminalNode { - return this.getToken(FlinkSqlParser.DROP, 0); + public KW_DROP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DROP, 0); } - public VIEW(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEW, 0); + public KW_VIEW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIEW, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); + public KW_TEMPORARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TEMPORARY, 0); } public ifExists(): IfExistsContext { return this.getTypedRuleContext(IfExistsContext, 0) as IfExistsContext; @@ -15149,20 +15762,20 @@ export class DropFunctionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DROP(): TerminalNode { - return this.getToken(FlinkSqlParser.DROP, 0); + public KW_DROP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DROP, 0); } - public FUNCTION(): TerminalNode { - return this.getToken(FlinkSqlParser.FUNCTION, 0); + public KW_FUNCTION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FUNCTION, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); + public KW_TEMPORARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TEMPORARY, 0); } - public SYSTEM(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM, 0); + public KW_SYSTEM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SYSTEM, 0); } public ifExists(): IfExistsContext { return this.getTypedRuleContext(IfExistsContext, 0) as IfExistsContext; @@ -15199,8 +15812,8 @@ export class InsertStatementContext extends ParserRuleContext { public insertSimpleStatement(): InsertSimpleStatementContext { return this.getTypedRuleContext(InsertSimpleStatementContext, 0) as InsertSimpleStatementContext; } - public EXECUTE(): TerminalNode { - return this.getToken(FlinkSqlParser.EXECUTE, 0); + public KW_EXECUTE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXECUTE, 0); } public insertMulStatement(): InsertMulStatementContext { return this.getTypedRuleContext(InsertMulStatementContext, 0) as InsertMulStatementContext; @@ -15234,17 +15847,17 @@ export class InsertSimpleStatementContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public INSERT(): TerminalNode { - return this.getToken(FlinkSqlParser.INSERT, 0); + public KW_INSERT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INSERT, 0); } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } - public INTO(): TerminalNode { - return this.getToken(FlinkSqlParser.INTO, 0); + public KW_INTO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INTO, 0); } - public OVERWRITE(): TerminalNode { - return this.getToken(FlinkSqlParser.OVERWRITE, 0); + public KW_OVERWRITE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OVERWRITE, 0); } public queryStatement(): QueryStatementContext { return this.getTypedRuleContext(QueryStatementContext, 0) as QueryStatementContext; @@ -15287,8 +15900,8 @@ export class InsertPartitionDefinitionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public PARTITION(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITION, 0); + public KW_PARTITION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PARTITION, 0); } public tablePropertyList(): TablePropertyListContext { return this.getTypedRuleContext(TablePropertyListContext, 0) as TablePropertyListContext; @@ -15322,8 +15935,8 @@ export class ValuesDefinitionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public VALUES(): TerminalNode { - return this.getToken(FlinkSqlParser.VALUES, 0); + public KW_VALUES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VALUES, 0); } public valuesRowDefinition_list(): ValuesRowDefinitionContext[] { return this.getTypedRuleContexts(ValuesRowDefinitionContext) as ValuesRowDefinitionContext[]; @@ -15413,17 +16026,17 @@ export class InsertMulStatementContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public STATEMENT(): TerminalNode { - return this.getToken(FlinkSqlParser.STATEMENT, 0); + public KW_STATEMENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STATEMENT, 0); } - public SET(): TerminalNode { - return this.getToken(FlinkSqlParser.SET, 0); + public KW_SET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SET, 0); } - public BEGIN(): TerminalNode { - return this.getToken(FlinkSqlParser.BEGIN, 0); + public KW_BEGIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BEGIN, 0); } - public END(): TerminalNode { - return this.getToken(FlinkSqlParser.END, 0); + public KW_END(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_END, 0); } public insertSimpleStatement_list(): InsertSimpleStatementContext[] { return this.getTypedRuleContexts(InsertSimpleStatementContext) as InsertSimpleStatementContext[]; @@ -15499,17 +16112,17 @@ export class QueryStatementContext extends ParserRuleContext { public selectStatement(): SelectStatementContext { return this.getTypedRuleContext(SelectStatementContext, 0) as SelectStatementContext; } - public INTERSECT(): TerminalNode { - return this.getToken(FlinkSqlParser.INTERSECT, 0); + public KW_INTERSECT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INTERSECT, 0); } - public UNION(): TerminalNode { - return this.getToken(FlinkSqlParser.UNION, 0); + public KW_UNION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNION, 0); } - public EXCEPT(): TerminalNode { - return this.getToken(FlinkSqlParser.EXCEPT, 0); + public KW_EXCEPT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXCEPT, 0); } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); + public KW_ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALL, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_queryStatement; @@ -15540,8 +16153,8 @@ export class ValuesCaluseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public VALUES(): TerminalNode { - return this.getToken(FlinkSqlParser.VALUES, 0); + public KW_VALUES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VALUES, 0); } public expression_list(): ExpressionContext[] { return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; @@ -15584,8 +16197,8 @@ export class WithClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public WITH(): TerminalNode { - return this.getToken(FlinkSqlParser.WITH, 0); + public KW_WITH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITH, 0); } public withItem_list(): WithItemContext[] { return this.getTypedRuleContexts(WithItemContext) as WithItemContext[]; @@ -15631,8 +16244,8 @@ export class WithItemContext extends ParserRuleContext { public withItemName(): WithItemNameContext { return this.getTypedRuleContext(WithItemNameContext, 0) as WithItemNameContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public LR_BRACKET_list(): TerminalNode[] { return this.getTokens(FlinkSqlParser.LR_BRACKET); @@ -15772,8 +16385,8 @@ export class SelectClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public SELECT(): TerminalNode { - return this.getToken(FlinkSqlParser.SELECT, 0); + public KW_SELECT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SELECT, 0); } public ASTERISK_SIGN(): TerminalNode { return this.getToken(FlinkSqlParser.ASTERISK_SIGN, 0); @@ -15831,8 +16444,8 @@ export class ProjectItemDefinitionContext extends ParserRuleContext { public expression(i: number): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_projectItemDefinition; @@ -15866,17 +16479,17 @@ export class OverWindowItemContext extends ParserRuleContext { public primaryExpression(): PrimaryExpressionContext { return this.getTypedRuleContext(PrimaryExpressionContext, 0) as PrimaryExpressionContext; } - public OVER(): TerminalNode { - return this.getToken(FlinkSqlParser.OVER, 0); + public KW_OVER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OVER, 0); } public windowSpec(): WindowSpecContext { return this.getTypedRuleContext(WindowSpecContext, 0) as WindowSpecContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } - public strictIdentifier(): StrictIdentifierContext { - return this.getTypedRuleContext(StrictIdentifierContext, 0) as StrictIdentifierContext; + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; } public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { return this.getTypedRuleContext(ErrorCapturingIdentifierContext, 0) as ErrorCapturingIdentifierContext; @@ -15910,8 +16523,8 @@ export class FromClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public FROM(): TerminalNode { - return this.getToken(FlinkSqlParser.FROM, 0); + public KW_FROM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FROM, 0); } public tableExpression(): TableExpressionContext { return this.getTypedRuleContext(TableExpressionContext, 0) as TableExpressionContext; @@ -15969,32 +16582,32 @@ export class TableExpressionContext extends ParserRuleContext { public tableExpression(i: number): TableExpressionContext { return this.getTypedRuleContext(TableExpressionContext, i) as TableExpressionContext; } - public CROSS(): TerminalNode { - return this.getToken(FlinkSqlParser.CROSS, 0); + public KW_CROSS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CROSS, 0); } - public JOIN(): TerminalNode { - return this.getToken(FlinkSqlParser.JOIN, 0); + public KW_JOIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JOIN, 0); } - public NATURAL(): TerminalNode { - return this.getToken(FlinkSqlParser.NATURAL, 0); + public KW_NATURAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NATURAL, 0); } - public OUTER(): TerminalNode { - return this.getToken(FlinkSqlParser.OUTER, 0); + public KW_OUTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OUTER, 0); } public joinCondition(): JoinConditionContext { return this.getTypedRuleContext(JoinConditionContext, 0) as JoinConditionContext; } - public LEFT(): TerminalNode { - return this.getToken(FlinkSqlParser.LEFT, 0); + public KW_LEFT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LEFT, 0); } - public RIGHT(): TerminalNode { - return this.getToken(FlinkSqlParser.RIGHT, 0); + public KW_RIGHT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RIGHT, 0); } - public FULL(): TerminalNode { - return this.getToken(FlinkSqlParser.FULL, 0); + public KW_FULL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FULL, 0); } - public INNER(): TerminalNode { - return this.getToken(FlinkSqlParser.INNER, 0); + public KW_INNER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INNER, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_tableExpression; @@ -16063,8 +16676,8 @@ export class TablePrimaryContext extends ParserRuleContext { public tablePath(): TablePathContext { return this.getTypedRuleContext(TablePathContext, 0) as TablePathContext; } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } public systemTimePeriod(): SystemTimePeriodContext { return this.getTypedRuleContext(SystemTimePeriodContext, 0) as SystemTimePeriodContext; @@ -16072,11 +16685,11 @@ export class TablePrimaryContext extends ParserRuleContext { public correlationName(): CorrelationNameContext { return this.getTypedRuleContext(CorrelationNameContext, 0) as CorrelationNameContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } - public LATERAL(): TerminalNode { - return this.getToken(FlinkSqlParser.LATERAL, 0); + public KW_LATERAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LATERAL, 0); } public LR_BRACKET_list(): TerminalNode[] { return this.getTokens(FlinkSqlParser.LR_BRACKET); @@ -16108,8 +16721,8 @@ export class TablePrimaryContext extends ParserRuleContext { public queryStatement(): QueryStatementContext { return this.getTypedRuleContext(QueryStatementContext, 0) as QueryStatementContext; } - public UNNEST(): TerminalNode { - return this.getToken(FlinkSqlParser.UNNEST, 0); + public KW_UNNEST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNNEST, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_tablePrimary; @@ -16172,17 +16785,17 @@ export class SystemTimePeriodContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public FOR(): TerminalNode { - return this.getToken(FlinkSqlParser.FOR, 0); + public KW_FOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FOR, 0); } - public SYSTEM_TIME(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM_TIME, 0); + public KW_SYSTEM_TIME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SYSTEM_TIME, 0); } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } - public OF(): TerminalNode { - return this.getToken(FlinkSqlParser.OF, 0); + public KW_OF(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OF, 0); } public dateTimeExpression(): DateTimeExpressionContext { return this.getTypedRuleContext(DateTimeExpressionContext, 0) as DateTimeExpressionContext; @@ -16289,8 +16902,8 @@ export class WindoTVFClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -16380,14 +16993,14 @@ export class WindoTVFNameContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public TUMBLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TUMBLE, 0); + public KW_TUMBLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TUMBLE, 0); } - public HOP(): TerminalNode { - return this.getToken(FlinkSqlParser.HOP, 0); + public KW_HOP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_HOP, 0); } - public CUMULATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CUMULATE, 0); + public KW_CUMULATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CUMULATE, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_windoTVFName; @@ -16418,8 +17031,8 @@ export class WindowTVFParamContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } public timeAttrColumn(): TimeAttrColumnContext { return this.getTypedRuleContext(TimeAttrColumnContext, 0) as TimeAttrColumnContext; @@ -16430,14 +17043,14 @@ export class WindowTVFParamContext extends ParserRuleContext { public timeIntervalExpression(): TimeIntervalExpressionContext { return this.getTypedRuleContext(TimeIntervalExpressionContext, 0) as TimeIntervalExpressionContext; } - public DATA(): TerminalNode { - return this.getToken(FlinkSqlParser.DATA, 0); + public KW_DATA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATA, 0); } - public DOUBLE_ARROW(): TerminalNode { - return this.getToken(FlinkSqlParser.DOUBLE_ARROW, 0); + public DOUBLE_RIGHT_ARROW(): TerminalNode { + return this.getToken(FlinkSqlParser.DOUBLE_RIGHT_ARROW, 0); } - public TIMECOL(): TerminalNode { - return this.getToken(FlinkSqlParser.TIMECOL, 0); + public KW_TIMECOL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMECOL, 0); } public timeIntervalParamName(): TimeIntervalParamNameContext { return this.getTypedRuleContext(TimeIntervalParamNameContext, 0) as TimeIntervalParamNameContext; @@ -16471,23 +17084,23 @@ export class TimeIntervalParamNameContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DATA(): TerminalNode { - return this.getToken(FlinkSqlParser.DATA, 0); + public KW_DATA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATA, 0); } - public TIMECOL(): TerminalNode { - return this.getToken(FlinkSqlParser.TIMECOL, 0); + public KW_TIMECOL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMECOL, 0); } - public SIZE(): TerminalNode { - return this.getToken(FlinkSqlParser.SIZE, 0); + public KW_SIZE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SIZE, 0); } - public OFFSET(): TerminalNode { - return this.getToken(FlinkSqlParser.OFFSET, 0); + public KW_OFFSET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OFFSET, 0); } - public STEP(): TerminalNode { - return this.getToken(FlinkSqlParser.STEP, 0); + public KW_STEP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STEP, 0); } - public SLIDE(): TerminalNode { - return this.getToken(FlinkSqlParser.SLIDE, 0); + public KW_SLIDE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SLIDE, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_timeIntervalParamName; @@ -16518,8 +17131,8 @@ export class ColumnDescriptorContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DESCRIPTOR(): TerminalNode { - return this.getToken(FlinkSqlParser.DESCRIPTOR, 0); + public KW_DESCRIPTOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DESCRIPTOR, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -16559,14 +17172,14 @@ export class JoinConditionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ON(): TerminalNode { - return this.getToken(FlinkSqlParser.ON, 0); + public KW_ON(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ON, 0); } public booleanExpression(): BooleanExpressionContext { return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; } - public USING(): TerminalNode { - return this.getToken(FlinkSqlParser.USING, 0); + public KW_USING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USING, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -16615,8 +17228,8 @@ export class WhereClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public WHERE(): TerminalNode { - return this.getToken(FlinkSqlParser.WHERE, 0); + public KW_WHERE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WHERE, 0); } public booleanExpression(): BooleanExpressionContext { return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; @@ -16650,11 +17263,11 @@ export class GroupByClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public GROUP(): TerminalNode { - return this.getToken(FlinkSqlParser.GROUP, 0); + public KW_GROUP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GROUP, 0); } - public BY(): TerminalNode { - return this.getToken(FlinkSqlParser.BY, 0); + public KW_BY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BY, 0); } public groupItemDefinition_list(): GroupItemDefinitionContext[] { return this.getTypedRuleContexts(GroupItemDefinitionContext) as GroupItemDefinitionContext[]; @@ -16759,11 +17372,11 @@ export class GroupingSetsContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public GROUPING(): TerminalNode { - return this.getToken(FlinkSqlParser.GROUPING, 0); + public KW_GROUPING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GROUPING, 0); } - public SETS(): TerminalNode { - return this.getToken(FlinkSqlParser.SETS, 0); + public KW_SETS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SETS, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_groupingSets; @@ -16794,11 +17407,11 @@ export class GroupingSetsNotaionNameContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public CUBE(): TerminalNode { - return this.getToken(FlinkSqlParser.CUBE, 0); + public KW_CUBE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CUBE, 0); } - public ROLLUP(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLLUP, 0); + public KW_ROLLUP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROLLUP, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_groupingSetsNotaionName; @@ -16876,14 +17489,14 @@ export class GroupWindowFunctionNameContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public TUMBLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TUMBLE, 0); + public KW_TUMBLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TUMBLE, 0); } - public HOP(): TerminalNode { - return this.getToken(FlinkSqlParser.HOP, 0); + public KW_HOP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_HOP, 0); } - public SESSION(): TerminalNode { - return this.getToken(FlinkSqlParser.SESSION, 0); + public KW_SESSION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SESSION, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_groupWindowFunctionName; @@ -16946,8 +17559,8 @@ export class HavingClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public HAVING(): TerminalNode { - return this.getToken(FlinkSqlParser.HAVING, 0); + public KW_HAVING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_HAVING, 0); } public booleanExpression(): BooleanExpressionContext { return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; @@ -16981,8 +17594,8 @@ export class WindowClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public WINDOW(): TerminalNode { - return this.getToken(FlinkSqlParser.WINDOW, 0); + public KW_WINDOW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WINDOW, 0); } public namedWindow_list(): NamedWindowContext[] { return this.getTypedRuleContexts(NamedWindowContext) as NamedWindowContext[]; @@ -17026,8 +17639,8 @@ export class NamedWindowContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public windowSpec(): WindowSpecContext { return this.getTypedRuleContext(WindowSpecContext, 0) as WindowSpecContext; @@ -17112,8 +17725,8 @@ export class MatchRecognizeClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public MATCH_RECOGNIZE(): TerminalNode { - return this.getToken(FlinkSqlParser.MATCH_RECOGNIZE, 0); + public KW_MATCH_RECOGNIZE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MATCH_RECOGNIZE, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -17142,11 +17755,11 @@ export class MatchRecognizeClauseContext extends ParserRuleContext { public patternDefination(): PatternDefinationContext { return this.getTypedRuleContext(PatternDefinationContext, 0) as PatternDefinationContext; } - public strictIdentifier(): StrictIdentifierContext { - return this.getTypedRuleContext(StrictIdentifierContext, 0) as StrictIdentifierContext; + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_matchRecognizeClause; @@ -17177,11 +17790,11 @@ export class OrderByCaluseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ORDER(): TerminalNode { - return this.getToken(FlinkSqlParser.ORDER, 0); + public KW_ORDER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ORDER, 0); } - public BY(): TerminalNode { - return this.getToken(FlinkSqlParser.BY, 0); + public KW_BY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BY, 0); } public orderItemDefition_list(): OrderItemDefitionContext[] { return this.getTypedRuleContexts(OrderItemDefitionContext) as OrderItemDefitionContext[]; @@ -17229,20 +17842,20 @@ export class OrderItemDefitionContext extends ParserRuleContext { public expression(): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; } - public NULLS(): TerminalNode { - return this.getToken(FlinkSqlParser.NULLS, 0); + public KW_NULLS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULLS, 0); } - public ASC(): TerminalNode { - return this.getToken(FlinkSqlParser.ASC, 0); + public KW_ASC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ASC, 0); } - public DESC(): TerminalNode { - return this.getToken(FlinkSqlParser.DESC, 0); + public KW_DESC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DESC, 0); } - public LAST(): TerminalNode { - return this.getToken(FlinkSqlParser.LAST, 0); + public KW_LAST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LAST, 0); } - public FIRST(): TerminalNode { - return this.getToken(FlinkSqlParser.FIRST, 0); + public KW_FIRST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FIRST, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_orderItemDefition; @@ -17274,11 +17887,11 @@ export class LimitClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public LIMIT(): TerminalNode { - return this.getToken(FlinkSqlParser.LIMIT, 0); + public KW_LIMIT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LIMIT, 0); } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); + public KW_ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALL, 0); } public expression(): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; @@ -17312,11 +17925,11 @@ export class PartitionByClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public PARTITION(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITION, 0); + public KW_PARTITION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PARTITION, 0); } - public BY(): TerminalNode { - return this.getToken(FlinkSqlParser.BY, 0); + public KW_BY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BY, 0); } public expression_list(): ExpressionContext[] { return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; @@ -17412,8 +18025,8 @@ export class MeasuresClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public MEASURES(): TerminalNode { - return this.getToken(FlinkSqlParser.MEASURES, 0); + public KW_MEASURES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MEASURES, 0); } public projectItemDefinition_list(): ProjectItemDefinitionContext[] { return this.getTypedRuleContexts(ProjectItemDefinitionContext) as ProjectItemDefinitionContext[]; @@ -17456,8 +18069,8 @@ export class PatternDefinationContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public PATTERN(): TerminalNode { - return this.getToken(FlinkSqlParser.PATTERN, 0); + public KW_PATTERN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PATTERN, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -17538,23 +18151,23 @@ export class OutputModeContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); + public KW_ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALL, 0); } - public ROWS(): TerminalNode { - return this.getToken(FlinkSqlParser.ROWS, 0); + public KW_ROWS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROWS, 0); } - public PER(): TerminalNode { - return this.getToken(FlinkSqlParser.PER, 0); + public KW_PER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PER, 0); } - public MATCH(): TerminalNode { - return this.getToken(FlinkSqlParser.MATCH, 0); + public KW_MATCH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MATCH, 0); } - public ONE(): TerminalNode { - return this.getToken(FlinkSqlParser.ONE, 0); + public KW_ONE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ONE, 0); } - public ROW(): TerminalNode { - return this.getToken(FlinkSqlParser.ROW, 0); + public KW_ROW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROW, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_outputMode; @@ -17585,35 +18198,35 @@ export class AfterMatchStrategyContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public AFTER(): TerminalNode { - return this.getToken(FlinkSqlParser.AFTER, 0); + public KW_AFTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AFTER, 0); } - public MATCH(): TerminalNode { - return this.getToken(FlinkSqlParser.MATCH, 0); + public KW_MATCH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MATCH, 0); } public KW_SKIP(): TerminalNode { return this.getToken(FlinkSqlParser.KW_SKIP, 0); } - public PAST(): TerminalNode { - return this.getToken(FlinkSqlParser.PAST, 0); + public KW_PAST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PAST, 0); } - public LAST(): TerminalNode { - return this.getToken(FlinkSqlParser.LAST, 0); + public KW_LAST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LAST, 0); } - public ROW(): TerminalNode { - return this.getToken(FlinkSqlParser.ROW, 0); + public KW_ROW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROW, 0); } - public TO(): TerminalNode { - return this.getToken(FlinkSqlParser.TO, 0); + public KW_TO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TO, 0); } - public NEXT(): TerminalNode { - return this.getToken(FlinkSqlParser.NEXT, 0); + public KW_NEXT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NEXT, 0); } public unquotedIdentifier(): UnquotedIdentifierContext { return this.getTypedRuleContext(UnquotedIdentifierContext, 0) as UnquotedIdentifierContext; } - public FIRST(): TerminalNode { - return this.getToken(FlinkSqlParser.FIRST, 0); + public KW_FIRST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FIRST, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_afterMatchStrategy; @@ -17644,8 +18257,8 @@ export class PatternVariablesDefinationContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DEFINE(): TerminalNode { - return this.getToken(FlinkSqlParser.DEFINE, 0); + public KW_DEFINE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DEFINE, 0); } public projectItemDefinition_list(): ProjectItemDefinitionContext[] { return this.getTypedRuleContexts(ProjectItemDefinitionContext) as ProjectItemDefinitionContext[]; @@ -17688,11 +18301,11 @@ export class WindowFrameContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public RANGE(): TerminalNode { - return this.getToken(FlinkSqlParser.RANGE, 0); + public KW_RANGE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RANGE, 0); } - public BETWEEN(): TerminalNode { - return this.getToken(FlinkSqlParser.BETWEEN, 0); + public KW_BETWEEN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BETWEEN, 0); } public timeIntervalExpression(): TimeIntervalExpressionContext { return this.getTypedRuleContext(TimeIntervalExpressionContext, 0) as TimeIntervalExpressionContext; @@ -17700,8 +18313,8 @@ export class WindowFrameContext extends ParserRuleContext { public frameBound(): FrameBoundContext { return this.getTypedRuleContext(FrameBoundContext, 0) as FrameBoundContext; } - public ROWS(): TerminalNode { - return this.getToken(FlinkSqlParser.ROWS, 0); + public KW_ROWS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROWS, 0); } public DIG_LITERAL(): TerminalNode { return this.getToken(FlinkSqlParser.DIG_LITERAL, 0); @@ -17735,17 +18348,17 @@ export class FrameBoundContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public PRECEDING(): TerminalNode { - return this.getToken(FlinkSqlParser.PRECEDING, 0); + public KW_PRECEDING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRECEDING, 0); } - public AND(): TerminalNode { - return this.getToken(FlinkSqlParser.AND, 0); + public KW_AND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AND, 0); } - public CURRENT(): TerminalNode { - return this.getToken(FlinkSqlParser.CURRENT, 0); + public KW_CURRENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CURRENT, 0); } - public ROW(): TerminalNode { - return this.getToken(FlinkSqlParser.ROW, 0); + public KW_ROW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROW, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_frameBound; @@ -17776,8 +18389,8 @@ export class WithinClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public WITHIN(): TerminalNode { - return this.getToken(FlinkSqlParser.WITHIN, 0); + public KW_WITHIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITHIN, 0); } public timeIntervalExpression(): TimeIntervalExpressionContext { return this.getTypedRuleContext(TimeIntervalExpressionContext, 0) as TimeIntervalExpressionContext; @@ -17806,44 +18419,6 @@ export class WithinClauseContext extends ParserRuleContext { } -export class TimeIntervalExpressionContext extends ParserRuleContext { - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public INTERVAL(): TerminalNode { - return this.getToken(FlinkSqlParser.INTERVAL, 0); - } - public STRING_LITERAL(): TerminalNode { - return this.getToken(FlinkSqlParser.STRING_LITERAL, 0); - } - public ID_LITERAL(): TerminalNode { - return this.getToken(FlinkSqlParser.ID_LITERAL, 0); - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_timeIntervalExpression; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterTimeIntervalExpression) { - listener.enterTimeIntervalExpression(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitTimeIntervalExpression) { - listener.exitTimeIntervalExpression(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitTimeIntervalExpression) { - return visitor.visitTimeIntervalExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class ExpressionContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); @@ -17893,8 +18468,8 @@ export class LogicalNotContext extends BooleanExpressionContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } public booleanExpression(): BooleanExpressionContext { return this.getTypedRuleContext(BooleanExpressionContext, 0) as BooleanExpressionContext; @@ -17953,8 +18528,8 @@ export class ExistsContext extends BooleanExpressionContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public EXISTS(): TerminalNode { - return this.getToken(FlinkSqlParser.EXISTS, 0); + public KW_EXISTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXISTS, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -17998,11 +18573,11 @@ export class LogicalBinaryContext extends BooleanExpressionContext { public booleanExpression(i: number): BooleanExpressionContext { return this.getTypedRuleContext(BooleanExpressionContext, i) as BooleanExpressionContext; } - public AND(): TerminalNode { - return this.getToken(FlinkSqlParser.AND, 0); + public KW_AND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AND, 0); } - public OR(): TerminalNode { - return this.getToken(FlinkSqlParser.OR, 0); + public KW_OR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OR, 0); } public enterRule(listener: FlinkSqlParserListener): void { if(listener.enterLogicalBinary) { @@ -18036,11 +18611,11 @@ export class PredicateContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public AND(): TerminalNode { - return this.getToken(FlinkSqlParser.AND, 0); + public KW_AND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AND, 0); } - public BETWEEN(): TerminalNode { - return this.getToken(FlinkSqlParser.BETWEEN, 0); + public KW_BETWEEN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BETWEEN, 0); } public valueExpression_list(): ValueExpressionContext[] { return this.getTypedRuleContexts(ValueExpressionContext) as ValueExpressionContext[]; @@ -18048,8 +18623,8 @@ export class PredicateContext extends ParserRuleContext { public valueExpression(i: number): ValueExpressionContext { return this.getTypedRuleContext(ValueExpressionContext, i) as ValueExpressionContext; } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -18063,8 +18638,8 @@ export class PredicateContext extends ParserRuleContext { public RR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.RR_BRACKET, 0); } - public IN(): TerminalNode { - return this.getToken(FlinkSqlParser.IN, 0); + public KW_IN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IN, 0); } public COMMA_list(): TerminalNode[] { return this.getTokens(FlinkSqlParser.COMMA); @@ -18075,38 +18650,38 @@ export class PredicateContext extends ParserRuleContext { public queryStatement(): QueryStatementContext { return this.getTypedRuleContext(QueryStatementContext, 0) as QueryStatementContext; } - public EXISTS(): TerminalNode { - return this.getToken(FlinkSqlParser.EXISTS, 0); + public KW_EXISTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXISTS, 0); } - public RLIKE(): TerminalNode { - return this.getToken(FlinkSqlParser.RLIKE, 0); + public KW_RLIKE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RLIKE, 0); } - public LIKE(): TerminalNode { - return this.getToken(FlinkSqlParser.LIKE, 0); + public KW_LIKE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LIKE, 0); } - public ANY(): TerminalNode { - return this.getToken(FlinkSqlParser.ANY, 0); + public KW_ANY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ANY, 0); } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); + public KW_ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALL, 0); } - public IS(): TerminalNode { - return this.getToken(FlinkSqlParser.IS, 0); + public KW_IS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IS, 0); } - public NULL(): TerminalNode { - return this.getToken(FlinkSqlParser.NULL, 0); + public KW_NULL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULL, 0); } - public TRUE(): TerminalNode { - return this.getToken(FlinkSqlParser.TRUE, 0); + public KW_TRUE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TRUE, 0); } - public FALSE(): TerminalNode { - return this.getToken(FlinkSqlParser.FALSE, 0); + public KW_FALSE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FALSE, 0); } - public FROM(): TerminalNode { - return this.getToken(FlinkSqlParser.FROM, 0); + public KW_FROM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FROM, 0); } - public DISTINCT(): TerminalNode { - return this.getToken(FlinkSqlParser.DISTINCT, 0); + public KW_DISTINCT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DISTINCT, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_predicate; @@ -18140,14 +18715,14 @@ export class LikePredicateContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public LIKE(): TerminalNode { - return this.getToken(FlinkSqlParser.LIKE, 0); + public KW_LIKE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LIKE, 0); } - public ANY(): TerminalNode { - return this.getToken(FlinkSqlParser.ANY, 0); + public KW_ANY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ANY, 0); } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); + public KW_ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALL, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -18161,8 +18736,8 @@ export class LikePredicateContext extends ParserRuleContext { public expression(i: number): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, i) as ExpressionContext; } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } public COMMA_list(): TerminalNode[] { return this.getTokens(FlinkSqlParser.COMMA); @@ -18294,8 +18869,8 @@ export class ArithmeticBinaryContext extends ValueExpressionContext { public PENCENT_SIGN(): TerminalNode { return this.getToken(FlinkSqlParser.PENCENT_SIGN, 0); } - public DIV(): TerminalNode { - return this.getToken(FlinkSqlParser.DIV, 0); + public KW_DIV(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DIV, 0); } public ADD_SIGN(): TerminalNode { return this.getToken(FlinkSqlParser.ADD_SIGN, 0); @@ -18419,11 +18994,11 @@ export class SimpleCaseContext extends PrimaryExpressionContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public CASE(): TerminalNode { - return this.getToken(FlinkSqlParser.CASE, 0); + public KW_CASE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CASE, 0); } - public END(): TerminalNode { - return this.getToken(FlinkSqlParser.END, 0); + public KW_END(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_END, 0); } public expression_list(): ExpressionContext[] { return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; @@ -18437,8 +19012,8 @@ export class SimpleCaseContext extends PrimaryExpressionContext { public whenClause(i: number): WhenClauseContext { return this.getTypedRuleContext(WhenClauseContext, i) as WhenClauseContext; } - public ELSE(): TerminalNode { - return this.getToken(FlinkSqlParser.ELSE, 0); + public KW_ELSE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ELSE, 0); } public enterRule(listener: FlinkSqlParserListener): void { if(listener.enterSimpleCase) { @@ -18491,8 +19066,8 @@ export class LastContext extends PrimaryExpressionContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public LAST(): TerminalNode { - return this.getToken(FlinkSqlParser.LAST, 0); + public KW_LAST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LAST, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -18503,11 +19078,11 @@ export class LastContext extends PrimaryExpressionContext { public RR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.RR_BRACKET, 0); } - public IGNORE(): TerminalNode { - return this.getToken(FlinkSqlParser.IGNORE, 0); + public KW_IGNORE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IGNORE, 0); } - public NULLS(): TerminalNode { - return this.getToken(FlinkSqlParser.NULLS, 0); + public KW_NULLS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULLS, 0); } public enterRule(listener: FlinkSqlParserListener): void { if(listener.enterLast) { @@ -18637,8 +19212,8 @@ export class CastContext extends PrimaryExpressionContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public CAST(): TerminalNode { - return this.getToken(FlinkSqlParser.CAST, 0); + public KW_CAST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CAST, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -18646,8 +19221,8 @@ export class CastContext extends PrimaryExpressionContext { public expression(): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public columnType(): ColumnTypeContext { return this.getTypedRuleContext(ColumnTypeContext, 0) as ColumnTypeContext; @@ -18788,11 +19363,11 @@ export class SearchedCaseContext extends PrimaryExpressionContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public CASE(): TerminalNode { - return this.getToken(FlinkSqlParser.CASE, 0); + public KW_CASE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CASE, 0); } - public END(): TerminalNode { - return this.getToken(FlinkSqlParser.END, 0); + public KW_END(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_END, 0); } public whenClause_list(): WhenClauseContext[] { return this.getTypedRuleContexts(WhenClauseContext) as WhenClauseContext[]; @@ -18800,8 +19375,8 @@ export class SearchedCaseContext extends PrimaryExpressionContext { public whenClause(i: number): WhenClauseContext { return this.getTypedRuleContext(WhenClauseContext, i) as WhenClauseContext; } - public ELSE(): TerminalNode { - return this.getToken(FlinkSqlParser.ELSE, 0); + public KW_ELSE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ELSE, 0); } public expression(): ExpressionContext { return this.getTypedRuleContext(ExpressionContext, 0) as ExpressionContext; @@ -18832,14 +19407,14 @@ export class PositionContext extends PrimaryExpressionContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public POSITION(): TerminalNode { - return this.getToken(FlinkSqlParser.POSITION, 0); + public KW_POSITION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_POSITION, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); } - public IN(): TerminalNode { - return this.getToken(FlinkSqlParser.IN, 0); + public KW_IN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IN, 0); } public RR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.RR_BRACKET, 0); @@ -18874,8 +19449,8 @@ export class FirstContext extends PrimaryExpressionContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public FIRST(): TerminalNode { - return this.getToken(FlinkSqlParser.FIRST, 0); + public KW_FIRST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FIRST, 0); } public LR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.LR_BRACKET, 0); @@ -18886,11 +19461,11 @@ export class FirstContext extends PrimaryExpressionContext { public RR_BRACKET(): TerminalNode { return this.getToken(FlinkSqlParser.RR_BRACKET, 0); } - public IGNORE(): TerminalNode { - return this.getToken(FlinkSqlParser.IGNORE, 0); + public KW_IGNORE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IGNORE, 0); } - public NULLS(): TerminalNode { - return this.getToken(FlinkSqlParser.NULLS, 0); + public KW_NULLS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULLS, 0); } public enterRule(listener: FlinkSqlParserListener): void { if(listener.enterFirst) { @@ -18918,6 +19493,12 @@ export class FunctionNameContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } + public reservedKeywords(): ReservedKeywordsContext { + return this.getTypedRuleContext(ReservedKeywordsContext, 0) as ReservedKeywordsContext; + } + public nonReservedKeywords(): NonReservedKeywordsContext { + return this.getTypedRuleContext(NonReservedKeywordsContext, 0) as NonReservedKeywordsContext; + } public uid(): UidContext { return this.getTypedRuleContext(UidContext, 0) as UidContext; } @@ -19044,13 +19625,13 @@ export class QualifiedNameContext extends ParserRuleContext { } -export class IntervalContext extends ParserRuleContext { +export class TimeIntervalExpressionContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public INTERVAL(): TerminalNode { - return this.getToken(FlinkSqlParser.INTERVAL, 0); + public KW_INTERVAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INTERVAL, 0); } public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext { return this.getTypedRuleContext(ErrorCapturingMultiUnitsIntervalContext, 0) as ErrorCapturingMultiUnitsIntervalContext; @@ -19059,22 +19640,22 @@ export class IntervalContext extends ParserRuleContext { return this.getTypedRuleContext(ErrorCapturingUnitToUnitIntervalContext, 0) as ErrorCapturingUnitToUnitIntervalContext; } public get ruleIndex(): number { - return FlinkSqlParser.RULE_interval; + return FlinkSqlParser.RULE_timeIntervalExpression; } public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterInterval) { - listener.enterInterval(this); + if(listener.enterTimeIntervalExpression) { + listener.enterTimeIntervalExpression(this); } } public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitInterval) { - listener.exitInterval(this); + if(listener.exitTimeIntervalExpression) { + listener.exitTimeIntervalExpression(this); } } // @Override public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitInterval) { - return visitor.visitInterval(this); + if (visitor.visitTimeIntervalExpression) { + return visitor.visitTimeIntervalExpression(this); } else { return visitor.visitChildren(this); } @@ -19128,11 +19709,11 @@ export class MultiUnitsIntervalContext extends ParserRuleContext { public intervalValue(i: number): IntervalValueContext { return this.getTypedRuleContext(IntervalValueContext, i) as IntervalValueContext; } - public identifier_list(): IdentifierContext[] { - return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + public intervalTimeUnit_list(): IntervalTimeUnitContext[] { + return this.getTypedRuleContexts(IntervalTimeUnitContext) as IntervalTimeUnitContext[]; } - public identifier(i: number): IdentifierContext { - return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + public intervalTimeUnit(i: number): IntervalTimeUnitContext { + return this.getTypedRuleContext(IntervalTimeUnitContext, i) as IntervalTimeUnitContext; } public get ruleIndex(): number { return FlinkSqlParser.RULE_multiUnitsInterval; @@ -19201,23 +19782,23 @@ export class ErrorCapturingUnitToUnitIntervalContext extends ParserRuleContext { export class UnitToUnitIntervalContext extends ParserRuleContext { public _value!: IntervalValueContext; - public _from_!: IdentifierContext; - public _to!: IdentifierContext; + public _from_!: IntervalTimeUnitContext; + public _to!: IntervalTimeUnitContext; constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public TO(): TerminalNode { - return this.getToken(FlinkSqlParser.TO, 0); + public KW_TO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TO, 0); } public intervalValue(): IntervalValueContext { return this.getTypedRuleContext(IntervalValueContext, 0) as IntervalValueContext; } - public identifier_list(): IdentifierContext[] { - return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; + public intervalTimeUnit_list(): IntervalTimeUnitContext[] { + return this.getTypedRuleContexts(IntervalTimeUnitContext) as IntervalTimeUnitContext[]; } - public identifier(i: number): IdentifierContext { - return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; + public intervalTimeUnit(i: number): IntervalTimeUnitContext { + return this.getTypedRuleContext(IntervalTimeUnitContext, i) as IntervalTimeUnitContext; } public get ruleIndex(): number { return FlinkSqlParser.RULE_unitToUnitInterval; @@ -19287,16 +19868,51 @@ export class IntervalValueContext extends ParserRuleContext { } +export class IntervalTimeUnitContext extends ParserRuleContext { + constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { + super(parent, invokingState); + this.parser = parser; + } + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; + } + public reservedKeywords(): ReservedKeywordsContext { + return this.getTypedRuleContext(ReservedKeywordsContext, 0) as ReservedKeywordsContext; + } + public get ruleIndex(): number { + return FlinkSqlParser.RULE_intervalTimeUnit; + } + public enterRule(listener: FlinkSqlParserListener): void { + if(listener.enterIntervalTimeUnit) { + listener.enterIntervalTimeUnit(this); + } + } + public exitRule(listener: FlinkSqlParserListener): void { + if(listener.exitIntervalTimeUnit) { + listener.exitIntervalTimeUnit(this); + } + } + // @Override + public accept(visitor: FlinkSqlParserVisitor): Result { + if (visitor.visitIntervalTimeUnit) { + return visitor.visitIntervalTimeUnit(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class ColumnAliasContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public strictIdentifier(): StrictIdentifierContext { - return this.getTypedRuleContext(StrictIdentifierContext, 0) as StrictIdentifierContext; + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public identifierList(): IdentifierListContext { return this.getTypedRuleContext(IdentifierListContext, 0) as IdentifierListContext; @@ -19330,11 +19946,11 @@ export class TableAliasContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public strictIdentifier(): StrictIdentifierContext { - return this.getTypedRuleContext(StrictIdentifierContext, 0) as StrictIdentifierContext; + public identifier(): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, 0) as IdentifierContext; } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } public identifierList(): IdentifierListContext { return this.getTypedRuleContext(IdentifierListContext, 0) as IdentifierListContext; @@ -19415,11 +20031,11 @@ export class ErrorIdentContext extends ErrorCapturingIdentifierExtraContext { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public MINUS_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.MINUS); + public KW_MINUS_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.KW_MINUS); } - public MINUS(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.MINUS, i); + public KW_MINUS(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MINUS, i); } public identifier_list(): IdentifierContext[] { return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; @@ -19556,50 +20172,15 @@ export class IdentifierContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public strictIdentifier(): StrictIdentifierContext { - return this.getTypedRuleContext(StrictIdentifierContext, 0) as StrictIdentifierContext; - } - public strictNonReserved(): StrictNonReservedContext { - return this.getTypedRuleContext(StrictNonReservedContext, 0) as StrictNonReservedContext; - } public get ruleIndex(): number { return FlinkSqlParser.RULE_identifier; } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterIdentifier) { - listener.enterIdentifier(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitIdentifier) { - listener.exitIdentifier(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitIdentifier) { - return visitor.visitIdentifier(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class StrictIdentifierContext extends ParserRuleContext { - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_strictIdentifier; - } - public copyFrom(ctx: StrictIdentifierContext): void { + public copyFrom(ctx: IdentifierContext): void { super.copyFrom(ctx); } } -export class QuotedIdentifierAlternativeContext extends StrictIdentifierContext { - constructor(parser: FlinkSqlParser, ctx: StrictIdentifierContext) { +export class QuotedIdentifierAlternativeContext extends IdentifierContext { + constructor(parser: FlinkSqlParser, ctx: IdentifierContext) { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } @@ -19625,35 +20206,35 @@ export class QuotedIdentifierAlternativeContext extends StrictIdentifierContext } } } -export class NonReservedKeywordsContext extends StrictIdentifierContext { - constructor(parser: FlinkSqlParser, ctx: StrictIdentifierContext) { +export class NonReservedKeywordsAlternativeContext extends IdentifierContext { + constructor(parser: FlinkSqlParser, ctx: IdentifierContext) { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } - public nonReserved(): NonReservedContext { - return this.getTypedRuleContext(NonReservedContext, 0) as NonReservedContext; + public nonReservedKeywords(): NonReservedKeywordsContext { + return this.getTypedRuleContext(NonReservedKeywordsContext, 0) as NonReservedKeywordsContext; } public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterNonReservedKeywords) { - listener.enterNonReservedKeywords(this); + if(listener.enterNonReservedKeywordsAlternative) { + listener.enterNonReservedKeywordsAlternative(this); } } public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitNonReservedKeywords) { - listener.exitNonReservedKeywords(this); + if(listener.exitNonReservedKeywordsAlternative) { + listener.exitNonReservedKeywordsAlternative(this); } } // @Override public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitNonReservedKeywords) { - return visitor.visitNonReservedKeywords(this); + if (visitor.visitNonReservedKeywordsAlternative) { + return visitor.visitNonReservedKeywordsAlternative(this); } else { return visitor.visitChildren(this); } } } -export class UnquotedIdentifierAlternativeContext extends StrictIdentifierContext { - constructor(parser: FlinkSqlParser, ctx: StrictIdentifierContext) { +export class UnquotedIdentifierAlternativeContext extends IdentifierContext { + constructor(parser: FlinkSqlParser, ctx: IdentifierContext) { super(parser, ctx.parentCtx, ctx.invokingState); super.copyFrom(ctx); } @@ -19679,33 +20260,6 @@ export class UnquotedIdentifierAlternativeContext extends StrictIdentifierContex } } } -export class AnsiNonReservedKeywordsContext extends StrictIdentifierContext { - constructor(parser: FlinkSqlParser, ctx: StrictIdentifierContext) { - super(parser, ctx.parentCtx, ctx.invokingState); - super.copyFrom(ctx); - } - public ansiNonReserved(): AnsiNonReservedContext { - return this.getTypedRuleContext(AnsiNonReservedContext, 0) as AnsiNonReservedContext; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterAnsiNonReservedKeywords) { - listener.enterAnsiNonReservedKeywords(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitAnsiNonReservedKeywords) { - listener.exitAnsiNonReservedKeywords(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitAnsiNonReservedKeywords) { - return visitor.visitAnsiNonReservedKeywords(this); - } else { - return visitor.visitChildren(this); - } - } -} export class UnquotedIdentifierContext extends ParserRuleContext { @@ -19782,11 +20336,11 @@ export class WhenClauseContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public WHEN(): TerminalNode { - return this.getToken(FlinkSqlParser.WHEN, 0); + public KW_WHEN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WHEN, 0); } - public THEN(): TerminalNode { - return this.getToken(FlinkSqlParser.THEN, 0); + public KW_THEN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_THEN, 0); } public expression_list(): ExpressionContext[] { return this.getTypedRuleContexts(ExpressionContext) as ExpressionContext[]; @@ -19818,60 +20372,22 @@ export class WhenClauseContext extends ParserRuleContext { } -export class UidListContext extends ParserRuleContext { - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public uid_list(): UidContext[] { - return this.getTypedRuleContexts(UidContext) as UidContext[]; - } - public uid(i: number): UidContext { - return this.getTypedRuleContext(UidContext, i) as UidContext; - } - public COMMA_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.COMMA); - } - public COMMA(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.COMMA, i); - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_uidList; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterUidList) { - listener.enterUidList(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitUidList) { - listener.exitUidList(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitUidList) { - return visitor.visitUidList(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class UidContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public ID_LITERAL(): TerminalNode { - return this.getToken(FlinkSqlParser.ID_LITERAL, 0); + public identifier_list(): IdentifierContext[] { + return this.getTypedRuleContexts(IdentifierContext) as IdentifierContext[]; } - public DOT_ID_list(): TerminalNode[] { - return this.getTokens(FlinkSqlParser.DOT_ID); + public identifier(i: number): IdentifierContext { + return this.getTypedRuleContext(IdentifierContext, i) as IdentifierContext; } - public DOT_ID(i: number): TerminalNode { - return this.getToken(FlinkSqlParser.DOT_ID, i); + public DOT_list(): TerminalNode[] { + return this.getTokens(FlinkSqlParser.DOT); + } + public DOT(i: number): TerminalNode { + return this.getToken(FlinkSqlParser.DOT, i); } public get ruleIndex(): number { return FlinkSqlParser.RULE_uid; @@ -19902,8 +20418,8 @@ export class WithOptionContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public WITH(): TerminalNode { - return this.getToken(FlinkSqlParser.WITH, 0); + public KW_WITH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITH, 0); } public tablePropertyList(): TablePropertyListContext { return this.getTypedRuleContext(TablePropertyListContext, 0) as TablePropertyListContext; @@ -19937,14 +20453,14 @@ export class IfNotExistsContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public IF(): TerminalNode { - return this.getToken(FlinkSqlParser.IF, 0); + public KW_IF(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IF, 0); } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } - public EXISTS(): TerminalNode { - return this.getToken(FlinkSqlParser.EXISTS, 0); + public KW_EXISTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXISTS, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_ifNotExists; @@ -19975,11 +20491,11 @@ export class IfExistsContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public IF(): TerminalNode { - return this.getToken(FlinkSqlParser.IF, 0); + public KW_IF(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IF, 0); } - public EXISTS(): TerminalNode { - return this.getToken(FlinkSqlParser.EXISTS, 0); + public KW_EXISTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXISTS, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_ifExists; @@ -20176,8 +20692,8 @@ export class LogicalOperatorContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public AND(): TerminalNode { - return this.getToken(FlinkSqlParser.AND, 0); + public KW_AND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AND, 0); } public BIT_AND_OP_list(): TerminalNode[] { return this.getTokens(FlinkSqlParser.BIT_AND_OP); @@ -20185,8 +20701,8 @@ export class LogicalOperatorContext extends ParserRuleContext { public BIT_AND_OP(i: number): TerminalNode { return this.getToken(FlinkSqlParser.BIT_AND_OP, i); } - public OR(): TerminalNode { - return this.getToken(FlinkSqlParser.OR, 0); + public KW_OR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OR, 0); } public BIT_OR_OP_list(): TerminalNode[] { return this.getTokens(FlinkSqlParser.BIT_OR_OP); @@ -20323,8 +20839,8 @@ export class MathOperatorContext extends ParserRuleContext { public PENCENT_SIGN(): TerminalNode { return this.getToken(FlinkSqlParser.PENCENT_SIGN, 0); } - public DIV(): TerminalNode { - return this.getToken(FlinkSqlParser.DIV, 0); + public KW_DIV(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DIV, 0); } public ADD_SIGN(): TerminalNode { return this.getToken(FlinkSqlParser.ADD_SIGN, 0); @@ -20376,8 +20892,8 @@ export class UnaryOperatorContext extends ParserRuleContext { public HYPNEN_SIGN(): TerminalNode { return this.getToken(FlinkSqlParser.HYPNEN_SIGN, 0); } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_unaryOperator; @@ -20403,38 +20919,6 @@ export class UnaryOperatorContext extends ParserRuleContext { } -export class FullColumnNameContext extends ParserRuleContext { - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public uid(): UidContext { - return this.getTypedRuleContext(UidContext, 0) as UidContext; - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_fullColumnName; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterFullColumnName) { - listener.enterFullColumnName(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitFullColumnName) { - listener.exitFullColumnName(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitFullColumnName) { - return visitor.visitFullColumnName(this); - } else { - return visitor.visitChildren(this); - } - } -} - - export class ConstantContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); @@ -20446,8 +20930,8 @@ export class ConstantContext extends ParserRuleContext { public decimalLiteral(): DecimalLiteralContext { return this.getTypedRuleContext(DecimalLiteralContext, 0) as DecimalLiteralContext; } - public interval(): IntervalContext { - return this.getTypedRuleContext(IntervalContext, 0) as IntervalContext; + public timeIntervalExpression(): TimeIntervalExpressionContext { + return this.getTypedRuleContext(TimeIntervalExpressionContext, 0) as TimeIntervalExpressionContext; } public HYPNEN_SIGN(): TerminalNode { return this.getToken(FlinkSqlParser.HYPNEN_SIGN, 0); @@ -20461,11 +20945,11 @@ export class ConstantContext extends ParserRuleContext { public BIT_STRING(): TerminalNode { return this.getToken(FlinkSqlParser.BIT_STRING, 0); } - public NULL(): TerminalNode { - return this.getToken(FlinkSqlParser.NULL, 0); + public KW_NULL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULL, 0); } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_constant; @@ -20560,11 +21044,11 @@ export class BooleanLiteralContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public TRUE(): TerminalNode { - return this.getToken(FlinkSqlParser.TRUE, 0); + public KW_TRUE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TRUE, 0); } - public FALSE(): TerminalNode { - return this.getToken(FlinkSqlParser.FALSE, 0); + public KW_FALSE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FALSE, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_booleanLiteral; @@ -20595,11 +21079,11 @@ export class SetQuantifierContext extends ParserRuleContext { super(parent, invokingState); this.parser = parser; } - public DISTINCT(): TerminalNode { - return this.getToken(FlinkSqlParser.DISTINCT, 0); + public KW_DISTINCT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DISTINCT, 0); } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); + public KW_ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALL, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_setQuantifier; @@ -20625,640 +21109,598 @@ export class SetQuantifierContext extends ParserRuleContext { } -export class AnsiNonReservedContext extends ParserRuleContext { +export class ReservedKeywordsContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public ADD(): TerminalNode { - return this.getToken(FlinkSqlParser.ADD, 0); + public KW_ABS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ABS, 0); } - public AFTER(): TerminalNode { - return this.getToken(FlinkSqlParser.AFTER, 0); + public KW_ALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALL, 0); } - public ALTER(): TerminalNode { - return this.getToken(FlinkSqlParser.ALTER, 0); + public ALLOW(): TerminalNode { + return this.getToken(FlinkSqlParser.ALLOW, 0); } - public ANALYZE(): TerminalNode { - return this.getToken(FlinkSqlParser.ANALYZE, 0); + public KW_ALTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ALTER, 0); } - public ANTI(): TerminalNode { - return this.getToken(FlinkSqlParser.ANTI, 0); + public KW_AND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AND, 0); } - public ARCHIVE(): TerminalNode { - return this.getToken(FlinkSqlParser.ARCHIVE, 0); + public KW_ANY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ANY, 0); } - public ARRAY(): TerminalNode { - return this.getToken(FlinkSqlParser.ARRAY, 0); + public KW_ARE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ARE, 0); } - public ASC(): TerminalNode { - return this.getToken(FlinkSqlParser.ASC, 0); + public KW_ARRAY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ARRAY, 0); } - public AT(): TerminalNode { - return this.getToken(FlinkSqlParser.AT, 0); + public KW_AS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AS, 0); } - public BETWEEN(): TerminalNode { - return this.getToken(FlinkSqlParser.BETWEEN, 0); + public KW_AT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AT, 0); } - public BIGINT(): TerminalNode { - return this.getToken(FlinkSqlParser.BIGINT, 0); + public KW_AVG(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AVG, 0); } - public BINARY(): TerminalNode { - return this.getToken(FlinkSqlParser.BINARY, 0); + public KW_BEGIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BEGIN, 0); } - public BOOLEAN(): TerminalNode { - return this.getToken(FlinkSqlParser.BOOLEAN, 0); + public KW_BETWEEN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BETWEEN, 0); } - public BUCKET(): TerminalNode { - return this.getToken(FlinkSqlParser.BUCKET, 0); + public KW_BIGINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BIGINT, 0); } - public BUCKETS(): TerminalNode { - return this.getToken(FlinkSqlParser.BUCKETS, 0); + public KW_BINARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BINARY, 0); } - public BY(): TerminalNode { - return this.getToken(FlinkSqlParser.BY, 0); + public KW_BIT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BIT, 0); } - public BYTES(): TerminalNode { - return this.getToken(FlinkSqlParser.BYTES, 0); + public KW_BLOB(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BLOB, 0); } - public CACHE(): TerminalNode { - return this.getToken(FlinkSqlParser.CACHE, 0); + public KW_BOOLEAN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BOOLEAN, 0); } - public CASCADE(): TerminalNode { - return this.getToken(FlinkSqlParser.CASCADE, 0); + public KW_BOTH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BOTH, 0); } - public CATALOG(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOG, 0); + public KW_BY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BY, 0); } - public CATALOGS(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOGS, 0); + public KW_CALL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CALL, 0); } - public CHANGE(): TerminalNode { - return this.getToken(FlinkSqlParser.CHANGE, 0); + public KW_CALLED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CALLED, 0); } - public CHAR(): TerminalNode { - return this.getToken(FlinkSqlParser.CHAR, 0); + public KW_CASCADED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CASCADED, 0); } - public CLEAR(): TerminalNode { - return this.getToken(FlinkSqlParser.CLEAR, 0); + public KW_CASE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CASE, 0); } - public CLUSTER(): TerminalNode { - return this.getToken(FlinkSqlParser.CLUSTER, 0); + public KW_CAST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CAST, 0); } - public CLUSTERED(): TerminalNode { - return this.getToken(FlinkSqlParser.CLUSTERED, 0); + public KW_CEIL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CEIL, 0); } - public CODEGEN(): TerminalNode { - return this.getToken(FlinkSqlParser.CODEGEN, 0); + public KW_CHAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CHAR, 0); } - public COLLECTION(): TerminalNode { - return this.getToken(FlinkSqlParser.COLLECTION, 0); + public KW_CHARACTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CHARACTER, 0); } - public COLUMNS(): TerminalNode { - return this.getToken(FlinkSqlParser.COLUMNS, 0); + public KW_CHECK(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CHECK, 0); } - public COMMENT(): TerminalNode { - return this.getToken(FlinkSqlParser.COMMENT, 0); + public KW_CLOB(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CLOB, 0); } - public COMMIT(): TerminalNode { - return this.getToken(FlinkSqlParser.COMMIT, 0); + public KW_CLOSE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CLOSE, 0); } - public COMPACT(): TerminalNode { - return this.getToken(FlinkSqlParser.COMPACT, 0); + public KW_COALESCE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COALESCE, 0); } - public COMPACTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.COMPACTIONS, 0); + public KW_COLLATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COLLATE, 0); } - public COMPUTE(): TerminalNode { - return this.getToken(FlinkSqlParser.COMPUTE, 0); + public KW_COLLECT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COLLECT, 0); } - public CONCATENATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CONCATENATE, 0); + public KW_COLUMN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COLUMN, 0); } - public CONSTRAINTS(): TerminalNode { - return this.getToken(FlinkSqlParser.CONSTRAINTS, 0); + public KW_COMMIT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COMMIT, 0); } - public COST(): TerminalNode { - return this.getToken(FlinkSqlParser.COST, 0); + public KW_CONNECT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONNECT, 0); } - public CUBE(): TerminalNode { - return this.getToken(FlinkSqlParser.CUBE, 0); + public KW_CONSTRAINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRAINT, 0); } - public CURRENT(): TerminalNode { - return this.getToken(FlinkSqlParser.CURRENT, 0); + public KW_CONTAINS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONTAINS, 0); } - public DATA(): TerminalNode { - return this.getToken(FlinkSqlParser.DATA, 0); + public KW_CONVERT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONVERT, 0); } - public DATABASE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASE, 0); + public KW_COUNT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COUNT, 0); } - public DATABASES(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASES, 0); + public KW_CREATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CREATE, 0); } - public DATE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATE, 0); + public KW_CROSS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CROSS, 0); } - public DATETIME(): TerminalNode { - return this.getToken(FlinkSqlParser.DATETIME, 0); + public KW_CUBE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CUBE, 0); } - public DBPROPERTIES(): TerminalNode { - return this.getToken(FlinkSqlParser.DBPROPERTIES, 0); + public KW_CURRENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CURRENT, 0); } - public DECIMAL(): TerminalNode { - return this.getToken(FlinkSqlParser.DECIMAL, 0); + public KW_CURSOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CURSOR, 0); } - public DEFINED(): TerminalNode { - return this.getToken(FlinkSqlParser.DEFINED, 0); + public KW_CYCLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CYCLE, 0); } - public DELETE(): TerminalNode { - return this.getToken(FlinkSqlParser.DELETE, 0); + public KW_DATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATE, 0); } - public DELIMITED(): TerminalNode { - return this.getToken(FlinkSqlParser.DELIMITED, 0); + public KW_DATETIME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATETIME, 0); } - public DESC(): TerminalNode { - return this.getToken(FlinkSqlParser.DESC, 0); + public KW_DAY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DAY, 0); } - public DESCRIBE(): TerminalNode { - return this.getToken(FlinkSqlParser.DESCRIBE, 0); + public KW_DEC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DEC, 0); } - public DFS(): TerminalNode { - return this.getToken(FlinkSqlParser.DFS, 0); + public KW_DECIMAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DECIMAL, 0); } - public DIRECTORIES(): TerminalNode { - return this.getToken(FlinkSqlParser.DIRECTORIES, 0); + public KW_DECLARE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DECLARE, 0); } - public DIRECTORY(): TerminalNode { - return this.getToken(FlinkSqlParser.DIRECTORY, 0); + public KW_DEFAULT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DEFAULT, 0); } - public DISTRIBUTE(): TerminalNode { - return this.getToken(FlinkSqlParser.DISTRIBUTE, 0); + public KW_DEFINE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DEFINE, 0); } - public DIV(): TerminalNode { - return this.getToken(FlinkSqlParser.DIV, 0); + public KW_DELETE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DELETE, 0); } - public DOUBLE(): TerminalNode { - return this.getToken(FlinkSqlParser.DOUBLE, 0); + public KW_DESCRIBE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DESCRIBE, 0); } - public DROP(): TerminalNode { - return this.getToken(FlinkSqlParser.DROP, 0); + public KW_DISTINCT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DISTINCT, 0); } - public ESCAPED(): TerminalNode { - return this.getToken(FlinkSqlParser.ESCAPED, 0); + public KW_DOUBLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DOUBLE, 0); } - public EXCHANGE(): TerminalNode { - return this.getToken(FlinkSqlParser.EXCHANGE, 0); + public KW_DROP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DROP, 0); } - public EXCLUDING(): TerminalNode { - return this.getToken(FlinkSqlParser.EXCLUDING, 0); + public KW_EACH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EACH, 0); } - public EXISTS(): TerminalNode { - return this.getToken(FlinkSqlParser.EXISTS, 0); + public KW_ELSE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ELSE, 0); } - public EXPLAIN(): TerminalNode { - return this.getToken(FlinkSqlParser.EXPLAIN, 0); + public KW_END(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_END, 0); } - public EXPORT(): TerminalNode { - return this.getToken(FlinkSqlParser.EXPORT, 0); + public KW_EQUALS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EQUALS, 0); } - public EXTENDED(): TerminalNode { - return this.getToken(FlinkSqlParser.EXTENDED, 0); + public KW_EXCEPT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXCEPT, 0); } - public EXTERNAL(): TerminalNode { - return this.getToken(FlinkSqlParser.EXTERNAL, 0); + public KW_EXECUTE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXECUTE, 0); } - public EXTRACT(): TerminalNode { - return this.getToken(FlinkSqlParser.EXTRACT, 0); + public KW_EXISTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXISTS, 0); } - public FIELDS(): TerminalNode { - return this.getToken(FlinkSqlParser.FIELDS, 0); + public KW_EXPLAIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXPLAIN, 0); } - public FILEFORMAT(): TerminalNode { - return this.getToken(FlinkSqlParser.FILEFORMAT, 0); + public KW_EXTERNAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXTERNAL, 0); } - public FIRST(): TerminalNode { - return this.getToken(FlinkSqlParser.FIRST, 0); + public KW_EXTRACT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXTRACT, 0); } - public FLOAT(): TerminalNode { - return this.getToken(FlinkSqlParser.FLOAT, 0); + public KW_FALSE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FALSE, 0); } - public FOLLOWING(): TerminalNode { - return this.getToken(FlinkSqlParser.FOLLOWING, 0); + public KW_FLOAT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FLOAT, 0); } - public FORMAT(): TerminalNode { - return this.getToken(FlinkSqlParser.FORMAT, 0); + public KW_FOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FOR, 0); } - public FORMATTED(): TerminalNode { - return this.getToken(FlinkSqlParser.FORMATTED, 0); + public KW_FROM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FROM, 0); } - public FUNCTION(): TerminalNode { - return this.getToken(FlinkSqlParser.FUNCTION, 0); + public KW_FULL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FULL, 0); } - public FUNCTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.FUNCTIONS, 0); + public KW_FUNCTION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FUNCTION, 0); } - public GENERATED(): TerminalNode { - return this.getToken(FlinkSqlParser.GENERATED, 0); + public KW_GLOBAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GLOBAL, 0); } - public GLOBAL(): TerminalNode { - return this.getToken(FlinkSqlParser.GLOBAL, 0); + public KW_GRANT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GRANT, 0); } - public GROUPING(): TerminalNode { - return this.getToken(FlinkSqlParser.GROUPING, 0); + public KW_GROUP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GROUP, 0); } - public IF(): TerminalNode { - return this.getToken(FlinkSqlParser.IF, 0); + public KW_GROUPING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GROUPING, 0); } - public IGNORE(): TerminalNode { - return this.getToken(FlinkSqlParser.IGNORE, 0); + public KW_GROUPS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GROUPS, 0); } - public IMPORT(): TerminalNode { - return this.getToken(FlinkSqlParser.IMPORT, 0); + public KW_HAVING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_HAVING, 0); } - public INCLUDING(): TerminalNode { - return this.getToken(FlinkSqlParser.INCLUDING, 0); + public KW_HOUR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_HOUR, 0); } - public INDEX(): TerminalNode { - return this.getToken(FlinkSqlParser.INDEX, 0); + public KW_IMPORT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IMPORT, 0); } - public INDEXES(): TerminalNode { - return this.getToken(FlinkSqlParser.INDEXES, 0); + public KW_IN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IN, 0); } - public INPATH(): TerminalNode { - return this.getToken(FlinkSqlParser.INPATH, 0); + public KW_INCLUDING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INCLUDING, 0); } - public INPUTFORMAT(): TerminalNode { - return this.getToken(FlinkSqlParser.INPUTFORMAT, 0); + public KW_INNER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INNER, 0); } - public INSERT(): TerminalNode { - return this.getToken(FlinkSqlParser.INSERT, 0); + public KW_INOUT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INOUT, 0); } - public INT(): TerminalNode { - return this.getToken(FlinkSqlParser.INT, 0); + public KW_INSERT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INSERT, 0); } - public INTERVAL(): TerminalNode { - return this.getToken(FlinkSqlParser.INTERVAL, 0); + public KW_INT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INT, 0); } - public ITEMS(): TerminalNode { - return this.getToken(FlinkSqlParser.ITEMS, 0); + public KW_INTEGER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INTEGER, 0); } - public KEY(): TerminalNode { - return this.getToken(FlinkSqlParser.KEY, 0); + public KW_INTERSECT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INTERSECT, 0); } - public KEYS(): TerminalNode { - return this.getToken(FlinkSqlParser.KEYS, 0); + public KW_INTERVAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INTERVAL, 0); } - public LANGUAGE(): TerminalNode { - return this.getToken(FlinkSqlParser.LANGUAGE, 0); + public KW_INTO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INTO, 0); } - public LAST(): TerminalNode { - return this.getToken(FlinkSqlParser.LAST, 0); + public KW_IS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IS, 0); } - public LATERAL(): TerminalNode { - return this.getToken(FlinkSqlParser.LATERAL, 0); + public KW_JOIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JOIN, 0); } - public LAZY(): TerminalNode { - return this.getToken(FlinkSqlParser.LAZY, 0); + public KW_LAG(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LAG, 0); } - public LIKE(): TerminalNode { - return this.getToken(FlinkSqlParser.LIKE, 0); + public KW_LANGUAGE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LANGUAGE, 0); } - public LIMIT(): TerminalNode { - return this.getToken(FlinkSqlParser.LIMIT, 0); + public KW_LATERAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LATERAL, 0); } - public LINES(): TerminalNode { - return this.getToken(FlinkSqlParser.LINES, 0); + public KW_LEADING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LEADING, 0); } - public LIST(): TerminalNode { - return this.getToken(FlinkSqlParser.LIST, 0); + public KW_LEFT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LEFT, 0); } - public LOAD(): TerminalNode { - return this.getToken(FlinkSqlParser.LOAD, 0); + public KW_LIKE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LIKE, 0); } - public LOCAL(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCAL, 0); + public KW_LIMIT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LIMIT, 0); } - public LOCATION(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCATION, 0); + public KW_LOCAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LOCAL, 0); } - public LOCK(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCK, 0); + public KW_MATCH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MATCH, 0); } - public LOCKS(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCKS, 0); + public KW_MATCH_RECOGNIZE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MATCH_RECOGNIZE, 0); } - public LOGICAL(): TerminalNode { - return this.getToken(FlinkSqlParser.LOGICAL, 0); + public KW_MEASURES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MEASURES, 0); } - public MACRO(): TerminalNode { - return this.getToken(FlinkSqlParser.MACRO, 0); + public KW_MERGE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MERGE, 0); } - public MAP(): TerminalNode { - return this.getToken(FlinkSqlParser.MAP, 0); + public KW_METADATA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_METADATA, 0); } - public MATCH(): TerminalNode { - return this.getToken(FlinkSqlParser.MATCH, 0); + public KW_MINUS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MINUS, 0); } - public MINUS(): TerminalNode { - return this.getToken(FlinkSqlParser.MINUS, 0); + public KW_MINUTE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MINUTE, 0); } - public MSCK(): TerminalNode { - return this.getToken(FlinkSqlParser.MSCK, 0); + public KW_MODIFIES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MODIFIES, 0); } - public MULTISET(): TerminalNode { - return this.getToken(FlinkSqlParser.MULTISET, 0); + public KW_MODULE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MODULE, 0); } - public NEXT(): TerminalNode { - return this.getToken(FlinkSqlParser.NEXT, 0); + public KW_MONTH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MONTH, 0); } - public NO(): TerminalNode { - return this.getToken(FlinkSqlParser.NO, 0); + public KW_MULTISET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MULTISET, 0); } - public NULL(): TerminalNode { - return this.getToken(FlinkSqlParser.NULL, 0); + public KW_NATURAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NATURAL, 0); } - public NULLS(): TerminalNode { - return this.getToken(FlinkSqlParser.NULLS, 0); + public KW_NEXT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NEXT, 0); } - public OF(): TerminalNode { - return this.getToken(FlinkSqlParser.OF, 0); + public KW_NO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NO, 0); } - public OPTION(): TerminalNode { - return this.getToken(FlinkSqlParser.OPTION, 0); + public KW_NONE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NONE, 0); } - public OPTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.OPTIONS, 0); + public KW_NOT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NOT, 0); } - public OUT(): TerminalNode { - return this.getToken(FlinkSqlParser.OUT, 0); + public KW_NULL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULL, 0); } - public OUTPUTFORMAT(): TerminalNode { - return this.getToken(FlinkSqlParser.OUTPUTFORMAT, 0); + public KW_NUMERIC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NUMERIC, 0); } - public OVER(): TerminalNode { - return this.getToken(FlinkSqlParser.OVER, 0); + public KW_OF(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OF, 0); } - public OVERWRITE(): TerminalNode { - return this.getToken(FlinkSqlParser.OVERWRITE, 0); + public KW_OFFSET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OFFSET, 0); } - public PARTITION(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITION, 0); + public KW_ON(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ON, 0); } - public PARTITIONED(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITIONED, 0); + public KW_ONE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ONE, 0); } - public PARTITIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITIONS, 0); + public KW_OR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OR, 0); } - public PERCENTLIT(): TerminalNode { - return this.getToken(FlinkSqlParser.PERCENTLIT, 0); + public KW_ORDER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ORDER, 0); } - public PERIOD(): TerminalNode { - return this.getToken(FlinkSqlParser.PERIOD, 0); + public KW_OUT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OUT, 0); } - public PIVOT(): TerminalNode { - return this.getToken(FlinkSqlParser.PIVOT, 0); + public KW_OUTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OUTER, 0); } - public POSITION(): TerminalNode { - return this.getToken(FlinkSqlParser.POSITION, 0); + public KW_OVER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OVER, 0); } - public PRECEDING(): TerminalNode { - return this.getToken(FlinkSqlParser.PRECEDING, 0); + public KW_OVERLAY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OVERLAY, 0); } - public PRINCIPALS(): TerminalNode { - return this.getToken(FlinkSqlParser.PRINCIPALS, 0); + public KW_PARTITION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PARTITION, 0); } - public PURGE(): TerminalNode { - return this.getToken(FlinkSqlParser.PURGE, 0); + public KW_PATTERN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PATTERN, 0); } - public RANGE(): TerminalNode { - return this.getToken(FlinkSqlParser.RANGE, 0); + public KW_PER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PER, 0); } - public RAW(): TerminalNode { - return this.getToken(FlinkSqlParser.RAW, 0); + public KW_PERCENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PERCENT, 0); } - public RECORDREADER(): TerminalNode { - return this.getToken(FlinkSqlParser.RECORDREADER, 0); + public KW_PERIOD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PERIOD, 0); } - public RECORDWRITER(): TerminalNode { - return this.getToken(FlinkSqlParser.RECORDWRITER, 0); + public KW_POSITION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_POSITION, 0); } - public RECOVER(): TerminalNode { - return this.getToken(FlinkSqlParser.RECOVER, 0); + public KW_PRIMARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRIMARY, 0); } - public REDUCE(): TerminalNode { - return this.getToken(FlinkSqlParser.REDUCE, 0); + public KW_RANGE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RANGE, 0); } - public REFRESH(): TerminalNode { - return this.getToken(FlinkSqlParser.REFRESH, 0); + public KW_RANK(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RANK, 0); } - public RENAME(): TerminalNode { - return this.getToken(FlinkSqlParser.RENAME, 0); + public KW_RESET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RESET, 0); } - public REPAIR(): TerminalNode { - return this.getToken(FlinkSqlParser.REPAIR, 0); + public KW_REVOKE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_REVOKE, 0); } - public REPLACE(): TerminalNode { - return this.getToken(FlinkSqlParser.REPLACE, 0); + public KW_RIGHT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RIGHT, 0); } - public RESET(): TerminalNode { - return this.getToken(FlinkSqlParser.RESET, 0); + public KW_RLIKE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RLIKE, 0); } - public RESTRICT(): TerminalNode { - return this.getToken(FlinkSqlParser.RESTRICT, 0); + public KW_ROLLBACK(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROLLBACK, 0); } - public REVOKE(): TerminalNode { - return this.getToken(FlinkSqlParser.REVOKE, 0); + public KW_ROLLUP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROLLUP, 0); } - public RLIKE(): TerminalNode { - return this.getToken(FlinkSqlParser.RLIKE, 0); + public KW_ROW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROW, 0); } - public ROLE(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLE, 0); + public KW_ROWS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROWS, 0); } - public ROLES(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLES, 0); + public KW_SECOND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SECOND, 0); } - public ROLLBACK(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLLBACK, 0); + public KW_SELECT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SELECT, 0); } - public ROLLUP(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLLUP, 0); + public KW_SET(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SET, 0); } - public ROW(): TerminalNode { - return this.getToken(FlinkSqlParser.ROW, 0); + public KW_SHOW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SHOW, 0); } - public ROWS(): TerminalNode { - return this.getToken(FlinkSqlParser.ROWS, 0); + public KW_SKIP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SKIP, 0); } - public SEMI(): TerminalNode { - return this.getToken(FlinkSqlParser.SEMI, 0); + public KW_SMALLINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SMALLINT, 0); } - public SEPARATED(): TerminalNode { - return this.getToken(FlinkSqlParser.SEPARATED, 0); + public KW_START(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_START, 0); } - public SERDE(): TerminalNode { - return this.getToken(FlinkSqlParser.SERDE, 0); + public KW_STATIC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STATIC, 0); } - public SERDEPROPERTIES(): TerminalNode { - return this.getToken(FlinkSqlParser.SERDEPROPERTIES, 0); + public KW_SUBSTRING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SUBSTRING, 0); } - public SET(): TerminalNode { - return this.getToken(FlinkSqlParser.SET, 0); + public KW_SUM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SUM, 0); } - public SETMINUS(): TerminalNode { - return this.getToken(FlinkSqlParser.SETMINUS, 0); + public KW_SYSTEM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SYSTEM, 0); } - public SETS(): TerminalNode { - return this.getToken(FlinkSqlParser.SETS, 0); + public KW_SYSTEM_TIME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SYSTEM_TIME, 0); } - public SHOW(): TerminalNode { - return this.getToken(FlinkSqlParser.SHOW, 0); + public KW_SYSTEM_USER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SYSTEM_USER, 0); } - public SKEWED(): TerminalNode { - return this.getToken(FlinkSqlParser.SKEWED, 0); + public KW_TABLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLE, 0); } - public SMALLINT(): TerminalNode { - return this.getToken(FlinkSqlParser.SMALLINT, 0); + public KW_TABLESAMPLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLESAMPLE, 0); } - public SORT(): TerminalNode { - return this.getToken(FlinkSqlParser.SORT, 0); + public KW_THEN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_THEN, 0); } - public SORTED(): TerminalNode { - return this.getToken(FlinkSqlParser.SORTED, 0); + public KW_TIME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIME, 0); } - public START(): TerminalNode { - return this.getToken(FlinkSqlParser.START, 0); + public KW_TIMESTAMP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMESTAMP, 0); } - public STATISTICS(): TerminalNode { - return this.getToken(FlinkSqlParser.STATISTICS, 0); + public KW_TINYINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TINYINT, 0); } - public STORED(): TerminalNode { - return this.getToken(FlinkSqlParser.STORED, 0); + public KW_TO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TO, 0); } - public STRATIFY(): TerminalNode { - return this.getToken(FlinkSqlParser.STRATIFY, 0); + public KW_TRUE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TRUE, 0); } - public STRING(): TerminalNode { - return this.getToken(FlinkSqlParser.STRING, 0); + public KW_TRUNCATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TRUNCATE, 0); } - public STRUCT(): TerminalNode { - return this.getToken(FlinkSqlParser.STRUCT, 0); + public KW_UNION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNION, 0); } - public SYSTEM(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM, 0); + public KW_UNIQUE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNIQUE, 0); } - public SYSTEM_TIME(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM_TIME, 0); + public KW_UNKNOWN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNKNOWN, 0); } - public TABLES(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLES, 0); + public KW_UNNEST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNNEST, 0); } - public TABLESAMPLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLESAMPLE, 0); + public KW_UPPER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UPPER, 0); } - public TBLPROPERTIES(): TerminalNode { - return this.getToken(FlinkSqlParser.TBLPROPERTIES, 0); + public KW_UPSERT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UPSERT, 0); } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); + public KW_USER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USER, 0); } - public TERMINATED(): TerminalNode { - return this.getToken(FlinkSqlParser.TERMINATED, 0); + public KW_USING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USING, 0); } - public TIME(): TerminalNode { - return this.getToken(FlinkSqlParser.TIME, 0); + public KW_VALUE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VALUE, 0); } - public TIMESTAMP(): TerminalNode { - return this.getToken(FlinkSqlParser.TIMESTAMP, 0); + public KW_VALUES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VALUES, 0); } - public TINYINT(): TerminalNode { - return this.getToken(FlinkSqlParser.TINYINT, 0); + public KW_VARBINARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VARBINARY, 0); } - public TOUCH(): TerminalNode { - return this.getToken(FlinkSqlParser.TOUCH, 0); + public KW_VARCHAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VARCHAR, 0); } - public TRANSACTION(): TerminalNode { - return this.getToken(FlinkSqlParser.TRANSACTION, 0); + public KW_WHEN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WHEN, 0); } - public TRANSACTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.TRANSACTIONS, 0); + public KW_WHERE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WHERE, 0); } - public TRANSFORM(): TerminalNode { - return this.getToken(FlinkSqlParser.TRANSFORM, 0); + public KW_WINDOW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WINDOW, 0); } - public TRUE(): TerminalNode { - return this.getToken(FlinkSqlParser.TRUE, 0); + public KW_WITH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITH, 0); } - public TRUNCATE(): TerminalNode { - return this.getToken(FlinkSqlParser.TRUNCATE, 0); + public KW_WITHIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITHIN, 0); } - public UNARCHIVE(): TerminalNode { - return this.getToken(FlinkSqlParser.UNARCHIVE, 0); + public KW_WITHOUT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WITHOUT, 0); } - public UNBOUNDED(): TerminalNode { - return this.getToken(FlinkSqlParser.UNBOUNDED, 0); - } - public UNCACHE(): TerminalNode { - return this.getToken(FlinkSqlParser.UNCACHE, 0); - } - public UNLOCK(): TerminalNode { - return this.getToken(FlinkSqlParser.UNLOCK, 0); - } - public UNSET(): TerminalNode { - return this.getToken(FlinkSqlParser.UNSET, 0); - } - public UNNEST(): TerminalNode { - return this.getToken(FlinkSqlParser.UNNEST, 0); - } - public USE(): TerminalNode { - return this.getToken(FlinkSqlParser.USE, 0); - } - public VALUES(): TerminalNode { - return this.getToken(FlinkSqlParser.VALUES, 0); - } - public VARBINARY(): TerminalNode { - return this.getToken(FlinkSqlParser.VARBINARY, 0); - } - public VARCHAR(): TerminalNode { - return this.getToken(FlinkSqlParser.VARCHAR, 0); - } - public VIEW(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEW, 0); - } - public VIEWS(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEWS, 0); - } - public WATERMARK(): TerminalNode { - return this.getToken(FlinkSqlParser.WATERMARK, 0); - } - public WINDOW(): TerminalNode { - return this.getToken(FlinkSqlParser.WINDOW, 0); - } - public WITHIN(): TerminalNode { - return this.getToken(FlinkSqlParser.WITHIN, 0); - } - public WS(): TerminalNode { - return this.getToken(FlinkSqlParser.WS, 0); + public KW_YEAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_YEAR, 0); } public get ruleIndex(): number { - return FlinkSqlParser.RULE_ansiNonReserved; + return FlinkSqlParser.RULE_reservedKeywords; } public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterAnsiNonReserved) { - listener.enterAnsiNonReserved(this); + if(listener.enterReservedKeywords) { + listener.enterReservedKeywords(this); } } public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitAnsiNonReserved) { - listener.exitAnsiNonReserved(this); + if(listener.exitReservedKeywords) { + listener.exitReservedKeywords(this); } } // @Override public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitAnsiNonReserved) { - return visitor.visitAnsiNonReserved(this); + if (visitor.visitReservedKeywords) { + return visitor.visitReservedKeywords(this); } else { return visitor.visitChildren(this); } @@ -21266,813 +21708,541 @@ export class AnsiNonReservedContext extends ParserRuleContext { } -export class StrictNonReservedContext extends ParserRuleContext { +export class NonReservedKeywordsContext extends ParserRuleContext { constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { super(parent, invokingState); this.parser = parser; } - public ANTI(): TerminalNode { - return this.getToken(FlinkSqlParser.ANTI, 0); + public KW_ADD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ADD, 0); } - public CROSS(): TerminalNode { - return this.getToken(FlinkSqlParser.CROSS, 0); + public KW_ADMIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ADMIN, 0); } - public EXCEPT(): TerminalNode { - return this.getToken(FlinkSqlParser.EXCEPT, 0); + public KW_AFTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_AFTER, 0); } - public FULL(): TerminalNode { - return this.getToken(FlinkSqlParser.FULL, 0); + public KW_ANALYZE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ANALYZE, 0); } - public INNER(): TerminalNode { - return this.getToken(FlinkSqlParser.INNER, 0); + public KW_ASC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ASC, 0); } - public INTERSECT(): TerminalNode { - return this.getToken(FlinkSqlParser.INTERSECT, 0); + public KW_BEFORE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BEFORE, 0); } - public JOIN(): TerminalNode { - return this.getToken(FlinkSqlParser.JOIN, 0); + public KW_BYTES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_BYTES, 0); } - public LEFT(): TerminalNode { - return this.getToken(FlinkSqlParser.LEFT, 0); + public KW_CASCADE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CASCADE, 0); } - public NATURAL(): TerminalNode { - return this.getToken(FlinkSqlParser.NATURAL, 0); + public KW_CATALOG(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CATALOG, 0); } - public ON(): TerminalNode { - return this.getToken(FlinkSqlParser.ON, 0); + public KW_CATALOGS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CATALOGS, 0); } - public RIGHT(): TerminalNode { - return this.getToken(FlinkSqlParser.RIGHT, 0); + public KW_CENTURY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CENTURY, 0); } - public SEMI(): TerminalNode { - return this.getToken(FlinkSqlParser.SEMI, 0); + public KW_CHAIN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CHAIN, 0); } - public SETMINUS(): TerminalNode { - return this.getToken(FlinkSqlParser.SETMINUS, 0); + public KW_CHANGELOG_MODE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CHANGELOG_MODE, 0); } - public UNION(): TerminalNode { - return this.getToken(FlinkSqlParser.UNION, 0); + public KW_CHARACTERS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CHARACTERS, 0); } - public USING(): TerminalNode { - return this.getToken(FlinkSqlParser.USING, 0); + public KW_COMMENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COMMENT, 0); + } + public KW_COMPACT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COMPACT, 0); + } + public KW_COLUMNS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_COLUMNS, 0); + } + public KW_CONSTRAINTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRAINTS, 0); + } + public KW_CONSTRUCTOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRUCTOR, 0); + } + public KW_CUMULATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CUMULATE, 0); + } + public KW_DATA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATA, 0); + } + public KW_DATABASE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATABASE, 0); + } + public KW_DATABASES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DATABASES, 0); + } + public KW_DAYS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DAYS, 0); + } + public KW_DECADE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DECADE, 0); + } + public KW_DEFINED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DEFINED, 0); + } + public KW_DESC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DESC, 0); + } + public KW_DESCRIPTOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DESCRIPTOR, 0); + } + public KW_DIV(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_DIV, 0); + } + public KW_ENCODING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ENCODING, 0); + } + public KW_ENFORCED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ENFORCED, 0); + } + public KW_ENGINE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ENGINE, 0); + } + public KW_ERROR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ERROR, 0); + } + public KW_ESTIMATED_COST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ESTIMATED_COST, 0); + } + public KW_EXCEPTION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXCEPTION, 0); + } + public KW_EXCLUDE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXCLUDE, 0); + } + public KW_EXCLUDING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXCLUDING, 0); + } + public KW_EXTENDED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_EXTENDED, 0); + } + public KW_FILE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FILE, 0); + } + public KW_FINAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FINAL, 0); + } + public KW_FIRST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FIRST, 0); + } + public KW_FOLLOWING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FOLLOWING, 0); + } + public KW_FORMAT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FORMAT, 0); + } + public KW_FORTRAN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FORTRAN, 0); + } + public KW_FOUND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FOUND, 0); + } + public KW_FRAC_SECOND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FRAC_SECOND, 0); + } + public KW_FUNCTIONS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_FUNCTIONS, 0); + } + public KW_GENERAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GENERAL, 0); + } + public KW_GENERATED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GENERATED, 0); + } + public KW_GO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GO, 0); + } + public KW_GOTO(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GOTO, 0); + } + public KW_GRANTED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_GRANTED, 0); + } + public KW_HOP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_HOP, 0); + } + public KW_HOURS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_HOURS, 0); + } + public KW_IF(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IF, 0); + } + public KW_IGNORE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_IGNORE, 0); + } + public KW_INCREMENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INCREMENT, 0); + } + public KW_INPUT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INPUT, 0); + } + public KW_INVOKER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_INVOKER, 0); + } + public KW_JAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JAR, 0); + } + public KW_JARS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JARS, 0); + } + public KW_JAVA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JAVA, 0); + } + public KW_JSON(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JSON, 0); + } + public KW_JSON_EXECUTION_PLAN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_JSON_EXECUTION_PLAN, 0); + } + public KW_KEY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_KEY, 0); + } + public KW_KEY_MEMBER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_KEY_MEMBER, 0); + } + public KW_KEY_TYPE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_KEY_TYPE, 0); + } + public KW_LABEL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LABEL, 0); + } + public KW_LAST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LAST, 0); + } + public KW_LENGTH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LENGTH, 0); + } + public KW_LEVEL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LEVEL, 0); + } + public KW_LOAD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_LOAD, 0); + } + public KW_MAP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MAP, 0); + } + public KW_MICROSECOND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MICROSECOND, 0); + } + public KW_MILLENNIUM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MILLENNIUM, 0); + } + public KW_MILLISECOND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MILLISECOND, 0); + } + public KW_MINUTES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MINUTES, 0); + } + public KW_MINVALUE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MINVALUE, 0); + } + public KW_MODIFY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MODIFY, 0); + } + public KW_MODULES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MODULES, 0); + } + public KW_MONTHS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_MONTHS, 0); + } + public KW_NANOSECOND(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NANOSECOND, 0); + } + public KW_NULLS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULLS, 0); + } + public KW_NUMBER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NUMBER, 0); + } + public KW_OPTION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OPTION, 0); + } + public KW_OPTIONS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OPTIONS, 0); + } + public KW_ORDERING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ORDERING, 0); + } + public KW_OUTPUT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OUTPUT, 0); + } + public KW_OVERWRITE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OVERWRITE, 0); + } + public KW_OVERWRITING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_OVERWRITING, 0); + } + public KW_PARTITIONED(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PARTITIONED, 0); + } + public KW_PARTITIONS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PARTITIONS, 0); + } + public KW_PASSING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PASSING, 0); + } + public KW_PAST(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PAST, 0); + } + public KW_PATH(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PATH, 0); + } + public KW_PLACING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PLACING, 0); + } + public KW_PLAN(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PLAN, 0); + } + public KW_PRECEDING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRECEDING, 0); + } + public KW_PRESERVE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRESERVE, 0); + } + public KW_PRIOR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRIOR, 0); + } + public KW_PRIVILEGES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PRIVILEGES, 0); + } + public KW_PUBLIC(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PUBLIC, 0); + } + public KW_PYTHON(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON, 0); + } + public KW_PYTHON_FILES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_FILES, 0); + } + public KW_PYTHON_REQUIREMENTS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_REQUIREMENTS, 0); + } + public KW_PYTHON_DEPENDENCIES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_DEPENDENCIES, 0); + } + public KW_PYTHON_JAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_JAR, 0); + } + public KW_PYTHON_ARCHIVES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_ARCHIVES, 0); + } + public KW_PYTHON_PARAMETER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_PYTHON_PARAMETER, 0); + } + public KW_QUARTER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_QUARTER, 0); + } + public KW_RAW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RAW, 0); + } + public KW_READ(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_READ, 0); + } + public KW_RELATIVE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RELATIVE, 0); + } + public KW_REMOVE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_REMOVE, 0); + } + public KW_RENAME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RENAME, 0); + } + public KW_REPLACE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_REPLACE, 0); + } + public KW_RESPECT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RESPECT, 0); + } + public KW_RESTART(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RESTART, 0); + } + public KW_RESTRICT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_RESTRICT, 0); + } + public KW_ROLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROLE, 0); + } + public KW_ROW_COUNT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ROW_COUNT, 0); + } + public KW_SCALA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SCALA, 0); + } + public KW_SCALAR(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SCALAR, 0); + } + public KW_SCALE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SCALE, 0); + } + public KW_SCHEMA(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SCHEMA, 0); + } + public KW_SECONDS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SECONDS, 0); + } + public KW_SECTION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SECTION, 0); + } + public KW_SECURITY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SECURITY, 0); + } + public KW_SELF(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SELF, 0); + } + public KW_SERVER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SERVER, 0); + } + public KW_SERVER_NAME(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SERVER_NAME, 0); + } + public KW_SESSION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SESSION, 0); + } + public KW_SETS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SETS, 0); + } + public KW_SIMPLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SIMPLE, 0); + } + public KW_SIZE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SIZE, 0); + } + public KW_SLIDE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SLIDE, 0); + } + public KW_SOURCE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SOURCE, 0); + } + public KW_SPACE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_SPACE, 0); + } + public KW_STATE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STATE, 0); + } + public KW_STATEMENT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STATEMENT, 0); + } + public KW_STEP(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STEP, 0); + } + public KW_STRING(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STRING, 0); + } + public KW_STRUCTURE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STRUCTURE, 0); + } + public KW_STYLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_STYLE, 0); + } + public KW_TABLES(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TABLES, 0); + } + public KW_TEMPORARY(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TEMPORARY, 0); + } + public KW_TIMECOL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMECOL, 0); + } + public KW_TIMESTAMP_LTZ(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMESTAMP_LTZ, 0); + } + public KW_TIMESTAMPADD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMESTAMPADD, 0); + } + public KW_TIMESTAMPDIFF(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TIMESTAMPDIFF, 0); + } + public KW_TRANSFORM(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TRANSFORM, 0); + } + public KW_TUMBLE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TUMBLE, 0); + } + public KW_TYPE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_TYPE, 0); + } + public KW_UNDER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNDER, 0); + } + public KW_UNLOAD(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UNLOAD, 0); + } + public KW_USAGE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USAGE, 0); + } + public KW_USE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_USE, 0); + } + public KW_UTF16(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UTF16, 0); + } + public KW_UTF32(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UTF32, 0); + } + public KW_UTF8(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_UTF8, 0); + } + public KW_VERSION(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VERSION, 0); + } + public KW_VIEW(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIEW, 0); + } + public KW_VIEWS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIEWS, 0); + } + public KW_VIRTUAL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_VIRTUAL, 0); + } + public KW_WATERMARK(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WATERMARK, 0); + } + public KW_WATERMARKS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WATERMARKS, 0); + } + public KW_WEEK(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WEEK, 0); + } + public KW_WORK(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WORK, 0); + } + public KW_WRAPPER(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_WRAPPER, 0); + } + public KW_YEARS(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_YEARS, 0); + } + public KW_ZONE(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_ZONE, 0); } public get ruleIndex(): number { - return FlinkSqlParser.RULE_strictNonReserved; + return FlinkSqlParser.RULE_nonReservedKeywords; } public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterStrictNonReserved) { - listener.enterStrictNonReserved(this); + if(listener.enterNonReservedKeywords) { + listener.enterNonReservedKeywords(this); } } public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitStrictNonReserved) { - listener.exitStrictNonReserved(this); + if(listener.exitNonReservedKeywords) { + listener.exitNonReservedKeywords(this); } } // @Override public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitStrictNonReserved) { - return visitor.visitStrictNonReserved(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class NonReservedContext extends ParserRuleContext { - constructor(parser?: FlinkSqlParser, parent?: ParserRuleContext, invokingState?: number) { - super(parent, invokingState); - this.parser = parser; - } - public ADD(): TerminalNode { - return this.getToken(FlinkSqlParser.ADD, 0); - } - public AFTER(): TerminalNode { - return this.getToken(FlinkSqlParser.AFTER, 0); - } - public ALL(): TerminalNode { - return this.getToken(FlinkSqlParser.ALL, 0); - } - public ALTER(): TerminalNode { - return this.getToken(FlinkSqlParser.ALTER, 0); - } - public ANALYZE(): TerminalNode { - return this.getToken(FlinkSqlParser.ANALYZE, 0); - } - public AND(): TerminalNode { - return this.getToken(FlinkSqlParser.AND, 0); - } - public ANY(): TerminalNode { - return this.getToken(FlinkSqlParser.ANY, 0); - } - public COLUMNS(): TerminalNode { - return this.getToken(FlinkSqlParser.COLUMNS, 0); - } - public ARRAY(): TerminalNode { - return this.getToken(FlinkSqlParser.ARRAY, 0); - } - public AS(): TerminalNode { - return this.getToken(FlinkSqlParser.AS, 0); - } - public ASC(): TerminalNode { - return this.getToken(FlinkSqlParser.ASC, 0); - } - public AT(): TerminalNode { - return this.getToken(FlinkSqlParser.AT, 0); - } - public BETWEEN(): TerminalNode { - return this.getToken(FlinkSqlParser.BETWEEN, 0); - } - public BIGINT(): TerminalNode { - return this.getToken(FlinkSqlParser.BIGINT, 0); - } - public BINARY(): TerminalNode { - return this.getToken(FlinkSqlParser.BINARY, 0); - } - public BOOLEAN(): TerminalNode { - return this.getToken(FlinkSqlParser.BOOLEAN, 0); - } - public BOTH(): TerminalNode { - return this.getToken(FlinkSqlParser.BOTH, 0); - } - public BUCKET(): TerminalNode { - return this.getToken(FlinkSqlParser.BUCKET, 0); - } - public BUCKETS(): TerminalNode { - return this.getToken(FlinkSqlParser.BUCKETS, 0); - } - public BY(): TerminalNode { - return this.getToken(FlinkSqlParser.BY, 0); - } - public BYTES(): TerminalNode { - return this.getToken(FlinkSqlParser.BYTES, 0); - } - public CACHE(): TerminalNode { - return this.getToken(FlinkSqlParser.CACHE, 0); - } - public CASCADE(): TerminalNode { - return this.getToken(FlinkSqlParser.CASCADE, 0); - } - public CASE(): TerminalNode { - return this.getToken(FlinkSqlParser.CASE, 0); - } - public CAST(): TerminalNode { - return this.getToken(FlinkSqlParser.CAST, 0); - } - public CATALOG(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOG, 0); - } - public CATALOGS(): TerminalNode { - return this.getToken(FlinkSqlParser.CATALOGS, 0); - } - public CHANGE(): TerminalNode { - return this.getToken(FlinkSqlParser.CHANGE, 0); - } - public CHAR(): TerminalNode { - return this.getToken(FlinkSqlParser.CHAR, 0); - } - public CLEAR(): TerminalNode { - return this.getToken(FlinkSqlParser.CLEAR, 0); - } - public CLUSTER(): TerminalNode { - return this.getToken(FlinkSqlParser.CLUSTER, 0); - } - public CLUSTERED(): TerminalNode { - return this.getToken(FlinkSqlParser.CLUSTERED, 0); - } - public CODEGEN(): TerminalNode { - return this.getToken(FlinkSqlParser.CODEGEN, 0); - } - public COLLECTION(): TerminalNode { - return this.getToken(FlinkSqlParser.COLLECTION, 0); - } - public COLUMN(): TerminalNode { - return this.getToken(FlinkSqlParser.COLUMN, 0); - } - public COMMENT(): TerminalNode { - return this.getToken(FlinkSqlParser.COMMENT, 0); - } - public COMMIT(): TerminalNode { - return this.getToken(FlinkSqlParser.COMMIT, 0); - } - public COMPACT(): TerminalNode { - return this.getToken(FlinkSqlParser.COMPACT, 0); - } - public COMPACTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.COMPACTIONS, 0); - } - public COMPUTE(): TerminalNode { - return this.getToken(FlinkSqlParser.COMPUTE, 0); - } - public CONCATENATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CONCATENATE, 0); - } - public CONSTRAINT(): TerminalNode { - return this.getToken(FlinkSqlParser.CONSTRAINT, 0); - } - public CONSTRAINTS(): TerminalNode { - return this.getToken(FlinkSqlParser.CONSTRAINTS, 0); - } - public COST(): TerminalNode { - return this.getToken(FlinkSqlParser.COST, 0); - } - public CREATE(): TerminalNode { - return this.getToken(FlinkSqlParser.CREATE, 0); - } - public CUBE(): TerminalNode { - return this.getToken(FlinkSqlParser.CUBE, 0); - } - public CURRENT(): TerminalNode { - return this.getToken(FlinkSqlParser.CURRENT, 0); - } - public DATA(): TerminalNode { - return this.getToken(FlinkSqlParser.DATA, 0); - } - public DATABASE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASE, 0); - } - public DATABASES(): TerminalNode { - return this.getToken(FlinkSqlParser.DATABASES, 0); - } - public DATE(): TerminalNode { - return this.getToken(FlinkSqlParser.DATE, 0); - } - public DATETIME(): TerminalNode { - return this.getToken(FlinkSqlParser.DATETIME, 0); - } - public DBPROPERTIES(): TerminalNode { - return this.getToken(FlinkSqlParser.DBPROPERTIES, 0); - } - public DECIMAL(): TerminalNode { - return this.getToken(FlinkSqlParser.DECIMAL, 0); - } - public DEFINED(): TerminalNode { - return this.getToken(FlinkSqlParser.DEFINED, 0); - } - public DELETE(): TerminalNode { - return this.getToken(FlinkSqlParser.DELETE, 0); - } - public DELIMITED(): TerminalNode { - return this.getToken(FlinkSqlParser.DELIMITED, 0); - } - public DESC(): TerminalNode { - return this.getToken(FlinkSqlParser.DESC, 0); - } - public DESCRIBE(): TerminalNode { - return this.getToken(FlinkSqlParser.DESCRIBE, 0); - } - public DFS(): TerminalNode { - return this.getToken(FlinkSqlParser.DFS, 0); - } - public DIRECTORIES(): TerminalNode { - return this.getToken(FlinkSqlParser.DIRECTORIES, 0); - } - public DIRECTORY(): TerminalNode { - return this.getToken(FlinkSqlParser.DIRECTORY, 0); - } - public DISTINCT(): TerminalNode { - return this.getToken(FlinkSqlParser.DISTINCT, 0); - } - public DISTRIBUTE(): TerminalNode { - return this.getToken(FlinkSqlParser.DISTRIBUTE, 0); - } - public DIV(): TerminalNode { - return this.getToken(FlinkSqlParser.DIV, 0); - } - public DOUBLE(): TerminalNode { - return this.getToken(FlinkSqlParser.DOUBLE, 0); - } - public DROP(): TerminalNode { - return this.getToken(FlinkSqlParser.DROP, 0); - } - public ELSE(): TerminalNode { - return this.getToken(FlinkSqlParser.ELSE, 0); - } - public END(): TerminalNode { - return this.getToken(FlinkSqlParser.END, 0); - } - public ESCAPED(): TerminalNode { - return this.getToken(FlinkSqlParser.ESCAPED, 0); - } - public EXCHANGE(): TerminalNode { - return this.getToken(FlinkSqlParser.EXCHANGE, 0); - } - public EXCLUDING(): TerminalNode { - return this.getToken(FlinkSqlParser.EXCLUDING, 0); - } - public EXISTS(): TerminalNode { - return this.getToken(FlinkSqlParser.EXISTS, 0); - } - public EXPLAIN(): TerminalNode { - return this.getToken(FlinkSqlParser.EXPLAIN, 0); - } - public EXPORT(): TerminalNode { - return this.getToken(FlinkSqlParser.EXPORT, 0); - } - public EXTENDED(): TerminalNode { - return this.getToken(FlinkSqlParser.EXTENDED, 0); - } - public EXTERNAL(): TerminalNode { - return this.getToken(FlinkSqlParser.EXTERNAL, 0); - } - public EXTRACT(): TerminalNode { - return this.getToken(FlinkSqlParser.EXTRACT, 0); - } - public FALSE(): TerminalNode { - return this.getToken(FlinkSqlParser.FALSE, 0); - } - public FIELDS(): TerminalNode { - return this.getToken(FlinkSqlParser.FIELDS, 0); - } - public FILEFORMAT(): TerminalNode { - return this.getToken(FlinkSqlParser.FILEFORMAT, 0); - } - public FIRST(): TerminalNode { - return this.getToken(FlinkSqlParser.FIRST, 0); - } - public FLOAT(): TerminalNode { - return this.getToken(FlinkSqlParser.FLOAT, 0); - } - public FOLLOWING(): TerminalNode { - return this.getToken(FlinkSqlParser.FOLLOWING, 0); - } - public FOR(): TerminalNode { - return this.getToken(FlinkSqlParser.FOR, 0); - } - public FORMAT(): TerminalNode { - return this.getToken(FlinkSqlParser.FORMAT, 0); - } - public FORMATTED(): TerminalNode { - return this.getToken(FlinkSqlParser.FORMATTED, 0); - } - public FROM(): TerminalNode { - return this.getToken(FlinkSqlParser.FROM, 0); - } - public FUNCTION(): TerminalNode { - return this.getToken(FlinkSqlParser.FUNCTION, 0); - } - public FUNCTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.FUNCTIONS, 0); - } - public GENERATED(): TerminalNode { - return this.getToken(FlinkSqlParser.GENERATED, 0); - } - public GLOBAL(): TerminalNode { - return this.getToken(FlinkSqlParser.GLOBAL, 0); - } - public GRANT(): TerminalNode { - return this.getToken(FlinkSqlParser.GRANT, 0); - } - public GROUP(): TerminalNode { - return this.getToken(FlinkSqlParser.GROUP, 0); - } - public GROUPING(): TerminalNode { - return this.getToken(FlinkSqlParser.GROUPING, 0); - } - public HAVING(): TerminalNode { - return this.getToken(FlinkSqlParser.HAVING, 0); - } - public IF(): TerminalNode { - return this.getToken(FlinkSqlParser.IF, 0); - } - public IGNORE(): TerminalNode { - return this.getToken(FlinkSqlParser.IGNORE, 0); - } - public IMPORT(): TerminalNode { - return this.getToken(FlinkSqlParser.IMPORT, 0); - } - public IN(): TerminalNode { - return this.getToken(FlinkSqlParser.IN, 0); - } - public INCLUDING(): TerminalNode { - return this.getToken(FlinkSqlParser.INCLUDING, 0); - } - public INDEX(): TerminalNode { - return this.getToken(FlinkSqlParser.INDEX, 0); - } - public INDEXES(): TerminalNode { - return this.getToken(FlinkSqlParser.INDEXES, 0); - } - public INPATH(): TerminalNode { - return this.getToken(FlinkSqlParser.INPATH, 0); - } - public INPUTFORMAT(): TerminalNode { - return this.getToken(FlinkSqlParser.INPUTFORMAT, 0); - } - public INSERT(): TerminalNode { - return this.getToken(FlinkSqlParser.INSERT, 0); - } - public INT(): TerminalNode { - return this.getToken(FlinkSqlParser.INT, 0); - } - public INTERVAL(): TerminalNode { - return this.getToken(FlinkSqlParser.INTERVAL, 0); - } - public INTO(): TerminalNode { - return this.getToken(FlinkSqlParser.INTO, 0); - } - public IS(): TerminalNode { - return this.getToken(FlinkSqlParser.IS, 0); - } - public ITEMS(): TerminalNode { - return this.getToken(FlinkSqlParser.ITEMS, 0); - } - public KEY(): TerminalNode { - return this.getToken(FlinkSqlParser.KEY, 0); - } - public KEYS(): TerminalNode { - return this.getToken(FlinkSqlParser.KEYS, 0); - } - public LANGUAGE(): TerminalNode { - return this.getToken(FlinkSqlParser.LANGUAGE, 0); - } - public LAST(): TerminalNode { - return this.getToken(FlinkSqlParser.LAST, 0); - } - public LATERAL(): TerminalNode { - return this.getToken(FlinkSqlParser.LATERAL, 0); - } - public LAZY(): TerminalNode { - return this.getToken(FlinkSqlParser.LAZY, 0); - } - public LEADING(): TerminalNode { - return this.getToken(FlinkSqlParser.LEADING, 0); - } - public LIKE(): TerminalNode { - return this.getToken(FlinkSqlParser.LIKE, 0); - } - public LIMIT(): TerminalNode { - return this.getToken(FlinkSqlParser.LIMIT, 0); - } - public LINES(): TerminalNode { - return this.getToken(FlinkSqlParser.LINES, 0); - } - public LIST(): TerminalNode { - return this.getToken(FlinkSqlParser.LIST, 0); - } - public LOAD(): TerminalNode { - return this.getToken(FlinkSqlParser.LOAD, 0); - } - public LOCAL(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCAL, 0); - } - public LOCATION(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCATION, 0); - } - public LOCK(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCK, 0); - } - public LOCKS(): TerminalNode { - return this.getToken(FlinkSqlParser.LOCKS, 0); - } - public LOGICAL(): TerminalNode { - return this.getToken(FlinkSqlParser.LOGICAL, 0); - } - public MACRO(): TerminalNode { - return this.getToken(FlinkSqlParser.MACRO, 0); - } - public MAP(): TerminalNode { - return this.getToken(FlinkSqlParser.MAP, 0); - } - public MATCH(): TerminalNode { - return this.getToken(FlinkSqlParser.MATCH, 0); - } - public MINUS(): TerminalNode { - return this.getToken(FlinkSqlParser.MINUS, 0); - } - public MSCK(): TerminalNode { - return this.getToken(FlinkSqlParser.MSCK, 0); - } - public MULTISET(): TerminalNode { - return this.getToken(FlinkSqlParser.MULTISET, 0); - } - public NEXT(): TerminalNode { - return this.getToken(FlinkSqlParser.NEXT, 0); - } - public NO(): TerminalNode { - return this.getToken(FlinkSqlParser.NO, 0); - } - public NOT(): TerminalNode { - return this.getToken(FlinkSqlParser.NOT, 0); - } - public NULL(): TerminalNode { - return this.getToken(FlinkSqlParser.NULL, 0); - } - public NULLS(): TerminalNode { - return this.getToken(FlinkSqlParser.NULLS, 0); - } - public OF(): TerminalNode { - return this.getToken(FlinkSqlParser.OF, 0); - } - public OPTION(): TerminalNode { - return this.getToken(FlinkSqlParser.OPTION, 0); - } - public OPTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.OPTIONS, 0); - } - public OR(): TerminalNode { - return this.getToken(FlinkSqlParser.OR, 0); - } - public ORDER(): TerminalNode { - return this.getToken(FlinkSqlParser.ORDER, 0); - } - public OUT(): TerminalNode { - return this.getToken(FlinkSqlParser.OUT, 0); - } - public OUTER(): TerminalNode { - return this.getToken(FlinkSqlParser.OUTER, 0); - } - public OUTPUTFORMAT(): TerminalNode { - return this.getToken(FlinkSqlParser.OUTPUTFORMAT, 0); - } - public OVER(): TerminalNode { - return this.getToken(FlinkSqlParser.OVER, 0); - } - public OVERWRITE(): TerminalNode { - return this.getToken(FlinkSqlParser.OVERWRITE, 0); - } - public PARTITION(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITION, 0); - } - public PARTITIONED(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITIONED, 0); - } - public PARTITIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.PARTITIONS, 0); - } - public PERCENTLIT(): TerminalNode { - return this.getToken(FlinkSqlParser.PERCENTLIT, 0); - } - public PERIOD(): TerminalNode { - return this.getToken(FlinkSqlParser.PERIOD, 0); - } - public PIVOT(): TerminalNode { - return this.getToken(FlinkSqlParser.PIVOT, 0); - } - public POSITION(): TerminalNode { - return this.getToken(FlinkSqlParser.POSITION, 0); - } - public PRECEDING(): TerminalNode { - return this.getToken(FlinkSqlParser.PRECEDING, 0); - } - public PRIMARY(): TerminalNode { - return this.getToken(FlinkSqlParser.PRIMARY, 0); - } - public PRINCIPALS(): TerminalNode { - return this.getToken(FlinkSqlParser.PRINCIPALS, 0); - } - public PURGE(): TerminalNode { - return this.getToken(FlinkSqlParser.PURGE, 0); - } - public RANGE(): TerminalNode { - return this.getToken(FlinkSqlParser.RANGE, 0); - } - public RAW(): TerminalNode { - return this.getToken(FlinkSqlParser.RAW, 0); - } - public RECORDREADER(): TerminalNode { - return this.getToken(FlinkSqlParser.RECORDREADER, 0); - } - public RECORDWRITER(): TerminalNode { - return this.getToken(FlinkSqlParser.RECORDWRITER, 0); - } - public RECOVER(): TerminalNode { - return this.getToken(FlinkSqlParser.RECOVER, 0); - } - public REDUCE(): TerminalNode { - return this.getToken(FlinkSqlParser.REDUCE, 0); - } - public REFRESH(): TerminalNode { - return this.getToken(FlinkSqlParser.REFRESH, 0); - } - public RENAME(): TerminalNode { - return this.getToken(FlinkSqlParser.RENAME, 0); - } - public REPAIR(): TerminalNode { - return this.getToken(FlinkSqlParser.REPAIR, 0); - } - public REPLACE(): TerminalNode { - return this.getToken(FlinkSqlParser.REPLACE, 0); - } - public RESET(): TerminalNode { - return this.getToken(FlinkSqlParser.RESET, 0); - } - public RESTRICT(): TerminalNode { - return this.getToken(FlinkSqlParser.RESTRICT, 0); - } - public REVOKE(): TerminalNode { - return this.getToken(FlinkSqlParser.REVOKE, 0); - } - public RLIKE(): TerminalNode { - return this.getToken(FlinkSqlParser.RLIKE, 0); - } - public ROLE(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLE, 0); - } - public ROLES(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLES, 0); - } - public ROLLBACK(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLLBACK, 0); - } - public ROLLUP(): TerminalNode { - return this.getToken(FlinkSqlParser.ROLLUP, 0); - } - public ROW(): TerminalNode { - return this.getToken(FlinkSqlParser.ROW, 0); - } - public ROWS(): TerminalNode { - return this.getToken(FlinkSqlParser.ROWS, 0); - } - public SELECT(): TerminalNode { - return this.getToken(FlinkSqlParser.SELECT, 0); - } - public SEPARATED(): TerminalNode { - return this.getToken(FlinkSqlParser.SEPARATED, 0); - } - public SERDE(): TerminalNode { - return this.getToken(FlinkSqlParser.SERDE, 0); - } - public SERDEPROPERTIES(): TerminalNode { - return this.getToken(FlinkSqlParser.SERDEPROPERTIES, 0); - } - public SET(): TerminalNode { - return this.getToken(FlinkSqlParser.SET, 0); - } - public SETS(): TerminalNode { - return this.getToken(FlinkSqlParser.SETS, 0); - } - public SHOW(): TerminalNode { - return this.getToken(FlinkSqlParser.SHOW, 0); - } - public SKEWED(): TerminalNode { - return this.getToken(FlinkSqlParser.SKEWED, 0); - } - public SMALLINT(): TerminalNode { - return this.getToken(FlinkSqlParser.SMALLINT, 0); - } - public SORT(): TerminalNode { - return this.getToken(FlinkSqlParser.SORT, 0); - } - public SORTED(): TerminalNode { - return this.getToken(FlinkSqlParser.SORTED, 0); - } - public START(): TerminalNode { - return this.getToken(FlinkSqlParser.START, 0); - } - public STATISTICS(): TerminalNode { - return this.getToken(FlinkSqlParser.STATISTICS, 0); - } - public STORED(): TerminalNode { - return this.getToken(FlinkSqlParser.STORED, 0); - } - public STRATIFY(): TerminalNode { - return this.getToken(FlinkSqlParser.STRATIFY, 0); - } - public STRING(): TerminalNode { - return this.getToken(FlinkSqlParser.STRING, 0); - } - public STRUCT(): TerminalNode { - return this.getToken(FlinkSqlParser.STRUCT, 0); - } - public SYSTEM(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM, 0); - } - public SYSTEM_TIME(): TerminalNode { - return this.getToken(FlinkSqlParser.SYSTEM_TIME, 0); - } - public TABLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLE, 0); - } - public TABLES(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLES, 0); - } - public TABLESAMPLE(): TerminalNode { - return this.getToken(FlinkSqlParser.TABLESAMPLE, 0); - } - public TBLPROPERTIES(): TerminalNode { - return this.getToken(FlinkSqlParser.TBLPROPERTIES, 0); - } - public TEMPORARY(): TerminalNode { - return this.getToken(FlinkSqlParser.TEMPORARY, 0); - } - public TERMINATED(): TerminalNode { - return this.getToken(FlinkSqlParser.TERMINATED, 0); - } - public THEN(): TerminalNode { - return this.getToken(FlinkSqlParser.THEN, 0); - } - public TIME(): TerminalNode { - return this.getToken(FlinkSqlParser.TIME, 0); - } - public TIMESTAMP(): TerminalNode { - return this.getToken(FlinkSqlParser.TIMESTAMP, 0); - } - public TINYINT(): TerminalNode { - return this.getToken(FlinkSqlParser.TINYINT, 0); - } - public TO(): TerminalNode { - return this.getToken(FlinkSqlParser.TO, 0); - } - public TOUCH(): TerminalNode { - return this.getToken(FlinkSqlParser.TOUCH, 0); - } - public TRAILING(): TerminalNode { - return this.getToken(FlinkSqlParser.TRAILING, 0); - } - public TRANSACTION(): TerminalNode { - return this.getToken(FlinkSqlParser.TRANSACTION, 0); - } - public TRANSACTIONS(): TerminalNode { - return this.getToken(FlinkSqlParser.TRANSACTIONS, 0); - } - public TRANSFORM(): TerminalNode { - return this.getToken(FlinkSqlParser.TRANSFORM, 0); - } - public TRUE(): TerminalNode { - return this.getToken(FlinkSqlParser.TRUE, 0); - } - public TRUNCATE(): TerminalNode { - return this.getToken(FlinkSqlParser.TRUNCATE, 0); - } - public UNARCHIVE(): TerminalNode { - return this.getToken(FlinkSqlParser.UNARCHIVE, 0); - } - public UNBOUNDED(): TerminalNode { - return this.getToken(FlinkSqlParser.UNBOUNDED, 0); - } - public UNCACHE(): TerminalNode { - return this.getToken(FlinkSqlParser.UNCACHE, 0); - } - public UNLOCK(): TerminalNode { - return this.getToken(FlinkSqlParser.UNLOCK, 0); - } - public UNSET(): TerminalNode { - return this.getToken(FlinkSqlParser.UNSET, 0); - } - public UNNEST(): TerminalNode { - return this.getToken(FlinkSqlParser.UNNEST, 0); - } - public USE(): TerminalNode { - return this.getToken(FlinkSqlParser.USE, 0); - } - public USER(): TerminalNode { - return this.getToken(FlinkSqlParser.USER, 0); - } - public VALUES(): TerminalNode { - return this.getToken(FlinkSqlParser.VALUES, 0); - } - public VARBINARY(): TerminalNode { - return this.getToken(FlinkSqlParser.VARBINARY, 0); - } - public VARCHAR(): TerminalNode { - return this.getToken(FlinkSqlParser.VARCHAR, 0); - } - public VIEW(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEW, 0); - } - public VIEWS(): TerminalNode { - return this.getToken(FlinkSqlParser.VIEWS, 0); - } - public WATERMARK(): TerminalNode { - return this.getToken(FlinkSqlParser.WATERMARK, 0); - } - public WHEN(): TerminalNode { - return this.getToken(FlinkSqlParser.WHEN, 0); - } - public WHERE(): TerminalNode { - return this.getToken(FlinkSqlParser.WHERE, 0); - } - public WINDOW(): TerminalNode { - return this.getToken(FlinkSqlParser.WINDOW, 0); - } - public WITH(): TerminalNode { - return this.getToken(FlinkSqlParser.WITH, 0); - } - public WITHIN(): TerminalNode { - return this.getToken(FlinkSqlParser.WITHIN, 0); - } - public WS(): TerminalNode { - return this.getToken(FlinkSqlParser.WS, 0); - } - public get ruleIndex(): number { - return FlinkSqlParser.RULE_nonReserved; - } - public enterRule(listener: FlinkSqlParserListener): void { - if(listener.enterNonReserved) { - listener.enterNonReserved(this); - } - } - public exitRule(listener: FlinkSqlParserListener): void { - if(listener.exitNonReserved) { - listener.exitNonReserved(this); - } - } - // @Override - public accept(visitor: FlinkSqlParserVisitor): Result { - if (visitor.visitNonReserved) { - return visitor.visitNonReserved(this); + if (visitor.visitNonReservedKeywords) { + return visitor.visitNonReservedKeywords(this); } else { return visitor.visitChildren(this); } diff --git a/src/lib/flinksql/FlinkSqlParserListener.ts b/src/lib/flinksql/FlinkSqlParserListener.ts index 6b521f9..7b7b16f 100644 --- a/src/lib/flinksql/FlinkSqlParserListener.ts +++ b/src/lib/flinksql/FlinkSqlParserListener.ts @@ -133,7 +133,6 @@ import { PatternVariablesDefinationContext } from "./FlinkSqlParser"; import { WindowFrameContext } from "./FlinkSqlParser"; import { FrameBoundContext } from "./FlinkSqlParser"; import { WithinClauseContext } from "./FlinkSqlParser"; -import { TimeIntervalExpressionContext } from "./FlinkSqlParser"; import { ExpressionContext } from "./FlinkSqlParser"; import { LogicalNotContext } from "./FlinkSqlParser"; import { PredicatedContext } from "./FlinkSqlParser"; @@ -163,12 +162,13 @@ import { FunctionNameContext } from "./FlinkSqlParser"; import { DereferenceDefinitionContext } from "./FlinkSqlParser"; import { CorrelationNameContext } from "./FlinkSqlParser"; import { QualifiedNameContext } from "./FlinkSqlParser"; -import { IntervalContext } from "./FlinkSqlParser"; +import { TimeIntervalExpressionContext } from "./FlinkSqlParser"; import { ErrorCapturingMultiUnitsIntervalContext } from "./FlinkSqlParser"; import { MultiUnitsIntervalContext } from "./FlinkSqlParser"; import { ErrorCapturingUnitToUnitIntervalContext } from "./FlinkSqlParser"; import { UnitToUnitIntervalContext } from "./FlinkSqlParser"; import { IntervalValueContext } from "./FlinkSqlParser"; +import { IntervalTimeUnitContext } from "./FlinkSqlParser"; import { ColumnAliasContext } from "./FlinkSqlParser"; import { TableAliasContext } from "./FlinkSqlParser"; import { ErrorCapturingIdentifierContext } from "./FlinkSqlParser"; @@ -176,15 +176,12 @@ import { ErrorIdentContext } from "./FlinkSqlParser"; import { RealIdentContext } from "./FlinkSqlParser"; import { IdentifierListContext } from "./FlinkSqlParser"; import { IdentifierSeqContext } from "./FlinkSqlParser"; -import { IdentifierContext } from "./FlinkSqlParser"; import { UnquotedIdentifierAlternativeContext } from "./FlinkSqlParser"; import { QuotedIdentifierAlternativeContext } from "./FlinkSqlParser"; -import { AnsiNonReservedKeywordsContext } from "./FlinkSqlParser"; -import { NonReservedKeywordsContext } from "./FlinkSqlParser"; +import { NonReservedKeywordsAlternativeContext } from "./FlinkSqlParser"; import { UnquotedIdentifierContext } from "./FlinkSqlParser"; import { QuotedIdentifierContext } from "./FlinkSqlParser"; import { WhenClauseContext } from "./FlinkSqlParser"; -import { UidListContext } from "./FlinkSqlParser"; import { UidContext } from "./FlinkSqlParser"; import { WithOptionContext } from "./FlinkSqlParser"; import { IfNotExistsContext } from "./FlinkSqlParser"; @@ -198,15 +195,13 @@ import { ComparisonOperatorContext } from "./FlinkSqlParser"; import { BitOperatorContext } from "./FlinkSqlParser"; import { MathOperatorContext } from "./FlinkSqlParser"; import { UnaryOperatorContext } from "./FlinkSqlParser"; -import { FullColumnNameContext } from "./FlinkSqlParser"; import { ConstantContext } from "./FlinkSqlParser"; import { StringLiteralContext } from "./FlinkSqlParser"; import { DecimalLiteralContext } from "./FlinkSqlParser"; import { BooleanLiteralContext } from "./FlinkSqlParser"; import { SetQuantifierContext } from "./FlinkSqlParser"; -import { AnsiNonReservedContext } from "./FlinkSqlParser"; -import { StrictNonReservedContext } from "./FlinkSqlParser"; -import { NonReservedContext } from "./FlinkSqlParser"; +import { ReservedKeywordsContext } from "./FlinkSqlParser"; +import { NonReservedKeywordsContext } from "./FlinkSqlParser"; /** @@ -1518,16 +1513,6 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitWithinClause?: (ctx: WithinClauseContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. - * @param ctx the parse tree - */ - enterTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. - * @param ctx the parse tree - */ - exitTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.expression`. * @param ctx the parse tree @@ -1863,15 +1848,15 @@ export default class FlinkSqlParserListener extends ParseTreeListener { */ exitQualifiedName?: (ctx: QualifiedNameContext) => void; /** - * Enter a parse tree produced by `FlinkSqlParser.interval`. + * Enter a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. * @param ctx the parse tree */ - enterInterval?: (ctx: IntervalContext) => void; + enterTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => void; /** - * Exit a parse tree produced by `FlinkSqlParser.interval`. + * Exit a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. * @param ctx the parse tree */ - exitInterval?: (ctx: IntervalContext) => void; + exitTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.errorCapturingMultiUnitsInterval`. * @param ctx the parse tree @@ -1922,6 +1907,16 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitIntervalValue?: (ctx: IntervalValueContext) => void; + /** + * Enter a parse tree produced by `FlinkSqlParser.intervalTimeUnit`. + * @param ctx the parse tree + */ + enterIntervalTimeUnit?: (ctx: IntervalTimeUnitContext) => void; + /** + * Exit a parse tree produced by `FlinkSqlParser.intervalTimeUnit`. + * @param ctx the parse tree + */ + exitIntervalTimeUnit?: (ctx: IntervalTimeUnitContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.columnAlias`. * @param ctx the parse tree @@ -1996,64 +1991,42 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitIdentifierSeq?: (ctx: IdentifierSeqContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.identifier`. - * @param ctx the parse tree - */ - enterIdentifier?: (ctx: IdentifierContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.identifier`. - * @param ctx the parse tree - */ - exitIdentifier?: (ctx: IdentifierContext) => void; /** * Enter a parse tree produced by the `unquotedIdentifierAlternative` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree */ enterUnquotedIdentifierAlternative?: (ctx: UnquotedIdentifierAlternativeContext) => void; /** * Exit a parse tree produced by the `unquotedIdentifierAlternative` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree */ exitUnquotedIdentifierAlternative?: (ctx: UnquotedIdentifierAlternativeContext) => void; /** * Enter a parse tree produced by the `quotedIdentifierAlternative` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree */ enterQuotedIdentifierAlternative?: (ctx: QuotedIdentifierAlternativeContext) => void; /** * Exit a parse tree produced by the `quotedIdentifierAlternative` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree */ exitQuotedIdentifierAlternative?: (ctx: QuotedIdentifierAlternativeContext) => void; /** - * Enter a parse tree produced by the `ansiNonReservedKeywords` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * Enter a parse tree produced by the `nonReservedKeywordsAlternative` + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree */ - enterAnsiNonReservedKeywords?: (ctx: AnsiNonReservedKeywordsContext) => void; + enterNonReservedKeywordsAlternative?: (ctx: NonReservedKeywordsAlternativeContext) => void; /** - * Exit a parse tree produced by the `ansiNonReservedKeywords` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * Exit a parse tree produced by the `nonReservedKeywordsAlternative` + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree */ - exitAnsiNonReservedKeywords?: (ctx: AnsiNonReservedKeywordsContext) => void; - /** - * Enter a parse tree produced by the `nonReservedKeywords` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. - * @param ctx the parse tree - */ - enterNonReservedKeywords?: (ctx: NonReservedKeywordsContext) => void; - /** - * Exit a parse tree produced by the `nonReservedKeywords` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. - * @param ctx the parse tree - */ - exitNonReservedKeywords?: (ctx: NonReservedKeywordsContext) => void; + exitNonReservedKeywordsAlternative?: (ctx: NonReservedKeywordsAlternativeContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.unquotedIdentifier`. * @param ctx the parse tree @@ -2084,16 +2057,6 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitWhenClause?: (ctx: WhenClauseContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.uidList`. - * @param ctx the parse tree - */ - enterUidList?: (ctx: UidListContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.uidList`. - * @param ctx the parse tree - */ - exitUidList?: (ctx: UidListContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.uid`. * @param ctx the parse tree @@ -2224,16 +2187,6 @@ export default class FlinkSqlParserListener extends ParseTreeListener { * @param ctx the parse tree */ exitUnaryOperator?: (ctx: UnaryOperatorContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.fullColumnName`. - * @param ctx the parse tree - */ - enterFullColumnName?: (ctx: FullColumnNameContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.fullColumnName`. - * @param ctx the parse tree - */ - exitFullColumnName?: (ctx: FullColumnNameContext) => void; /** * Enter a parse tree produced by `FlinkSqlParser.constant`. * @param ctx the parse tree @@ -2285,34 +2238,24 @@ export default class FlinkSqlParserListener extends ParseTreeListener { */ exitSetQuantifier?: (ctx: SetQuantifierContext) => void; /** - * Enter a parse tree produced by `FlinkSqlParser.ansiNonReserved`. + * Enter a parse tree produced by `FlinkSqlParser.reservedKeywords`. * @param ctx the parse tree */ - enterAnsiNonReserved?: (ctx: AnsiNonReservedContext) => void; + enterReservedKeywords?: (ctx: ReservedKeywordsContext) => void; /** - * Exit a parse tree produced by `FlinkSqlParser.ansiNonReserved`. + * Exit a parse tree produced by `FlinkSqlParser.reservedKeywords`. * @param ctx the parse tree */ - exitAnsiNonReserved?: (ctx: AnsiNonReservedContext) => void; + exitReservedKeywords?: (ctx: ReservedKeywordsContext) => void; /** - * Enter a parse tree produced by `FlinkSqlParser.strictNonReserved`. + * Enter a parse tree produced by `FlinkSqlParser.nonReservedKeywords`. * @param ctx the parse tree */ - enterStrictNonReserved?: (ctx: StrictNonReservedContext) => void; + enterNonReservedKeywords?: (ctx: NonReservedKeywordsContext) => void; /** - * Exit a parse tree produced by `FlinkSqlParser.strictNonReserved`. + * Exit a parse tree produced by `FlinkSqlParser.nonReservedKeywords`. * @param ctx the parse tree */ - exitStrictNonReserved?: (ctx: StrictNonReservedContext) => void; - /** - * Enter a parse tree produced by `FlinkSqlParser.nonReserved`. - * @param ctx the parse tree - */ - enterNonReserved?: (ctx: NonReservedContext) => void; - /** - * Exit a parse tree produced by `FlinkSqlParser.nonReserved`. - * @param ctx the parse tree - */ - exitNonReserved?: (ctx: NonReservedContext) => void; + exitNonReservedKeywords?: (ctx: NonReservedKeywordsContext) => void; } diff --git a/src/lib/flinksql/FlinkSqlParserVisitor.ts b/src/lib/flinksql/FlinkSqlParserVisitor.ts index a34566e..9674e7f 100644 --- a/src/lib/flinksql/FlinkSqlParserVisitor.ts +++ b/src/lib/flinksql/FlinkSqlParserVisitor.ts @@ -133,7 +133,6 @@ import { PatternVariablesDefinationContext } from "./FlinkSqlParser"; import { WindowFrameContext } from "./FlinkSqlParser"; import { FrameBoundContext } from "./FlinkSqlParser"; import { WithinClauseContext } from "./FlinkSqlParser"; -import { TimeIntervalExpressionContext } from "./FlinkSqlParser"; import { ExpressionContext } from "./FlinkSqlParser"; import { LogicalNotContext } from "./FlinkSqlParser"; import { PredicatedContext } from "./FlinkSqlParser"; @@ -163,12 +162,13 @@ import { FunctionNameContext } from "./FlinkSqlParser"; import { DereferenceDefinitionContext } from "./FlinkSqlParser"; import { CorrelationNameContext } from "./FlinkSqlParser"; import { QualifiedNameContext } from "./FlinkSqlParser"; -import { IntervalContext } from "./FlinkSqlParser"; +import { TimeIntervalExpressionContext } from "./FlinkSqlParser"; import { ErrorCapturingMultiUnitsIntervalContext } from "./FlinkSqlParser"; import { MultiUnitsIntervalContext } from "./FlinkSqlParser"; import { ErrorCapturingUnitToUnitIntervalContext } from "./FlinkSqlParser"; import { UnitToUnitIntervalContext } from "./FlinkSqlParser"; import { IntervalValueContext } from "./FlinkSqlParser"; +import { IntervalTimeUnitContext } from "./FlinkSqlParser"; import { ColumnAliasContext } from "./FlinkSqlParser"; import { TableAliasContext } from "./FlinkSqlParser"; import { ErrorCapturingIdentifierContext } from "./FlinkSqlParser"; @@ -176,15 +176,12 @@ import { ErrorIdentContext } from "./FlinkSqlParser"; import { RealIdentContext } from "./FlinkSqlParser"; import { IdentifierListContext } from "./FlinkSqlParser"; import { IdentifierSeqContext } from "./FlinkSqlParser"; -import { IdentifierContext } from "./FlinkSqlParser"; import { UnquotedIdentifierAlternativeContext } from "./FlinkSqlParser"; import { QuotedIdentifierAlternativeContext } from "./FlinkSqlParser"; -import { AnsiNonReservedKeywordsContext } from "./FlinkSqlParser"; -import { NonReservedKeywordsContext } from "./FlinkSqlParser"; +import { NonReservedKeywordsAlternativeContext } from "./FlinkSqlParser"; import { UnquotedIdentifierContext } from "./FlinkSqlParser"; import { QuotedIdentifierContext } from "./FlinkSqlParser"; import { WhenClauseContext } from "./FlinkSqlParser"; -import { UidListContext } from "./FlinkSqlParser"; import { UidContext } from "./FlinkSqlParser"; import { WithOptionContext } from "./FlinkSqlParser"; import { IfNotExistsContext } from "./FlinkSqlParser"; @@ -198,15 +195,13 @@ import { ComparisonOperatorContext } from "./FlinkSqlParser"; import { BitOperatorContext } from "./FlinkSqlParser"; import { MathOperatorContext } from "./FlinkSqlParser"; import { UnaryOperatorContext } from "./FlinkSqlParser"; -import { FullColumnNameContext } from "./FlinkSqlParser"; import { ConstantContext } from "./FlinkSqlParser"; import { StringLiteralContext } from "./FlinkSqlParser"; import { DecimalLiteralContext } from "./FlinkSqlParser"; import { BooleanLiteralContext } from "./FlinkSqlParser"; import { SetQuantifierContext } from "./FlinkSqlParser"; -import { AnsiNonReservedContext } from "./FlinkSqlParser"; -import { StrictNonReservedContext } from "./FlinkSqlParser"; -import { NonReservedContext } from "./FlinkSqlParser"; +import { ReservedKeywordsContext } from "./FlinkSqlParser"; +import { NonReservedKeywordsContext } from "./FlinkSqlParser"; /** @@ -999,12 +994,6 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.expression`. * @param ctx the parse tree @@ -1202,11 +1191,11 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; /** - * Visit a parse tree produced by `FlinkSqlParser.interval`. + * Visit a parse tree produced by `FlinkSqlParser.timeIntervalExpression`. * @param ctx the parse tree * @return the visitor result */ - visitInterval?: (ctx: IntervalContext) => Result; + visitTimeIntervalExpression?: (ctx: TimeIntervalExpressionContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.errorCapturingMultiUnitsInterval`. * @param ctx the parse tree @@ -1237,6 +1226,12 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; + /** + * Visit a parse tree produced by `FlinkSqlParser.intervalTimeUnit`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalTimeUnit?: (ctx: IntervalTimeUnitContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.columnAlias`. * @param ctx the parse tree @@ -1281,40 +1276,27 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.identifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentifier?: (ctx: IdentifierContext) => Result; /** * Visit a parse tree produced by the `unquotedIdentifierAlternative` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree * @return the visitor result */ visitUnquotedIdentifierAlternative?: (ctx: UnquotedIdentifierAlternativeContext) => Result; /** * Visit a parse tree produced by the `quotedIdentifierAlternative` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree * @return the visitor result */ visitQuotedIdentifierAlternative?: (ctx: QuotedIdentifierAlternativeContext) => Result; /** - * Visit a parse tree produced by the `ansiNonReservedKeywords` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. + * Visit a parse tree produced by the `nonReservedKeywordsAlternative` + * labeled alternative in `FlinkSqlParser.identifier`. * @param ctx the parse tree * @return the visitor result */ - visitAnsiNonReservedKeywords?: (ctx: AnsiNonReservedKeywordsContext) => Result; - /** - * Visit a parse tree produced by the `nonReservedKeywords` - * labeled alternative in `FlinkSqlParser.strictIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNonReservedKeywords?: (ctx: NonReservedKeywordsContext) => Result; + visitNonReservedKeywordsAlternative?: (ctx: NonReservedKeywordsAlternativeContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.unquotedIdentifier`. * @param ctx the parse tree @@ -1333,12 +1315,6 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.uidList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUidList?: (ctx: UidListContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.uid`. * @param ctx the parse tree @@ -1417,12 +1393,6 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.fullColumnName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFullColumnName?: (ctx: FullColumnNameContext) => Result; /** * Visit a parse tree produced by `FlinkSqlParser.constant`. * @param ctx the parse tree @@ -1454,22 +1424,16 @@ export default class FlinkSqlParserVisitor extends ParseTreeVisitor Result; /** - * Visit a parse tree produced by `FlinkSqlParser.ansiNonReserved`. + * Visit a parse tree produced by `FlinkSqlParser.reservedKeywords`. * @param ctx the parse tree * @return the visitor result */ - visitAnsiNonReserved?: (ctx: AnsiNonReservedContext) => Result; + visitReservedKeywords?: (ctx: ReservedKeywordsContext) => Result; /** - * Visit a parse tree produced by `FlinkSqlParser.strictNonReserved`. + * Visit a parse tree produced by `FlinkSqlParser.nonReservedKeywords`. * @param ctx the parse tree * @return the visitor result */ - visitStrictNonReserved?: (ctx: StrictNonReservedContext) => Result; - /** - * Visit a parse tree produced by `FlinkSqlParser.nonReserved`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNonReserved?: (ctx: NonReservedContext) => Result; + visitNonReservedKeywords?: (ctx: NonReservedKeywordsContext) => Result; } diff --git a/test/parser/flinksql/syntax.test.ts b/test/parser/flinksql/syntax.test.ts index d391361..25a34b9 100644 --- a/test/parser/flinksql/syntax.test.ts +++ b/test/parser/flinksql/syntax.test.ts @@ -39,7 +39,7 @@ describe('FlinkSQL Syntax Tests', () => { }); test('Test Select Statement with having clause', () => { const sql = ` - SELECT city, sum(quantity) AS sum + SELECT city, sum(quantity) AS _sum FROM dealer GROUP BY city HAVING city = 'Fremont'; `; const result = parser.validate(sql); diff --git a/test/parser/flinksql/syntax/fixtures/alterDatabase.sql b/test/parser/flinksql/syntax/fixtures/alterDatabase.sql index f90cfed..db1b2d8 100644 --- a/test/parser/flinksql/syntax/fixtures/alterDatabase.sql +++ b/test/parser/flinksql/syntax/fixtures/alterDatabase.sql @@ -1,3 +1,3 @@ ALTER DATABASE tempDB SET ("key1"="value1"); -alter database db1 set ('key1' = 'value1','key2.a' = 'value2.a'); \ No newline at end of file +ALTER DATABASE db1 SET ('key1' = 'value1','key2.a' = 'value2.a'); \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/alterFunction.sql b/test/parser/flinksql/syntax/fixtures/alterFunction.sql index 99b1400..275ca30 100644 --- a/test/parser/flinksql/syntax/fixtures/alterFunction.sql +++ b/test/parser/flinksql/syntax/fixtures/alterFunction.sql @@ -1,12 +1,12 @@ ALTER FUNCTION tempFunction AS 'SimpleUdf'; -alter temporary function function1 as 'org.apache.flink.function.function1'; +ALTER temporary FUNCTION function1 AS 'org.apache.flink.function.function1'; -alter temporary function function1 as 'org.apache.flink.function.function1' language scala; +ALTER temporary FUNCTION function1 AS 'org.apache.flink.function.function1' LANGUAGE scala; -alter temporary system function function1 as 'org.apache.flink.function.function1'; +ALTER temporary SYSTEM FUNCTION function1 AS 'org.apache.flink.function.function1'; -alter temporary system function function1 as 'org.apache.flink.function.function1' language java; +ALTER temporary SYSTEM FUNCTION function1 AS 'org.apache.flink.function.function1' LANGUAGE java; ALTER TEMPORARY SYSTEM FUNCTION IF EXISTS tempFunction AS 'SimpleUdf'; diff --git a/test/parser/flinksql/syntax/fixtures/alterTable.sql b/test/parser/flinksql/syntax/fixtures/alterTable.sql index e394f30..d345120 100644 --- a/test/parser/flinksql/syntax/fixtures/alterTable.sql +++ b/test/parser/flinksql/syntax/fixtures/alterTable.sql @@ -1,65 +1,65 @@ -- Refer: https://github.com/apache/flink/blob/master/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java#L2016 -- Just for simple alter table statements, it not include alter table columns statements -alter table - t1 rename to t2; +ALTER TABLE + t1 RENAME TO t2; -alter table - if exists t1 rename to t2; +ALTER TABLE + IF EXISTS t1 RENAME TO t2; -alter table - c1.d1.t1 rename to t2; +ALTER TABLE + c1.d1.t1 RENAME TO t2; -alter table - if exists c1.d1.t1 rename to t2; +ALTER TABLE + IF EXISTS c1.d1.t1 RENAME TO t2; -alter table - t1 rename a to b; +ALTER TABLE + t1 RENAME a TO b; -alter table - if exists t1 rename a to b; +ALTER TABLE + IF EXISTS t1 RENAME a TO b; -alter table - if exists t1 rename a.x to a.y; +ALTER TABLE + IF EXISTS t1 RENAME a.x TO a.y; -alter table +ALTER TABLE t1 set ('key1' = 'value1'); -alter table - if exists t1 +ALTER TABLE + IF EXISTS t1 set ('key1' = 'value1'); -alter table +ALTER TABLE t1 -add - constraint ct1 primary key(a, b); +ADD + CONSTRAINT ct1 PRIMARY KEY(a, b); -alter table +ALTER TABLE t1 -add - constraint ct1 primary key(a, b) not enforced; +ADD + CONSTRAINT ct1 PRIMARY KEY(a, b) NOT ENFORCED; -alter table - if exists t1 -add - constraint ct1 primary key(a, b) not enforced; +ALTER TABLE + IF EXISTS t1 +ADD + CONSTRAINT ct1 PRIMARY KEY(a, b) NOT ENFORCED; -alter table +ALTER TABLE t1 -add - unique(a, b); +ADD + UNIQUE(a, b); -alter table - if exists t1 -add - unique(a, b); +ALTER TABLE + IF EXISTS t1 +ADD + UNIQUE(a, b); -alter table - t1 drop constraint ct1; +ALTER TABLE + t1 DROP CONSTRAINT ct1; -alter table - if exists t1 drop constraint ct1; +ALTER TABLE + IF EXISTS t1 DROP CONSTRAINT ct1; diff --git a/test/parser/flinksql/syntax/fixtures/createFunction.sql b/test/parser/flinksql/syntax/fixtures/createFunction.sql index 469866a..b70448c 100644 --- a/test/parser/flinksql/syntax/fixtures/createFunction.sql +++ b/test/parser/flinksql/syntax/fixtures/createFunction.sql @@ -25,4 +25,4 @@ CREATE TEMPORARY FUNCTION function1 AS 'org.apache.flink.function.function1' LAN CREATE TEMPORARY SYSTEM FUNCTION function1 AS 'org.apache.flink.function.function1' LANGUAGE SCALA USING JAR '/path/to/test.jar'; CREATE FUNCTION function1 AS 'org.apache.flink.function.function1' LANGUAGE JAVA USING JAR 'file:///path/to/test.jar', -jar 'hdfs:///path/to/test2.jar'; \ No newline at end of file +JAR 'hdfs:///path/to/test2.jar'; \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/createTable.sql b/test/parser/flinksql/syntax/fixtures/createTable.sql index 9f16447..ac51a98 100644 --- a/test/parser/flinksql/syntax/fixtures/createTable.sql +++ b/test/parser/flinksql/syntax/fixtures/createTable.sql @@ -27,14 +27,14 @@ CREATE TABLE MyTable ( WATERMARK FOR order_time AS order_time - INTERVAL '5' SECOND ) WITH ('connector' = 'kafka'); -CREATE TABLE MyTable (id int, PRIMARY KEY (id) NOT ENFORCED) WITH ('connector' = 'kafka'); +CREATE TABLE MyTable (id INT, PRIMARY KEY (id) NOT ENFORCED) WITH ('connector' = 'kafka'); CREATE TABLE tbl1 ( - a bigint, - h varchar, + a BIGINT, + h VARCHAR, g AS 2 * (a + 1), ts AS toTimestamp(b, 'yyyy-MM-dd HH:mm:ss'), - b varchar, + b VARCHAR, proc AS PROCTIME(), meta STRING METADATA, my_meta STRING METADATA FROM 'meta', @@ -57,7 +57,7 @@ CREATE TABLE Orders_in_file ( ); CREATE TABLE Orders_with_watermark ( - id int, + id INT, -- Add watermark definition WATERMARK FOR order_time AS order_time - INTERVAL '5' SECOND ) WITH ( @@ -80,35 +80,35 @@ FROM WHERE mod(id, 10) = 0; -CREATE TABLE catalog1.db1.table1 (id int) WITH ('connector' = 'kafka'); +CREATE TABLE catalog1.db1.table1 (id INT) WITH ('connector' = 'kafka'); CREATE TABLE catalog1.db1.table1 ( attr0 STRING, - attr1 boolean, - attr3 decimal(38, 18), + attr1 BOOLEAN, + attr3 DECIMAL(38, 18), attr4 TINYINT, - attr5 smallint, - attr6 int, - attr7 bigint, - attr8 float, - attr9 double, - attr10 date, - attr11 time, - attr12 timestamp(3), - attr13 array, - attr14 ROW, - attr17 MAP, + attr5 SMALLINT, + attr6 INT, + attr7 BIGINT, + attr8 FLOAT, + attr9 DOUBLE, + attr10 DATE, + attr11 TIME, + attr12 TIMESTAMP(3), + attr13 ARRAY, + attr14 ROW, + attr17 MAP, name1 VARCHAR(64), message ROW>, raw RAW('class', 'snapshot') ) WITH ('connector' = 'kafka'); CREATE TABLE IF NOT EXISTS tbl1 ( - a bigint, - h varchar, + a BIGINT, + h VARCHAR, g AS 2 * (a + 1), ts AS toTimestamp(b, 'yyyy-MM-dd HH:mm:ss'), - b varchar, + b VARCHAR, proc AS PROCTIME(), PRIMARY KEY (a, b) NOT ENFORCED ) PARTITIONED BY (a, h) WITH ( @@ -117,11 +117,11 @@ CREATE TABLE IF NOT EXISTS tbl1 ( ); CREATE TABLE tbl1 ( - a bigint COMMENT 'test column comment AAA.', - h varchar, + a BIGINT COMMENT 'test column comment AAA.', + h VARCHAR, g AS 2 * (a + 1), ts AS toTimestamp(b, 'yyyy-MM-dd HH:mm:ss'), - b varchar, + b VARCHAR, proc AS PROCTIME(), meta STRING METADATA, my_meta STRING METADATA FROM 'meta', @@ -133,11 +133,11 @@ CREATE TABLE tbl1 ( ); CREATE TABLE tbl1 ( - a bigint COMMENT 'test column comment AAA.', - h varchar, + a BIGINT COMMENT 'test column comment AAA.', + h VARCHAR, g AS 2 * (a + 1) COMMENT 'test computed column.', ts AS toTimestamp(b, 'yyyy-MM-dd HH:mm:ss'), - b varchar, + b VARCHAR, proc AS PROCTIME(), PRIMARY KEY (a, b) NOT ENFORCED ) COMMENT 'test table comment ABC.' PARTITIONED BY (a, h) WITH ( @@ -146,11 +146,11 @@ CREATE TABLE tbl1 ( ); CREATE TABLE tbl1 ( - a bigint, - h varchar, + a BIGINT, + h VARCHAR, g AS 2 * (a + 1), ts AS toTimestamp(b, 'yyyy-MM-dd HH:mm:ss'), - b varchar, + b VARCHAR, proc AS PROCTIME(), PRIMARY KEY (a, b) NOT ENFORCED ) WITH ( @@ -159,8 +159,8 @@ CREATE TABLE tbl1 ( ); CREATE TABLE tbl1 ( - a bigint PRIMARY KEY NOT ENFORCED COMMENT 'test column comment AAA.', - h varchar CONSTRAINT ct1 PRIMARY KEY NOT ENFORCED, + a BIGINT PRIMARY KEY NOT ENFORCED COMMENT 'test column comment AAA.', + h VARCHAR CONSTRAINT ct1 PRIMARY KEY NOT ENFORCED, g AS 2 * (a + 1), ts AS toTimestamp(b, 'yyyy-MM-dd HH:mm:ss'), proc AS PROCTIME() @@ -170,16 +170,16 @@ CREATE TABLE tbl1 ( ); CREATE TABLE tbl1 ( - ts timestamp(3), - id varchar, - watermark FOR ts AS ts - INTERVAL '3' SECOND + ts TIMESTAMP(3), + id VARCHAR, + WATERMARK FOR ts AS ts - INTERVAL '3' SECOND ) WITH ( 'connector' = 'kafka', 'kafka.topic' = 'log.test' ); CREATE TABLE tbl1 ( - log_ts varchar, + log_ts VARCHAR, ts AS to_timestamp(log_ts), WATERMARK FOR ts AS ts + INTERVAL '1' SECOND ) WITH ( @@ -188,7 +188,7 @@ CREATE TABLE tbl1 ( ); CREATE TABLE tbl1 ( - f1 ROW, q3 boolean>, + f1 ROW, q3 BOOLEAN>, WATERMARK FOR f1.q2.t1 AS NOW() ) WITH ( 'connector' = 'kafka', @@ -196,36 +196,36 @@ CREATE TABLE tbl1 ( ); CREATE TABLE tbl1 ( - a ARRAY, - b MAP, - c ROW, - d MULTISET, + a ARRAY, + b MAP, + c ROW, + d MULTISET, PRIMARY KEY (a, b) NOT ENFORCED -) with ( +) WITH ( 'x' = 'y', 'asd' = 'data' ); CREATE TABLE tbl1 ( - a ARRAY>, - b MAP, ARRAY>, - c ROW, cc1 float, cc2 varchar>, - d MULTISET>, + a ARRAY>, + b MAP, ARRAY>, + c ROW, cc1 FLOAT, cc2 VARCHAR>, + d MULTISET>, f TIMESTAMP(9), PRIMARY KEY (a, b) NOT ENFORCED -) with ( +) WITH ( 'x' = 'y', 'asd' = 'data' ); CREATE TABLE tbl1 ( - a ARRAY>, - b MAP, ARRAY>, - c ROW, cc1 float, cc2 varchar>, - d MULTISET>, + a ARRAY>, + b MAP, ARRAY>, + c ROW, cc1 FLOAT, cc2 VARCHAR>, + d MULTISET>, f TIMESTAMP(9), PRIMARY KEY (a, b) NOT ENFORCED -) with ( +) WITH ( 'x' = 'y', 'asd' = 'data' ) LIKE Orders ( diff --git a/test/parser/flinksql/syntax/fixtures/insertFromSelectQueries.sql b/test/parser/flinksql/syntax/fixtures/insertFromSelectQueries.sql index 5151905..70c20d6 100644 --- a/test/parser/flinksql/syntax/fixtures/insertFromSelectQueries.sql +++ b/test/parser/flinksql/syntax/fixtures/insertFromSelectQueries.sql @@ -1,43 +1,43 @@ INSERT INTO country_page_view -SELECT user, +SELECT `user`, cnt FROM page_view_source; INSERT INTO catalog1.db1.country_page_view -SELECT user, +SELECT `user`, cnt FROM page_view_source; --- Execute InsertStatement EXECUTE -INSERT INTO country_page_view PARTITION (date = '2019-8-30', country = 'China') -SELECT user, +INSERT INTO country_page_view PARTITION (`date` = '2019-8-30', country = 'China') +SELECT `user`, cnt FROM page_view_source; --- Partition Clause: Static Partition -INSERT INTO country_page_view PARTITION (date = '2019-8-30', country = 'China') -SELECT user, +INSERT INTO country_page_view PARTITION (`date` = '2019-8-30', country = 'China') +SELECT `user`, cnt FROM page_view_source; --- Partition Clause: Dynamic Partition -INSERT INTO country_page_view PARTITION (date = '2019-8-30') -SELECT user, +INSERT INTO country_page_view PARTITION (`date` = '2019-8-30') +SELECT `user`, cnt, country FROM page_view_source; --- Column List Statement -INSERT INTO country_page_view PARTITION (date = '2019-8-30', country = 'China') (date, country) -SELECT user, +INSERT INTO country_page_view PARTITION (`date` = '2019-8-30', country = 'China') (`date`, country) +SELECT `user`, cnt FROM page_view_source; --- Insert Method: OverWrite -INSERT OVERWRITE country_page_view PARTITION (date = '2019-8-30') -SELECT user, +INSERT OVERWRITE country_page_view PARTITION (`date` = '2019-8-30') +SELECT `user`, cnt, country FROM page_view_source; diff --git a/test/parser/flinksql/syntax/fixtures/insertValuesIntoTable.sql b/test/parser/flinksql/syntax/fixtures/insertValuesIntoTable.sql index 57ca9e6..ccba8ba 100644 --- a/test/parser/flinksql/syntax/fixtures/insertValuesIntoTable.sql +++ b/test/parser/flinksql/syntax/fixtures/insertValuesIntoTable.sql @@ -8,7 +8,7 @@ VALUES ('Chinese', 'mumiao', 18), ('Amercian', 'georage', 22); EXECUTE -INSERT OverWrite country_page_view +INSERT OVERWRITE country_page_view VALUES ('Chinese', 'mumiao', 18), ('Amercian', 'georage', 22); diff --git a/test/parser/flinksql/syntax/fixtures/selectAggregation.sql b/test/parser/flinksql/syntax/fixtures/selectAggregation.sql index 77a5439..9f2409e 100644 --- a/test/parser/flinksql/syntax/fixtures/selectAggregation.sql +++ b/test/parser/flinksql/syntax/fixtures/selectAggregation.sql @@ -66,33 +66,33 @@ GROUP BY -- Group Window Aggregation SELECT - user, + `user`, TUMBLE_START(order_time, INTERVAL '1' DAY) AS wStart, SUM(amount) FROM Orders GROUP BY TUMBLE(order_time, INTERVAL '1' DAY), - user; + `user`; SELECT - user, + `user`, TUMBLE_START(order_time, INTERVAL '1' DAY) AS wStart, SUM(amount) FROM Orders GROUP BY HOP(order_time, INTERVAL '1' DAY), - user; + `user`; SELECT - user, + `user`, TUMBLE_START(order_time, INTERVAL '1' DAY) AS wStart, SUM(amount) FROM Orders GROUP BY SESSION(order_time, INTERVAL '1' DAY), - user; + `user`; -- Having SELECT SUM(amount) FROM Orders -GROUP BY users +GROUP BY `users` HAVING SUM(amount) > 50; -- Over Aggregation