From 05da14d007d03023e2ce55ce5b029dc4d7065108 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 8 Oct 2023 14:23:06 +0800 Subject: [PATCH] Feat/spark g4 (#168) * feat: spark g4 test * fix: fixed build lint --------- Co-authored-by: liuyi Co-authored-by: dilu --- src/grammar/spark/SparkSqlLexer.g4 | 52 +- src/grammar/spark/SparkSqlParser.g4 | 12 +- src/index.ts | 6 +- src/lib/spark/SparkSql.interp | 738 - src/lib/spark/SparkSql.tokens | 566 - src/lib/spark/SparkSqlLexer.interp | 1323 +- src/lib/spark/SparkSqlLexer.tokens | 1307 +- src/lib/spark/SparkSqlLexer.ts | 4150 +-- src/lib/spark/SparkSqlListener.ts | 3813 --- src/lib/spark/SparkSqlParser.interp | 962 + src/lib/spark/SparkSqlParser.tokens | 741 + src/lib/spark/SparkSqlParser.ts | 34562 ++++++++++++---------- src/lib/spark/SparkSqlParserListener.ts | 2257 ++ src/lib/spark/SparkSqlParserVisitor.ts | 1512 + src/lib/spark/SparkSqlVisitor.ts | 2498 -- test/parser/spark/listener.test.ts | 8 +- test/parser/spark/syntax.test.ts | 324 - test/parser/spark/visitor.test.ts | 8 +- 18 files changed, 27912 insertions(+), 26927 deletions(-) delete mode 100644 src/lib/spark/SparkSql.interp delete mode 100644 src/lib/spark/SparkSql.tokens delete mode 100644 src/lib/spark/SparkSqlListener.ts create mode 100644 src/lib/spark/SparkSqlParser.interp create mode 100644 src/lib/spark/SparkSqlParser.tokens create mode 100644 src/lib/spark/SparkSqlParserListener.ts create mode 100644 src/lib/spark/SparkSqlParserVisitor.ts delete mode 100644 src/lib/spark/SparkSqlVisitor.ts delete mode 100644 test/parser/spark/syntax.test.ts diff --git a/src/grammar/spark/SparkSqlLexer.g4 b/src/grammar/spark/SparkSqlLexer.g4 index 3c4dcda3..3e8013e0 100644 --- a/src/grammar/spark/SparkSqlLexer.g4 +++ b/src/grammar/spark/SparkSqlLexer.g4 @@ -26,44 +26,6 @@ lexer grammar SparkSqlLexer; */ public has_unclosed_bracketed_comment = false; - /** - * Verify whether current token is a valid decimal token (which contains dot). - * Returns true if the character that follows the token is not a digit or letter or underscore. - * - * For example: - * For char stream "2.3", "2." is not a valid decimal token, because it is followed by digit '3'. - * For char stream "2.3_", "2.3" is not a valid decimal token, because it is followed by '_'. - * For char stream "2.3W", "2.3" is not a valid decimal token, because it is followed by 'W'. - * For char stream "12.0D 34.E2+0.12 " 12.0D is a valid decimal token because it is followed - * by a space. 34.E2 is a valid decimal token because it is followed by symbol '+' - * which is not a digit or letter or underscore. - */ - public isValidDecimal() { - const nextChar = _input.LA(1); - if (nextChar >= 'A' && nextChar <= 'Z' || nextChar >= '0' && nextChar <= '9' || - nextChar == '_') { - return false; - } else { - return true; - } - } - - /** - * This method will be called when we see '/*' and try to match it as a bracketed comment. - * If the next character is '+', it should be parsed as hint later, and we cannot match - * it as a bracketed comment. - * - * Returns true if the next character is '+'. - */ - public isHint() { - const nextChar = _input.LA(1); - if (nextChar == '+') { - return true; - } else { - return false; - } - } - /** * This method will be called when the character stream ends and try to find out the * unclosed bracketed comment. @@ -71,7 +33,7 @@ lexer grammar SparkSqlLexer; * and we set the flag and fail later. */ public markUnclosedComment() { - has_unclosed_bracketed_comment = true; + this.has_unclosed_bracketed_comment = true; } } @@ -488,26 +450,26 @@ INTEGER_VALUE EXPONENT_VALUE : DIGIT+ EXPONENT - | DECIMAL_DIGITS EXPONENT {isValidDecimal()}? + | DECIMAL_DIGITS EXPONENT ; DECIMAL_VALUE - : DECIMAL_DIGITS {isValidDecimal()}? + : DECIMAL_DIGITS ; FLOAT_LITERAL : DIGIT+ EXPONENT? 'F' - | DECIMAL_DIGITS EXPONENT? 'F' {isValidDecimal()}? + | DECIMAL_DIGITS EXPONENT? 'F' ; DOUBLE_LITERAL : DIGIT+ EXPONENT? 'D' - | DECIMAL_DIGITS EXPONENT? 'D' {isValidDecimal()}? + | DECIMAL_DIGITS EXPONENT? 'D' ; BIGDECIMAL_LITERAL : DIGIT+ EXPONENT? 'BD' - | DECIMAL_DIGITS EXPONENT? 'BD' {isValidDecimal()}? + | DECIMAL_DIGITS EXPONENT? 'BD' ; IDENTIFIER @@ -540,7 +502,7 @@ SIMPLE_COMMENT ; BRACKETED_COMMENT - : '/*' {!isHint()}? ( BRACKETED_COMMENT | . )*? ('*/' | {markUnclosedComment();} EOF) -> channel(HIDDEN) + : '/*' ( BRACKETED_COMMENT | . )*? ('*/' | {this.markUnclosedComment();} EOF) -> channel(HIDDEN) ; WS diff --git a/src/grammar/spark/SparkSqlParser.g4 b/src/grammar/spark/SparkSqlParser.g4 index f68dd615..df8dc2b6 100644 --- a/src/grammar/spark/SparkSqlParser.g4 +++ b/src/grammar/spark/SparkSqlParser.g4 @@ -1166,11 +1166,15 @@ windowSpec RIGHT_PAREN ; +/** +* replace start identifier with start_ in grammar. +* https://github.com/tunnelvisionlabs/antlr4ts/issues/417 +*/ windowFrame - : frameType=KW_RANGE start=frameBound - | frameType=KW_ROWS start=frameBound - | frameType=KW_RANGE KW_BETWEEN start=frameBound KW_AND end=frameBound - | frameType=KW_ROWS KW_BETWEEN start=frameBound KW_AND end=frameBound + : frameType=KW_RANGE start_=frameBound + | frameType=KW_ROWS start_=frameBound + | frameType=KW_RANGE KW_BETWEEN start_=frameBound KW_AND end=frameBound + | frameType=KW_ROWS KW_BETWEEN start_=frameBound KW_AND end=frameBound ; frameBound diff --git a/src/index.ts b/src/index.ts index 0ef2a92a..fc22f46c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,13 +8,13 @@ export * from './lib/hive/HiveSqlParserListener'; export * from './lib/hive/HiveSqlParserVisitor'; export * from './lib/plsql/PlSqlParserListener'; export * from './lib/plsql/PlSqlParserVisitor'; -export * from './lib/spark/SparkSqlVisitor'; -export * from './lib/spark/SparkSqlListener'; +export * from './lib/spark/SparkSqlParserVisitor'; +export * from './lib/spark/SparkSqlParserListener'; export * from './lib/pgsql/PostgreSQLParserListener'; export * from './lib/pgsql/PostgreSQLParserVisitor'; export * from './lib/trinosql/TrinoSqlListener'; export * from './lib/trinosql/TrinoSqlVisitor'; -export { SyntaxContextType } from './parser/common/basic-parser-types' +export { SyntaxContextType } from './parser/common/basic-parser-types'; export type * from './parser/common/basic-parser-types'; diff --git a/src/lib/spark/SparkSql.interp b/src/lib/spark/SparkSql.interp deleted file mode 100644 index 974fe779..00000000 --- a/src/lib/spark/SparkSql.interp +++ /dev/null @@ -1,738 +0,0 @@ -token literal names: -null -'(' -')' -',' -'.' -'/*+' -'*/' -'->' -'[' -']' -':' -'ADD' -'AFTER' -'ALL' -'ALTER' -'ANALYZE' -'AND' -'ANTI' -'ANY' -'ARCHIVE' -'ARRAY' -'AS' -'ASC' -'AT' -'AUTHORIZATION' -'BETWEEN' -'BOTH' -'BUCKET' -'BUCKETS' -'BY' -'CACHE' -'CASCADE' -'CASE' -'CAST' -'CHANGE' -'CHECK' -'CLEAR' -'CLUSTER' -'CLUSTERED' -'CODEGEN' -'COLLATE' -'COLLECTION' -'COLUMN' -'COLUMNS' -'COMMENT' -'COMMIT' -'COMPACT' -'COMPACTIONS' -'COMPUTE' -'CONCATENATE' -'CONSTRAINT' -'COST' -'CREATE' -'CROSS' -'CUBE' -'CURRENT' -'CURRENT_DATE' -'CURRENT_TIME' -'CURRENT_TIMESTAMP' -'CURRENT_USER' -'DATA' -'DATABASE' -null -'DBPROPERTIES' -'DEFINED' -'DELETE' -'DELIMITED' -'DESC' -'DESCRIBE' -'DFS' -'DIRECTORIES' -'DIRECTORY' -'DISTINCT' -'DISTRIBUTE' -'DIV' -'DROP' -'ELSE' -'END' -'ESCAPE' -'ESCAPED' -'EXCEPT' -'EXCHANGE' -'EXISTS' -'EXPLAIN' -'EXPORT' -'EXTENDED' -'EXTERNAL' -'EXTRACT' -'FALSE' -'FETCH' -'FIELDS' -'FILTER' -'FILEFORMAT' -'FIRST' -'FOLLOWING' -'FOR' -'FOREIGN' -'FORMAT' -'FORMATTED' -'FROM' -'FULL' -'FUNCTION' -'FUNCTIONS' -'GLOBAL' -'GRANT' -'GROUP' -'GROUPING' -'HAVING' -'IF' -'IGNORE' -'IMPORT' -'IN' -'INDEX' -'INDEXES' -'INNER' -'INPATH' -'INPUTFORMAT' -'INSERT' -'INTERSECT' -'INTERVAL' -'INTO' -'IS' -'ITEMS' -'JOIN' -'KEYS' -'LAST' -'LATERAL' -'LAZY' -'LEADING' -'LEFT' -'LIKE' -'LIMIT' -'LINES' -'LIST' -'LOAD' -'LOCAL' -'LOCATION' -'LOCK' -'LOCKS' -'LOGICAL' -'MACRO' -'MAP' -'MATCHED' -'MERGE' -'MSCK' -'NAMESPACE' -'NAMESPACES' -'NATURAL' -'NO' -null -'NULL' -'NULLS' -'OF' -'ON' -'ONLY' -'OPTION' -'OPTIONS' -'OR' -'ORDER' -'OUT' -'OUTER' -'OUTPUTFORMAT' -'OVER' -'OVERLAPS' -'OVERLAY' -'OVERWRITE' -'PARTITION' -'PARTITIONED' -'PARTITIONS' -'PERCENT' -'PIVOT' -'PLACING' -'POSITION' -'PRECEDING' -'PRIMARY' -'PRINCIPALS' -'PROPERTIES' -'PURGE' -'QUERY' -'RANGE' -'RECORDREADER' -'RECORDWRITER' -'RECOVER' -'REDUCE' -'REFERENCES' -'REFRESH' -'RENAME' -'REPAIR' -'REPLACE' -'RESET' -'RESTRICT' -'REVOKE' -'RIGHT' -null -'ROLE' -'ROLES' -'ROLLBACK' -'ROLLUP' -'ROW' -'ROWS' -'SCHEMA' -'SELECT' -'SEMI' -'SEPARATED' -'SERDE' -'SERDEPROPERTIES' -'SESSION_USER' -'SET' -'MINUS' -'SETS' -'SHOW' -'SKEWED' -'SOME' -'SORT' -'SORTED' -'START' -'STATISTICS' -'STORED' -'STRATIFY' -'STRUCT' -'SUBSTR' -'SUBSTRING' -'TABLE' -'TABLES' -'TABLESAMPLE' -'TBLPROPERTIES' -null -'TERMINATED' -'THEN' -'TIME' -'TO' -'TOUCH' -'TRAILING' -'TRANSACTION' -'TRANSACTIONS' -'TRANSFORM' -'TRIM' -'TRUE' -'TRUNCATE' -'TYPE' -'UNARCHIVE' -'UNBOUNDED' -'UNCACHE' -'UNION' -'UNIQUE' -'UNKNOWN' -'UNLOCK' -'UNSET' -'UPDATE' -'USE' -'USER' -'USING' -'VALUES' -'VIEW' -'VIEWS' -'WHEN' -'WHERE' -'WINDOW' -'WITH' -'ZONE' -null -'<=>' -'<>' -'!=' -'<' -null -'>' -null -'+' -'-' -'*' -'/' -'%' -'~' -'&' -'|' -'||' -'^' -';' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null - -token symbolic names: -null -null -null -null -null -null -null -null -null -null -null -ADD -AFTER -ALL -ALTER -ANALYZE -AND -ANTI -ANY -ARCHIVE -ARRAY -AS -ASC -AT -AUTHORIZATION -BETWEEN -BOTH -BUCKET -BUCKETS -BY -CACHE -CASCADE -CASE -CAST -CHANGE -CHECK -CLEAR -CLUSTER -CLUSTERED -CODEGEN -COLLATE -COLLECTION -COLUMN -COLUMNS -COMMENT -COMMIT -COMPACT -COMPACTIONS -COMPUTE -CONCATENATE -CONSTRAINT -COST -CREATE -CROSS -CUBE -CURRENT -CURRENT_DATE -CURRENT_TIME -CURRENT_TIMESTAMP -CURRENT_USER -DATA -DATABASE -DATABASES -DBPROPERTIES -DEFINED -DELETE -DELIMITED -DESC -DESCRIBE -DFS -DIRECTORIES -DIRECTORY -DISTINCT -DISTRIBUTE -DIV -DROP -ELSE -END -ESCAPE -ESCAPED -EXCEPT -EXCHANGE -EXISTS -EXPLAIN -EXPORT -EXTENDED -EXTERNAL -EXTRACT -FALSE -FETCH -FIELDS -FILTER -FILEFORMAT -FIRST -FOLLOWING -FOR -FOREIGN -FORMAT -FORMATTED -FROM -FULL -FUNCTION -FUNCTIONS -GLOBAL -GRANT -GROUP -GROUPING -HAVING -IF -IGNORE -IMPORT -IN -INDEX -INDEXES -INNER -INPATH -INPUTFORMAT -INSERT -INTERSECT -INTERVAL -INTO -IS -ITEMS -JOIN -KEYS -LAST -LATERAL -LAZY -LEADING -LEFT -LIKE -LIMIT -LINES -LIST -LOAD -LOCAL -LOCATION -LOCK -LOCKS -LOGICAL -MACRO -MAP -MATCHED -MERGE -MSCK -NAMESPACE -NAMESPACES -NATURAL -NO -NOT -NULL -NULLS -OF -ON -ONLY -OPTION -OPTIONS -OR -ORDER -OUT -OUTER -OUTPUTFORMAT -OVER -OVERLAPS -OVERLAY -OVERWRITE -PARTITION -PARTITIONED -PARTITIONS -PERCENTLIT -PIVOT -PLACING -POSITION -PRECEDING -PRIMARY -PRINCIPALS -PROPERTIES -PURGE -QUERY -RANGE -RECORDREADER -RECORDWRITER -RECOVER -REDUCE -REFERENCES -REFRESH -RENAME -REPAIR -REPLACE -RESET -RESTRICT -REVOKE -RIGHT -RLIKE -ROLE -ROLES -ROLLBACK -ROLLUP -ROW -ROWS -SCHEMA -SELECT -SEMI -SEPARATED -SERDE -SERDEPROPERTIES -SESSION_USER -SET -SETMINUS -SETS -SHOW -SKEWED -SOME -SORT -SORTED -START -STATISTICS -STORED -STRATIFY -STRUCT -SUBSTR -SUBSTRING -TABLE -TABLES -TABLESAMPLE -TBLPROPERTIES -TEMPORARY -TERMINATED -THEN -TIME -TO -TOUCH -TRAILING -TRANSACTION -TRANSACTIONS -TRANSFORM -TRIM -TRUE -TRUNCATE -TYPE -UNARCHIVE -UNBOUNDED -UNCACHE -UNION -UNIQUE -UNKNOWN -UNLOCK -UNSET -UPDATE -USE -USER -USING -VALUES -VIEW -VIEWS -WHEN -WHERE -WINDOW -WITH -ZONE -EQ -NSEQ -NEQ -NEQJ -LT -LTE -GT -GTE -PLUS -MINUS -ASTERISK -SLASH -PERCENT -TILDE -AMPERSAND -PIPE -CONCAT_PIPE -HAT -SEMICOLON -STRING -BIGINT_LITERAL -SMALLINT_LITERAL -TINYINT_LITERAL -INTEGER_VALUE -EXPONENT_VALUE -DECIMAL_VALUE -FLOAT_LITERAL -DOUBLE_LITERAL -BIGDECIMAL_LITERAL -IDENTIFIER -BACKQUOTED_IDENTIFIER -CUSTOM_VARS -SIMPLE_COMMENT -BRACKETED_COMMENT -WS -UNRECOGNIZED - -rule names: -program -singleStatement -emptyStatement -singleExpression -singleTableIdentifier -singleMultipartIdentifier -singleDataType -singleTableSchema -statement -configKey -unsupportedHiveNativeCommands -createTableHeader -replaceTableHeader -bucketSpec -skewSpec -locationSpec -commentSpec -query -insertInto -partitionSpecLocation -partitionSpec -partitionVal -namespace -describeFuncName -describeColName -ctes -namedQuery -tableProvider -createTableClauses -tablePropertyList -tableProperty -tablePropertyKey -tablePropertyValue -constantList -nestedConstantList -createFileFormat -fileFormat -storageHandler -resource -dmlStatementNoWith -queryOrganization -multiInsertQueryBody -queryTerm -queryPrimary -sortItem -fromStatement -fromStatementBody -querySpecification -transformClause -selectClause -setClause -matchedClause -notMatchedClause -matchedAction -notMatchedAction -assignmentList -assignment -whereClause -havingClause -hint -hintStatement -fromClause -aggregationClause -groupingSet -pivotClause -pivotColumn -pivotValue -lateralView -setQuantifier -relation -joinRelation -joinType -joinCriteria -sample -sampleMethod -identifierList -identifierSeq -orderedIdentifierList -orderedIdentifier -identifierCommentList -identifierComment -relationPrimary -inlineTable -functionTable -tableAlias -rowFormat -multipartIdentifierList -multipartIdentifier -tableIdentifier -namedExpression -namedExpressionSeq -transformList -transform -transformArgument -expression -booleanExpression -predicate -valueExpression -primaryExpression -constant -comparisonOperator -arithmeticOperator -predicateOperator -booleanValue -interval -errorCapturingMultiUnitsInterval -multiUnitsInterval -errorCapturingUnitToUnitInterval -unitToUnitInterval -intervalValue -colPosition -dataType -qualifiedColTypeWithPositionList -qualifiedColTypeWithPosition -colTypeList -colType -complexColTypeList -complexColType -whenClause -windowClause -namedWindow -windowSpec -windowFrame -frameBound -qualifiedNameList -functionName -qualifiedName -errorCapturingIdentifier -errorCapturingIdentifierExtra -identifier -strictIdentifier -quotedIdentifier -number -alterColumnAction -ansiNonReserved -strictNonReserved -nonReserved - - -atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 297, 3033, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 5, 3, 282, 10, 3, 3, 3, 7, 3, 285, 10, 3, 12, 3, 14, 3, 288, 11, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 5, 10, 309, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 314, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 322, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 330, 10, 10, 12, 10, 14, 10, 333, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 352, 10, 10, 3, 10, 3, 10, 5, 10, 356, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 362, 10, 10, 3, 10, 5, 10, 365, 10, 10, 3, 10, 5, 10, 368, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 375, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 380, 10, 10, 3, 10, 5, 10, 383, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 390, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 402, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 411, 10, 10, 12, 10, 14, 10, 414, 11, 10, 3, 10, 5, 10, 417, 10, 10, 3, 10, 5, 10, 420, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 427, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 438, 10, 10, 12, 10, 14, 10, 441, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 448, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 453, 10, 10, 3, 10, 5, 10, 456, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 462, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 473, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 537, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 546, 10, 10, 3, 10, 3, 10, 5, 10, 550, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 556, 10, 10, 3, 10, 3, 10, 5, 10, 560, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 565, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 571, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 583, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 591, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 597, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 610, 10, 10, 3, 10, 6, 10, 613, 10, 10, 13, 10, 14, 10, 614, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 631, 10, 10, 3, 10, 3, 10, 3, 10, 7, 10, 636, 10, 10, 12, 10, 14, 10, 639, 11, 10, 3, 10, 5, 10, 642, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 648, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 663, 10, 10, 3, 10, 3, 10, 5, 10, 667, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 673, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 679, 10, 10, 3, 10, 5, 10, 682, 10, 10, 3, 10, 5, 10, 685, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 691, 10, 10, 3, 10, 3, 10, 5, 10, 695, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 703, 10, 10, 12, 10, 14, 10, 706, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 714, 10, 10, 3, 10, 5, 10, 717, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 726, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 731, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 737, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 744, 10, 10, 3, 10, 5, 10, 747, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 753, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 762, 10, 10, 12, 10, 14, 10, 765, 11, 10, 5, 10, 767, 10, 10, 3, 10, 3, 10, 5, 10, 771, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 776, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 781, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 788, 10, 10, 3, 10, 5, 10, 791, 10, 10, 3, 10, 5, 10, 794, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 801, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 806, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 815, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 823, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 829, 10, 10, 3, 10, 5, 10, 832, 10, 10, 3, 10, 5, 10, 835, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 841, 10, 10, 3, 10, 3, 10, 5, 10, 845, 10, 10, 3, 10, 3, 10, 5, 10, 849, 10, 10, 3, 10, 3, 10, 5, 10, 853, 10, 10, 5, 10, 855, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 863, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 871, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 877, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 883, 10, 10, 3, 10, 5, 10, 886, 10, 10, 3, 10, 3, 10, 5, 10, 890, 10, 10, 3, 10, 5, 10, 893, 10, 10, 3, 10, 3, 10, 5, 10, 897, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 923, 10, 10, 12, 10, 14, 10, 926, 11, 10, 5, 10, 928, 10, 10, 3, 10, 3, 10, 5, 10, 932, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 938, 10, 10, 3, 10, 5, 10, 941, 10, 10, 3, 10, 5, 10, 944, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 950, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 958, 10, 10, 3, 10, 3, 10, 3, 10, 5, 10, 963, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 969, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 975, 10, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 985, 10, 10, 12, 10, 14, 10, 988, 11, 10, 5, 10, 990, 10, 10, 3, 10, 3, 10, 3, 10, 7, 10, 995, 10, 10, 12, 10, 14, 10, 998, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 1012, 10, 10, 12, 10, 14, 10, 1015, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 1021, 10, 10, 12, 10, 14, 10, 1024, 11, 10, 5, 10, 1026, 10, 10, 3, 10, 3, 10, 7, 10, 1030, 10, 10, 12, 10, 14, 10, 1033, 11, 10, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 1039, 10, 10, 12, 10, 14, 10, 1042, 11, 10, 3, 10, 3, 10, 7, 10, 1046, 10, 10, 12, 10, 14, 10, 1049, 11, 10, 5, 10, 1051, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1061, 10, 12, 3, 12, 3, 12, 5, 12, 1065, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1072, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1188, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1196, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1204, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1213, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1223, 10, 12, 3, 13, 3, 13, 5, 13, 1227, 10, 13, 3, 13, 5, 13, 1230, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 1236, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 5, 14, 1242, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 1254, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 1266, 10, 16, 3, 16, 3, 16, 3, 16, 5, 16, 1271, 10, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 5, 19, 1280, 10, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 1288, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1295, 10, 20, 5, 20, 1297, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1302, 10, 20, 3, 20, 3, 20, 5, 20, 1306, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1311, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1316, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1321, 10, 20, 3, 20, 5, 20, 1324, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1329, 10, 20, 3, 20, 3, 20, 5, 20, 1333, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1338, 10, 20, 5, 20, 1340, 10, 20, 3, 21, 3, 21, 5, 21, 1344, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 1351, 10, 22, 12, 22, 14, 22, 1354, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 5, 23, 1361, 10, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 5, 25, 1370, 10, 25, 3, 26, 3, 26, 3, 26, 7, 26, 1375, 10, 26, 12, 26, 14, 26, 1378, 11, 26, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 1384, 10, 27, 12, 27, 14, 27, 1387, 11, 27, 3, 28, 3, 28, 5, 28, 1391, 10, 28, 3, 28, 5, 28, 1394, 10, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 7, 30, 1413, 10, 30, 12, 30, 14, 30, 1416, 11, 30, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 1422, 10, 31, 12, 31, 14, 31, 1425, 11, 31, 3, 31, 3, 31, 3, 32, 3, 32, 5, 32, 1431, 10, 32, 3, 32, 5, 32, 1434, 10, 32, 3, 33, 3, 33, 3, 33, 7, 33, 1439, 10, 33, 12, 33, 14, 33, 1442, 11, 33, 3, 33, 5, 33, 1445, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 1451, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 7, 35, 1457, 10, 35, 12, 35, 14, 35, 1460, 11, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 1468, 10, 36, 12, 36, 14, 36, 1471, 11, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 5, 37, 1481, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 1488, 10, 38, 3, 39, 3, 39, 3, 39, 3, 39, 5, 39, 1494, 10, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 6, 41, 1505, 10, 41, 13, 41, 14, 41, 1506, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1514, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1521, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1533, 10, 41, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 1539, 10, 41, 12, 41, 14, 41, 1542, 11, 41, 3, 41, 7, 41, 1545, 10, 41, 12, 41, 14, 41, 1548, 11, 41, 5, 41, 1550, 10, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 1557, 10, 42, 12, 42, 14, 42, 1560, 11, 42, 5, 42, 1562, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 1569, 10, 42, 12, 42, 14, 42, 1572, 11, 42, 5, 42, 1574, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 1581, 10, 42, 12, 42, 14, 42, 1584, 11, 42, 5, 42, 1586, 10, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 1593, 10, 42, 12, 42, 14, 42, 1596, 11, 42, 5, 42, 1598, 10, 42, 3, 42, 5, 42, 1601, 10, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1606, 10, 42, 5, 42, 1608, 10, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1620, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1627, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1634, 10, 44, 3, 44, 7, 44, 1637, 10, 44, 12, 44, 14, 44, 1640, 11, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 1651, 10, 45, 3, 46, 3, 46, 5, 46, 1655, 10, 46, 3, 46, 3, 46, 5, 46, 1659, 10, 46, 3, 47, 3, 47, 6, 47, 1663, 10, 47, 13, 47, 14, 47, 1664, 3, 48, 3, 48, 5, 48, 1669, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 7, 48, 1675, 10, 48, 12, 48, 14, 48, 1678, 11, 48, 3, 48, 5, 48, 1681, 10, 48, 3, 48, 5, 48, 1684, 10, 48, 3, 48, 5, 48, 1687, 10, 48, 3, 48, 5, 48, 1690, 10, 48, 3, 48, 3, 48, 5, 48, 1694, 10, 48, 3, 49, 3, 49, 5, 49, 1698, 10, 49, 3, 49, 5, 49, 1701, 10, 49, 3, 49, 3, 49, 5, 49, 1705, 10, 49, 3, 49, 7, 49, 1708, 10, 49, 12, 49, 14, 49, 1711, 11, 49, 3, 49, 5, 49, 1714, 10, 49, 3, 49, 5, 49, 1717, 10, 49, 3, 49, 5, 49, 1720, 10, 49, 3, 49, 5, 49, 1723, 10, 49, 5, 49, 1725, 10, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 1737, 10, 50, 3, 50, 5, 50, 1740, 10, 50, 3, 50, 3, 50, 5, 50, 1744, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 1754, 10, 50, 3, 50, 3, 50, 5, 50, 1758, 10, 50, 5, 50, 1760, 10, 50, 3, 50, 5, 50, 1763, 10, 50, 3, 50, 3, 50, 5, 50, 1767, 10, 50, 3, 51, 3, 51, 7, 51, 1771, 10, 51, 12, 51, 14, 51, 1774, 11, 51, 3, 51, 5, 51, 1777, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 5, 53, 1788, 10, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 1798, 10, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 1810, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 7, 56, 1823, 10, 56, 12, 56, 14, 56, 1826, 11, 56, 3, 56, 3, 56, 5, 56, 1830, 10, 56, 3, 57, 3, 57, 3, 57, 7, 57, 1835, 10, 57, 12, 57, 14, 57, 1838, 11, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 5, 61, 1853, 10, 61, 3, 61, 7, 61, 1856, 10, 61, 12, 61, 14, 61, 1859, 11, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 7, 62, 1869, 10, 62, 12, 62, 14, 62, 1872, 11, 62, 3, 62, 3, 62, 5, 62, 1876, 10, 62, 3, 63, 3, 63, 3, 63, 3, 63, 7, 63, 1882, 10, 63, 12, 63, 14, 63, 1885, 11, 63, 3, 63, 7, 63, 1888, 10, 63, 12, 63, 14, 63, 1891, 11, 63, 3, 63, 5, 63, 1894, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 1901, 10, 64, 12, 64, 14, 64, 1904, 11, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 1916, 10, 64, 12, 64, 14, 64, 1919, 11, 64, 3, 64, 3, 64, 5, 64, 1923, 10, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 7, 64, 1933, 10, 64, 12, 64, 14, 64, 1936, 11, 64, 3, 64, 3, 64, 5, 64, 1940, 10, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 1946, 10, 65, 12, 65, 14, 65, 1949, 11, 65, 5, 65, 1951, 10, 65, 3, 65, 3, 65, 5, 65, 1955, 10, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 7, 66, 1967, 10, 66, 12, 66, 14, 66, 1970, 11, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 7, 67, 1980, 10, 67, 12, 67, 14, 67, 1983, 11, 67, 3, 67, 3, 67, 5, 67, 1987, 10, 67, 3, 68, 3, 68, 5, 68, 1991, 10, 68, 3, 68, 5, 68, 1994, 10, 68, 3, 69, 3, 69, 3, 69, 5, 69, 1999, 10, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 2006, 10, 69, 12, 69, 14, 69, 2009, 11, 69, 5, 69, 2011, 10, 69, 3, 69, 3, 69, 3, 69, 5, 69, 2016, 10, 69, 3, 69, 3, 69, 3, 69, 7, 69, 2021, 10, 69, 12, 69, 14, 69, 2024, 11, 69, 5, 69, 2026, 10, 69, 3, 70, 3, 70, 3, 71, 3, 71, 7, 71, 2032, 10, 71, 12, 71, 14, 71, 2035, 11, 71, 3, 72, 3, 72, 3, 72, 3, 72, 5, 72, 2041, 10, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 5, 72, 2048, 10, 72, 3, 73, 5, 73, 2051, 10, 73, 3, 73, 3, 73, 3, 73, 5, 73, 2056, 10, 73, 3, 73, 5, 73, 2059, 10, 73, 3, 73, 3, 73, 3, 73, 5, 73, 2064, 10, 73, 3, 73, 3, 73, 5, 73, 2068, 10, 73, 3, 73, 5, 73, 2071, 10, 73, 3, 73, 5, 73, 2074, 10, 73, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 2080, 10, 74, 3, 75, 3, 75, 3, 75, 5, 75, 2085, 10, 75, 3, 75, 3, 75, 3, 76, 5, 76, 2090, 10, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 2108, 10, 76, 5, 76, 2110, 10, 76, 3, 76, 5, 76, 2113, 10, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 7, 78, 2122, 10, 78, 12, 78, 14, 78, 2125, 11, 78, 3, 79, 3, 79, 3, 79, 3, 79, 7, 79, 2131, 10, 79, 12, 79, 14, 79, 2134, 11, 79, 3, 79, 3, 79, 3, 80, 3, 80, 5, 80, 2140, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 7, 81, 2146, 10, 81, 12, 81, 14, 81, 2149, 11, 81, 3, 81, 3, 81, 3, 82, 3, 82, 5, 82, 2155, 10, 82, 3, 83, 3, 83, 5, 83, 2159, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 2167, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 2175, 10, 83, 3, 83, 3, 83, 3, 83, 3, 83, 5, 83, 2181, 10, 83, 3, 84, 3, 84, 3, 84, 3, 84, 7, 84, 2187, 10, 84, 12, 84, 14, 84, 2190, 11, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 7, 85, 2199, 10, 85, 12, 85, 14, 85, 2202, 11, 85, 5, 85, 2204, 10, 85, 3, 85, 3, 85, 3, 85, 3, 86, 5, 86, 2210, 10, 86, 3, 86, 3, 86, 5, 86, 2214, 10, 86, 5, 86, 2216, 10, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2225, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2237, 10, 87, 5, 87, 2239, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2246, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2253, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2259, 10, 87, 3, 87, 3, 87, 3, 87, 3, 87, 5, 87, 2265, 10, 87, 5, 87, 2267, 10, 87, 3, 88, 3, 88, 3, 88, 7, 88, 2272, 10, 88, 12, 88, 14, 88, 2275, 11, 88, 3, 89, 3, 89, 3, 89, 7, 89, 2280, 10, 89, 12, 89, 14, 89, 2283, 11, 89, 3, 90, 3, 90, 3, 90, 5, 90, 2288, 10, 90, 3, 90, 3, 90, 3, 91, 3, 91, 5, 91, 2294, 10, 91, 3, 91, 3, 91, 5, 91, 2298, 10, 91, 5, 91, 2300, 10, 91, 3, 92, 3, 92, 3, 92, 7, 92, 2305, 10, 92, 12, 92, 14, 92, 2308, 11, 92, 3, 93, 3, 93, 3, 93, 3, 93, 7, 93, 2314, 10, 93, 12, 93, 14, 93, 2317, 11, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 7, 94, 2327, 10, 94, 12, 94, 14, 94, 2330, 11, 94, 3, 94, 3, 94, 5, 94, 2334, 10, 94, 3, 95, 3, 95, 5, 95, 2338, 10, 95, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 5, 97, 2352, 10, 97, 5, 97, 2354, 10, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 7, 97, 2362, 10, 97, 12, 97, 14, 97, 2365, 11, 97, 3, 98, 5, 98, 2368, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2376, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 7, 98, 2383, 10, 98, 12, 98, 14, 98, 2386, 11, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2391, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2399, 10, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2404, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 7, 98, 2414, 10, 98, 12, 98, 14, 98, 2417, 11, 98, 3, 98, 3, 98, 5, 98, 2421, 10, 98, 3, 98, 5, 98, 2424, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2430, 10, 98, 3, 98, 3, 98, 5, 98, 2434, 10, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2439, 10, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2444, 10, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2449, 10, 98, 3, 99, 3, 99, 3, 99, 3, 99, 5, 99, 2455, 10, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 7, 99, 2476, 10, 99, 12, 99, 14, 99, 2479, 11, 99, 3, 100, 3, 100, 3, 100, 3, 100, 6, 100, 2485, 10, 100, 13, 100, 14, 100, 2486, 3, 100, 3, 100, 5, 100, 2491, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 6, 100, 2498, 10, 100, 13, 100, 14, 100, 2499, 3, 100, 3, 100, 5, 100, 2504, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 7, 100, 2520, 10, 100, 12, 100, 14, 100, 2523, 11, 100, 5, 100, 2525, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 2533, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 2542, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 6, 100, 2563, 10, 100, 13, 100, 14, 100, 2564, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 2576, 10, 100, 3, 100, 3, 100, 3, 100, 7, 100, 2581, 10, 100, 12, 100, 14, 100, 2584, 11, 100, 5, 100, 2586, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 2595, 10, 100, 3, 100, 3, 100, 5, 100, 2599, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 6, 100, 2609, 10, 100, 13, 100, 14, 100, 2610, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 2636, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 2643, 10, 100, 3, 100, 5, 100, 2646, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 5, 100, 2661, 10, 100, 3, 100, 3, 100, 5, 100, 2665, 10, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 7, 100, 2675, 10, 100, 12, 100, 14, 100, 2678, 11, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 6, 101, 2688, 10, 101, 13, 101, 14, 101, 2689, 5, 101, 2692, 10, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 5, 106, 2705, 10, 106, 3, 107, 3, 107, 5, 107, 2709, 10, 107, 3, 108, 3, 108, 3, 108, 6, 108, 2714, 10, 108, 13, 108, 14, 108, 2715, 3, 109, 3, 109, 3, 109, 5, 109, 2721, 10, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 5, 111, 2729, 10, 111, 3, 111, 3, 111, 5, 111, 2733, 10, 111, 3, 112, 3, 112, 3, 112, 5, 112, 2738, 10, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 2755, 10, 113, 3, 113, 3, 113, 5, 113, 2759, 10, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 7, 113, 2766, 10, 113, 12, 113, 14, 113, 2769, 11, 113, 3, 113, 5, 113, 2772, 10, 113, 5, 113, 2774, 10, 113, 3, 114, 3, 114, 3, 114, 7, 114, 2779, 10, 114, 12, 114, 14, 114, 2782, 11, 114, 3, 115, 3, 115, 3, 115, 3, 115, 5, 115, 2788, 10, 115, 3, 115, 5, 115, 2791, 10, 115, 3, 115, 5, 115, 2794, 10, 115, 3, 116, 3, 116, 3, 116, 7, 116, 2799, 10, 116, 12, 116, 14, 116, 2802, 11, 116, 3, 117, 3, 117, 3, 117, 3, 117, 5, 117, 2808, 10, 117, 3, 117, 5, 117, 2811, 10, 117, 3, 118, 3, 118, 3, 118, 7, 118, 2816, 10, 118, 12, 118, 14, 118, 2819, 11, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 5, 119, 2826, 10, 119, 3, 119, 5, 119, 2829, 10, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 7, 121, 2840, 10, 121, 12, 121, 14, 121, 2843, 11, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 7, 123, 2860, 10, 123, 12, 123, 14, 123, 2863, 11, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 7, 123, 2870, 10, 123, 12, 123, 14, 123, 2873, 11, 123, 5, 123, 2875, 10, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 7, 123, 2882, 10, 123, 12, 123, 14, 123, 2885, 11, 123, 5, 123, 2887, 10, 123, 5, 123, 2889, 10, 123, 3, 123, 5, 123, 2892, 10, 123, 3, 123, 5, 123, 2895, 10, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 5, 124, 2913, 10, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 5, 125, 2922, 10, 125, 3, 126, 3, 126, 3, 126, 7, 126, 2927, 10, 126, 12, 126, 14, 126, 2930, 11, 126, 3, 127, 3, 127, 3, 127, 3, 127, 5, 127, 2936, 10, 127, 3, 128, 3, 128, 3, 128, 7, 128, 2941, 10, 128, 12, 128, 14, 128, 2944, 11, 128, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 6, 130, 2951, 10, 130, 13, 130, 14, 130, 2952, 3, 130, 5, 130, 2956, 10, 130, 3, 131, 3, 131, 3, 131, 5, 131, 2961, 10, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 5, 132, 2969, 10, 132, 3, 133, 3, 133, 3, 134, 3, 134, 5, 134, 2975, 10, 134, 3, 134, 3, 134, 3, 134, 5, 134, 2980, 10, 134, 3, 134, 3, 134, 3, 134, 5, 134, 2985, 10, 134, 3, 134, 3, 134, 5, 134, 2989, 10, 134, 3, 134, 3, 134, 5, 134, 2993, 10, 134, 3, 134, 3, 134, 5, 134, 2997, 10, 134, 3, 134, 3, 134, 5, 134, 3001, 10, 134, 3, 134, 3, 134, 5, 134, 3005, 10, 134, 3, 134, 3, 134, 5, 134, 3009, 10, 134, 3, 134, 3, 134, 5, 134, 3013, 10, 134, 3, 134, 5, 134, 3016, 10, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3025, 10, 135, 3, 136, 3, 136, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 10, 924, 986, 996, 1013, 1022, 1031, 1040, 1047, 2, 6, 86, 192, 196, 198, 139, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 178, 2, 180, 2, 182, 2, 184, 2, 186, 2, 188, 2, 190, 2, 192, 2, 194, 2, 196, 2, 198, 2, 200, 2, 202, 2, 204, 2, 206, 2, 208, 2, 210, 2, 212, 2, 214, 2, 216, 2, 218, 2, 220, 2, 222, 2, 224, 2, 226, 2, 228, 2, 230, 2, 232, 2, 234, 2, 236, 2, 238, 2, 240, 2, 242, 2, 244, 2, 246, 2, 248, 2, 250, 2, 252, 2, 254, 2, 256, 2, 258, 2, 260, 2, 262, 2, 264, 2, 266, 2, 268, 2, 270, 2, 272, 2, 274, 2, 2, 45, 4, 2, 65, 65, 178, 178, 4, 2, 33, 33, 192, 192, 4, 2, 64, 64, 148, 148, 4, 2, 101, 101, 113, 113, 3, 2, 44, 45, 4, 2, 224, 224, 255, 255, 4, 2, 16, 16, 36, 36, 7, 2, 41, 41, 53, 53, 87, 87, 100, 100, 141, 141, 3, 2, 69, 70, 4, 2, 87, 87, 100, 100, 4, 2, 152, 152, 281, 281, 4, 2, 13, 13, 135, 135, 4, 2, 137, 137, 281, 281, 5, 2, 63, 63, 147, 147, 202, 202, 6, 2, 82, 82, 120, 120, 210, 210, 245, 245, 5, 2, 82, 82, 210, 210, 245, 245, 4, 2, 24, 24, 69, 69, 4, 2, 95, 95, 127, 127, 4, 2, 15, 15, 74, 74, 4, 2, 285, 285, 287, 287, 5, 2, 15, 15, 20, 20, 214, 214, 5, 2, 90, 90, 239, 239, 247, 247, 4, 2, 270, 271, 275, 275, 4, 2, 76, 76, 272, 274, 4, 2, 270, 271, 278, 278, 4, 2, 58, 58, 60, 60, 3, 2, 222, 223, 4, 2, 5, 5, 101, 101, 4, 2, 5, 5, 97, 97, 5, 2, 28, 28, 130, 130, 234, 234, 3, 2, 262, 269, 4, 2, 76, 76, 270, 279, 6, 2, 18, 18, 113, 113, 151, 151, 159, 159, 4, 2, 90, 90, 239, 239, 3, 2, 270, 271, 4, 2, 75, 75, 168, 168, 4, 2, 160, 160, 215, 215, 4, 2, 96, 96, 175, 175, 3, 2, 286, 287, 4, 2, 77, 77, 209, 209, 50, 2, 13, 14, 16, 17, 19, 19, 21, 22, 24, 25, 27, 27, 29, 33, 36, 36, 38, 41, 43, 43, 45, 51, 53, 53, 56, 57, 62, 73, 75, 77, 81, 81, 83, 89, 92, 92, 94, 96, 99, 100, 103, 105, 108, 108, 110, 112, 114, 115, 117, 119, 121, 121, 124, 124, 126, 129, 132, 148, 150, 150, 153, 154, 157, 158, 161, 161, 163, 164, 166, 175, 177, 185, 187, 193, 195, 202, 204, 207, 209, 213, 215, 223, 225, 229, 233, 233, 235, 244, 248, 251, 254, 256, 259, 259, 261, 261, 17, 2, 19, 19, 55, 55, 82, 82, 102, 102, 116, 116, 120, 120, 125, 125, 131, 131, 149, 149, 155, 155, 194, 194, 204, 204, 210, 210, 245, 245, 253, 253, 18, 2, 13, 18, 20, 54, 56, 81, 83, 101, 103, 115, 117, 119, 121, 124, 126, 130, 132, 148, 150, 154, 156, 193, 195, 203, 205, 209, 211, 244, 246, 252, 254, 261, 2, 3507, 2, 276, 3, 2, 2, 2, 4, 286, 3, 2, 2, 2, 6, 289, 3, 2, 2, 2, 8, 291, 3, 2, 2, 2, 10, 294, 3, 2, 2, 2, 12, 297, 3, 2, 2, 2, 14, 300, 3, 2, 2, 2, 16, 303, 3, 2, 2, 2, 18, 1050, 3, 2, 2, 2, 20, 1052, 3, 2, 2, 2, 22, 1222, 3, 2, 2, 2, 24, 1224, 3, 2, 2, 2, 26, 1241, 3, 2, 2, 2, 28, 1247, 3, 2, 2, 2, 30, 1259, 3, 2, 2, 2, 32, 1272, 3, 2, 2, 2, 34, 1275, 3, 2, 2, 2, 36, 1279, 3, 2, 2, 2, 38, 1339, 3, 2, 2, 2, 40, 1341, 3, 2, 2, 2, 42, 1345, 3, 2, 2, 2, 44, 1357, 3, 2, 2, 2, 46, 1362, 3, 2, 2, 2, 48, 1369, 3, 2, 2, 2, 50, 1371, 3, 2, 2, 2, 52, 1379, 3, 2, 2, 2, 54, 1388, 3, 2, 2, 2, 56, 1399, 3, 2, 2, 2, 58, 1414, 3, 2, 2, 2, 60, 1417, 3, 2, 2, 2, 62, 1428, 3, 2, 2, 2, 64, 1444, 3, 2, 2, 2, 66, 1450, 3, 2, 2, 2, 68, 1452, 3, 2, 2, 2, 70, 1463, 3, 2, 2, 2, 72, 1480, 3, 2, 2, 2, 74, 1487, 3, 2, 2, 2, 76, 1489, 3, 2, 2, 2, 78, 1495, 3, 2, 2, 2, 80, 1549, 3, 2, 2, 2, 82, 1561, 3, 2, 2, 2, 84, 1609, 3, 2, 2, 2, 86, 1612, 3, 2, 2, 2, 88, 1650, 3, 2, 2, 2, 90, 1652, 3, 2, 2, 2, 92, 1660, 3, 2, 2, 2, 94, 1693, 3, 2, 2, 2, 96, 1724, 3, 2, 2, 2, 98, 1736, 3, 2, 2, 2, 100, 1768, 3, 2, 2, 2, 102, 1780, 3, 2, 2, 2, 104, 1783, 3, 2, 2, 2, 106, 1792, 3, 2, 2, 2, 108, 1809, 3, 2, 2, 2, 110, 1829, 3, 2, 2, 2, 112, 1831, 3, 2, 2, 2, 114, 1839, 3, 2, 2, 2, 116, 1843, 3, 2, 2, 2, 118, 1846, 3, 2, 2, 2, 120, 1849, 3, 2, 2, 2, 122, 1875, 3, 2, 2, 2, 124, 1877, 3, 2, 2, 2, 126, 1939, 3, 2, 2, 2, 128, 1954, 3, 2, 2, 2, 130, 1956, 3, 2, 2, 2, 132, 1986, 3, 2, 2, 2, 134, 1988, 3, 2, 2, 2, 136, 1995, 3, 2, 2, 2, 138, 2027, 3, 2, 2, 2, 140, 2029, 3, 2, 2, 2, 142, 2047, 3, 2, 2, 2, 144, 2073, 3, 2, 2, 2, 146, 2079, 3, 2, 2, 2, 148, 2081, 3, 2, 2, 2, 150, 2112, 3, 2, 2, 2, 152, 2114, 3, 2, 2, 2, 154, 2118, 3, 2, 2, 2, 156, 2126, 3, 2, 2, 2, 158, 2137, 3, 2, 2, 2, 160, 2141, 3, 2, 2, 2, 162, 2152, 3, 2, 2, 2, 164, 2180, 3, 2, 2, 2, 166, 2182, 3, 2, 2, 2, 168, 2193, 3, 2, 2, 2, 170, 2215, 3, 2, 2, 2, 172, 2266, 3, 2, 2, 2, 174, 2268, 3, 2, 2, 2, 176, 2276, 3, 2, 2, 2, 178, 2287, 3, 2, 2, 2, 180, 2291, 3, 2, 2, 2, 182, 2301, 3, 2, 2, 2, 184, 2309, 3, 2, 2, 2, 186, 2333, 3, 2, 2, 2, 188, 2337, 3, 2, 2, 2, 190, 2339, 3, 2, 2, 2, 192, 2353, 3, 2, 2, 2, 194, 2448, 3, 2, 2, 2, 196, 2454, 3, 2, 2, 2, 198, 2664, 3, 2, 2, 2, 200, 2691, 3, 2, 2, 2, 202, 2693, 3, 2, 2, 2, 204, 2695, 3, 2, 2, 2, 206, 2697, 3, 2, 2, 2, 208, 2699, 3, 2, 2, 2, 210, 2701, 3, 2, 2, 2, 212, 2706, 3, 2, 2, 2, 214, 2713, 3, 2, 2, 2, 216, 2717, 3, 2, 2, 2, 218, 2722, 3, 2, 2, 2, 220, 2732, 3, 2, 2, 2, 222, 2737, 3, 2, 2, 2, 224, 2773, 3, 2, 2, 2, 226, 2775, 3, 2, 2, 2, 228, 2783, 3, 2, 2, 2, 230, 2795, 3, 2, 2, 2, 232, 2803, 3, 2, 2, 2, 234, 2812, 3, 2, 2, 2, 236, 2820, 3, 2, 2, 2, 238, 2830, 3, 2, 2, 2, 240, 2835, 3, 2, 2, 2, 242, 2844, 3, 2, 2, 2, 244, 2894, 3, 2, 2, 2, 246, 2912, 3, 2, 2, 2, 248, 2921, 3, 2, 2, 2, 250, 2923, 3, 2, 2, 2, 252, 2935, 3, 2, 2, 2, 254, 2937, 3, 2, 2, 2, 256, 2945, 3, 2, 2, 2, 258, 2955, 3, 2, 2, 2, 260, 2960, 3, 2, 2, 2, 262, 2968, 3, 2, 2, 2, 264, 2970, 3, 2, 2, 2, 266, 3015, 3, 2, 2, 2, 268, 3024, 3, 2, 2, 2, 270, 3026, 3, 2, 2, 2, 272, 3028, 3, 2, 2, 2, 274, 3030, 3, 2, 2, 2, 276, 277, 5, 4, 3, 2, 277, 278, 7, 2, 2, 3, 278, 3, 3, 2, 2, 2, 279, 281, 5, 18, 10, 2, 280, 282, 7, 280, 2, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 285, 3, 2, 2, 2, 283, 285, 5, 6, 4, 2, 284, 279, 3, 2, 2, 2, 284, 283, 3, 2, 2, 2, 285, 288, 3, 2, 2, 2, 286, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 5, 3, 2, 2, 2, 288, 286, 3, 2, 2, 2, 289, 290, 7, 280, 2, 2, 290, 7, 3, 2, 2, 2, 291, 292, 5, 180, 91, 2, 292, 293, 7, 2, 2, 3, 293, 9, 3, 2, 2, 2, 294, 295, 5, 178, 90, 2, 295, 296, 7, 2, 2, 3, 296, 11, 3, 2, 2, 2, 297, 298, 5, 176, 89, 2, 298, 299, 7, 2, 2, 3, 299, 13, 3, 2, 2, 2, 300, 301, 5, 224, 113, 2, 301, 302, 7, 2, 2, 3, 302, 15, 3, 2, 2, 2, 303, 304, 5, 230, 116, 2, 304, 305, 7, 2, 2, 3, 305, 17, 3, 2, 2, 2, 306, 1051, 5, 36, 19, 2, 307, 309, 5, 52, 27, 2, 308, 307, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 1051, 5, 80, 41, 2, 311, 313, 7, 251, 2, 2, 312, 314, 7, 147, 2, 2, 313, 312, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 1051, 5, 176, 89, 2, 316, 317, 7, 54, 2, 2, 317, 321, 5, 46, 24, 2, 318, 319, 7, 110, 2, 2, 319, 320, 7, 151, 2, 2, 320, 322, 7, 84, 2, 2, 321, 318, 3, 2, 2, 2, 321, 322, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 331, 5, 176, 89, 2, 324, 330, 5, 34, 18, 2, 325, 330, 5, 32, 17, 2, 326, 327, 7, 260, 2, 2, 327, 328, 9, 2, 2, 2, 328, 330, 5, 60, 31, 2, 329, 324, 3, 2, 2, 2, 329, 325, 3, 2, 2, 2, 329, 326, 3, 2, 2, 2, 330, 333, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 1051, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 334, 335, 7, 16, 2, 2, 335, 336, 5, 46, 24, 2, 336, 337, 5, 176, 89, 2, 337, 338, 7, 209, 2, 2, 338, 339, 9, 2, 2, 2, 339, 340, 5, 60, 31, 2, 340, 1051, 3, 2, 2, 2, 341, 342, 7, 16, 2, 2, 342, 343, 5, 46, 24, 2, 343, 344, 5, 176, 89, 2, 344, 345, 7, 209, 2, 2, 345, 346, 5, 32, 17, 2, 346, 1051, 3, 2, 2, 2, 347, 348, 7, 77, 2, 2, 348, 351, 5, 46, 24, 2, 349, 350, 7, 110, 2, 2, 350, 352, 7, 84, 2, 2, 351, 349, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 355, 5, 176, 89, 2, 354, 356, 9, 3, 2, 2, 355, 354, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 1051, 3, 2, 2, 2, 357, 358, 7, 212, 2, 2, 358, 361, 9, 4, 2, 2, 359, 360, 9, 5, 2, 2, 360, 362, 5, 176, 89, 2, 361, 359, 3, 2, 2, 2, 361, 362, 3, 2, 2, 2, 362, 367, 3, 2, 2, 2, 363, 365, 7, 132, 2, 2, 364, 363, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 7, 281, 2, 2, 367, 364, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 1051, 3, 2, 2, 2, 369, 374, 5, 24, 13, 2, 370, 371, 7, 3, 2, 2, 371, 372, 5, 230, 116, 2, 372, 373, 7, 4, 2, 2, 373, 375, 3, 2, 2, 2, 374, 370, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 376, 3, 2, 2, 2, 376, 377, 5, 56, 29, 2, 377, 382, 5, 58, 30, 2, 378, 380, 7, 23, 2, 2, 379, 378, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 381, 3, 2, 2, 2, 381, 383, 5, 36, 19, 2, 382, 379, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 1051, 3, 2, 2, 2, 384, 389, 5, 24, 13, 2, 385, 386, 7, 3, 2, 2, 386, 387, 5, 230, 116, 2, 387, 388, 7, 4, 2, 2, 388, 390, 3, 2, 2, 2, 389, 385, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 412, 3, 2, 2, 2, 391, 411, 5, 34, 18, 2, 392, 393, 7, 169, 2, 2, 393, 394, 7, 31, 2, 2, 394, 395, 7, 3, 2, 2, 395, 396, 5, 230, 116, 2, 396, 397, 7, 4, 2, 2, 397, 402, 3, 2, 2, 2, 398, 399, 7, 169, 2, 2, 399, 400, 7, 31, 2, 2, 400, 402, 5, 152, 77, 2, 401, 392, 3, 2, 2, 2, 401, 398, 3, 2, 2, 2, 402, 411, 3, 2, 2, 2, 403, 411, 5, 28, 15, 2, 404, 411, 5, 30, 16, 2, 405, 411, 5, 172, 87, 2, 406, 411, 5, 72, 37, 2, 407, 411, 5, 32, 17, 2, 408, 409, 7, 227, 2, 2, 409, 411, 5, 60, 31, 2, 410, 391, 3, 2, 2, 2, 410, 401, 3, 2, 2, 2, 410, 403, 3, 2, 2, 2, 410, 404, 3, 2, 2, 2, 410, 405, 3, 2, 2, 2, 410, 406, 3, 2, 2, 2, 410, 407, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 411, 414, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 412, 413, 3, 2, 2, 2, 413, 419, 3, 2, 2, 2, 414, 412, 3, 2, 2, 2, 415, 417, 7, 23, 2, 2, 416, 415, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 420, 5, 36, 19, 2, 419, 416, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 1051, 3, 2, 2, 2, 421, 422, 7, 54, 2, 2, 422, 426, 7, 224, 2, 2, 423, 424, 7, 110, 2, 2, 424, 425, 7, 151, 2, 2, 425, 427, 7, 84, 2, 2, 426, 423, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 429, 5, 178, 90, 2, 429, 430, 7, 132, 2, 2, 430, 439, 5, 178, 90, 2, 431, 438, 5, 56, 29, 2, 432, 438, 5, 172, 87, 2, 433, 438, 5, 72, 37, 2, 434, 438, 5, 32, 17, 2, 435, 436, 7, 227, 2, 2, 436, 438, 5, 60, 31, 2, 437, 431, 3, 2, 2, 2, 437, 432, 3, 2, 2, 2, 437, 433, 3, 2, 2, 2, 437, 434, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 438, 441, 3, 2, 2, 2, 439, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 1051, 3, 2, 2, 2, 441, 439, 3, 2, 2, 2, 442, 447, 5, 26, 14, 2, 443, 444, 7, 3, 2, 2, 444, 445, 5, 230, 116, 2, 445, 446, 7, 4, 2, 2, 446, 448, 3, 2, 2, 2, 447, 443, 3, 2, 2, 2, 447, 448, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 450, 5, 56, 29, 2, 450, 455, 5, 58, 30, 2, 451, 453, 7, 23, 2, 2, 452, 451, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 454, 3, 2, 2, 2, 454, 456, 5, 36, 19, 2, 455, 452, 3, 2, 2, 2, 455, 456, 3, 2, 2, 2, 456, 1051, 3, 2, 2, 2, 457, 458, 7, 17, 2, 2, 458, 459, 7, 224, 2, 2, 459, 461, 5, 176, 89, 2, 460, 462, 5, 42, 22, 2, 461, 460, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 464, 7, 50, 2, 2, 464, 472, 7, 218, 2, 2, 465, 473, 5, 260, 131, 2, 466, 467, 7, 97, 2, 2, 467, 468, 7, 45, 2, 2, 468, 473, 5, 154, 78, 2, 469, 470, 7, 97, 2, 2, 470, 471, 7, 15, 2, 2, 471, 473, 7, 45, 2, 2, 472, 465, 3, 2, 2, 2, 472, 466, 3, 2, 2, 2, 472, 469, 3, 2, 2, 2, 472, 473, 3, 2, 2, 2, 473, 1051, 3, 2, 2, 2, 474, 475, 7, 16, 2, 2, 475, 476, 7, 224, 2, 2, 476, 477, 5, 176, 89, 2, 477, 478, 7, 13, 2, 2, 478, 479, 9, 6, 2, 2, 479, 480, 5, 226, 114, 2, 480, 1051, 3, 2, 2, 2, 481, 482, 7, 16, 2, 2, 482, 483, 7, 224, 2, 2, 483, 484, 5, 176, 89, 2, 484, 485, 7, 13, 2, 2, 485, 486, 9, 6, 2, 2, 486, 487, 7, 3, 2, 2, 487, 488, 5, 226, 114, 2, 488, 489, 7, 4, 2, 2, 489, 1051, 3, 2, 2, 2, 490, 491, 7, 16, 2, 2, 491, 492, 7, 224, 2, 2, 492, 493, 5, 176, 89, 2, 493, 494, 7, 188, 2, 2, 494, 495, 7, 44, 2, 2, 495, 496, 5, 176, 89, 2, 496, 497, 7, 232, 2, 2, 497, 498, 5, 256, 129, 2, 498, 1051, 3, 2, 2, 2, 499, 500, 7, 16, 2, 2, 500, 501, 7, 224, 2, 2, 501, 502, 5, 176, 89, 2, 502, 503, 7, 77, 2, 2, 503, 504, 9, 6, 2, 2, 504, 505, 7, 3, 2, 2, 505, 506, 5, 174, 88, 2, 506, 507, 7, 4, 2, 2, 507, 1051, 3, 2, 2, 2, 508, 509, 7, 16, 2, 2, 509, 510, 7, 224, 2, 2, 510, 511, 5, 176, 89, 2, 511, 512, 7, 77, 2, 2, 512, 513, 9, 6, 2, 2, 513, 514, 5, 174, 88, 2, 514, 1051, 3, 2, 2, 2, 515, 516, 7, 16, 2, 2, 516, 517, 9, 7, 2, 2, 517, 518, 5, 176, 89, 2, 518, 519, 7, 188, 2, 2, 519, 520, 7, 232, 2, 2, 520, 521, 5, 176, 89, 2, 521, 1051, 3, 2, 2, 2, 522, 523, 7, 16, 2, 2, 523, 524, 9, 7, 2, 2, 524, 525, 5, 176, 89, 2, 525, 526, 7, 209, 2, 2, 526, 527, 7, 227, 2, 2, 527, 528, 5, 60, 31, 2, 528, 1051, 3, 2, 2, 2, 529, 530, 7, 16, 2, 2, 530, 531, 9, 7, 2, 2, 531, 532, 5, 176, 89, 2, 532, 533, 7, 249, 2, 2, 533, 536, 7, 227, 2, 2, 534, 535, 7, 110, 2, 2, 535, 537, 7, 84, 2, 2, 536, 534, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 539, 5, 60, 31, 2, 539, 1051, 3, 2, 2, 2, 540, 541, 7, 16, 2, 2, 541, 542, 7, 224, 2, 2, 542, 543, 5, 176, 89, 2, 543, 545, 9, 8, 2, 2, 544, 546, 7, 44, 2, 2, 545, 544, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 547, 3, 2, 2, 2, 547, 549, 5, 176, 89, 2, 548, 550, 5, 268, 135, 2, 549, 548, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 1051, 3, 2, 2, 2, 551, 552, 7, 16, 2, 2, 552, 553, 7, 224, 2, 2, 553, 555, 5, 176, 89, 2, 554, 556, 5, 42, 22, 2, 555, 554, 3, 2, 2, 2, 555, 556, 3, 2, 2, 2, 556, 557, 3, 2, 2, 2, 557, 559, 7, 36, 2, 2, 558, 560, 7, 44, 2, 2, 559, 558, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 562, 5, 176, 89, 2, 562, 564, 5, 232, 117, 2, 563, 565, 5, 222, 112, 2, 564, 563, 3, 2, 2, 2, 564, 565, 3, 2, 2, 2, 565, 1051, 3, 2, 2, 2, 566, 567, 7, 16, 2, 2, 567, 568, 7, 224, 2, 2, 568, 570, 5, 176, 89, 2, 569, 571, 5, 42, 22, 2, 570, 569, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 572, 3, 2, 2, 2, 572, 573, 7, 190, 2, 2, 573, 574, 7, 45, 2, 2, 574, 575, 7, 3, 2, 2, 575, 576, 5, 226, 114, 2, 576, 577, 7, 4, 2, 2, 577, 1051, 3, 2, 2, 2, 578, 579, 7, 16, 2, 2, 579, 580, 7, 224, 2, 2, 580, 582, 5, 176, 89, 2, 581, 583, 5, 42, 22, 2, 582, 581, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, 584, 585, 7, 209, 2, 2, 585, 586, 7, 206, 2, 2, 586, 590, 7, 281, 2, 2, 587, 588, 7, 260, 2, 2, 588, 589, 7, 207, 2, 2, 589, 591, 5, 60, 31, 2, 590, 587, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 1051, 3, 2, 2, 2, 592, 593, 7, 16, 2, 2, 593, 594, 7, 224, 2, 2, 594, 596, 5, 176, 89, 2, 595, 597, 5, 42, 22, 2, 596, 595, 3, 2, 2, 2, 596, 597, 3, 2, 2, 2, 597, 598, 3, 2, 2, 2, 598, 599, 7, 209, 2, 2, 599, 600, 7, 207, 2, 2, 600, 601, 5, 60, 31, 2, 601, 1051, 3, 2, 2, 2, 602, 603, 7, 16, 2, 2, 603, 604, 9, 7, 2, 2, 604, 605, 5, 176, 89, 2, 605, 609, 7, 13, 2, 2, 606, 607, 7, 110, 2, 2, 607, 608, 7, 151, 2, 2, 608, 610, 7, 84, 2, 2, 609, 606, 3, 2, 2, 2, 609, 610, 3, 2, 2, 2, 610, 612, 3, 2, 2, 2, 611, 613, 5, 40, 21, 2, 612, 611, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 612, 3, 2, 2, 2, 614, 615, 3, 2, 2, 2, 615, 1051, 3, 2, 2, 2, 616, 617, 7, 16, 2, 2, 617, 618, 7, 224, 2, 2, 618, 619, 5, 176, 89, 2, 619, 620, 5, 42, 22, 2, 620, 621, 7, 188, 2, 2, 621, 622, 7, 232, 2, 2, 622, 623, 5, 42, 22, 2, 623, 1051, 3, 2, 2, 2, 624, 625, 7, 16, 2, 2, 625, 626, 9, 7, 2, 2, 626, 627, 5, 176, 89, 2, 627, 630, 7, 77, 2, 2, 628, 629, 7, 110, 2, 2, 629, 631, 7, 84, 2, 2, 630, 628, 3, 2, 2, 2, 630, 631, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 637, 5, 42, 22, 2, 633, 634, 7, 5, 2, 2, 634, 636, 5, 42, 22, 2, 635, 633, 3, 2, 2, 2, 636, 639, 3, 2, 2, 2, 637, 635, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 641, 3, 2, 2, 2, 639, 637, 3, 2, 2, 2, 640, 642, 7, 179, 2, 2, 641, 640, 3, 2, 2, 2, 641, 642, 3, 2, 2, 2, 642, 1051, 3, 2, 2, 2, 643, 644, 7, 16, 2, 2, 644, 645, 7, 224, 2, 2, 645, 647, 5, 176, 89, 2, 646, 648, 5, 42, 22, 2, 647, 646, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 650, 7, 209, 2, 2, 650, 651, 5, 32, 17, 2, 651, 1051, 3, 2, 2, 2, 652, 653, 7, 16, 2, 2, 653, 654, 7, 224, 2, 2, 654, 655, 5, 176, 89, 2, 655, 656, 7, 184, 2, 2, 656, 657, 7, 170, 2, 2, 657, 1051, 3, 2, 2, 2, 658, 659, 7, 77, 2, 2, 659, 662, 7, 224, 2, 2, 660, 661, 7, 110, 2, 2, 661, 663, 7, 84, 2, 2, 662, 660, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 664, 3, 2, 2, 2, 664, 666, 5, 176, 89, 2, 665, 667, 7, 179, 2, 2, 666, 665, 3, 2, 2, 2, 666, 667, 3, 2, 2, 2, 667, 1051, 3, 2, 2, 2, 668, 669, 7, 77, 2, 2, 669, 672, 7, 255, 2, 2, 670, 671, 7, 110, 2, 2, 671, 673, 7, 84, 2, 2, 672, 670, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 674, 3, 2, 2, 2, 674, 1051, 5, 176, 89, 2, 675, 678, 7, 54, 2, 2, 676, 677, 7, 159, 2, 2, 677, 679, 7, 190, 2, 2, 678, 676, 3, 2, 2, 2, 678, 679, 3, 2, 2, 2, 679, 684, 3, 2, 2, 2, 680, 682, 7, 105, 2, 2, 681, 680, 3, 2, 2, 2, 681, 682, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 685, 7, 228, 2, 2, 684, 681, 3, 2, 2, 2, 684, 685, 3, 2, 2, 2, 685, 686, 3, 2, 2, 2, 686, 690, 7, 255, 2, 2, 687, 688, 7, 110, 2, 2, 688, 689, 7, 151, 2, 2, 689, 691, 7, 84, 2, 2, 690, 687, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 3, 2, 2, 2, 692, 694, 5, 176, 89, 2, 693, 695, 5, 160, 81, 2, 694, 693, 3, 2, 2, 2, 694, 695, 3, 2, 2, 2, 695, 704, 3, 2, 2, 2, 696, 703, 5, 34, 18, 2, 697, 698, 7, 169, 2, 2, 698, 699, 7, 155, 2, 2, 699, 703, 5, 152, 77, 2, 700, 701, 7, 227, 2, 2, 701, 703, 5, 60, 31, 2, 702, 696, 3, 2, 2, 2, 702, 697, 3, 2, 2, 2, 702, 700, 3, 2, 2, 2, 703, 706, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 707, 3, 2, 2, 2, 706, 704, 3, 2, 2, 2, 707, 708, 7, 23, 2, 2, 708, 709, 5, 36, 19, 2, 709, 1051, 3, 2, 2, 2, 710, 713, 7, 54, 2, 2, 711, 712, 7, 159, 2, 2, 712, 714, 7, 190, 2, 2, 713, 711, 3, 2, 2, 2, 713, 714, 3, 2, 2, 2, 714, 716, 3, 2, 2, 2, 715, 717, 7, 105, 2, 2, 716, 715, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 718, 3, 2, 2, 2, 718, 719, 7, 228, 2, 2, 719, 720, 7, 255, 2, 2, 720, 725, 5, 178, 90, 2, 721, 722, 7, 3, 2, 2, 722, 723, 5, 230, 116, 2, 723, 724, 7, 4, 2, 2, 724, 726, 3, 2, 2, 2, 725, 721, 3, 2, 2, 2, 725, 726, 3, 2, 2, 2, 726, 727, 3, 2, 2, 2, 727, 730, 5, 56, 29, 2, 728, 729, 7, 158, 2, 2, 729, 731, 5, 60, 31, 2, 730, 728, 3, 2, 2, 2, 730, 731, 3, 2, 2, 2, 731, 1051, 3, 2, 2, 2, 732, 733, 7, 16, 2, 2, 733, 734, 7, 255, 2, 2, 734, 736, 5, 176, 89, 2, 735, 737, 7, 23, 2, 2, 736, 735, 3, 2, 2, 2, 736, 737, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 739, 5, 36, 19, 2, 739, 1051, 3, 2, 2, 2, 740, 743, 7, 54, 2, 2, 741, 742, 7, 159, 2, 2, 742, 744, 7, 190, 2, 2, 743, 741, 3, 2, 2, 2, 743, 744, 3, 2, 2, 2, 744, 746, 3, 2, 2, 2, 745, 747, 7, 228, 2, 2, 746, 745, 3, 2, 2, 2, 746, 747, 3, 2, 2, 2, 747, 748, 3, 2, 2, 2, 748, 752, 7, 103, 2, 2, 749, 750, 7, 110, 2, 2, 750, 751, 7, 151, 2, 2, 751, 753, 7, 84, 2, 2, 752, 749, 3, 2, 2, 2, 752, 753, 3, 2, 2, 2, 753, 754, 3, 2, 2, 2, 754, 755, 5, 176, 89, 2, 755, 756, 7, 23, 2, 2, 756, 766, 7, 281, 2, 2, 757, 758, 7, 253, 2, 2, 758, 763, 5, 78, 40, 2, 759, 760, 7, 5, 2, 2, 760, 762, 5, 78, 40, 2, 761, 759, 3, 2, 2, 2, 762, 765, 3, 2, 2, 2, 763, 761, 3, 2, 2, 2, 763, 764, 3, 2, 2, 2, 764, 767, 3, 2, 2, 2, 765, 763, 3, 2, 2, 2, 766, 757, 3, 2, 2, 2, 766, 767, 3, 2, 2, 2, 767, 1051, 3, 2, 2, 2, 768, 770, 7, 77, 2, 2, 769, 771, 7, 228, 2, 2, 770, 769, 3, 2, 2, 2, 770, 771, 3, 2, 2, 2, 771, 772, 3, 2, 2, 2, 772, 775, 7, 103, 2, 2, 773, 774, 7, 110, 2, 2, 774, 776, 7, 84, 2, 2, 775, 773, 3, 2, 2, 2, 775, 776, 3, 2, 2, 2, 776, 777, 3, 2, 2, 2, 777, 1051, 5, 176, 89, 2, 778, 780, 7, 85, 2, 2, 779, 781, 9, 9, 2, 2, 780, 779, 3, 2, 2, 2, 780, 781, 3, 2, 2, 2, 781, 782, 3, 2, 2, 2, 782, 1051, 5, 18, 10, 2, 783, 784, 7, 212, 2, 2, 784, 787, 7, 225, 2, 2, 785, 786, 9, 5, 2, 2, 786, 788, 5, 176, 89, 2, 787, 785, 3, 2, 2, 2, 787, 788, 3, 2, 2, 2, 788, 793, 3, 2, 2, 2, 789, 791, 7, 132, 2, 2, 790, 789, 3, 2, 2, 2, 790, 791, 3, 2, 2, 2, 791, 792, 3, 2, 2, 2, 792, 794, 7, 281, 2, 2, 793, 790, 3, 2, 2, 2, 793, 794, 3, 2, 2, 2, 794, 1051, 3, 2, 2, 2, 795, 796, 7, 212, 2, 2, 796, 797, 7, 224, 2, 2, 797, 800, 7, 87, 2, 2, 798, 799, 9, 5, 2, 2, 799, 801, 5, 176, 89, 2, 800, 798, 3, 2, 2, 2, 800, 801, 3, 2, 2, 2, 801, 802, 3, 2, 2, 2, 802, 803, 7, 132, 2, 2, 803, 805, 7, 281, 2, 2, 804, 806, 5, 42, 22, 2, 805, 804, 3, 2, 2, 2, 805, 806, 3, 2, 2, 2, 806, 1051, 3, 2, 2, 2, 807, 808, 7, 212, 2, 2, 808, 809, 7, 227, 2, 2, 809, 814, 5, 176, 89, 2, 810, 811, 7, 3, 2, 2, 811, 812, 5, 64, 33, 2, 812, 813, 7, 4, 2, 2, 813, 815, 3, 2, 2, 2, 814, 810, 3, 2, 2, 2, 814, 815, 3, 2, 2, 2, 815, 1051, 3, 2, 2, 2, 816, 817, 7, 212, 2, 2, 817, 818, 7, 45, 2, 2, 818, 819, 9, 5, 2, 2, 819, 822, 5, 176, 89, 2, 820, 821, 9, 5, 2, 2, 821, 823, 5, 176, 89, 2, 822, 820, 3, 2, 2, 2, 822, 823, 3, 2, 2, 2, 823, 1051, 3, 2, 2, 2, 824, 825, 7, 212, 2, 2, 825, 828, 7, 256, 2, 2, 826, 827, 9, 5, 2, 2, 827, 829, 5, 176, 89, 2, 828, 826, 3, 2, 2, 2, 828, 829, 3, 2, 2, 2, 829, 834, 3, 2, 2, 2, 830, 832, 7, 132, 2, 2, 831, 830, 3, 2, 2, 2, 831, 832, 3, 2, 2, 2, 832, 833, 3, 2, 2, 2, 833, 835, 7, 281, 2, 2, 834, 831, 3, 2, 2, 2, 834, 835, 3, 2, 2, 2, 835, 1051, 3, 2, 2, 2, 836, 837, 7, 212, 2, 2, 837, 838, 7, 170, 2, 2, 838, 840, 5, 176, 89, 2, 839, 841, 5, 42, 22, 2, 840, 839, 3, 2, 2, 2, 840, 841, 3, 2, 2, 2, 841, 1051, 3, 2, 2, 2, 842, 844, 7, 212, 2, 2, 843, 845, 5, 260, 131, 2, 844, 843, 3, 2, 2, 2, 844, 845, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 854, 7, 104, 2, 2, 847, 849, 7, 132, 2, 2, 848, 847, 3, 2, 2, 2, 848, 849, 3, 2, 2, 2, 849, 852, 3, 2, 2, 2, 850, 853, 5, 176, 89, 2, 851, 853, 7, 281, 2, 2, 852, 850, 3, 2, 2, 2, 852, 851, 3, 2, 2, 2, 853, 855, 3, 2, 2, 2, 854, 848, 3, 2, 2, 2, 854, 855, 3, 2, 2, 2, 855, 1051, 3, 2, 2, 2, 856, 857, 7, 212, 2, 2, 857, 858, 7, 54, 2, 2, 858, 859, 7, 224, 2, 2, 859, 862, 5, 176, 89, 2, 860, 861, 7, 23, 2, 2, 861, 863, 7, 206, 2, 2, 862, 860, 3, 2, 2, 2, 862, 863, 3, 2, 2, 2, 863, 1051, 3, 2, 2, 2, 864, 865, 7, 212, 2, 2, 865, 866, 7, 57, 2, 2, 866, 1051, 7, 147, 2, 2, 867, 868, 9, 10, 2, 2, 868, 870, 7, 103, 2, 2, 869, 871, 7, 87, 2, 2, 870, 869, 3, 2, 2, 2, 870, 871, 3, 2, 2, 2, 871, 872, 3, 2, 2, 2, 872, 1051, 5, 48, 25, 2, 873, 874, 9, 10, 2, 2, 874, 876, 5, 46, 24, 2, 875, 877, 7, 87, 2, 2, 876, 875, 3, 2, 2, 2, 876, 877, 3, 2, 2, 2, 877, 878, 3, 2, 2, 2, 878, 879, 5, 176, 89, 2, 879, 1051, 3, 2, 2, 2, 880, 882, 9, 10, 2, 2, 881, 883, 7, 224, 2, 2, 882, 881, 3, 2, 2, 2, 882, 883, 3, 2, 2, 2, 883, 885, 3, 2, 2, 2, 884, 886, 9, 11, 2, 2, 885, 884, 3, 2, 2, 2, 885, 886, 3, 2, 2, 2, 886, 887, 3, 2, 2, 2, 887, 889, 5, 176, 89, 2, 888, 890, 5, 42, 22, 2, 889, 888, 3, 2, 2, 2, 889, 890, 3, 2, 2, 2, 890, 892, 3, 2, 2, 2, 891, 893, 5, 50, 26, 2, 892, 891, 3, 2, 2, 2, 892, 893, 3, 2, 2, 2, 893, 1051, 3, 2, 2, 2, 894, 896, 9, 10, 2, 2, 895, 897, 7, 180, 2, 2, 896, 895, 3, 2, 2, 2, 896, 897, 3, 2, 2, 2, 897, 898, 3, 2, 2, 2, 898, 1051, 5, 36, 19, 2, 899, 900, 7, 46, 2, 2, 900, 901, 7, 155, 2, 2, 901, 902, 5, 46, 24, 2, 902, 903, 5, 176, 89, 2, 903, 904, 7, 123, 2, 2, 904, 905, 9, 12, 2, 2, 905, 1051, 3, 2, 2, 2, 906, 907, 7, 46, 2, 2, 907, 908, 7, 155, 2, 2, 908, 909, 7, 224, 2, 2, 909, 910, 5, 176, 89, 2, 910, 911, 7, 123, 2, 2, 911, 912, 9, 12, 2, 2, 912, 1051, 3, 2, 2, 2, 913, 914, 7, 187, 2, 2, 914, 915, 7, 224, 2, 2, 915, 1051, 5, 176, 89, 2, 916, 917, 7, 187, 2, 2, 917, 918, 7, 103, 2, 2, 918, 1051, 5, 176, 89, 2, 919, 927, 7, 187, 2, 2, 920, 928, 7, 281, 2, 2, 921, 923, 11, 2, 2, 2, 922, 921, 3, 2, 2, 2, 923, 926, 3, 2, 2, 2, 924, 925, 3, 2, 2, 2, 924, 922, 3, 2, 2, 2, 925, 928, 3, 2, 2, 2, 926, 924, 3, 2, 2, 2, 927, 920, 3, 2, 2, 2, 927, 924, 3, 2, 2, 2, 928, 1051, 3, 2, 2, 2, 929, 931, 7, 32, 2, 2, 930, 932, 7, 129, 2, 2, 931, 930, 3, 2, 2, 2, 931, 932, 3, 2, 2, 2, 932, 933, 3, 2, 2, 2, 933, 934, 7, 224, 2, 2, 934, 937, 5, 176, 89, 2, 935, 936, 7, 158, 2, 2, 936, 938, 5, 60, 31, 2, 937, 935, 3, 2, 2, 2, 937, 938, 3, 2, 2, 2, 938, 943, 3, 2, 2, 2, 939, 941, 7, 23, 2, 2, 940, 939, 3, 2, 2, 2, 940, 941, 3, 2, 2, 2, 941, 942, 3, 2, 2, 2, 942, 944, 5, 36, 19, 2, 943, 940, 3, 2, 2, 2, 943, 944, 3, 2, 2, 2, 944, 1051, 3, 2, 2, 2, 945, 946, 7, 244, 2, 2, 946, 949, 7, 224, 2, 2, 947, 948, 7, 110, 2, 2, 948, 950, 7, 84, 2, 2, 949, 947, 3, 2, 2, 2, 949, 950, 3, 2, 2, 2, 950, 951, 3, 2, 2, 2, 951, 1051, 5, 176, 89, 2, 952, 953, 7, 38, 2, 2, 953, 1051, 7, 32, 2, 2, 954, 955, 7, 136, 2, 2, 955, 957, 7, 62, 2, 2, 956, 958, 7, 137, 2, 2, 957, 956, 3, 2, 2, 2, 957, 958, 3, 2, 2, 2, 958, 959, 3, 2, 2, 2, 959, 960, 7, 117, 2, 2, 960, 962, 7, 281, 2, 2, 961, 963, 7, 167, 2, 2, 962, 961, 3, 2, 2, 2, 962, 963, 3, 2, 2, 2, 963, 964, 3, 2, 2, 2, 964, 965, 7, 122, 2, 2, 965, 966, 7, 224, 2, 2, 966, 968, 5, 176, 89, 2, 967, 969, 5, 42, 22, 2, 968, 967, 3, 2, 2, 2, 968, 969, 3, 2, 2, 2, 969, 1051, 3, 2, 2, 2, 970, 971, 7, 240, 2, 2, 971, 972, 7, 224, 2, 2, 972, 974, 5, 176, 89, 2, 973, 975, 5, 42, 22, 2, 974, 973, 3, 2, 2, 2, 974, 975, 3, 2, 2, 2, 975, 1051, 3, 2, 2, 2, 976, 977, 7, 146, 2, 2, 977, 978, 7, 189, 2, 2, 978, 979, 7, 224, 2, 2, 979, 1051, 5, 176, 89, 2, 980, 981, 9, 13, 2, 2, 981, 989, 5, 260, 131, 2, 982, 990, 7, 281, 2, 2, 983, 985, 11, 2, 2, 2, 984, 983, 3, 2, 2, 2, 985, 988, 3, 2, 2, 2, 986, 987, 3, 2, 2, 2, 986, 984, 3, 2, 2, 2, 987, 990, 3, 2, 2, 2, 988, 986, 3, 2, 2, 2, 989, 982, 3, 2, 2, 2, 989, 986, 3, 2, 2, 2, 990, 1051, 3, 2, 2, 2, 991, 992, 7, 209, 2, 2, 992, 996, 7, 196, 2, 2, 993, 995, 11, 2, 2, 2, 994, 993, 3, 2, 2, 2, 995, 998, 3, 2, 2, 2, 996, 997, 3, 2, 2, 2, 996, 994, 3, 2, 2, 2, 997, 1051, 3, 2, 2, 2, 998, 996, 3, 2, 2, 2, 999, 1000, 7, 209, 2, 2, 1000, 1001, 7, 231, 2, 2, 1001, 1002, 7, 261, 2, 2, 1002, 1051, 5, 210, 106, 2, 1003, 1004, 7, 209, 2, 2, 1004, 1005, 7, 231, 2, 2, 1005, 1006, 7, 261, 2, 2, 1006, 1051, 9, 14, 2, 2, 1007, 1008, 7, 209, 2, 2, 1008, 1009, 7, 231, 2, 2, 1009, 1013, 7, 261, 2, 2, 1010, 1012, 11, 2, 2, 2, 1011, 1010, 3, 2, 2, 2, 1012, 1015, 3, 2, 2, 2, 1013, 1014, 3, 2, 2, 2, 1013, 1011, 3, 2, 2, 2, 1014, 1051, 3, 2, 2, 2, 1015, 1013, 3, 2, 2, 2, 1016, 1017, 7, 209, 2, 2, 1017, 1025, 5, 20, 11, 2, 1018, 1022, 7, 262, 2, 2, 1019, 1021, 11, 2, 2, 2, 1020, 1019, 3, 2, 2, 2, 1021, 1024, 3, 2, 2, 2, 1022, 1023, 3, 2, 2, 2, 1022, 1020, 3, 2, 2, 2, 1023, 1026, 3, 2, 2, 2, 1024, 1022, 3, 2, 2, 2, 1025, 1018, 3, 2, 2, 2, 1025, 1026, 3, 2, 2, 2, 1026, 1051, 3, 2, 2, 2, 1027, 1031, 7, 209, 2, 2, 1028, 1030, 11, 2, 2, 2, 1029, 1028, 3, 2, 2, 2, 1030, 1033, 3, 2, 2, 2, 1031, 1032, 3, 2, 2, 2, 1031, 1029, 3, 2, 2, 2, 1032, 1051, 3, 2, 2, 2, 1033, 1031, 3, 2, 2, 2, 1034, 1035, 7, 191, 2, 2, 1035, 1051, 5, 20, 11, 2, 1036, 1040, 7, 191, 2, 2, 1037, 1039, 11, 2, 2, 2, 1038, 1037, 3, 2, 2, 2, 1039, 1042, 3, 2, 2, 2, 1040, 1041, 3, 2, 2, 2, 1040, 1038, 3, 2, 2, 2, 1041, 1051, 3, 2, 2, 2, 1042, 1040, 3, 2, 2, 2, 1043, 1047, 5, 22, 12, 2, 1044, 1046, 11, 2, 2, 2, 1045, 1044, 3, 2, 2, 2, 1046, 1049, 3, 2, 2, 2, 1047, 1048, 3, 2, 2, 2, 1047, 1045, 3, 2, 2, 2, 1048, 1051, 3, 2, 2, 2, 1049, 1047, 3, 2, 2, 2, 1050, 306, 3, 2, 2, 2, 1050, 308, 3, 2, 2, 2, 1050, 311, 3, 2, 2, 2, 1050, 316, 3, 2, 2, 2, 1050, 334, 3, 2, 2, 2, 1050, 341, 3, 2, 2, 2, 1050, 347, 3, 2, 2, 2, 1050, 357, 3, 2, 2, 2, 1050, 369, 3, 2, 2, 2, 1050, 384, 3, 2, 2, 2, 1050, 421, 3, 2, 2, 2, 1050, 442, 3, 2, 2, 2, 1050, 457, 3, 2, 2, 2, 1050, 474, 3, 2, 2, 2, 1050, 481, 3, 2, 2, 2, 1050, 490, 3, 2, 2, 2, 1050, 499, 3, 2, 2, 2, 1050, 508, 3, 2, 2, 2, 1050, 515, 3, 2, 2, 2, 1050, 522, 3, 2, 2, 2, 1050, 529, 3, 2, 2, 2, 1050, 540, 3, 2, 2, 2, 1050, 551, 3, 2, 2, 2, 1050, 566, 3, 2, 2, 2, 1050, 578, 3, 2, 2, 2, 1050, 592, 3, 2, 2, 2, 1050, 602, 3, 2, 2, 2, 1050, 616, 3, 2, 2, 2, 1050, 624, 3, 2, 2, 2, 1050, 643, 3, 2, 2, 2, 1050, 652, 3, 2, 2, 2, 1050, 658, 3, 2, 2, 2, 1050, 668, 3, 2, 2, 2, 1050, 675, 3, 2, 2, 2, 1050, 710, 3, 2, 2, 2, 1050, 732, 3, 2, 2, 2, 1050, 740, 3, 2, 2, 2, 1050, 768, 3, 2, 2, 2, 1050, 778, 3, 2, 2, 2, 1050, 783, 3, 2, 2, 2, 1050, 795, 3, 2, 2, 2, 1050, 807, 3, 2, 2, 2, 1050, 816, 3, 2, 2, 2, 1050, 824, 3, 2, 2, 2, 1050, 836, 3, 2, 2, 2, 1050, 842, 3, 2, 2, 2, 1050, 856, 3, 2, 2, 2, 1050, 864, 3, 2, 2, 2, 1050, 867, 3, 2, 2, 2, 1050, 873, 3, 2, 2, 2, 1050, 880, 3, 2, 2, 2, 1050, 894, 3, 2, 2, 2, 1050, 899, 3, 2, 2, 2, 1050, 906, 3, 2, 2, 2, 1050, 913, 3, 2, 2, 2, 1050, 916, 3, 2, 2, 2, 1050, 919, 3, 2, 2, 2, 1050, 929, 3, 2, 2, 2, 1050, 945, 3, 2, 2, 2, 1050, 952, 3, 2, 2, 2, 1050, 954, 3, 2, 2, 2, 1050, 970, 3, 2, 2, 2, 1050, 976, 3, 2, 2, 2, 1050, 980, 3, 2, 2, 2, 1050, 991, 3, 2, 2, 2, 1050, 999, 3, 2, 2, 2, 1050, 1003, 3, 2, 2, 2, 1050, 1007, 3, 2, 2, 2, 1050, 1016, 3, 2, 2, 2, 1050, 1027, 3, 2, 2, 2, 1050, 1034, 3, 2, 2, 2, 1050, 1036, 3, 2, 2, 2, 1050, 1043, 3, 2, 2, 2, 1051, 19, 3, 2, 2, 2, 1052, 1053, 5, 264, 133, 2, 1053, 21, 3, 2, 2, 2, 1054, 1055, 7, 54, 2, 2, 1055, 1223, 7, 196, 2, 2, 1056, 1057, 7, 77, 2, 2, 1057, 1223, 7, 196, 2, 2, 1058, 1060, 7, 106, 2, 2, 1059, 1061, 7, 196, 2, 2, 1060, 1059, 3, 2, 2, 2, 1060, 1061, 3, 2, 2, 2, 1061, 1223, 3, 2, 2, 2, 1062, 1064, 7, 193, 2, 2, 1063, 1065, 7, 196, 2, 2, 1064, 1063, 3, 2, 2, 2, 1064, 1065, 3, 2, 2, 2, 1065, 1223, 3, 2, 2, 2, 1066, 1067, 7, 212, 2, 2, 1067, 1223, 7, 106, 2, 2, 1068, 1069, 7, 212, 2, 2, 1069, 1071, 7, 196, 2, 2, 1070, 1072, 7, 106, 2, 2, 1071, 1070, 3, 2, 2, 2, 1071, 1072, 3, 2, 2, 2, 1072, 1223, 3, 2, 2, 2, 1073, 1074, 7, 212, 2, 2, 1074, 1223, 7, 177, 2, 2, 1075, 1076, 7, 212, 2, 2, 1076, 1223, 7, 197, 2, 2, 1077, 1078, 7, 212, 2, 2, 1078, 1079, 7, 57, 2, 2, 1079, 1223, 7, 197, 2, 2, 1080, 1081, 7, 86, 2, 2, 1081, 1223, 7, 224, 2, 2, 1082, 1083, 7, 112, 2, 2, 1083, 1223, 7, 224, 2, 2, 1084, 1085, 7, 212, 2, 2, 1085, 1223, 7, 49, 2, 2, 1086, 1087, 7, 212, 2, 2, 1087, 1088, 7, 54, 2, 2, 1088, 1223, 7, 224, 2, 2, 1089, 1090, 7, 212, 2, 2, 1090, 1223, 7, 236, 2, 2, 1091, 1092, 7, 212, 2, 2, 1092, 1223, 7, 115, 2, 2, 1093, 1094, 7, 212, 2, 2, 1094, 1223, 7, 140, 2, 2, 1095, 1096, 7, 54, 2, 2, 1096, 1223, 7, 114, 2, 2, 1097, 1098, 7, 77, 2, 2, 1098, 1223, 7, 114, 2, 2, 1099, 1100, 7, 16, 2, 2, 1100, 1223, 7, 114, 2, 2, 1101, 1102, 7, 139, 2, 2, 1102, 1223, 7, 224, 2, 2, 1103, 1104, 7, 139, 2, 2, 1104, 1223, 7, 63, 2, 2, 1105, 1106, 7, 248, 2, 2, 1106, 1223, 7, 224, 2, 2, 1107, 1108, 7, 248, 2, 2, 1108, 1223, 7, 63, 2, 2, 1109, 1110, 7, 54, 2, 2, 1110, 1111, 7, 228, 2, 2, 1111, 1223, 7, 142, 2, 2, 1112, 1113, 7, 77, 2, 2, 1113, 1114, 7, 228, 2, 2, 1114, 1223, 7, 142, 2, 2, 1115, 1116, 7, 16, 2, 2, 1116, 1117, 7, 224, 2, 2, 1117, 1118, 5, 178, 90, 2, 1118, 1119, 7, 151, 2, 2, 1119, 1120, 7, 40, 2, 2, 1120, 1223, 3, 2, 2, 2, 1121, 1122, 7, 16, 2, 2, 1122, 1123, 7, 224, 2, 2, 1123, 1124, 5, 178, 90, 2, 1124, 1125, 7, 40, 2, 2, 1125, 1126, 7, 31, 2, 2, 1126, 1223, 3, 2, 2, 2, 1127, 1128, 7, 16, 2, 2, 1128, 1129, 7, 224, 2, 2, 1129, 1130, 5, 178, 90, 2, 1130, 1131, 7, 151, 2, 2, 1131, 1132, 7, 216, 2, 2, 1132, 1223, 3, 2, 2, 2, 1133, 1134, 7, 16, 2, 2, 1134, 1135, 7, 224, 2, 2, 1135, 1136, 5, 178, 90, 2, 1136, 1137, 7, 213, 2, 2, 1137, 1138, 7, 31, 2, 2, 1138, 1223, 3, 2, 2, 2, 1139, 1140, 7, 16, 2, 2, 1140, 1141, 7, 224, 2, 2, 1141, 1142, 5, 178, 90, 2, 1142, 1143, 7, 151, 2, 2, 1143, 1144, 7, 213, 2, 2, 1144, 1223, 3, 2, 2, 2, 1145, 1146, 7, 16, 2, 2, 1146, 1147, 7, 224, 2, 2, 1147, 1148, 5, 178, 90, 2, 1148, 1149, 7, 151, 2, 2, 1149, 1150, 7, 219, 2, 2, 1150, 1151, 7, 23, 2, 2, 1151, 1152, 7, 72, 2, 2, 1152, 1223, 3, 2, 2, 2, 1153, 1154, 7, 16, 2, 2, 1154, 1155, 7, 224, 2, 2, 1155, 1156, 5, 178, 90, 2, 1156, 1157, 7, 209, 2, 2, 1157, 1158, 7, 213, 2, 2, 1158, 1159, 7, 138, 2, 2, 1159, 1223, 3, 2, 2, 2, 1160, 1161, 7, 16, 2, 2, 1161, 1162, 7, 224, 2, 2, 1162, 1163, 5, 178, 90, 2, 1163, 1164, 7, 83, 2, 2, 1164, 1165, 7, 168, 2, 2, 1165, 1223, 3, 2, 2, 2, 1166, 1167, 7, 16, 2, 2, 1167, 1168, 7, 224, 2, 2, 1168, 1169, 5, 178, 90, 2, 1169, 1170, 7, 21, 2, 2, 1170, 1171, 7, 168, 2, 2, 1171, 1223, 3, 2, 2, 2, 1172, 1173, 7, 16, 2, 2, 1173, 1174, 7, 224, 2, 2, 1174, 1175, 5, 178, 90, 2, 1175, 1176, 7, 242, 2, 2, 1176, 1177, 7, 168, 2, 2, 1177, 1223, 3, 2, 2, 2, 1178, 1179, 7, 16, 2, 2, 1179, 1180, 7, 224, 2, 2, 1180, 1181, 5, 178, 90, 2, 1181, 1182, 7, 233, 2, 2, 1182, 1223, 3, 2, 2, 2, 1183, 1184, 7, 16, 2, 2, 1184, 1185, 7, 224, 2, 2, 1185, 1187, 5, 178, 90, 2, 1186, 1188, 5, 42, 22, 2, 1187, 1186, 3, 2, 2, 2, 1187, 1188, 3, 2, 2, 2, 1188, 1189, 3, 2, 2, 2, 1189, 1190, 7, 48, 2, 2, 1190, 1223, 3, 2, 2, 2, 1191, 1192, 7, 16, 2, 2, 1192, 1193, 7, 224, 2, 2, 1193, 1195, 5, 178, 90, 2, 1194, 1196, 5, 42, 22, 2, 1195, 1194, 3, 2, 2, 2, 1195, 1196, 3, 2, 2, 2, 1196, 1197, 3, 2, 2, 2, 1197, 1198, 7, 51, 2, 2, 1198, 1223, 3, 2, 2, 2, 1199, 1200, 7, 16, 2, 2, 1200, 1201, 7, 224, 2, 2, 1201, 1203, 5, 178, 90, 2, 1202, 1204, 5, 42, 22, 2, 1203, 1202, 3, 2, 2, 2, 1203, 1204, 3, 2, 2, 2, 1204, 1205, 3, 2, 2, 2, 1205, 1206, 7, 209, 2, 2, 1206, 1207, 7, 94, 2, 2, 1207, 1223, 3, 2, 2, 2, 1208, 1209, 7, 16, 2, 2, 1209, 1210, 7, 224, 2, 2, 1210, 1212, 5, 178, 90, 2, 1211, 1213, 5, 42, 22, 2, 1212, 1211, 3, 2, 2, 2, 1212, 1213, 3, 2, 2, 2, 1213, 1214, 3, 2, 2, 2, 1214, 1215, 7, 190, 2, 2, 1215, 1216, 7, 45, 2, 2, 1216, 1223, 3, 2, 2, 2, 1217, 1218, 7, 217, 2, 2, 1218, 1223, 7, 235, 2, 2, 1219, 1223, 7, 47, 2, 2, 1220, 1223, 7, 198, 2, 2, 1221, 1223, 7, 71, 2, 2, 1222, 1054, 3, 2, 2, 2, 1222, 1056, 3, 2, 2, 2, 1222, 1058, 3, 2, 2, 2, 1222, 1062, 3, 2, 2, 2, 1222, 1066, 3, 2, 2, 2, 1222, 1068, 3, 2, 2, 2, 1222, 1073, 3, 2, 2, 2, 1222, 1075, 3, 2, 2, 2, 1222, 1077, 3, 2, 2, 2, 1222, 1080, 3, 2, 2, 2, 1222, 1082, 3, 2, 2, 2, 1222, 1084, 3, 2, 2, 2, 1222, 1086, 3, 2, 2, 2, 1222, 1089, 3, 2, 2, 2, 1222, 1091, 3, 2, 2, 2, 1222, 1093, 3, 2, 2, 2, 1222, 1095, 3, 2, 2, 2, 1222, 1097, 3, 2, 2, 2, 1222, 1099, 3, 2, 2, 2, 1222, 1101, 3, 2, 2, 2, 1222, 1103, 3, 2, 2, 2, 1222, 1105, 3, 2, 2, 2, 1222, 1107, 3, 2, 2, 2, 1222, 1109, 3, 2, 2, 2, 1222, 1112, 3, 2, 2, 2, 1222, 1115, 3, 2, 2, 2, 1222, 1121, 3, 2, 2, 2, 1222, 1127, 3, 2, 2, 2, 1222, 1133, 3, 2, 2, 2, 1222, 1139, 3, 2, 2, 2, 1222, 1145, 3, 2, 2, 2, 1222, 1153, 3, 2, 2, 2, 1222, 1160, 3, 2, 2, 2, 1222, 1166, 3, 2, 2, 2, 1222, 1172, 3, 2, 2, 2, 1222, 1178, 3, 2, 2, 2, 1222, 1183, 3, 2, 2, 2, 1222, 1191, 3, 2, 2, 2, 1222, 1199, 3, 2, 2, 2, 1222, 1208, 3, 2, 2, 2, 1222, 1217, 3, 2, 2, 2, 1222, 1219, 3, 2, 2, 2, 1222, 1220, 3, 2, 2, 2, 1222, 1221, 3, 2, 2, 2, 1223, 23, 3, 2, 2, 2, 1224, 1226, 7, 54, 2, 2, 1225, 1227, 7, 228, 2, 2, 1226, 1225, 3, 2, 2, 2, 1226, 1227, 3, 2, 2, 2, 1227, 1229, 3, 2, 2, 2, 1228, 1230, 7, 88, 2, 2, 1229, 1228, 3, 2, 2, 2, 1229, 1230, 3, 2, 2, 2, 1230, 1231, 3, 2, 2, 2, 1231, 1235, 7, 224, 2, 2, 1232, 1233, 7, 110, 2, 2, 1233, 1234, 7, 151, 2, 2, 1234, 1236, 7, 84, 2, 2, 1235, 1232, 3, 2, 2, 2, 1235, 1236, 3, 2, 2, 2, 1236, 1237, 3, 2, 2, 2, 1237, 1238, 5, 176, 89, 2, 1238, 25, 3, 2, 2, 2, 1239, 1240, 7, 54, 2, 2, 1240, 1242, 7, 159, 2, 2, 1241, 1239, 3, 2, 2, 2, 1241, 1242, 3, 2, 2, 2, 1242, 1243, 3, 2, 2, 2, 1243, 1244, 7, 190, 2, 2, 1244, 1245, 7, 224, 2, 2, 1245, 1246, 5, 176, 89, 2, 1246, 27, 3, 2, 2, 2, 1247, 1248, 7, 40, 2, 2, 1248, 1249, 7, 31, 2, 2, 1249, 1253, 5, 152, 77, 2, 1250, 1251, 7, 216, 2, 2, 1251, 1252, 7, 31, 2, 2, 1252, 1254, 5, 156, 79, 2, 1253, 1250, 3, 2, 2, 2, 1253, 1254, 3, 2, 2, 2, 1254, 1255, 3, 2, 2, 2, 1255, 1256, 7, 122, 2, 2, 1256, 1257, 7, 285, 2, 2, 1257, 1258, 7, 30, 2, 2, 1258, 29, 3, 2, 2, 2, 1259, 1260, 7, 213, 2, 2, 1260, 1261, 7, 31, 2, 2, 1261, 1262, 5, 152, 77, 2, 1262, 1265, 7, 155, 2, 2, 1263, 1266, 5, 68, 35, 2, 1264, 1266, 5, 70, 36, 2, 1265, 1263, 3, 2, 2, 2, 1265, 1264, 3, 2, 2, 2, 1266, 1270, 3, 2, 2, 2, 1267, 1268, 7, 219, 2, 2, 1268, 1269, 7, 23, 2, 2, 1269, 1271, 7, 72, 2, 2, 1270, 1267, 3, 2, 2, 2, 1270, 1271, 3, 2, 2, 2, 1271, 31, 3, 2, 2, 2, 1272, 1273, 7, 138, 2, 2, 1273, 1274, 7, 281, 2, 2, 1274, 33, 3, 2, 2, 2, 1275, 1276, 7, 46, 2, 2, 1276, 1277, 7, 281, 2, 2, 1277, 35, 3, 2, 2, 2, 1278, 1280, 5, 52, 27, 2, 1279, 1278, 3, 2, 2, 2, 1279, 1280, 3, 2, 2, 2, 1280, 1281, 3, 2, 2, 2, 1281, 1282, 5, 86, 44, 2, 1282, 1283, 5, 82, 42, 2, 1283, 37, 3, 2, 2, 2, 1284, 1285, 7, 119, 2, 2, 1285, 1287, 7, 167, 2, 2, 1286, 1288, 7, 224, 2, 2, 1287, 1286, 3, 2, 2, 2, 1287, 1288, 3, 2, 2, 2, 1288, 1289, 3, 2, 2, 2, 1289, 1296, 5, 176, 89, 2, 1290, 1294, 5, 42, 22, 2, 1291, 1292, 7, 110, 2, 2, 1292, 1293, 7, 151, 2, 2, 1293, 1295, 7, 84, 2, 2, 1294, 1291, 3, 2, 2, 2, 1294, 1295, 3, 2, 2, 2, 1295, 1297, 3, 2, 2, 2, 1296, 1290, 3, 2, 2, 2, 1296, 1297, 3, 2, 2, 2, 1297, 1340, 3, 2, 2, 2, 1298, 1299, 7, 119, 2, 2, 1299, 1301, 7, 122, 2, 2, 1300, 1302, 7, 224, 2, 2, 1301, 1300, 3, 2, 2, 2, 1301, 1302, 3, 2, 2, 2, 1302, 1303, 3, 2, 2, 2, 1303, 1305, 5, 176, 89, 2, 1304, 1306, 5, 42, 22, 2, 1305, 1304, 3, 2, 2, 2, 1305, 1306, 3, 2, 2, 2, 1306, 1310, 3, 2, 2, 2, 1307, 1308, 7, 110, 2, 2, 1308, 1309, 7, 151, 2, 2, 1309, 1311, 7, 84, 2, 2, 1310, 1307, 3, 2, 2, 2, 1310, 1311, 3, 2, 2, 2, 1311, 1340, 3, 2, 2, 2, 1312, 1313, 7, 119, 2, 2, 1313, 1315, 7, 167, 2, 2, 1314, 1316, 7, 137, 2, 2, 1315, 1314, 3, 2, 2, 2, 1315, 1316, 3, 2, 2, 2, 1316, 1317, 3, 2, 2, 2, 1317, 1318, 7, 73, 2, 2, 1318, 1320, 7, 281, 2, 2, 1319, 1321, 5, 172, 87, 2, 1320, 1319, 3, 2, 2, 2, 1320, 1321, 3, 2, 2, 2, 1321, 1323, 3, 2, 2, 2, 1322, 1324, 5, 72, 37, 2, 1323, 1322, 3, 2, 2, 2, 1323, 1324, 3, 2, 2, 2, 1324, 1340, 3, 2, 2, 2, 1325, 1326, 7, 119, 2, 2, 1326, 1328, 7, 167, 2, 2, 1327, 1329, 7, 137, 2, 2, 1328, 1327, 3, 2, 2, 2, 1328, 1329, 3, 2, 2, 2, 1329, 1330, 3, 2, 2, 2, 1330, 1332, 7, 73, 2, 2, 1331, 1333, 7, 281, 2, 2, 1332, 1331, 3, 2, 2, 2, 1332, 1333, 3, 2, 2, 2, 1333, 1334, 3, 2, 2, 2, 1334, 1337, 5, 56, 29, 2, 1335, 1336, 7, 158, 2, 2, 1336, 1338, 5, 60, 31, 2, 1337, 1335, 3, 2, 2, 2, 1337, 1338, 3, 2, 2, 2, 1338, 1340, 3, 2, 2, 2, 1339, 1284, 3, 2, 2, 2, 1339, 1298, 3, 2, 2, 2, 1339, 1312, 3, 2, 2, 2, 1339, 1325, 3, 2, 2, 2, 1340, 39, 3, 2, 2, 2, 1341, 1343, 5, 42, 22, 2, 1342, 1344, 5, 32, 17, 2, 1343, 1342, 3, 2, 2, 2, 1343, 1344, 3, 2, 2, 2, 1344, 41, 3, 2, 2, 2, 1345, 1346, 7, 168, 2, 2, 1346, 1347, 7, 3, 2, 2, 1347, 1352, 5, 44, 23, 2, 1348, 1349, 7, 5, 2, 2, 1349, 1351, 5, 44, 23, 2, 1350, 1348, 3, 2, 2, 2, 1351, 1354, 3, 2, 2, 2, 1352, 1350, 3, 2, 2, 2, 1352, 1353, 3, 2, 2, 2, 1353, 1355, 3, 2, 2, 2, 1354, 1352, 3, 2, 2, 2, 1355, 1356, 7, 4, 2, 2, 1356, 43, 3, 2, 2, 2, 1357, 1360, 5, 260, 131, 2, 1358, 1359, 7, 262, 2, 2, 1359, 1361, 5, 200, 101, 2, 1360, 1358, 3, 2, 2, 2, 1360, 1361, 3, 2, 2, 2, 1361, 45, 3, 2, 2, 2, 1362, 1363, 9, 15, 2, 2, 1363, 47, 3, 2, 2, 2, 1364, 1370, 5, 254, 128, 2, 1365, 1370, 7, 281, 2, 2, 1366, 1370, 5, 202, 102, 2, 1367, 1370, 5, 204, 103, 2, 1368, 1370, 5, 206, 104, 2, 1369, 1364, 3, 2, 2, 2, 1369, 1365, 3, 2, 2, 2, 1369, 1366, 3, 2, 2, 2, 1369, 1367, 3, 2, 2, 2, 1369, 1368, 3, 2, 2, 2, 1370, 49, 3, 2, 2, 2, 1371, 1376, 5, 260, 131, 2, 1372, 1373, 7, 6, 2, 2, 1373, 1375, 5, 260, 131, 2, 1374, 1372, 3, 2, 2, 2, 1375, 1378, 3, 2, 2, 2, 1376, 1374, 3, 2, 2, 2, 1376, 1377, 3, 2, 2, 2, 1377, 51, 3, 2, 2, 2, 1378, 1376, 3, 2, 2, 2, 1379, 1380, 7, 260, 2, 2, 1380, 1385, 5, 54, 28, 2, 1381, 1382, 7, 5, 2, 2, 1382, 1384, 5, 54, 28, 2, 1383, 1381, 3, 2, 2, 2, 1384, 1387, 3, 2, 2, 2, 1385, 1383, 3, 2, 2, 2, 1385, 1386, 3, 2, 2, 2, 1386, 53, 3, 2, 2, 2, 1387, 1385, 3, 2, 2, 2, 1388, 1390, 5, 256, 129, 2, 1389, 1391, 5, 152, 77, 2, 1390, 1389, 3, 2, 2, 2, 1390, 1391, 3, 2, 2, 2, 1391, 1393, 3, 2, 2, 2, 1392, 1394, 7, 23, 2, 2, 1393, 1392, 3, 2, 2, 2, 1393, 1394, 3, 2, 2, 2, 1394, 1395, 3, 2, 2, 2, 1395, 1396, 7, 3, 2, 2, 1396, 1397, 5, 36, 19, 2, 1397, 1398, 7, 4, 2, 2, 1398, 55, 3, 2, 2, 2, 1399, 1400, 7, 253, 2, 2, 1400, 1401, 5, 176, 89, 2, 1401, 57, 3, 2, 2, 2, 1402, 1403, 7, 158, 2, 2, 1403, 1413, 5, 60, 31, 2, 1404, 1405, 7, 169, 2, 2, 1405, 1406, 7, 31, 2, 2, 1406, 1413, 5, 184, 93, 2, 1407, 1413, 5, 28, 15, 2, 1408, 1413, 5, 32, 17, 2, 1409, 1413, 5, 34, 18, 2, 1410, 1411, 7, 227, 2, 2, 1411, 1413, 5, 60, 31, 2, 1412, 1402, 3, 2, 2, 2, 1412, 1404, 3, 2, 2, 2, 1412, 1407, 3, 2, 2, 2, 1412, 1408, 3, 2, 2, 2, 1412, 1409, 3, 2, 2, 2, 1412, 1410, 3, 2, 2, 2, 1413, 1416, 3, 2, 2, 2, 1414, 1412, 3, 2, 2, 2, 1414, 1415, 3, 2, 2, 2, 1415, 59, 3, 2, 2, 2, 1416, 1414, 3, 2, 2, 2, 1417, 1418, 7, 3, 2, 2, 1418, 1423, 5, 62, 32, 2, 1419, 1420, 7, 5, 2, 2, 1420, 1422, 5, 62, 32, 2, 1421, 1419, 3, 2, 2, 2, 1422, 1425, 3, 2, 2, 2, 1423, 1421, 3, 2, 2, 2, 1423, 1424, 3, 2, 2, 2, 1424, 1426, 3, 2, 2, 2, 1425, 1423, 3, 2, 2, 2, 1426, 1427, 7, 4, 2, 2, 1427, 61, 3, 2, 2, 2, 1428, 1433, 5, 64, 33, 2, 1429, 1431, 7, 262, 2, 2, 1430, 1429, 3, 2, 2, 2, 1430, 1431, 3, 2, 2, 2, 1431, 1432, 3, 2, 2, 2, 1432, 1434, 5, 66, 34, 2, 1433, 1430, 3, 2, 2, 2, 1433, 1434, 3, 2, 2, 2, 1434, 63, 3, 2, 2, 2, 1435, 1440, 5, 260, 131, 2, 1436, 1437, 7, 6, 2, 2, 1437, 1439, 5, 260, 131, 2, 1438, 1436, 3, 2, 2, 2, 1439, 1442, 3, 2, 2, 2, 1440, 1438, 3, 2, 2, 2, 1440, 1441, 3, 2, 2, 2, 1441, 1445, 3, 2, 2, 2, 1442, 1440, 3, 2, 2, 2, 1443, 1445, 7, 281, 2, 2, 1444, 1435, 3, 2, 2, 2, 1444, 1443, 3, 2, 2, 2, 1445, 65, 3, 2, 2, 2, 1446, 1451, 7, 285, 2, 2, 1447, 1451, 7, 287, 2, 2, 1448, 1451, 5, 208, 105, 2, 1449, 1451, 7, 281, 2, 2, 1450, 1446, 3, 2, 2, 2, 1450, 1447, 3, 2, 2, 2, 1450, 1448, 3, 2, 2, 2, 1450, 1449, 3, 2, 2, 2, 1451, 67, 3, 2, 2, 2, 1452, 1453, 7, 3, 2, 2, 1453, 1458, 5, 200, 101, 2, 1454, 1455, 7, 5, 2, 2, 1455, 1457, 5, 200, 101, 2, 1456, 1454, 3, 2, 2, 2, 1457, 1460, 3, 2, 2, 2, 1458, 1456, 3, 2, 2, 2, 1458, 1459, 3, 2, 2, 2, 1459, 1461, 3, 2, 2, 2, 1460, 1458, 3, 2, 2, 2, 1461, 1462, 7, 4, 2, 2, 1462, 69, 3, 2, 2, 2, 1463, 1464, 7, 3, 2, 2, 1464, 1469, 5, 68, 35, 2, 1465, 1466, 7, 5, 2, 2, 1466, 1468, 5, 68, 35, 2, 1467, 1465, 3, 2, 2, 2, 1468, 1471, 3, 2, 2, 2, 1469, 1467, 3, 2, 2, 2, 1469, 1470, 3, 2, 2, 2, 1470, 1472, 3, 2, 2, 2, 1471, 1469, 3, 2, 2, 2, 1472, 1473, 7, 4, 2, 2, 1473, 71, 3, 2, 2, 2, 1474, 1475, 7, 219, 2, 2, 1475, 1476, 7, 23, 2, 2, 1476, 1481, 5, 74, 38, 2, 1477, 1478, 7, 219, 2, 2, 1478, 1479, 7, 31, 2, 2, 1479, 1481, 5, 76, 39, 2, 1480, 1474, 3, 2, 2, 2, 1480, 1477, 3, 2, 2, 2, 1481, 73, 3, 2, 2, 2, 1482, 1483, 7, 118, 2, 2, 1483, 1484, 7, 281, 2, 2, 1484, 1485, 7, 163, 2, 2, 1485, 1488, 7, 281, 2, 2, 1486, 1488, 5, 260, 131, 2, 1487, 1482, 3, 2, 2, 2, 1487, 1486, 3, 2, 2, 2, 1488, 75, 3, 2, 2, 2, 1489, 1493, 7, 281, 2, 2, 1490, 1491, 7, 260, 2, 2, 1491, 1492, 7, 207, 2, 2, 1492, 1494, 5, 60, 31, 2, 1493, 1490, 3, 2, 2, 2, 1493, 1494, 3, 2, 2, 2, 1494, 77, 3, 2, 2, 2, 1495, 1496, 5, 260, 131, 2, 1496, 1497, 7, 281, 2, 2, 1497, 79, 3, 2, 2, 2, 1498, 1499, 5, 38, 20, 2, 1499, 1500, 5, 86, 44, 2, 1500, 1501, 5, 82, 42, 2, 1501, 1550, 3, 2, 2, 2, 1502, 1504, 5, 124, 63, 2, 1503, 1505, 5, 84, 43, 2, 1504, 1503, 3, 2, 2, 2, 1505, 1506, 3, 2, 2, 2, 1506, 1504, 3, 2, 2, 2, 1506, 1507, 3, 2, 2, 2, 1507, 1550, 3, 2, 2, 2, 1508, 1509, 7, 67, 2, 2, 1509, 1510, 7, 101, 2, 2, 1510, 1511, 5, 176, 89, 2, 1511, 1513, 5, 170, 86, 2, 1512, 1514, 5, 116, 59, 2, 1513, 1512, 3, 2, 2, 2, 1513, 1514, 3, 2, 2, 2, 1514, 1550, 3, 2, 2, 2, 1515, 1516, 7, 250, 2, 2, 1516, 1517, 5, 176, 89, 2, 1517, 1518, 5, 170, 86, 2, 1518, 1520, 5, 102, 52, 2, 1519, 1521, 5, 116, 59, 2, 1520, 1519, 3, 2, 2, 2, 1520, 1521, 3, 2, 2, 2, 1521, 1550, 3, 2, 2, 2, 1522, 1523, 7, 145, 2, 2, 1523, 1524, 7, 122, 2, 2, 1524, 1525, 5, 176, 89, 2, 1525, 1526, 5, 170, 86, 2, 1526, 1532, 7, 253, 2, 2, 1527, 1533, 5, 176, 89, 2, 1528, 1529, 7, 3, 2, 2, 1529, 1530, 5, 36, 19, 2, 1530, 1531, 7, 4, 2, 2, 1531, 1533, 3, 2, 2, 2, 1532, 1527, 3, 2, 2, 2, 1532, 1528, 3, 2, 2, 2, 1533, 1534, 3, 2, 2, 2, 1534, 1535, 5, 170, 86, 2, 1535, 1536, 7, 155, 2, 2, 1536, 1540, 5, 192, 97, 2, 1537, 1539, 5, 104, 53, 2, 1538, 1537, 3, 2, 2, 2, 1539, 1542, 3, 2, 2, 2, 1540, 1538, 3, 2, 2, 2, 1540, 1541, 3, 2, 2, 2, 1541, 1546, 3, 2, 2, 2, 1542, 1540, 3, 2, 2, 2, 1543, 1545, 5, 106, 54, 2, 1544, 1543, 3, 2, 2, 2, 1545, 1548, 3, 2, 2, 2, 1546, 1544, 3, 2, 2, 2, 1546, 1547, 3, 2, 2, 2, 1547, 1550, 3, 2, 2, 2, 1548, 1546, 3, 2, 2, 2, 1549, 1498, 3, 2, 2, 2, 1549, 1502, 3, 2, 2, 2, 1549, 1508, 3, 2, 2, 2, 1549, 1515, 3, 2, 2, 2, 1549, 1522, 3, 2, 2, 2, 1550, 81, 3, 2, 2, 2, 1551, 1552, 7, 160, 2, 2, 1552, 1553, 7, 31, 2, 2, 1553, 1558, 5, 90, 46, 2, 1554, 1555, 7, 5, 2, 2, 1555, 1557, 5, 90, 46, 2, 1556, 1554, 3, 2, 2, 2, 1557, 1560, 3, 2, 2, 2, 1558, 1556, 3, 2, 2, 2, 1558, 1559, 3, 2, 2, 2, 1559, 1562, 3, 2, 2, 2, 1560, 1558, 3, 2, 2, 2, 1561, 1551, 3, 2, 2, 2, 1561, 1562, 3, 2, 2, 2, 1562, 1573, 3, 2, 2, 2, 1563, 1564, 7, 39, 2, 2, 1564, 1565, 7, 31, 2, 2, 1565, 1570, 5, 190, 96, 2, 1566, 1567, 7, 5, 2, 2, 1567, 1569, 5, 190, 96, 2, 1568, 1566, 3, 2, 2, 2, 1569, 1572, 3, 2, 2, 2, 1570, 1568, 3, 2, 2, 2, 1570, 1571, 3, 2, 2, 2, 1571, 1574, 3, 2, 2, 2, 1572, 1570, 3, 2, 2, 2, 1573, 1563, 3, 2, 2, 2, 1573, 1574, 3, 2, 2, 2, 1574, 1585, 3, 2, 2, 2, 1575, 1576, 7, 75, 2, 2, 1576, 1577, 7, 31, 2, 2, 1577, 1582, 5, 190, 96, 2, 1578, 1579, 7, 5, 2, 2, 1579, 1581, 5, 190, 96, 2, 1580, 1578, 3, 2, 2, 2, 1581, 1584, 3, 2, 2, 2, 1582, 1580, 3, 2, 2, 2, 1582, 1583, 3, 2, 2, 2, 1583, 1586, 3, 2, 2, 2, 1584, 1582, 3, 2, 2, 2, 1585, 1575, 3, 2, 2, 2, 1585, 1586, 3, 2, 2, 2, 1586, 1597, 3, 2, 2, 2, 1587, 1588, 7, 215, 2, 2, 1588, 1589, 7, 31, 2, 2, 1589, 1594, 5, 90, 46, 2, 1590, 1591, 7, 5, 2, 2, 1591, 1593, 5, 90, 46, 2, 1592, 1590, 3, 2, 2, 2, 1593, 1596, 3, 2, 2, 2, 1594, 1592, 3, 2, 2, 2, 1594, 1595, 3, 2, 2, 2, 1595, 1598, 3, 2, 2, 2, 1596, 1594, 3, 2, 2, 2, 1597, 1587, 3, 2, 2, 2, 1597, 1598, 3, 2, 2, 2, 1598, 1600, 3, 2, 2, 2, 1599, 1601, 5, 240, 121, 2, 1600, 1599, 3, 2, 2, 2, 1600, 1601, 3, 2, 2, 2, 1601, 1607, 3, 2, 2, 2, 1602, 1605, 7, 133, 2, 2, 1603, 1606, 7, 15, 2, 2, 1604, 1606, 5, 190, 96, 2, 1605, 1603, 3, 2, 2, 2, 1605, 1604, 3, 2, 2, 2, 1606, 1608, 3, 2, 2, 2, 1607, 1602, 3, 2, 2, 2, 1607, 1608, 3, 2, 2, 2, 1608, 83, 3, 2, 2, 2, 1609, 1610, 5, 38, 20, 2, 1610, 1611, 5, 94, 48, 2, 1611, 85, 3, 2, 2, 2, 1612, 1613, 8, 44, 1, 2, 1613, 1614, 5, 88, 45, 2, 1614, 1638, 3, 2, 2, 2, 1615, 1616, 12, 5, 2, 2, 1616, 1617, 6, 44, 3, 2, 1617, 1619, 9, 16, 2, 2, 1618, 1620, 5, 138, 70, 2, 1619, 1618, 3, 2, 2, 2, 1619, 1620, 3, 2, 2, 2, 1620, 1621, 3, 2, 2, 2, 1621, 1637, 5, 86, 44, 6, 1622, 1623, 12, 4, 2, 2, 1623, 1624, 6, 44, 5, 2, 1624, 1626, 7, 120, 2, 2, 1625, 1627, 5, 138, 70, 2, 1626, 1625, 3, 2, 2, 2, 1626, 1627, 3, 2, 2, 2, 1627, 1628, 3, 2, 2, 2, 1628, 1637, 5, 86, 44, 5, 1629, 1630, 12, 3, 2, 2, 1630, 1631, 6, 44, 7, 2, 1631, 1633, 9, 17, 2, 2, 1632, 1634, 5, 138, 70, 2, 1633, 1632, 3, 2, 2, 2, 1633, 1634, 3, 2, 2, 2, 1634, 1635, 3, 2, 2, 2, 1635, 1637, 5, 86, 44, 4, 1636, 1615, 3, 2, 2, 2, 1636, 1622, 3, 2, 2, 2, 1636, 1629, 3, 2, 2, 2, 1637, 1640, 3, 2, 2, 2, 1638, 1636, 3, 2, 2, 2, 1638, 1639, 3, 2, 2, 2, 1639, 87, 3, 2, 2, 2, 1640, 1638, 3, 2, 2, 2, 1641, 1651, 5, 96, 49, 2, 1642, 1651, 5, 92, 47, 2, 1643, 1644, 7, 224, 2, 2, 1644, 1651, 5, 176, 89, 2, 1645, 1651, 5, 166, 84, 2, 1646, 1647, 7, 3, 2, 2, 1647, 1648, 5, 36, 19, 2, 1648, 1649, 7, 4, 2, 2, 1649, 1651, 3, 2, 2, 2, 1650, 1641, 3, 2, 2, 2, 1650, 1642, 3, 2, 2, 2, 1650, 1643, 3, 2, 2, 2, 1650, 1645, 3, 2, 2, 2, 1650, 1646, 3, 2, 2, 2, 1651, 89, 3, 2, 2, 2, 1652, 1654, 5, 190, 96, 2, 1653, 1655, 9, 18, 2, 2, 1654, 1653, 3, 2, 2, 2, 1654, 1655, 3, 2, 2, 2, 1655, 1658, 3, 2, 2, 2, 1656, 1657, 7, 153, 2, 2, 1657, 1659, 9, 19, 2, 2, 1658, 1656, 3, 2, 2, 2, 1658, 1659, 3, 2, 2, 2, 1659, 91, 3, 2, 2, 2, 1660, 1662, 5, 124, 63, 2, 1661, 1663, 5, 94, 48, 2, 1662, 1661, 3, 2, 2, 2, 1663, 1664, 3, 2, 2, 2, 1664, 1662, 3, 2, 2, 2, 1664, 1665, 3, 2, 2, 2, 1665, 93, 3, 2, 2, 2, 1666, 1668, 5, 98, 50, 2, 1667, 1669, 5, 116, 59, 2, 1668, 1667, 3, 2, 2, 2, 1668, 1669, 3, 2, 2, 2, 1669, 1670, 3, 2, 2, 2, 1670, 1671, 5, 82, 42, 2, 1671, 1694, 3, 2, 2, 2, 1672, 1676, 5, 100, 51, 2, 1673, 1675, 5, 136, 69, 2, 1674, 1673, 3, 2, 2, 2, 1675, 1678, 3, 2, 2, 2, 1676, 1674, 3, 2, 2, 2, 1676, 1677, 3, 2, 2, 2, 1677, 1680, 3, 2, 2, 2, 1678, 1676, 3, 2, 2, 2, 1679, 1681, 5, 116, 59, 2, 1680, 1679, 3, 2, 2, 2, 1680, 1681, 3, 2, 2, 2, 1681, 1683, 3, 2, 2, 2, 1682, 1684, 5, 126, 64, 2, 1683, 1682, 3, 2, 2, 2, 1683, 1684, 3, 2, 2, 2, 1684, 1686, 3, 2, 2, 2, 1685, 1687, 5, 118, 60, 2, 1686, 1685, 3, 2, 2, 2, 1686, 1687, 3, 2, 2, 2, 1687, 1689, 3, 2, 2, 2, 1688, 1690, 5, 240, 121, 2, 1689, 1688, 3, 2, 2, 2, 1689, 1690, 3, 2, 2, 2, 1690, 1691, 3, 2, 2, 2, 1691, 1692, 5, 82, 42, 2, 1692, 1694, 3, 2, 2, 2, 1693, 1666, 3, 2, 2, 2, 1693, 1672, 3, 2, 2, 2, 1694, 95, 3, 2, 2, 2, 1695, 1697, 5, 98, 50, 2, 1696, 1698, 5, 124, 63, 2, 1697, 1696, 3, 2, 2, 2, 1697, 1698, 3, 2, 2, 2, 1698, 1700, 3, 2, 2, 2, 1699, 1701, 5, 116, 59, 2, 1700, 1699, 3, 2, 2, 2, 1700, 1701, 3, 2, 2, 2, 1701, 1725, 3, 2, 2, 2, 1702, 1704, 5, 100, 51, 2, 1703, 1705, 5, 124, 63, 2, 1704, 1703, 3, 2, 2, 2, 1704, 1705, 3, 2, 2, 2, 1705, 1709, 3, 2, 2, 2, 1706, 1708, 5, 136, 69, 2, 1707, 1706, 3, 2, 2, 2, 1708, 1711, 3, 2, 2, 2, 1709, 1707, 3, 2, 2, 2, 1709, 1710, 3, 2, 2, 2, 1710, 1713, 3, 2, 2, 2, 1711, 1709, 3, 2, 2, 2, 1712, 1714, 5, 116, 59, 2, 1713, 1712, 3, 2, 2, 2, 1713, 1714, 3, 2, 2, 2, 1714, 1716, 3, 2, 2, 2, 1715, 1717, 5, 126, 64, 2, 1716, 1715, 3, 2, 2, 2, 1716, 1717, 3, 2, 2, 2, 1717, 1719, 3, 2, 2, 2, 1718, 1720, 5, 118, 60, 2, 1719, 1718, 3, 2, 2, 2, 1719, 1720, 3, 2, 2, 2, 1720, 1722, 3, 2, 2, 2, 1721, 1723, 5, 240, 121, 2, 1722, 1721, 3, 2, 2, 2, 1722, 1723, 3, 2, 2, 2, 1723, 1725, 3, 2, 2, 2, 1724, 1695, 3, 2, 2, 2, 1724, 1702, 3, 2, 2, 2, 1725, 97, 3, 2, 2, 2, 1726, 1727, 7, 203, 2, 2, 1727, 1728, 7, 237, 2, 2, 1728, 1729, 7, 3, 2, 2, 1729, 1730, 5, 182, 92, 2, 1730, 1731, 7, 4, 2, 2, 1731, 1737, 3, 2, 2, 2, 1732, 1733, 7, 143, 2, 2, 1733, 1737, 5, 182, 92, 2, 1734, 1735, 7, 185, 2, 2, 1735, 1737, 5, 182, 92, 2, 1736, 1726, 3, 2, 2, 2, 1736, 1732, 3, 2, 2, 2, 1736, 1734, 3, 2, 2, 2, 1737, 1739, 3, 2, 2, 2, 1738, 1740, 5, 172, 87, 2, 1739, 1738, 3, 2, 2, 2, 1739, 1740, 3, 2, 2, 2, 1740, 1743, 3, 2, 2, 2, 1741, 1742, 7, 183, 2, 2, 1742, 1744, 7, 281, 2, 2, 1743, 1741, 3, 2, 2, 2, 1743, 1744, 3, 2, 2, 2, 1744, 1745, 3, 2, 2, 2, 1745, 1746, 7, 253, 2, 2, 1746, 1759, 7, 281, 2, 2, 1747, 1757, 7, 23, 2, 2, 1748, 1758, 5, 154, 78, 2, 1749, 1758, 5, 230, 116, 2, 1750, 1753, 7, 3, 2, 2, 1751, 1754, 5, 154, 78, 2, 1752, 1754, 5, 230, 116, 2, 1753, 1751, 3, 2, 2, 2, 1753, 1752, 3, 2, 2, 2, 1754, 1755, 3, 2, 2, 2, 1755, 1756, 7, 4, 2, 2, 1756, 1758, 3, 2, 2, 2, 1757, 1748, 3, 2, 2, 2, 1757, 1749, 3, 2, 2, 2, 1757, 1750, 3, 2, 2, 2, 1758, 1760, 3, 2, 2, 2, 1759, 1747, 3, 2, 2, 2, 1759, 1760, 3, 2, 2, 2, 1760, 1762, 3, 2, 2, 2, 1761, 1763, 5, 172, 87, 2, 1762, 1761, 3, 2, 2, 2, 1762, 1763, 3, 2, 2, 2, 1763, 1766, 3, 2, 2, 2, 1764, 1765, 7, 182, 2, 2, 1765, 1767, 7, 281, 2, 2, 1766, 1764, 3, 2, 2, 2, 1766, 1767, 3, 2, 2, 2, 1767, 99, 3, 2, 2, 2, 1768, 1772, 7, 203, 2, 2, 1769, 1771, 5, 120, 61, 2, 1770, 1769, 3, 2, 2, 2, 1771, 1774, 3, 2, 2, 2, 1772, 1770, 3, 2, 2, 2, 1772, 1773, 3, 2, 2, 2, 1773, 1776, 3, 2, 2, 2, 1774, 1772, 3, 2, 2, 2, 1775, 1777, 5, 138, 70, 2, 1776, 1775, 3, 2, 2, 2, 1776, 1777, 3, 2, 2, 2, 1777, 1778, 3, 2, 2, 2, 1778, 1779, 5, 182, 92, 2, 1779, 101, 3, 2, 2, 2, 1780, 1781, 7, 209, 2, 2, 1781, 1782, 5, 112, 57, 2, 1782, 103, 3, 2, 2, 2, 1783, 1784, 7, 257, 2, 2, 1784, 1787, 7, 144, 2, 2, 1785, 1786, 7, 18, 2, 2, 1786, 1788, 5, 192, 97, 2, 1787, 1785, 3, 2, 2, 2, 1787, 1788, 3, 2, 2, 2, 1788, 1789, 3, 2, 2, 2, 1789, 1790, 7, 230, 2, 2, 1790, 1791, 5, 108, 55, 2, 1791, 105, 3, 2, 2, 2, 1792, 1793, 7, 257, 2, 2, 1793, 1794, 7, 151, 2, 2, 1794, 1797, 7, 144, 2, 2, 1795, 1796, 7, 18, 2, 2, 1796, 1798, 5, 192, 97, 2, 1797, 1795, 3, 2, 2, 2, 1797, 1798, 3, 2, 2, 2, 1798, 1799, 3, 2, 2, 2, 1799, 1800, 7, 230, 2, 2, 1800, 1801, 5, 110, 56, 2, 1801, 107, 3, 2, 2, 2, 1802, 1810, 7, 67, 2, 2, 1803, 1804, 7, 250, 2, 2, 1804, 1805, 7, 209, 2, 2, 1805, 1810, 7, 272, 2, 2, 1806, 1807, 7, 250, 2, 2, 1807, 1808, 7, 209, 2, 2, 1808, 1810, 5, 112, 57, 2, 1809, 1802, 3, 2, 2, 2, 1809, 1803, 3, 2, 2, 2, 1809, 1806, 3, 2, 2, 2, 1810, 109, 3, 2, 2, 2, 1811, 1812, 7, 119, 2, 2, 1812, 1830, 7, 272, 2, 2, 1813, 1814, 7, 119, 2, 2, 1814, 1815, 7, 3, 2, 2, 1815, 1816, 5, 174, 88, 2, 1816, 1817, 7, 4, 2, 2, 1817, 1818, 7, 254, 2, 2, 1818, 1819, 7, 3, 2, 2, 1819, 1824, 5, 190, 96, 2, 1820, 1821, 7, 5, 2, 2, 1821, 1823, 5, 190, 96, 2, 1822, 1820, 3, 2, 2, 2, 1823, 1826, 3, 2, 2, 2, 1824, 1822, 3, 2, 2, 2, 1824, 1825, 3, 2, 2, 2, 1825, 1827, 3, 2, 2, 2, 1826, 1824, 3, 2, 2, 2, 1827, 1828, 7, 4, 2, 2, 1828, 1830, 3, 2, 2, 2, 1829, 1811, 3, 2, 2, 2, 1829, 1813, 3, 2, 2, 2, 1830, 111, 3, 2, 2, 2, 1831, 1836, 5, 114, 58, 2, 1832, 1833, 7, 5, 2, 2, 1833, 1835, 5, 114, 58, 2, 1834, 1832, 3, 2, 2, 2, 1835, 1838, 3, 2, 2, 2, 1836, 1834, 3, 2, 2, 2, 1836, 1837, 3, 2, 2, 2, 1837, 113, 3, 2, 2, 2, 1838, 1836, 3, 2, 2, 2, 1839, 1840, 5, 176, 89, 2, 1840, 1841, 7, 262, 2, 2, 1841, 1842, 5, 190, 96, 2, 1842, 115, 3, 2, 2, 2, 1843, 1844, 7, 258, 2, 2, 1844, 1845, 5, 192, 97, 2, 1845, 117, 3, 2, 2, 2, 1846, 1847, 7, 109, 2, 2, 1847, 1848, 5, 192, 97, 2, 1848, 119, 3, 2, 2, 2, 1849, 1850, 7, 7, 2, 2, 1850, 1857, 5, 122, 62, 2, 1851, 1853, 7, 5, 2, 2, 1852, 1851, 3, 2, 2, 2, 1852, 1853, 3, 2, 2, 2, 1853, 1854, 3, 2, 2, 2, 1854, 1856, 5, 122, 62, 2, 1855, 1852, 3, 2, 2, 2, 1856, 1859, 3, 2, 2, 2, 1857, 1855, 3, 2, 2, 2, 1857, 1858, 3, 2, 2, 2, 1858, 1860, 3, 2, 2, 2, 1859, 1857, 3, 2, 2, 2, 1860, 1861, 7, 8, 2, 2, 1861, 121, 3, 2, 2, 2, 1862, 1876, 5, 260, 131, 2, 1863, 1864, 5, 260, 131, 2, 1864, 1865, 7, 3, 2, 2, 1865, 1870, 5, 198, 100, 2, 1866, 1867, 7, 5, 2, 2, 1867, 1869, 5, 198, 100, 2, 1868, 1866, 3, 2, 2, 2, 1869, 1872, 3, 2, 2, 2, 1870, 1868, 3, 2, 2, 2, 1870, 1871, 3, 2, 2, 2, 1871, 1873, 3, 2, 2, 2, 1872, 1870, 3, 2, 2, 2, 1873, 1874, 7, 4, 2, 2, 1874, 1876, 3, 2, 2, 2, 1875, 1862, 3, 2, 2, 2, 1875, 1863, 3, 2, 2, 2, 1876, 123, 3, 2, 2, 2, 1877, 1878, 7, 101, 2, 2, 1878, 1883, 5, 140, 71, 2, 1879, 1880, 7, 5, 2, 2, 1880, 1882, 5, 140, 71, 2, 1881, 1879, 3, 2, 2, 2, 1882, 1885, 3, 2, 2, 2, 1883, 1881, 3, 2, 2, 2, 1883, 1884, 3, 2, 2, 2, 1884, 1889, 3, 2, 2, 2, 1885, 1883, 3, 2, 2, 2, 1886, 1888, 5, 136, 69, 2, 1887, 1886, 3, 2, 2, 2, 1888, 1891, 3, 2, 2, 2, 1889, 1887, 3, 2, 2, 2, 1889, 1890, 3, 2, 2, 2, 1890, 1893, 3, 2, 2, 2, 1891, 1889, 3, 2, 2, 2, 1892, 1894, 5, 130, 66, 2, 1893, 1892, 3, 2, 2, 2, 1893, 1894, 3, 2, 2, 2, 1894, 125, 3, 2, 2, 2, 1895, 1896, 7, 107, 2, 2, 1896, 1897, 7, 31, 2, 2, 1897, 1902, 5, 190, 96, 2, 1898, 1899, 7, 5, 2, 2, 1899, 1901, 5, 190, 96, 2, 1900, 1898, 3, 2, 2, 2, 1901, 1904, 3, 2, 2, 2, 1902, 1900, 3, 2, 2, 2, 1902, 1903, 3, 2, 2, 2, 1903, 1922, 3, 2, 2, 2, 1904, 1902, 3, 2, 2, 2, 1905, 1906, 7, 260, 2, 2, 1906, 1923, 7, 199, 2, 2, 1907, 1908, 7, 260, 2, 2, 1908, 1923, 7, 56, 2, 2, 1909, 1910, 7, 108, 2, 2, 1910, 1911, 7, 211, 2, 2, 1911, 1912, 7, 3, 2, 2, 1912, 1917, 5, 128, 65, 2, 1913, 1914, 7, 5, 2, 2, 1914, 1916, 5, 128, 65, 2, 1915, 1913, 3, 2, 2, 2, 1916, 1919, 3, 2, 2, 2, 1917, 1915, 3, 2, 2, 2, 1917, 1918, 3, 2, 2, 2, 1918, 1920, 3, 2, 2, 2, 1919, 1917, 3, 2, 2, 2, 1920, 1921, 7, 4, 2, 2, 1921, 1923, 3, 2, 2, 2, 1922, 1905, 3, 2, 2, 2, 1922, 1907, 3, 2, 2, 2, 1922, 1909, 3, 2, 2, 2, 1922, 1923, 3, 2, 2, 2, 1923, 1940, 3, 2, 2, 2, 1924, 1925, 7, 107, 2, 2, 1925, 1926, 7, 31, 2, 2, 1926, 1927, 7, 108, 2, 2, 1927, 1928, 7, 211, 2, 2, 1928, 1929, 7, 3, 2, 2, 1929, 1934, 5, 128, 65, 2, 1930, 1931, 7, 5, 2, 2, 1931, 1933, 5, 128, 65, 2, 1932, 1930, 3, 2, 2, 2, 1933, 1936, 3, 2, 2, 2, 1934, 1932, 3, 2, 2, 2, 1934, 1935, 3, 2, 2, 2, 1935, 1937, 3, 2, 2, 2, 1936, 1934, 3, 2, 2, 2, 1937, 1938, 7, 4, 2, 2, 1938, 1940, 3, 2, 2, 2, 1939, 1895, 3, 2, 2, 2, 1939, 1924, 3, 2, 2, 2, 1940, 127, 3, 2, 2, 2, 1941, 1950, 7, 3, 2, 2, 1942, 1947, 5, 190, 96, 2, 1943, 1944, 7, 5, 2, 2, 1944, 1946, 5, 190, 96, 2, 1945, 1943, 3, 2, 2, 2, 1946, 1949, 3, 2, 2, 2, 1947, 1945, 3, 2, 2, 2, 1947, 1948, 3, 2, 2, 2, 1948, 1951, 3, 2, 2, 2, 1949, 1947, 3, 2, 2, 2, 1950, 1942, 3, 2, 2, 2, 1950, 1951, 3, 2, 2, 2, 1951, 1952, 3, 2, 2, 2, 1952, 1955, 7, 4, 2, 2, 1953, 1955, 5, 190, 96, 2, 1954, 1941, 3, 2, 2, 2, 1954, 1953, 3, 2, 2, 2, 1955, 129, 3, 2, 2, 2, 1956, 1957, 7, 172, 2, 2, 1957, 1958, 7, 3, 2, 2, 1958, 1959, 5, 182, 92, 2, 1959, 1960, 7, 97, 2, 2, 1960, 1961, 5, 132, 67, 2, 1961, 1962, 7, 113, 2, 2, 1962, 1963, 7, 3, 2, 2, 1963, 1968, 5, 134, 68, 2, 1964, 1965, 7, 5, 2, 2, 1965, 1967, 5, 134, 68, 2, 1966, 1964, 3, 2, 2, 2, 1967, 1970, 3, 2, 2, 2, 1968, 1966, 3, 2, 2, 2, 1968, 1969, 3, 2, 2, 2, 1969, 1971, 3, 2, 2, 2, 1970, 1968, 3, 2, 2, 2, 1971, 1972, 7, 4, 2, 2, 1972, 1973, 7, 4, 2, 2, 1973, 131, 3, 2, 2, 2, 1974, 1987, 5, 260, 131, 2, 1975, 1976, 7, 3, 2, 2, 1976, 1981, 5, 260, 131, 2, 1977, 1978, 7, 5, 2, 2, 1978, 1980, 5, 260, 131, 2, 1979, 1977, 3, 2, 2, 2, 1980, 1983, 3, 2, 2, 2, 1981, 1979, 3, 2, 2, 2, 1981, 1982, 3, 2, 2, 2, 1982, 1984, 3, 2, 2, 2, 1983, 1981, 3, 2, 2, 2, 1984, 1985, 7, 4, 2, 2, 1985, 1987, 3, 2, 2, 2, 1986, 1974, 3, 2, 2, 2, 1986, 1975, 3, 2, 2, 2, 1987, 133, 3, 2, 2, 2, 1988, 1993, 5, 190, 96, 2, 1989, 1991, 7, 23, 2, 2, 1990, 1989, 3, 2, 2, 2, 1990, 1991, 3, 2, 2, 2, 1991, 1992, 3, 2, 2, 2, 1992, 1994, 5, 260, 131, 2, 1993, 1990, 3, 2, 2, 2, 1993, 1994, 3, 2, 2, 2, 1994, 135, 3, 2, 2, 2, 1995, 1996, 7, 128, 2, 2, 1996, 1998, 7, 255, 2, 2, 1997, 1999, 7, 162, 2, 2, 1998, 1997, 3, 2, 2, 2, 1998, 1999, 3, 2, 2, 2, 1999, 2000, 3, 2, 2, 2, 2000, 2001, 5, 254, 128, 2, 2001, 2010, 7, 3, 2, 2, 2002, 2007, 5, 190, 96, 2, 2003, 2004, 7, 5, 2, 2, 2004, 2006, 5, 190, 96, 2, 2005, 2003, 3, 2, 2, 2, 2006, 2009, 3, 2, 2, 2, 2007, 2005, 3, 2, 2, 2, 2007, 2008, 3, 2, 2, 2, 2008, 2011, 3, 2, 2, 2, 2009, 2007, 3, 2, 2, 2, 2010, 2002, 3, 2, 2, 2, 2010, 2011, 3, 2, 2, 2, 2011, 2012, 3, 2, 2, 2, 2012, 2013, 7, 4, 2, 2, 2013, 2025, 5, 260, 131, 2, 2014, 2016, 7, 23, 2, 2, 2015, 2014, 3, 2, 2, 2, 2015, 2016, 3, 2, 2, 2, 2016, 2017, 3, 2, 2, 2, 2017, 2022, 5, 260, 131, 2, 2018, 2019, 7, 5, 2, 2, 2019, 2021, 5, 260, 131, 2, 2020, 2018, 3, 2, 2, 2, 2021, 2024, 3, 2, 2, 2, 2022, 2020, 3, 2, 2, 2, 2022, 2023, 3, 2, 2, 2, 2023, 2026, 3, 2, 2, 2, 2024, 2022, 3, 2, 2, 2, 2025, 2015, 3, 2, 2, 2, 2025, 2026, 3, 2, 2, 2, 2026, 137, 3, 2, 2, 2, 2027, 2028, 9, 20, 2, 2, 2028, 139, 3, 2, 2, 2, 2029, 2033, 5, 164, 83, 2, 2030, 2032, 5, 142, 72, 2, 2031, 2030, 3, 2, 2, 2, 2032, 2035, 3, 2, 2, 2, 2033, 2031, 3, 2, 2, 2, 2033, 2034, 3, 2, 2, 2, 2034, 141, 3, 2, 2, 2, 2035, 2033, 3, 2, 2, 2, 2036, 2037, 5, 144, 73, 2, 2037, 2038, 7, 125, 2, 2, 2038, 2040, 5, 164, 83, 2, 2039, 2041, 5, 146, 74, 2, 2040, 2039, 3, 2, 2, 2, 2040, 2041, 3, 2, 2, 2, 2041, 2048, 3, 2, 2, 2, 2042, 2043, 7, 149, 2, 2, 2043, 2044, 5, 144, 73, 2, 2044, 2045, 7, 125, 2, 2, 2045, 2046, 5, 164, 83, 2, 2046, 2048, 3, 2, 2, 2, 2047, 2036, 3, 2, 2, 2, 2047, 2042, 3, 2, 2, 2, 2048, 143, 3, 2, 2, 2, 2049, 2051, 7, 116, 2, 2, 2050, 2049, 3, 2, 2, 2, 2050, 2051, 3, 2, 2, 2, 2051, 2074, 3, 2, 2, 2, 2052, 2074, 7, 55, 2, 2, 2053, 2055, 7, 131, 2, 2, 2054, 2056, 7, 162, 2, 2, 2055, 2054, 3, 2, 2, 2, 2055, 2056, 3, 2, 2, 2, 2056, 2074, 3, 2, 2, 2, 2057, 2059, 7, 131, 2, 2, 2058, 2057, 3, 2, 2, 2, 2058, 2059, 3, 2, 2, 2, 2059, 2060, 3, 2, 2, 2, 2060, 2074, 7, 204, 2, 2, 2061, 2063, 7, 194, 2, 2, 2062, 2064, 7, 162, 2, 2, 2063, 2062, 3, 2, 2, 2, 2063, 2064, 3, 2, 2, 2, 2064, 2074, 3, 2, 2, 2, 2065, 2067, 7, 102, 2, 2, 2066, 2068, 7, 162, 2, 2, 2067, 2066, 3, 2, 2, 2, 2067, 2068, 3, 2, 2, 2, 2068, 2074, 3, 2, 2, 2, 2069, 2071, 7, 131, 2, 2, 2070, 2069, 3, 2, 2, 2, 2070, 2071, 3, 2, 2, 2, 2071, 2072, 3, 2, 2, 2, 2072, 2074, 7, 19, 2, 2, 2073, 2050, 3, 2, 2, 2, 2073, 2052, 3, 2, 2, 2, 2073, 2053, 3, 2, 2, 2, 2073, 2058, 3, 2, 2, 2, 2073, 2061, 3, 2, 2, 2, 2073, 2065, 3, 2, 2, 2, 2073, 2070, 3, 2, 2, 2, 2074, 145, 3, 2, 2, 2, 2075, 2076, 7, 155, 2, 2, 2076, 2080, 5, 192, 97, 2, 2077, 2078, 7, 253, 2, 2, 2078, 2080, 5, 152, 77, 2, 2079, 2075, 3, 2, 2, 2, 2079, 2077, 3, 2, 2, 2, 2080, 147, 3, 2, 2, 2, 2081, 2082, 7, 226, 2, 2, 2082, 2084, 7, 3, 2, 2, 2083, 2085, 5, 150, 76, 2, 2084, 2083, 3, 2, 2, 2, 2084, 2085, 3, 2, 2, 2, 2085, 2086, 3, 2, 2, 2, 2086, 2087, 7, 4, 2, 2, 2087, 149, 3, 2, 2, 2, 2088, 2090, 7, 271, 2, 2, 2089, 2088, 3, 2, 2, 2, 2089, 2090, 3, 2, 2, 2, 2090, 2091, 3, 2, 2, 2, 2091, 2092, 9, 21, 2, 2, 2092, 2113, 7, 171, 2, 2, 2093, 2094, 5, 190, 96, 2, 2094, 2095, 7, 201, 2, 2, 2095, 2113, 3, 2, 2, 2, 2096, 2097, 7, 29, 2, 2, 2097, 2098, 7, 285, 2, 2, 2098, 2099, 7, 161, 2, 2, 2099, 2100, 7, 154, 2, 2, 2100, 2109, 7, 285, 2, 2, 2101, 2107, 7, 155, 2, 2, 2102, 2108, 5, 260, 131, 2, 2103, 2104, 5, 254, 128, 2, 2104, 2105, 7, 3, 2, 2, 2105, 2106, 7, 4, 2, 2, 2106, 2108, 3, 2, 2, 2, 2107, 2102, 3, 2, 2, 2, 2107, 2103, 3, 2, 2, 2, 2108, 2110, 3, 2, 2, 2, 2109, 2101, 3, 2, 2, 2, 2109, 2110, 3, 2, 2, 2, 2110, 2113, 3, 2, 2, 2, 2111, 2113, 5, 190, 96, 2, 2112, 2089, 3, 2, 2, 2, 2112, 2093, 3, 2, 2, 2, 2112, 2096, 3, 2, 2, 2, 2112, 2111, 3, 2, 2, 2, 2113, 151, 3, 2, 2, 2, 2114, 2115, 7, 3, 2, 2, 2115, 2116, 5, 154, 78, 2, 2116, 2117, 7, 4, 2, 2, 2117, 153, 3, 2, 2, 2, 2118, 2123, 5, 256, 129, 2, 2119, 2120, 7, 5, 2, 2, 2120, 2122, 5, 256, 129, 2, 2121, 2119, 3, 2, 2, 2, 2122, 2125, 3, 2, 2, 2, 2123, 2121, 3, 2, 2, 2, 2123, 2124, 3, 2, 2, 2, 2124, 155, 3, 2, 2, 2, 2125, 2123, 3, 2, 2, 2, 2126, 2127, 7, 3, 2, 2, 2127, 2132, 5, 158, 80, 2, 2128, 2129, 7, 5, 2, 2, 2129, 2131, 5, 158, 80, 2, 2130, 2128, 3, 2, 2, 2, 2131, 2134, 3, 2, 2, 2, 2132, 2130, 3, 2, 2, 2, 2132, 2133, 3, 2, 2, 2, 2133, 2135, 3, 2, 2, 2, 2134, 2132, 3, 2, 2, 2, 2135, 2136, 7, 4, 2, 2, 2136, 157, 3, 2, 2, 2, 2137, 2139, 5, 256, 129, 2, 2138, 2140, 9, 18, 2, 2, 2139, 2138, 3, 2, 2, 2, 2139, 2140, 3, 2, 2, 2, 2140, 159, 3, 2, 2, 2, 2141, 2142, 7, 3, 2, 2, 2142, 2147, 5, 162, 82, 2, 2143, 2144, 7, 5, 2, 2, 2144, 2146, 5, 162, 82, 2, 2145, 2143, 3, 2, 2, 2, 2146, 2149, 3, 2, 2, 2, 2147, 2145, 3, 2, 2, 2, 2147, 2148, 3, 2, 2, 2, 2148, 2150, 3, 2, 2, 2, 2149, 2147, 3, 2, 2, 2, 2150, 2151, 7, 4, 2, 2, 2151, 161, 3, 2, 2, 2, 2152, 2154, 5, 260, 131, 2, 2153, 2155, 5, 34, 18, 2, 2154, 2153, 3, 2, 2, 2, 2154, 2155, 3, 2, 2, 2, 2155, 163, 3, 2, 2, 2, 2156, 2158, 5, 176, 89, 2, 2157, 2159, 5, 148, 75, 2, 2158, 2157, 3, 2, 2, 2, 2158, 2159, 3, 2, 2, 2, 2159, 2160, 3, 2, 2, 2, 2160, 2161, 5, 170, 86, 2, 2161, 2181, 3, 2, 2, 2, 2162, 2163, 7, 3, 2, 2, 2163, 2164, 5, 36, 19, 2, 2164, 2166, 7, 4, 2, 2, 2165, 2167, 5, 148, 75, 2, 2166, 2165, 3, 2, 2, 2, 2166, 2167, 3, 2, 2, 2, 2167, 2168, 3, 2, 2, 2, 2168, 2169, 5, 170, 86, 2, 2169, 2181, 3, 2, 2, 2, 2170, 2171, 7, 3, 2, 2, 2171, 2172, 5, 140, 71, 2, 2172, 2174, 7, 4, 2, 2, 2173, 2175, 5, 148, 75, 2, 2174, 2173, 3, 2, 2, 2, 2174, 2175, 3, 2, 2, 2, 2175, 2176, 3, 2, 2, 2, 2176, 2177, 5, 170, 86, 2, 2177, 2181, 3, 2, 2, 2, 2178, 2181, 5, 166, 84, 2, 2179, 2181, 5, 168, 85, 2, 2180, 2156, 3, 2, 2, 2, 2180, 2162, 3, 2, 2, 2, 2180, 2170, 3, 2, 2, 2, 2180, 2178, 3, 2, 2, 2, 2180, 2179, 3, 2, 2, 2, 2181, 165, 3, 2, 2, 2, 2182, 2183, 7, 254, 2, 2, 2183, 2188, 5, 190, 96, 2, 2184, 2185, 7, 5, 2, 2, 2185, 2187, 5, 190, 96, 2, 2186, 2184, 3, 2, 2, 2, 2187, 2190, 3, 2, 2, 2, 2188, 2186, 3, 2, 2, 2, 2188, 2189, 3, 2, 2, 2, 2189, 2191, 3, 2, 2, 2, 2190, 2188, 3, 2, 2, 2, 2191, 2192, 5, 170, 86, 2, 2192, 167, 3, 2, 2, 2, 2193, 2194, 5, 256, 129, 2, 2194, 2203, 7, 3, 2, 2, 2195, 2200, 5, 190, 96, 2, 2196, 2197, 7, 5, 2, 2, 2197, 2199, 5, 190, 96, 2, 2198, 2196, 3, 2, 2, 2, 2199, 2202, 3, 2, 2, 2, 2200, 2198, 3, 2, 2, 2, 2200, 2201, 3, 2, 2, 2, 2201, 2204, 3, 2, 2, 2, 2202, 2200, 3, 2, 2, 2, 2203, 2195, 3, 2, 2, 2, 2203, 2204, 3, 2, 2, 2, 2204, 2205, 3, 2, 2, 2, 2205, 2206, 7, 4, 2, 2, 2206, 2207, 5, 170, 86, 2, 2207, 169, 3, 2, 2, 2, 2208, 2210, 7, 23, 2, 2, 2209, 2208, 3, 2, 2, 2, 2209, 2210, 3, 2, 2, 2, 2210, 2211, 3, 2, 2, 2, 2211, 2213, 5, 262, 132, 2, 2212, 2214, 5, 152, 77, 2, 2213, 2212, 3, 2, 2, 2, 2213, 2214, 3, 2, 2, 2, 2214, 2216, 3, 2, 2, 2, 2215, 2209, 3, 2, 2, 2, 2215, 2216, 3, 2, 2, 2, 2216, 171, 3, 2, 2, 2, 2217, 2218, 7, 200, 2, 2, 2218, 2219, 7, 99, 2, 2, 2219, 2220, 7, 206, 2, 2, 2220, 2224, 7, 281, 2, 2, 2221, 2222, 7, 260, 2, 2, 2222, 2223, 7, 207, 2, 2, 2223, 2225, 5, 60, 31, 2, 2224, 2221, 3, 2, 2, 2, 2224, 2225, 3, 2, 2, 2, 2225, 2267, 3, 2, 2, 2, 2226, 2227, 7, 200, 2, 2, 2227, 2228, 7, 99, 2, 2, 2228, 2238, 7, 68, 2, 2, 2229, 2230, 7, 92, 2, 2, 2230, 2231, 7, 229, 2, 2, 2231, 2232, 7, 31, 2, 2, 2232, 2236, 7, 281, 2, 2, 2233, 2234, 7, 81, 2, 2, 2234, 2235, 7, 31, 2, 2, 2235, 2237, 7, 281, 2, 2, 2236, 2233, 3, 2, 2, 2, 2236, 2237, 3, 2, 2, 2, 2237, 2239, 3, 2, 2, 2, 2238, 2229, 3, 2, 2, 2, 2238, 2239, 3, 2, 2, 2, 2239, 2245, 3, 2, 2, 2, 2240, 2241, 7, 43, 2, 2, 2241, 2242, 7, 124, 2, 2, 2242, 2243, 7, 229, 2, 2, 2243, 2244, 7, 31, 2, 2, 2244, 2246, 7, 281, 2, 2, 2245, 2240, 3, 2, 2, 2, 2245, 2246, 3, 2, 2, 2, 2246, 2252, 3, 2, 2, 2, 2247, 2248, 7, 143, 2, 2, 2248, 2249, 7, 126, 2, 2, 2249, 2250, 7, 229, 2, 2, 2250, 2251, 7, 31, 2, 2, 2251, 2253, 7, 281, 2, 2, 2252, 2247, 3, 2, 2, 2, 2252, 2253, 3, 2, 2, 2, 2253, 2258, 3, 2, 2, 2, 2254, 2255, 7, 134, 2, 2, 2255, 2256, 7, 229, 2, 2, 2256, 2257, 7, 31, 2, 2, 2257, 2259, 7, 281, 2, 2, 2258, 2254, 3, 2, 2, 2, 2258, 2259, 3, 2, 2, 2, 2259, 2264, 3, 2, 2, 2, 2260, 2261, 7, 152, 2, 2, 2261, 2262, 7, 66, 2, 2, 2262, 2263, 7, 23, 2, 2, 2263, 2265, 7, 281, 2, 2, 2264, 2260, 3, 2, 2, 2, 2264, 2265, 3, 2, 2, 2, 2265, 2267, 3, 2, 2, 2, 2266, 2217, 3, 2, 2, 2, 2266, 2226, 3, 2, 2, 2, 2267, 173, 3, 2, 2, 2, 2268, 2273, 5, 176, 89, 2, 2269, 2270, 7, 5, 2, 2, 2270, 2272, 5, 176, 89, 2, 2271, 2269, 3, 2, 2, 2, 2272, 2275, 3, 2, 2, 2, 2273, 2271, 3, 2, 2, 2, 2273, 2274, 3, 2, 2, 2, 2274, 175, 3, 2, 2, 2, 2275, 2273, 3, 2, 2, 2, 2276, 2281, 5, 256, 129, 2, 2277, 2278, 7, 6, 2, 2, 2278, 2280, 5, 256, 129, 2, 2279, 2277, 3, 2, 2, 2, 2280, 2283, 3, 2, 2, 2, 2281, 2279, 3, 2, 2, 2, 2281, 2282, 3, 2, 2, 2, 2282, 177, 3, 2, 2, 2, 2283, 2281, 3, 2, 2, 2, 2284, 2285, 5, 256, 129, 2, 2285, 2286, 7, 6, 2, 2, 2286, 2288, 3, 2, 2, 2, 2287, 2284, 3, 2, 2, 2, 2287, 2288, 3, 2, 2, 2, 2288, 2289, 3, 2, 2, 2, 2289, 2290, 5, 256, 129, 2, 2290, 179, 3, 2, 2, 2, 2291, 2299, 5, 190, 96, 2, 2292, 2294, 7, 23, 2, 2, 2293, 2292, 3, 2, 2, 2, 2293, 2294, 3, 2, 2, 2, 2294, 2297, 3, 2, 2, 2, 2295, 2298, 5, 256, 129, 2, 2296, 2298, 5, 152, 77, 2, 2297, 2295, 3, 2, 2, 2, 2297, 2296, 3, 2, 2, 2, 2298, 2300, 3, 2, 2, 2, 2299, 2293, 3, 2, 2, 2, 2299, 2300, 3, 2, 2, 2, 2300, 181, 3, 2, 2, 2, 2301, 2306, 5, 180, 91, 2, 2302, 2303, 7, 5, 2, 2, 2303, 2305, 5, 180, 91, 2, 2304, 2302, 3, 2, 2, 2, 2305, 2308, 3, 2, 2, 2, 2306, 2304, 3, 2, 2, 2, 2306, 2307, 3, 2, 2, 2, 2307, 183, 3, 2, 2, 2, 2308, 2306, 3, 2, 2, 2, 2309, 2310, 7, 3, 2, 2, 2310, 2315, 5, 186, 94, 2, 2311, 2312, 7, 5, 2, 2, 2312, 2314, 5, 186, 94, 2, 2313, 2311, 3, 2, 2, 2, 2314, 2317, 3, 2, 2, 2, 2315, 2313, 3, 2, 2, 2, 2315, 2316, 3, 2, 2, 2, 2316, 2318, 3, 2, 2, 2, 2317, 2315, 3, 2, 2, 2, 2318, 2319, 7, 4, 2, 2, 2319, 185, 3, 2, 2, 2, 2320, 2334, 5, 254, 128, 2, 2321, 2322, 5, 260, 131, 2, 2322, 2323, 7, 3, 2, 2, 2323, 2328, 5, 188, 95, 2, 2324, 2325, 7, 5, 2, 2, 2325, 2327, 5, 188, 95, 2, 2326, 2324, 3, 2, 2, 2, 2327, 2330, 3, 2, 2, 2, 2328, 2326, 3, 2, 2, 2, 2328, 2329, 3, 2, 2, 2, 2329, 2331, 3, 2, 2, 2, 2330, 2328, 3, 2, 2, 2, 2331, 2332, 7, 4, 2, 2, 2332, 2334, 3, 2, 2, 2, 2333, 2320, 3, 2, 2, 2, 2333, 2321, 3, 2, 2, 2, 2334, 187, 3, 2, 2, 2, 2335, 2338, 5, 254, 128, 2, 2336, 2338, 5, 200, 101, 2, 2337, 2335, 3, 2, 2, 2, 2337, 2336, 3, 2, 2, 2, 2338, 189, 3, 2, 2, 2, 2339, 2340, 5, 192, 97, 2, 2340, 191, 3, 2, 2, 2, 2341, 2342, 8, 97, 1, 2, 2342, 2343, 7, 151, 2, 2, 2343, 2354, 5, 192, 97, 7, 2344, 2345, 7, 84, 2, 2, 2345, 2346, 7, 3, 2, 2, 2346, 2347, 5, 36, 19, 2, 2347, 2348, 7, 4, 2, 2, 2348, 2354, 3, 2, 2, 2, 2349, 2351, 5, 196, 99, 2, 2350, 2352, 5, 194, 98, 2, 2351, 2350, 3, 2, 2, 2, 2351, 2352, 3, 2, 2, 2, 2352, 2354, 3, 2, 2, 2, 2353, 2341, 3, 2, 2, 2, 2353, 2344, 3, 2, 2, 2, 2353, 2349, 3, 2, 2, 2, 2354, 2363, 3, 2, 2, 2, 2355, 2356, 12, 4, 2, 2, 2356, 2357, 7, 18, 2, 2, 2357, 2362, 5, 192, 97, 5, 2358, 2359, 12, 3, 2, 2, 2359, 2360, 7, 159, 2, 2, 2360, 2362, 5, 192, 97, 4, 2361, 2355, 3, 2, 2, 2, 2361, 2358, 3, 2, 2, 2, 2362, 2365, 3, 2, 2, 2, 2363, 2361, 3, 2, 2, 2, 2363, 2364, 3, 2, 2, 2, 2364, 193, 3, 2, 2, 2, 2365, 2363, 3, 2, 2, 2, 2366, 2368, 7, 151, 2, 2, 2367, 2366, 3, 2, 2, 2, 2367, 2368, 3, 2, 2, 2, 2368, 2369, 3, 2, 2, 2, 2369, 2370, 7, 27, 2, 2, 2370, 2371, 5, 196, 99, 2, 2371, 2372, 7, 18, 2, 2, 2372, 2373, 5, 196, 99, 2, 2373, 2449, 3, 2, 2, 2, 2374, 2376, 7, 151, 2, 2, 2375, 2374, 3, 2, 2, 2, 2375, 2376, 3, 2, 2, 2, 2376, 2377, 3, 2, 2, 2, 2377, 2378, 7, 113, 2, 2, 2378, 2379, 7, 3, 2, 2, 2379, 2384, 5, 190, 96, 2, 2380, 2381, 7, 5, 2, 2, 2381, 2383, 5, 190, 96, 2, 2382, 2380, 3, 2, 2, 2, 2383, 2386, 3, 2, 2, 2, 2384, 2382, 3, 2, 2, 2, 2384, 2385, 3, 2, 2, 2, 2385, 2387, 3, 2, 2, 2, 2386, 2384, 3, 2, 2, 2, 2387, 2388, 7, 4, 2, 2, 2388, 2449, 3, 2, 2, 2, 2389, 2391, 7, 151, 2, 2, 2390, 2389, 3, 2, 2, 2, 2390, 2391, 3, 2, 2, 2, 2391, 2392, 3, 2, 2, 2, 2392, 2393, 7, 113, 2, 2, 2393, 2394, 7, 3, 2, 2, 2394, 2395, 5, 36, 19, 2, 2395, 2396, 7, 4, 2, 2, 2396, 2449, 3, 2, 2, 2, 2397, 2399, 7, 151, 2, 2, 2398, 2397, 3, 2, 2, 2, 2398, 2399, 3, 2, 2, 2, 2399, 2400, 3, 2, 2, 2, 2400, 2401, 7, 195, 2, 2, 2401, 2449, 5, 196, 99, 2, 2402, 2404, 7, 151, 2, 2, 2403, 2402, 3, 2, 2, 2, 2403, 2404, 3, 2, 2, 2, 2404, 2405, 3, 2, 2, 2, 2405, 2406, 7, 132, 2, 2, 2406, 2420, 9, 22, 2, 2, 2407, 2408, 7, 3, 2, 2, 2408, 2421, 7, 4, 2, 2, 2409, 2410, 7, 3, 2, 2, 2410, 2415, 5, 190, 96, 2, 2411, 2412, 7, 5, 2, 2, 2412, 2414, 5, 190, 96, 2, 2413, 2411, 3, 2, 2, 2, 2414, 2417, 3, 2, 2, 2, 2415, 2413, 3, 2, 2, 2, 2415, 2416, 3, 2, 2, 2, 2416, 2418, 3, 2, 2, 2, 2417, 2415, 3, 2, 2, 2, 2418, 2419, 7, 4, 2, 2, 2419, 2421, 3, 2, 2, 2, 2420, 2407, 3, 2, 2, 2, 2420, 2409, 3, 2, 2, 2, 2421, 2449, 3, 2, 2, 2, 2422, 2424, 7, 151, 2, 2, 2423, 2422, 3, 2, 2, 2, 2423, 2424, 3, 2, 2, 2, 2424, 2425, 3, 2, 2, 2, 2425, 2426, 7, 132, 2, 2, 2426, 2429, 5, 196, 99, 2, 2427, 2428, 7, 80, 2, 2, 2428, 2430, 7, 281, 2, 2, 2429, 2427, 3, 2, 2, 2, 2429, 2430, 3, 2, 2, 2, 2430, 2449, 3, 2, 2, 2, 2431, 2433, 7, 123, 2, 2, 2432, 2434, 7, 151, 2, 2, 2433, 2432, 3, 2, 2, 2, 2433, 2434, 3, 2, 2, 2, 2434, 2435, 3, 2, 2, 2, 2435, 2449, 7, 152, 2, 2, 2436, 2438, 7, 123, 2, 2, 2437, 2439, 7, 151, 2, 2, 2438, 2437, 3, 2, 2, 2, 2438, 2439, 3, 2, 2, 2, 2439, 2440, 3, 2, 2, 2, 2440, 2449, 9, 23, 2, 2, 2441, 2443, 7, 123, 2, 2, 2442, 2444, 7, 151, 2, 2, 2443, 2442, 3, 2, 2, 2, 2443, 2444, 3, 2, 2, 2, 2444, 2445, 3, 2, 2, 2, 2445, 2446, 7, 74, 2, 2, 2446, 2447, 7, 101, 2, 2, 2447, 2449, 5, 196, 99, 2, 2448, 2367, 3, 2, 2, 2, 2448, 2375, 3, 2, 2, 2, 2448, 2390, 3, 2, 2, 2, 2448, 2398, 3, 2, 2, 2, 2448, 2403, 3, 2, 2, 2, 2448, 2423, 3, 2, 2, 2, 2448, 2431, 3, 2, 2, 2, 2448, 2436, 3, 2, 2, 2, 2448, 2441, 3, 2, 2, 2, 2449, 195, 3, 2, 2, 2, 2450, 2451, 8, 99, 1, 2, 2451, 2455, 5, 198, 100, 2, 2452, 2453, 9, 24, 2, 2, 2453, 2455, 5, 196, 99, 9, 2454, 2450, 3, 2, 2, 2, 2454, 2452, 3, 2, 2, 2, 2455, 2477, 3, 2, 2, 2, 2456, 2457, 12, 8, 2, 2, 2457, 2458, 9, 25, 2, 2, 2458, 2476, 5, 196, 99, 9, 2459, 2460, 12, 7, 2, 2, 2460, 2461, 9, 26, 2, 2, 2461, 2476, 5, 196, 99, 8, 2462, 2463, 12, 6, 2, 2, 2463, 2464, 7, 276, 2, 2, 2464, 2476, 5, 196, 99, 7, 2465, 2466, 12, 5, 2, 2, 2466, 2467, 7, 279, 2, 2, 2467, 2476, 5, 196, 99, 6, 2468, 2469, 12, 4, 2, 2, 2469, 2470, 7, 277, 2, 2, 2470, 2476, 5, 196, 99, 5, 2471, 2472, 12, 3, 2, 2, 2472, 2473, 5, 202, 102, 2, 2473, 2474, 5, 196, 99, 4, 2474, 2476, 3, 2, 2, 2, 2475, 2456, 3, 2, 2, 2, 2475, 2459, 3, 2, 2, 2, 2475, 2462, 3, 2, 2, 2, 2475, 2465, 3, 2, 2, 2, 2475, 2468, 3, 2, 2, 2, 2475, 2471, 3, 2, 2, 2, 2476, 2479, 3, 2, 2, 2, 2477, 2475, 3, 2, 2, 2, 2477, 2478, 3, 2, 2, 2, 2478, 197, 3, 2, 2, 2, 2479, 2477, 3, 2, 2, 2, 2480, 2481, 8, 100, 1, 2, 2481, 2665, 9, 27, 2, 2, 2482, 2484, 7, 34, 2, 2, 2483, 2485, 5, 238, 120, 2, 2484, 2483, 3, 2, 2, 2, 2485, 2486, 3, 2, 2, 2, 2486, 2484, 3, 2, 2, 2, 2486, 2487, 3, 2, 2, 2, 2487, 2490, 3, 2, 2, 2, 2488, 2489, 7, 78, 2, 2, 2489, 2491, 5, 190, 96, 2, 2490, 2488, 3, 2, 2, 2, 2490, 2491, 3, 2, 2, 2, 2491, 2492, 3, 2, 2, 2, 2492, 2493, 7, 79, 2, 2, 2493, 2665, 3, 2, 2, 2, 2494, 2495, 7, 34, 2, 2, 2495, 2497, 5, 190, 96, 2, 2496, 2498, 5, 238, 120, 2, 2497, 2496, 3, 2, 2, 2, 2498, 2499, 3, 2, 2, 2, 2499, 2497, 3, 2, 2, 2, 2499, 2500, 3, 2, 2, 2, 2500, 2503, 3, 2, 2, 2, 2501, 2502, 7, 78, 2, 2, 2502, 2504, 5, 190, 96, 2, 2503, 2501, 3, 2, 2, 2, 2503, 2504, 3, 2, 2, 2, 2504, 2505, 3, 2, 2, 2, 2505, 2506, 7, 79, 2, 2, 2506, 2665, 3, 2, 2, 2, 2507, 2508, 7, 35, 2, 2, 2508, 2509, 7, 3, 2, 2, 2509, 2510, 5, 190, 96, 2, 2510, 2511, 7, 23, 2, 2, 2511, 2512, 5, 224, 113, 2, 2512, 2513, 7, 4, 2, 2, 2513, 2665, 3, 2, 2, 2, 2514, 2515, 7, 221, 2, 2, 2515, 2524, 7, 3, 2, 2, 2516, 2521, 5, 180, 91, 2, 2517, 2518, 7, 5, 2, 2, 2518, 2520, 5, 180, 91, 2, 2519, 2517, 3, 2, 2, 2, 2520, 2523, 3, 2, 2, 2, 2521, 2519, 3, 2, 2, 2, 2521, 2522, 3, 2, 2, 2, 2522, 2525, 3, 2, 2, 2, 2523, 2521, 3, 2, 2, 2, 2524, 2516, 3, 2, 2, 2, 2524, 2525, 3, 2, 2, 2, 2525, 2526, 3, 2, 2, 2, 2526, 2665, 7, 4, 2, 2, 2527, 2528, 7, 95, 2, 2, 2528, 2529, 7, 3, 2, 2, 2529, 2532, 5, 190, 96, 2, 2530, 2531, 7, 111, 2, 2, 2531, 2533, 7, 153, 2, 2, 2532, 2530, 3, 2, 2, 2, 2532, 2533, 3, 2, 2, 2, 2533, 2534, 3, 2, 2, 2, 2534, 2535, 7, 4, 2, 2, 2535, 2665, 3, 2, 2, 2, 2536, 2537, 7, 127, 2, 2, 2537, 2538, 7, 3, 2, 2, 2538, 2541, 5, 190, 96, 2, 2539, 2540, 7, 111, 2, 2, 2540, 2542, 7, 153, 2, 2, 2541, 2539, 3, 2, 2, 2, 2541, 2542, 3, 2, 2, 2, 2542, 2543, 3, 2, 2, 2, 2543, 2544, 7, 4, 2, 2, 2544, 2665, 3, 2, 2, 2, 2545, 2546, 7, 174, 2, 2, 2546, 2547, 7, 3, 2, 2, 2547, 2548, 5, 196, 99, 2, 2548, 2549, 7, 113, 2, 2, 2549, 2550, 5, 196, 99, 2, 2550, 2551, 7, 4, 2, 2, 2551, 2665, 3, 2, 2, 2, 2552, 2665, 5, 200, 101, 2, 2553, 2665, 7, 272, 2, 2, 2554, 2555, 5, 254, 128, 2, 2555, 2556, 7, 6, 2, 2, 2556, 2557, 7, 272, 2, 2, 2557, 2665, 3, 2, 2, 2, 2558, 2559, 7, 3, 2, 2, 2559, 2562, 5, 180, 91, 2, 2560, 2561, 7, 5, 2, 2, 2561, 2563, 5, 180, 91, 2, 2562, 2560, 3, 2, 2, 2, 2563, 2564, 3, 2, 2, 2, 2564, 2562, 3, 2, 2, 2, 2564, 2565, 3, 2, 2, 2, 2565, 2566, 3, 2, 2, 2, 2566, 2567, 7, 4, 2, 2, 2567, 2665, 3, 2, 2, 2, 2568, 2569, 7, 3, 2, 2, 2569, 2570, 5, 36, 19, 2, 2570, 2571, 7, 4, 2, 2, 2571, 2665, 3, 2, 2, 2, 2572, 2573, 5, 252, 127, 2, 2573, 2585, 7, 3, 2, 2, 2574, 2576, 5, 138, 70, 2, 2575, 2574, 3, 2, 2, 2, 2575, 2576, 3, 2, 2, 2, 2576, 2577, 3, 2, 2, 2, 2577, 2582, 5, 190, 96, 2, 2578, 2579, 7, 5, 2, 2, 2579, 2581, 5, 190, 96, 2, 2580, 2578, 3, 2, 2, 2, 2581, 2584, 3, 2, 2, 2, 2582, 2580, 3, 2, 2, 2, 2582, 2583, 3, 2, 2, 2, 2583, 2586, 3, 2, 2, 2, 2584, 2582, 3, 2, 2, 2, 2585, 2575, 3, 2, 2, 2, 2585, 2586, 3, 2, 2, 2, 2586, 2587, 3, 2, 2, 2, 2587, 2594, 7, 4, 2, 2, 2588, 2589, 7, 93, 2, 2, 2589, 2590, 7, 3, 2, 2, 2590, 2591, 7, 258, 2, 2, 2591, 2592, 5, 192, 97, 2, 2592, 2593, 7, 4, 2, 2, 2593, 2595, 3, 2, 2, 2, 2594, 2588, 3, 2, 2, 2, 2594, 2595, 3, 2, 2, 2, 2595, 2598, 3, 2, 2, 2, 2596, 2597, 7, 164, 2, 2, 2597, 2599, 5, 244, 123, 2, 2598, 2596, 3, 2, 2, 2, 2598, 2599, 3, 2, 2, 2, 2599, 2665, 3, 2, 2, 2, 2600, 2601, 5, 260, 131, 2, 2601, 2602, 7, 9, 2, 2, 2602, 2603, 5, 190, 96, 2, 2603, 2665, 3, 2, 2, 2, 2604, 2605, 7, 3, 2, 2, 2605, 2608, 5, 260, 131, 2, 2606, 2607, 7, 5, 2, 2, 2607, 2609, 5, 260, 131, 2, 2608, 2606, 3, 2, 2, 2, 2609, 2610, 3, 2, 2, 2, 2610, 2608, 3, 2, 2, 2, 2610, 2611, 3, 2, 2, 2, 2611, 2612, 3, 2, 2, 2, 2612, 2613, 7, 4, 2, 2, 2613, 2614, 7, 9, 2, 2, 2614, 2615, 5, 190, 96, 2, 2615, 2665, 3, 2, 2, 2, 2616, 2665, 5, 260, 131, 2, 2617, 2618, 7, 3, 2, 2, 2618, 2619, 5, 190, 96, 2, 2619, 2620, 7, 4, 2, 2, 2620, 2665, 3, 2, 2, 2, 2621, 2622, 7, 89, 2, 2, 2622, 2623, 7, 3, 2, 2, 2623, 2624, 5, 260, 131, 2, 2624, 2625, 7, 101, 2, 2, 2625, 2626, 5, 196, 99, 2, 2626, 2627, 7, 4, 2, 2, 2627, 2665, 3, 2, 2, 2, 2628, 2629, 9, 28, 2, 2, 2629, 2630, 7, 3, 2, 2, 2630, 2631, 5, 196, 99, 2, 2631, 2632, 9, 29, 2, 2, 2632, 2635, 5, 196, 99, 2, 2633, 2634, 9, 30, 2, 2, 2634, 2636, 5, 196, 99, 2, 2635, 2633, 3, 2, 2, 2, 2635, 2636, 3, 2, 2, 2, 2636, 2637, 3, 2, 2, 2, 2637, 2638, 7, 4, 2, 2, 2638, 2665, 3, 2, 2, 2, 2639, 2640, 7, 238, 2, 2, 2640, 2642, 7, 3, 2, 2, 2641, 2643, 9, 31, 2, 2, 2642, 2641, 3, 2, 2, 2, 2642, 2643, 3, 2, 2, 2, 2643, 2645, 3, 2, 2, 2, 2644, 2646, 5, 196, 99, 2, 2645, 2644, 3, 2, 2, 2, 2645, 2646, 3, 2, 2, 2, 2646, 2647, 3, 2, 2, 2, 2647, 2648, 7, 101, 2, 2, 2648, 2649, 5, 196, 99, 2, 2649, 2650, 7, 4, 2, 2, 2650, 2665, 3, 2, 2, 2, 2651, 2652, 7, 166, 2, 2, 2652, 2653, 7, 3, 2, 2, 2653, 2654, 5, 196, 99, 2, 2654, 2655, 7, 173, 2, 2, 2655, 2656, 5, 196, 99, 2, 2656, 2657, 7, 101, 2, 2, 2657, 2660, 5, 196, 99, 2, 2658, 2659, 7, 97, 2, 2, 2659, 2661, 5, 196, 99, 2, 2660, 2658, 3, 2, 2, 2, 2660, 2661, 3, 2, 2, 2, 2661, 2662, 3, 2, 2, 2, 2662, 2663, 7, 4, 2, 2, 2663, 2665, 3, 2, 2, 2, 2664, 2480, 3, 2, 2, 2, 2664, 2482, 3, 2, 2, 2, 2664, 2494, 3, 2, 2, 2, 2664, 2507, 3, 2, 2, 2, 2664, 2514, 3, 2, 2, 2, 2664, 2527, 3, 2, 2, 2, 2664, 2536, 3, 2, 2, 2, 2664, 2545, 3, 2, 2, 2, 2664, 2552, 3, 2, 2, 2, 2664, 2553, 3, 2, 2, 2, 2664, 2554, 3, 2, 2, 2, 2664, 2558, 3, 2, 2, 2, 2664, 2568, 3, 2, 2, 2, 2664, 2572, 3, 2, 2, 2, 2664, 2600, 3, 2, 2, 2, 2664, 2604, 3, 2, 2, 2, 2664, 2616, 3, 2, 2, 2, 2664, 2617, 3, 2, 2, 2, 2664, 2621, 3, 2, 2, 2, 2664, 2628, 3, 2, 2, 2, 2664, 2639, 3, 2, 2, 2, 2664, 2651, 3, 2, 2, 2, 2665, 2676, 3, 2, 2, 2, 2666, 2667, 12, 10, 2, 2, 2667, 2668, 7, 10, 2, 2, 2668, 2669, 5, 196, 99, 2, 2669, 2670, 7, 11, 2, 2, 2670, 2675, 3, 2, 2, 2, 2671, 2672, 12, 8, 2, 2, 2672, 2673, 7, 6, 2, 2, 2673, 2675, 5, 260, 131, 2, 2674, 2666, 3, 2, 2, 2, 2674, 2671, 3, 2, 2, 2, 2675, 2678, 3, 2, 2, 2, 2676, 2674, 3, 2, 2, 2, 2676, 2677, 3, 2, 2, 2, 2677, 199, 3, 2, 2, 2, 2678, 2676, 3, 2, 2, 2, 2679, 2692, 7, 152, 2, 2, 2680, 2692, 5, 210, 106, 2, 2681, 2682, 5, 260, 131, 2, 2682, 2683, 7, 281, 2, 2, 2683, 2692, 3, 2, 2, 2, 2684, 2692, 5, 266, 134, 2, 2685, 2692, 5, 208, 105, 2, 2686, 2688, 7, 281, 2, 2, 2687, 2686, 3, 2, 2, 2, 2688, 2689, 3, 2, 2, 2, 2689, 2687, 3, 2, 2, 2, 2689, 2690, 3, 2, 2, 2, 2690, 2692, 3, 2, 2, 2, 2691, 2679, 3, 2, 2, 2, 2691, 2680, 3, 2, 2, 2, 2691, 2681, 3, 2, 2, 2, 2691, 2684, 3, 2, 2, 2, 2691, 2685, 3, 2, 2, 2, 2691, 2687, 3, 2, 2, 2, 2692, 201, 3, 2, 2, 2, 2693, 2694, 9, 32, 2, 2, 2694, 203, 3, 2, 2, 2, 2695, 2696, 9, 33, 2, 2, 2696, 205, 3, 2, 2, 2, 2697, 2698, 9, 34, 2, 2, 2698, 207, 3, 2, 2, 2, 2699, 2700, 9, 35, 2, 2, 2700, 209, 3, 2, 2, 2, 2701, 2704, 7, 121, 2, 2, 2702, 2705, 5, 212, 107, 2, 2703, 2705, 5, 216, 109, 2, 2704, 2702, 3, 2, 2, 2, 2704, 2703, 3, 2, 2, 2, 2704, 2705, 3, 2, 2, 2, 2705, 211, 3, 2, 2, 2, 2706, 2708, 5, 214, 108, 2, 2707, 2709, 5, 218, 110, 2, 2708, 2707, 3, 2, 2, 2, 2708, 2709, 3, 2, 2, 2, 2709, 213, 3, 2, 2, 2, 2710, 2711, 5, 220, 111, 2, 2711, 2712, 5, 260, 131, 2, 2712, 2714, 3, 2, 2, 2, 2713, 2710, 3, 2, 2, 2, 2714, 2715, 3, 2, 2, 2, 2715, 2713, 3, 2, 2, 2, 2715, 2716, 3, 2, 2, 2, 2716, 215, 3, 2, 2, 2, 2717, 2720, 5, 218, 110, 2, 2718, 2721, 5, 214, 108, 2, 2719, 2721, 5, 218, 110, 2, 2720, 2718, 3, 2, 2, 2, 2720, 2719, 3, 2, 2, 2, 2720, 2721, 3, 2, 2, 2, 2721, 217, 3, 2, 2, 2, 2722, 2723, 5, 220, 111, 2, 2723, 2724, 5, 260, 131, 2, 2724, 2725, 7, 232, 2, 2, 2725, 2726, 5, 260, 131, 2, 2726, 219, 3, 2, 2, 2, 2727, 2729, 9, 36, 2, 2, 2728, 2727, 3, 2, 2, 2, 2728, 2729, 3, 2, 2, 2, 2729, 2730, 3, 2, 2, 2, 2730, 2733, 9, 21, 2, 2, 2731, 2733, 7, 281, 2, 2, 2732, 2728, 3, 2, 2, 2, 2732, 2731, 3, 2, 2, 2, 2733, 221, 3, 2, 2, 2, 2734, 2738, 7, 95, 2, 2, 2735, 2736, 7, 14, 2, 2, 2736, 2738, 5, 256, 129, 2, 2737, 2734, 3, 2, 2, 2, 2737, 2735, 3, 2, 2, 2, 2738, 223, 3, 2, 2, 2, 2739, 2740, 7, 22, 2, 2, 2740, 2741, 7, 266, 2, 2, 2741, 2742, 5, 224, 113, 2, 2742, 2743, 7, 268, 2, 2, 2743, 2774, 3, 2, 2, 2, 2744, 2745, 7, 143, 2, 2, 2745, 2746, 7, 266, 2, 2, 2746, 2747, 5, 224, 113, 2, 2747, 2748, 7, 5, 2, 2, 2748, 2749, 5, 224, 113, 2, 2749, 2750, 7, 268, 2, 2, 2750, 2774, 3, 2, 2, 2, 2751, 2758, 7, 221, 2, 2, 2752, 2754, 7, 266, 2, 2, 2753, 2755, 5, 234, 118, 2, 2754, 2753, 3, 2, 2, 2, 2754, 2755, 3, 2, 2, 2, 2755, 2756, 3, 2, 2, 2, 2756, 2759, 7, 268, 2, 2, 2757, 2759, 7, 264, 2, 2, 2758, 2752, 3, 2, 2, 2, 2758, 2757, 3, 2, 2, 2, 2759, 2774, 3, 2, 2, 2, 2760, 2771, 5, 260, 131, 2, 2761, 2762, 7, 3, 2, 2, 2762, 2767, 7, 285, 2, 2, 2763, 2764, 7, 5, 2, 2, 2764, 2766, 7, 285, 2, 2, 2765, 2763, 3, 2, 2, 2, 2766, 2769, 3, 2, 2, 2, 2767, 2765, 3, 2, 2, 2, 2767, 2768, 3, 2, 2, 2, 2768, 2770, 3, 2, 2, 2, 2769, 2767, 3, 2, 2, 2, 2770, 2772, 7, 4, 2, 2, 2771, 2761, 3, 2, 2, 2, 2771, 2772, 3, 2, 2, 2, 2772, 2774, 3, 2, 2, 2, 2773, 2739, 3, 2, 2, 2, 2773, 2744, 3, 2, 2, 2, 2773, 2751, 3, 2, 2, 2, 2773, 2760, 3, 2, 2, 2, 2774, 225, 3, 2, 2, 2, 2775, 2780, 5, 228, 115, 2, 2776, 2777, 7, 5, 2, 2, 2777, 2779, 5, 228, 115, 2, 2778, 2776, 3, 2, 2, 2, 2779, 2782, 3, 2, 2, 2, 2780, 2778, 3, 2, 2, 2, 2780, 2781, 3, 2, 2, 2, 2781, 227, 3, 2, 2, 2, 2782, 2780, 3, 2, 2, 2, 2783, 2784, 5, 176, 89, 2, 2784, 2787, 5, 224, 113, 2, 2785, 2786, 7, 151, 2, 2, 2786, 2788, 7, 152, 2, 2, 2787, 2785, 3, 2, 2, 2, 2787, 2788, 3, 2, 2, 2, 2788, 2790, 3, 2, 2, 2, 2789, 2791, 5, 34, 18, 2, 2790, 2789, 3, 2, 2, 2, 2790, 2791, 3, 2, 2, 2, 2791, 2793, 3, 2, 2, 2, 2792, 2794, 5, 222, 112, 2, 2793, 2792, 3, 2, 2, 2, 2793, 2794, 3, 2, 2, 2, 2794, 229, 3, 2, 2, 2, 2795, 2800, 5, 232, 117, 2, 2796, 2797, 7, 5, 2, 2, 2797, 2799, 5, 232, 117, 2, 2798, 2796, 3, 2, 2, 2, 2799, 2802, 3, 2, 2, 2, 2800, 2798, 3, 2, 2, 2, 2800, 2801, 3, 2, 2, 2, 2801, 231, 3, 2, 2, 2, 2802, 2800, 3, 2, 2, 2, 2803, 2804, 5, 256, 129, 2, 2804, 2807, 5, 224, 113, 2, 2805, 2806, 7, 151, 2, 2, 2806, 2808, 7, 152, 2, 2, 2807, 2805, 3, 2, 2, 2, 2807, 2808, 3, 2, 2, 2, 2808, 2810, 3, 2, 2, 2, 2809, 2811, 5, 34, 18, 2, 2810, 2809, 3, 2, 2, 2, 2810, 2811, 3, 2, 2, 2, 2811, 233, 3, 2, 2, 2, 2812, 2817, 5, 236, 119, 2, 2813, 2814, 7, 5, 2, 2, 2814, 2816, 5, 236, 119, 2, 2815, 2813, 3, 2, 2, 2, 2816, 2819, 3, 2, 2, 2, 2817, 2815, 3, 2, 2, 2, 2817, 2818, 3, 2, 2, 2, 2818, 235, 3, 2, 2, 2, 2819, 2817, 3, 2, 2, 2, 2820, 2821, 5, 260, 131, 2, 2821, 2822, 7, 12, 2, 2, 2822, 2825, 5, 224, 113, 2, 2823, 2824, 7, 151, 2, 2, 2824, 2826, 7, 152, 2, 2, 2825, 2823, 3, 2, 2, 2, 2825, 2826, 3, 2, 2, 2, 2826, 2828, 3, 2, 2, 2, 2827, 2829, 5, 34, 18, 2, 2828, 2827, 3, 2, 2, 2, 2828, 2829, 3, 2, 2, 2, 2829, 237, 3, 2, 2, 2, 2830, 2831, 7, 257, 2, 2, 2831, 2832, 5, 190, 96, 2, 2832, 2833, 7, 230, 2, 2, 2833, 2834, 5, 190, 96, 2, 2834, 239, 3, 2, 2, 2, 2835, 2836, 7, 259, 2, 2, 2836, 2841, 5, 242, 122, 2, 2837, 2838, 7, 5, 2, 2, 2838, 2840, 5, 242, 122, 2, 2839, 2837, 3, 2, 2, 2, 2840, 2843, 3, 2, 2, 2, 2841, 2839, 3, 2, 2, 2, 2841, 2842, 3, 2, 2, 2, 2842, 241, 3, 2, 2, 2, 2843, 2841, 3, 2, 2, 2, 2844, 2845, 5, 256, 129, 2, 2845, 2846, 7, 23, 2, 2, 2846, 2847, 5, 244, 123, 2, 2847, 243, 3, 2, 2, 2, 2848, 2895, 5, 256, 129, 2, 2849, 2850, 7, 3, 2, 2, 2850, 2851, 5, 256, 129, 2, 2851, 2852, 7, 4, 2, 2, 2852, 2895, 3, 2, 2, 2, 2853, 2888, 7, 3, 2, 2, 2854, 2855, 7, 39, 2, 2, 2855, 2856, 7, 31, 2, 2, 2856, 2861, 5, 190, 96, 2, 2857, 2858, 7, 5, 2, 2, 2858, 2860, 5, 190, 96, 2, 2859, 2857, 3, 2, 2, 2, 2860, 2863, 3, 2, 2, 2, 2861, 2859, 3, 2, 2, 2, 2861, 2862, 3, 2, 2, 2, 2862, 2889, 3, 2, 2, 2, 2863, 2861, 3, 2, 2, 2, 2864, 2865, 9, 37, 2, 2, 2865, 2866, 7, 31, 2, 2, 2866, 2871, 5, 190, 96, 2, 2867, 2868, 7, 5, 2, 2, 2868, 2870, 5, 190, 96, 2, 2869, 2867, 3, 2, 2, 2, 2870, 2873, 3, 2, 2, 2, 2871, 2869, 3, 2, 2, 2, 2871, 2872, 3, 2, 2, 2, 2872, 2875, 3, 2, 2, 2, 2873, 2871, 3, 2, 2, 2, 2874, 2864, 3, 2, 2, 2, 2874, 2875, 3, 2, 2, 2, 2875, 2886, 3, 2, 2, 2, 2876, 2877, 9, 38, 2, 2, 2877, 2878, 7, 31, 2, 2, 2878, 2883, 5, 90, 46, 2, 2879, 2880, 7, 5, 2, 2, 2880, 2882, 5, 90, 46, 2, 2881, 2879, 3, 2, 2, 2, 2882, 2885, 3, 2, 2, 2, 2883, 2881, 3, 2, 2, 2, 2883, 2884, 3, 2, 2, 2, 2884, 2887, 3, 2, 2, 2, 2885, 2883, 3, 2, 2, 2, 2886, 2876, 3, 2, 2, 2, 2886, 2887, 3, 2, 2, 2, 2887, 2889, 3, 2, 2, 2, 2888, 2854, 3, 2, 2, 2, 2888, 2874, 3, 2, 2, 2, 2889, 2891, 3, 2, 2, 2, 2890, 2892, 5, 246, 124, 2, 2891, 2890, 3, 2, 2, 2, 2891, 2892, 3, 2, 2, 2, 2892, 2893, 3, 2, 2, 2, 2893, 2895, 7, 4, 2, 2, 2894, 2848, 3, 2, 2, 2, 2894, 2849, 3, 2, 2, 2, 2894, 2853, 3, 2, 2, 2, 2895, 245, 3, 2, 2, 2, 2896, 2897, 7, 181, 2, 2, 2897, 2913, 5, 248, 125, 2, 2898, 2899, 7, 201, 2, 2, 2899, 2913, 5, 248, 125, 2, 2900, 2901, 7, 181, 2, 2, 2901, 2902, 7, 27, 2, 2, 2902, 2903, 5, 248, 125, 2, 2903, 2904, 7, 18, 2, 2, 2904, 2905, 5, 248, 125, 2, 2905, 2913, 3, 2, 2, 2, 2906, 2907, 7, 201, 2, 2, 2907, 2908, 7, 27, 2, 2, 2908, 2909, 5, 248, 125, 2, 2909, 2910, 7, 18, 2, 2, 2910, 2911, 5, 248, 125, 2, 2911, 2913, 3, 2, 2, 2, 2912, 2896, 3, 2, 2, 2, 2912, 2898, 3, 2, 2, 2, 2912, 2900, 3, 2, 2, 2, 2912, 2906, 3, 2, 2, 2, 2913, 247, 3, 2, 2, 2, 2914, 2915, 7, 243, 2, 2, 2915, 2922, 9, 39, 2, 2, 2916, 2917, 7, 57, 2, 2, 2917, 2922, 7, 200, 2, 2, 2918, 2919, 5, 190, 96, 2, 2919, 2920, 9, 39, 2, 2, 2920, 2922, 3, 2, 2, 2, 2921, 2914, 3, 2, 2, 2, 2921, 2916, 3, 2, 2, 2, 2921, 2918, 3, 2, 2, 2, 2922, 249, 3, 2, 2, 2, 2923, 2928, 5, 254, 128, 2, 2924, 2925, 7, 5, 2, 2, 2925, 2927, 5, 254, 128, 2, 2926, 2924, 3, 2, 2, 2, 2927, 2930, 3, 2, 2, 2, 2928, 2926, 3, 2, 2, 2, 2928, 2929, 3, 2, 2, 2, 2929, 251, 3, 2, 2, 2, 2930, 2928, 3, 2, 2, 2, 2931, 2936, 5, 254, 128, 2, 2932, 2936, 7, 93, 2, 2, 2933, 2936, 7, 131, 2, 2, 2934, 2936, 7, 194, 2, 2, 2935, 2931, 3, 2, 2, 2, 2935, 2932, 3, 2, 2, 2, 2935, 2933, 3, 2, 2, 2, 2935, 2934, 3, 2, 2, 2, 2936, 253, 3, 2, 2, 2, 2937, 2942, 5, 260, 131, 2, 2938, 2939, 7, 6, 2, 2, 2939, 2941, 5, 260, 131, 2, 2940, 2938, 3, 2, 2, 2, 2941, 2944, 3, 2, 2, 2, 2942, 2940, 3, 2, 2, 2, 2942, 2943, 3, 2, 2, 2, 2943, 255, 3, 2, 2, 2, 2944, 2942, 3, 2, 2, 2, 2945, 2946, 5, 260, 131, 2, 2946, 2947, 5, 258, 130, 2, 2947, 257, 3, 2, 2, 2, 2948, 2949, 7, 271, 2, 2, 2949, 2951, 5, 260, 131, 2, 2950, 2948, 3, 2, 2, 2, 2951, 2952, 3, 2, 2, 2, 2952, 2950, 3, 2, 2, 2, 2952, 2953, 3, 2, 2, 2, 2953, 2956, 3, 2, 2, 2, 2954, 2956, 3, 2, 2, 2, 2955, 2950, 3, 2, 2, 2, 2955, 2954, 3, 2, 2, 2, 2956, 259, 3, 2, 2, 2, 2957, 2961, 5, 262, 132, 2, 2958, 2959, 6, 131, 18, 2, 2959, 2961, 5, 272, 137, 2, 2960, 2957, 3, 2, 2, 2, 2960, 2958, 3, 2, 2, 2, 2961, 261, 3, 2, 2, 2, 2962, 2969, 7, 291, 2, 2, 2963, 2969, 5, 264, 133, 2, 2964, 2965, 6, 132, 19, 2, 2965, 2969, 5, 270, 136, 2, 2966, 2967, 6, 132, 20, 2, 2967, 2969, 5, 274, 138, 2, 2968, 2962, 3, 2, 2, 2, 2968, 2963, 3, 2, 2, 2, 2968, 2964, 3, 2, 2, 2, 2968, 2966, 3, 2, 2, 2, 2969, 263, 3, 2, 2, 2, 2970, 2971, 7, 292, 2, 2, 2971, 265, 3, 2, 2, 2, 2972, 2974, 6, 134, 21, 2, 2973, 2975, 7, 271, 2, 2, 2974, 2973, 3, 2, 2, 2, 2974, 2975, 3, 2, 2, 2, 2975, 2976, 3, 2, 2, 2, 2976, 3016, 7, 286, 2, 2, 2977, 2979, 6, 134, 22, 2, 2978, 2980, 7, 271, 2, 2, 2979, 2978, 3, 2, 2, 2, 2979, 2980, 3, 2, 2, 2, 2980, 2981, 3, 2, 2, 2, 2981, 3016, 7, 287, 2, 2, 2982, 2984, 6, 134, 23, 2, 2983, 2985, 7, 271, 2, 2, 2984, 2983, 3, 2, 2, 2, 2984, 2985, 3, 2, 2, 2, 2985, 2986, 3, 2, 2, 2, 2986, 3016, 9, 40, 2, 2, 2987, 2989, 7, 271, 2, 2, 2988, 2987, 3, 2, 2, 2, 2988, 2989, 3, 2, 2, 2, 2989, 2990, 3, 2, 2, 2, 2990, 3016, 7, 285, 2, 2, 2991, 2993, 7, 271, 2, 2, 2992, 2991, 3, 2, 2, 2, 2992, 2993, 3, 2, 2, 2, 2993, 2994, 3, 2, 2, 2, 2994, 3016, 7, 282, 2, 2, 2995, 2997, 7, 271, 2, 2, 2996, 2995, 3, 2, 2, 2, 2996, 2997, 3, 2, 2, 2, 2997, 2998, 3, 2, 2, 2, 2998, 3016, 7, 283, 2, 2, 2999, 3001, 7, 271, 2, 2, 3000, 2999, 3, 2, 2, 2, 3000, 3001, 3, 2, 2, 2, 3001, 3002, 3, 2, 2, 2, 3002, 3016, 7, 284, 2, 2, 3003, 3005, 7, 271, 2, 2, 3004, 3003, 3, 2, 2, 2, 3004, 3005, 3, 2, 2, 2, 3005, 3006, 3, 2, 2, 2, 3006, 3016, 7, 289, 2, 2, 3007, 3009, 7, 271, 2, 2, 3008, 3007, 3, 2, 2, 2, 3008, 3009, 3, 2, 2, 2, 3009, 3010, 3, 2, 2, 2, 3010, 3016, 7, 288, 2, 2, 3011, 3013, 7, 271, 2, 2, 3012, 3011, 3, 2, 2, 2, 3012, 3013, 3, 2, 2, 2, 3013, 3014, 3, 2, 2, 2, 3014, 3016, 7, 290, 2, 2, 3015, 2972, 3, 2, 2, 2, 3015, 2977, 3, 2, 2, 2, 3015, 2982, 3, 2, 2, 2, 3015, 2988, 3, 2, 2, 2, 3015, 2992, 3, 2, 2, 2, 3015, 2996, 3, 2, 2, 2, 3015, 3000, 3, 2, 2, 2, 3015, 3004, 3, 2, 2, 2, 3015, 3008, 3, 2, 2, 2, 3015, 3012, 3, 2, 2, 2, 3016, 267, 3, 2, 2, 2, 3017, 3018, 7, 241, 2, 2, 3018, 3025, 5, 224, 113, 2, 3019, 3025, 5, 34, 18, 2, 3020, 3025, 5, 222, 112, 2, 3021, 3022, 9, 41, 2, 2, 3022, 3023, 7, 151, 2, 2, 3023, 3025, 7, 152, 2, 2, 3024, 3017, 3, 2, 2, 2, 3024, 3019, 3, 2, 2, 2, 3024, 3020, 3, 2, 2, 2, 3024, 3021, 3, 2, 2, 2, 3025, 269, 3, 2, 2, 2, 3026, 3027, 9, 42, 2, 2, 3027, 271, 3, 2, 2, 2, 3028, 3029, 9, 43, 2, 2, 3029, 273, 3, 2, 2, 2, 3030, 3031, 9, 44, 2, 2, 3031, 275, 3, 2, 2, 2, 397, 281, 284, 286, 308, 313, 321, 329, 331, 351, 355, 361, 364, 367, 374, 379, 382, 389, 401, 410, 412, 416, 419, 426, 437, 439, 447, 452, 455, 461, 472, 536, 545, 549, 555, 559, 564, 570, 582, 590, 596, 609, 614, 630, 637, 641, 647, 662, 666, 672, 678, 681, 684, 690, 694, 702, 704, 713, 716, 725, 730, 736, 743, 746, 752, 763, 766, 770, 775, 780, 787, 790, 793, 800, 805, 814, 822, 828, 831, 834, 840, 844, 848, 852, 854, 862, 870, 876, 882, 885, 889, 892, 896, 924, 927, 931, 937, 940, 943, 949, 957, 962, 968, 974, 986, 989, 996, 1013, 1022, 1025, 1031, 1040, 1047, 1050, 1060, 1064, 1071, 1187, 1195, 1203, 1212, 1222, 1226, 1229, 1235, 1241, 1253, 1265, 1270, 1279, 1287, 1294, 1296, 1301, 1305, 1310, 1315, 1320, 1323, 1328, 1332, 1337, 1339, 1343, 1352, 1360, 1369, 1376, 1385, 1390, 1393, 1412, 1414, 1423, 1430, 1433, 1440, 1444, 1450, 1458, 1469, 1480, 1487, 1493, 1506, 1513, 1520, 1532, 1540, 1546, 1549, 1558, 1561, 1570, 1573, 1582, 1585, 1594, 1597, 1600, 1605, 1607, 1619, 1626, 1633, 1636, 1638, 1650, 1654, 1658, 1664, 1668, 1676, 1680, 1683, 1686, 1689, 1693, 1697, 1700, 1704, 1709, 1713, 1716, 1719, 1722, 1724, 1736, 1739, 1743, 1753, 1757, 1759, 1762, 1766, 1772, 1776, 1787, 1797, 1809, 1824, 1829, 1836, 1852, 1857, 1870, 1875, 1883, 1889, 1893, 1902, 1917, 1922, 1934, 1939, 1947, 1950, 1954, 1968, 1981, 1986, 1990, 1993, 1998, 2007, 2010, 2015, 2022, 2025, 2033, 2040, 2047, 2050, 2055, 2058, 2063, 2067, 2070, 2073, 2079, 2084, 2089, 2107, 2109, 2112, 2123, 2132, 2139, 2147, 2154, 2158, 2166, 2174, 2180, 2188, 2200, 2203, 2209, 2213, 2215, 2224, 2236, 2238, 2245, 2252, 2258, 2264, 2266, 2273, 2281, 2287, 2293, 2297, 2299, 2306, 2315, 2328, 2333, 2337, 2351, 2353, 2361, 2363, 2367, 2375, 2384, 2390, 2398, 2403, 2415, 2420, 2423, 2429, 2433, 2438, 2443, 2448, 2454, 2475, 2477, 2486, 2490, 2499, 2503, 2521, 2524, 2532, 2541, 2564, 2575, 2582, 2585, 2594, 2598, 2610, 2635, 2642, 2645, 2660, 2664, 2674, 2676, 2689, 2691, 2704, 2708, 2715, 2720, 2728, 2732, 2737, 2754, 2758, 2767, 2771, 2773, 2780, 2787, 2790, 2793, 2800, 2807, 2810, 2817, 2825, 2828, 2841, 2861, 2871, 2874, 2883, 2886, 2888, 2891, 2894, 2912, 2921, 2928, 2935, 2942, 2952, 2955, 2960, 2968, 2974, 2979, 2984, 2988, 2992, 2996, 3000, 3004, 3008, 3012, 3015, 3024] \ No newline at end of file diff --git a/src/lib/spark/SparkSql.tokens b/src/lib/spark/SparkSql.tokens deleted file mode 100644 index 6b07647c..00000000 --- a/src/lib/spark/SparkSql.tokens +++ /dev/null @@ -1,566 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -ADD=11 -AFTER=12 -ALL=13 -ALTER=14 -ANALYZE=15 -AND=16 -ANTI=17 -ANY=18 -ARCHIVE=19 -ARRAY=20 -AS=21 -ASC=22 -AT=23 -AUTHORIZATION=24 -BETWEEN=25 -BOTH=26 -BUCKET=27 -BUCKETS=28 -BY=29 -CACHE=30 -CASCADE=31 -CASE=32 -CAST=33 -CHANGE=34 -CHECK=35 -CLEAR=36 -CLUSTER=37 -CLUSTERED=38 -CODEGEN=39 -COLLATE=40 -COLLECTION=41 -COLUMN=42 -COLUMNS=43 -COMMENT=44 -COMMIT=45 -COMPACT=46 -COMPACTIONS=47 -COMPUTE=48 -CONCATENATE=49 -CONSTRAINT=50 -COST=51 -CREATE=52 -CROSS=53 -CUBE=54 -CURRENT=55 -CURRENT_DATE=56 -CURRENT_TIME=57 -CURRENT_TIMESTAMP=58 -CURRENT_USER=59 -DATA=60 -DATABASE=61 -DATABASES=62 -DBPROPERTIES=63 -DEFINED=64 -DELETE=65 -DELIMITED=66 -DESC=67 -DESCRIBE=68 -DFS=69 -DIRECTORIES=70 -DIRECTORY=71 -DISTINCT=72 -DISTRIBUTE=73 -DIV=74 -DROP=75 -ELSE=76 -END=77 -ESCAPE=78 -ESCAPED=79 -EXCEPT=80 -EXCHANGE=81 -EXISTS=82 -EXPLAIN=83 -EXPORT=84 -EXTENDED=85 -EXTERNAL=86 -EXTRACT=87 -FALSE=88 -FETCH=89 -FIELDS=90 -FILTER=91 -FILEFORMAT=92 -FIRST=93 -FOLLOWING=94 -FOR=95 -FOREIGN=96 -FORMAT=97 -FORMATTED=98 -FROM=99 -FULL=100 -FUNCTION=101 -FUNCTIONS=102 -GLOBAL=103 -GRANT=104 -GROUP=105 -GROUPING=106 -HAVING=107 -IF=108 -IGNORE=109 -IMPORT=110 -IN=111 -INDEX=112 -INDEXES=113 -INNER=114 -INPATH=115 -INPUTFORMAT=116 -INSERT=117 -INTERSECT=118 -INTERVAL=119 -INTO=120 -IS=121 -ITEMS=122 -JOIN=123 -KEYS=124 -LAST=125 -LATERAL=126 -LAZY=127 -LEADING=128 -LEFT=129 -LIKE=130 -LIMIT=131 -LINES=132 -LIST=133 -LOAD=134 -LOCAL=135 -LOCATION=136 -LOCK=137 -LOCKS=138 -LOGICAL=139 -MACRO=140 -MAP=141 -MATCHED=142 -MERGE=143 -MSCK=144 -NAMESPACE=145 -NAMESPACES=146 -NATURAL=147 -NO=148 -NOT=149 -NULL=150 -NULLS=151 -OF=152 -ON=153 -ONLY=154 -OPTION=155 -OPTIONS=156 -OR=157 -ORDER=158 -OUT=159 -OUTER=160 -OUTPUTFORMAT=161 -OVER=162 -OVERLAPS=163 -OVERLAY=164 -OVERWRITE=165 -PARTITION=166 -PARTITIONED=167 -PARTITIONS=168 -PERCENTLIT=169 -PIVOT=170 -PLACING=171 -POSITION=172 -PRECEDING=173 -PRIMARY=174 -PRINCIPALS=175 -PROPERTIES=176 -PURGE=177 -QUERY=178 -RANGE=179 -RECORDREADER=180 -RECORDWRITER=181 -RECOVER=182 -REDUCE=183 -REFERENCES=184 -REFRESH=185 -RENAME=186 -REPAIR=187 -REPLACE=188 -RESET=189 -RESTRICT=190 -REVOKE=191 -RIGHT=192 -RLIKE=193 -ROLE=194 -ROLES=195 -ROLLBACK=196 -ROLLUP=197 -ROW=198 -ROWS=199 -SCHEMA=200 -SELECT=201 -SEMI=202 -SEPARATED=203 -SERDE=204 -SERDEPROPERTIES=205 -SESSION_USER=206 -SET=207 -SETMINUS=208 -SETS=209 -SHOW=210 -SKEWED=211 -SOME=212 -SORT=213 -SORTED=214 -START=215 -STATISTICS=216 -STORED=217 -STRATIFY=218 -STRUCT=219 -SUBSTR=220 -SUBSTRING=221 -TABLE=222 -TABLES=223 -TABLESAMPLE=224 -TBLPROPERTIES=225 -TEMPORARY=226 -TERMINATED=227 -THEN=228 -TIME=229 -TO=230 -TOUCH=231 -TRAILING=232 -TRANSACTION=233 -TRANSACTIONS=234 -TRANSFORM=235 -TRIM=236 -TRUE=237 -TRUNCATE=238 -TYPE=239 -UNARCHIVE=240 -UNBOUNDED=241 -UNCACHE=242 -UNION=243 -UNIQUE=244 -UNKNOWN=245 -UNLOCK=246 -UNSET=247 -UPDATE=248 -USE=249 -USER=250 -USING=251 -VALUES=252 -VIEW=253 -VIEWS=254 -WHEN=255 -WHERE=256 -WINDOW=257 -WITH=258 -ZONE=259 -EQ=260 -NSEQ=261 -NEQ=262 -NEQJ=263 -LT=264 -LTE=265 -GT=266 -GTE=267 -PLUS=268 -MINUS=269 -ASTERISK=270 -SLASH=271 -PERCENT=272 -TILDE=273 -AMPERSAND=274 -PIPE=275 -CONCAT_PIPE=276 -HAT=277 -SEMICOLON=278 -STRING=279 -BIGINT_LITERAL=280 -SMALLINT_LITERAL=281 -TINYINT_LITERAL=282 -INTEGER_VALUE=283 -EXPONENT_VALUE=284 -DECIMAL_VALUE=285 -FLOAT_LITERAL=286 -DOUBLE_LITERAL=287 -BIGDECIMAL_LITERAL=288 -IDENTIFIER=289 -BACKQUOTED_IDENTIFIER=290 -CUSTOM_VARS=291 -SIMPLE_COMMENT=292 -BRACKETED_COMMENT=293 -WS=294 -UNRECOGNIZED=295 -'('=1 -')'=2 -','=3 -'.'=4 -'/*+'=5 -'*/'=6 -'->'=7 -'['=8 -']'=9 -':'=10 -'ADD'=11 -'AFTER'=12 -'ALL'=13 -'ALTER'=14 -'ANALYZE'=15 -'AND'=16 -'ANTI'=17 -'ANY'=18 -'ARCHIVE'=19 -'ARRAY'=20 -'AS'=21 -'ASC'=22 -'AT'=23 -'AUTHORIZATION'=24 -'BETWEEN'=25 -'BOTH'=26 -'BUCKET'=27 -'BUCKETS'=28 -'BY'=29 -'CACHE'=30 -'CASCADE'=31 -'CASE'=32 -'CAST'=33 -'CHANGE'=34 -'CHECK'=35 -'CLEAR'=36 -'CLUSTER'=37 -'CLUSTERED'=38 -'CODEGEN'=39 -'COLLATE'=40 -'COLLECTION'=41 -'COLUMN'=42 -'COLUMNS'=43 -'COMMENT'=44 -'COMMIT'=45 -'COMPACT'=46 -'COMPACTIONS'=47 -'COMPUTE'=48 -'CONCATENATE'=49 -'CONSTRAINT'=50 -'COST'=51 -'CREATE'=52 -'CROSS'=53 -'CUBE'=54 -'CURRENT'=55 -'CURRENT_DATE'=56 -'CURRENT_TIME'=57 -'CURRENT_TIMESTAMP'=58 -'CURRENT_USER'=59 -'DATA'=60 -'DATABASE'=61 -'DBPROPERTIES'=63 -'DEFINED'=64 -'DELETE'=65 -'DELIMITED'=66 -'DESC'=67 -'DESCRIBE'=68 -'DFS'=69 -'DIRECTORIES'=70 -'DIRECTORY'=71 -'DISTINCT'=72 -'DISTRIBUTE'=73 -'DIV'=74 -'DROP'=75 -'ELSE'=76 -'END'=77 -'ESCAPE'=78 -'ESCAPED'=79 -'EXCEPT'=80 -'EXCHANGE'=81 -'EXISTS'=82 -'EXPLAIN'=83 -'EXPORT'=84 -'EXTENDED'=85 -'EXTERNAL'=86 -'EXTRACT'=87 -'FALSE'=88 -'FETCH'=89 -'FIELDS'=90 -'FILTER'=91 -'FILEFORMAT'=92 -'FIRST'=93 -'FOLLOWING'=94 -'FOR'=95 -'FOREIGN'=96 -'FORMAT'=97 -'FORMATTED'=98 -'FROM'=99 -'FULL'=100 -'FUNCTION'=101 -'FUNCTIONS'=102 -'GLOBAL'=103 -'GRANT'=104 -'GROUP'=105 -'GROUPING'=106 -'HAVING'=107 -'IF'=108 -'IGNORE'=109 -'IMPORT'=110 -'IN'=111 -'INDEX'=112 -'INDEXES'=113 -'INNER'=114 -'INPATH'=115 -'INPUTFORMAT'=116 -'INSERT'=117 -'INTERSECT'=118 -'INTERVAL'=119 -'INTO'=120 -'IS'=121 -'ITEMS'=122 -'JOIN'=123 -'KEYS'=124 -'LAST'=125 -'LATERAL'=126 -'LAZY'=127 -'LEADING'=128 -'LEFT'=129 -'LIKE'=130 -'LIMIT'=131 -'LINES'=132 -'LIST'=133 -'LOAD'=134 -'LOCAL'=135 -'LOCATION'=136 -'LOCK'=137 -'LOCKS'=138 -'LOGICAL'=139 -'MACRO'=140 -'MAP'=141 -'MATCHED'=142 -'MERGE'=143 -'MSCK'=144 -'NAMESPACE'=145 -'NAMESPACES'=146 -'NATURAL'=147 -'NO'=148 -'NULL'=150 -'NULLS'=151 -'OF'=152 -'ON'=153 -'ONLY'=154 -'OPTION'=155 -'OPTIONS'=156 -'OR'=157 -'ORDER'=158 -'OUT'=159 -'OUTER'=160 -'OUTPUTFORMAT'=161 -'OVER'=162 -'OVERLAPS'=163 -'OVERLAY'=164 -'OVERWRITE'=165 -'PARTITION'=166 -'PARTITIONED'=167 -'PARTITIONS'=168 -'PERCENT'=169 -'PIVOT'=170 -'PLACING'=171 -'POSITION'=172 -'PRECEDING'=173 -'PRIMARY'=174 -'PRINCIPALS'=175 -'PROPERTIES'=176 -'PURGE'=177 -'QUERY'=178 -'RANGE'=179 -'RECORDREADER'=180 -'RECORDWRITER'=181 -'RECOVER'=182 -'REDUCE'=183 -'REFERENCES'=184 -'REFRESH'=185 -'RENAME'=186 -'REPAIR'=187 -'REPLACE'=188 -'RESET'=189 -'RESTRICT'=190 -'REVOKE'=191 -'RIGHT'=192 -'ROLE'=194 -'ROLES'=195 -'ROLLBACK'=196 -'ROLLUP'=197 -'ROW'=198 -'ROWS'=199 -'SCHEMA'=200 -'SELECT'=201 -'SEMI'=202 -'SEPARATED'=203 -'SERDE'=204 -'SERDEPROPERTIES'=205 -'SESSION_USER'=206 -'SET'=207 -'MINUS'=208 -'SETS'=209 -'SHOW'=210 -'SKEWED'=211 -'SOME'=212 -'SORT'=213 -'SORTED'=214 -'START'=215 -'STATISTICS'=216 -'STORED'=217 -'STRATIFY'=218 -'STRUCT'=219 -'SUBSTR'=220 -'SUBSTRING'=221 -'TABLE'=222 -'TABLES'=223 -'TABLESAMPLE'=224 -'TBLPROPERTIES'=225 -'TERMINATED'=227 -'THEN'=228 -'TIME'=229 -'TO'=230 -'TOUCH'=231 -'TRAILING'=232 -'TRANSACTION'=233 -'TRANSACTIONS'=234 -'TRANSFORM'=235 -'TRIM'=236 -'TRUE'=237 -'TRUNCATE'=238 -'TYPE'=239 -'UNARCHIVE'=240 -'UNBOUNDED'=241 -'UNCACHE'=242 -'UNION'=243 -'UNIQUE'=244 -'UNKNOWN'=245 -'UNLOCK'=246 -'UNSET'=247 -'UPDATE'=248 -'USE'=249 -'USER'=250 -'USING'=251 -'VALUES'=252 -'VIEW'=253 -'VIEWS'=254 -'WHEN'=255 -'WHERE'=256 -'WINDOW'=257 -'WITH'=258 -'ZONE'=259 -'<=>'=261 -'<>'=262 -'!='=263 -'<'=264 -'>'=266 -'+'=268 -'-'=269 -'*'=270 -'/'=271 -'%'=272 -'~'=273 -'&'=274 -'|'=275 -'||'=276 -'^'=277 -';'=278 diff --git a/src/lib/spark/SparkSqlLexer.interp b/src/lib/spark/SparkSqlLexer.interp index bb9152f0..aa80b4e6 100644 --- a/src/lib/spark/SparkSqlLexer.interp +++ b/src/lib/spark/SparkSqlLexer.interp @@ -1,23 +1,22 @@ token literal names: null +';' '(' ')' ',' '.' -'/*+' -'*/' -'->' '[' ']' -':' 'ADD' 'AFTER' 'ALL' 'ALTER' +'ALWAYS' 'ANALYZE' 'AND' 'ANTI' 'ANY' +'ANY_VALUE' 'ARCHIVE' 'ARRAY' 'AS' @@ -25,15 +24,23 @@ null 'AT' 'AUTHORIZATION' 'BETWEEN' +'BIGINT' +'BINARY' +'BOOLEAN' 'BOTH' 'BUCKET' 'BUCKETS' 'BY' +'BYTE' 'CACHE' 'CASCADE' 'CASE' 'CAST' +'CATALOG' +'CATALOGS' 'CHANGE' +'CHAR' +'CHARACTER' 'CHECK' 'CLEAR' 'CLUSTER' @@ -59,10 +66,22 @@ null 'CURRENT_TIME' 'CURRENT_TIMESTAMP' 'CURRENT_USER' +'DAY' +'DAYS' +'DAYOFYEAR' 'DATA' +'DATE' 'DATABASE' -null +'DATABASES' +'DATEADD' +'DATE_ADD' +'DATEDIFF' +'DATE_DIFF' 'DBPROPERTIES' +'DEC' +'DECIMAL' +'DECLARE' +'DEFAULT' 'DEFINED' 'DELETE' 'DELIMITED' @@ -74,6 +93,7 @@ null 'DISTINCT' 'DISTRIBUTE' 'DIV' +'DOUBLE' 'DROP' 'ELSE' 'END' @@ -81,6 +101,7 @@ null 'ESCAPED' 'EXCEPT' 'EXCHANGE' +'EXCLUDE' 'EXISTS' 'EXPLAIN' 'EXPORT' @@ -93,6 +114,7 @@ null 'FILTER' 'FILEFORMAT' 'FIRST' +'FLOAT' 'FOLLOWING' 'FOR' 'FOREIGN' @@ -102,15 +124,21 @@ null 'FULL' 'FUNCTION' 'FUNCTIONS' +'GENERATED' 'GLOBAL' 'GRANT' 'GROUP' 'GROUPING' 'HAVING' +'X' +'HOUR' +'HOURS' +'IDENTIFIER' 'IF' 'IGNORE' 'IMPORT' 'IN' +'INCLUDE' 'INDEX' 'INDEXES' 'INNER' @@ -119,6 +147,8 @@ null 'INSERT' 'INTERSECT' 'INTERVAL' +'INT' +'INTEGER' 'INTO' 'IS' 'ITEMS' @@ -130,6 +160,7 @@ null 'LEADING' 'LEFT' 'LIKE' +'ILIKE' 'LIMIT' 'LINES' 'LIST' @@ -139,19 +170,33 @@ null 'LOCK' 'LOCKS' 'LOGICAL' +'LONG' 'MACRO' 'MAP' 'MATCHED' 'MERGE' +'MICROSECOND' +'MICROSECONDS' +'MILLISECOND' +'MILLISECONDS' +'MINUTE' +'MINUTES' +'MONTH' +'MONTHS' 'MSCK' +'NAME' 'NAMESPACE' 'NAMESPACES' +'NANOSECOND' +'NANOSECONDS' 'NATURAL' 'NO' null 'NULL' 'NULLS' +'NUMERIC' 'OF' +'OFFSET' 'ON' 'ONLY' 'OPTION' @@ -168,6 +213,8 @@ null 'PARTITION' 'PARTITIONED' 'PARTITIONS' +'PERCENTILE_CONT' +'PERCENTILE_DISC' 'PERCENT' 'PIVOT' 'PLACING' @@ -177,8 +224,10 @@ null 'PRINCIPALS' 'PROPERTIES' 'PURGE' +'QUARTER' 'QUERY' 'RANGE' +'REAL' 'RECORDREADER' 'RECORDWRITER' 'RECOVER' @@ -187,8 +236,10 @@ null 'REFRESH' 'RENAME' 'REPAIR' +'REPEATABLE' 'REPLACE' 'RESET' +'RESPECT' 'RESTRICT' 'REVOKE' 'RIGHT' @@ -199,7 +250,10 @@ null 'ROLLUP' 'ROW' 'ROWS' +'SECOND' +'SECONDS' 'SCHEMA' +'SCHEMAS' 'SELECT' 'SEMI' 'SEPARATED' @@ -209,26 +263,42 @@ null 'SET' 'MINUS' 'SETS' +'SHORT' 'SHOW' +'SINGLE' 'SKEWED' +'SMALLINT' 'SOME' 'SORT' 'SORTED' +'SOURCE' 'START' 'STATISTICS' 'STORED' 'STRATIFY' +'STRING' 'STRUCT' 'SUBSTR' 'SUBSTRING' +'SYNC' +'SYSTEM_TIME' +'SYSTEM_VERSION' 'TABLE' 'TABLES' 'TABLESAMPLE' +'TARGET' 'TBLPROPERTIES' null 'TERMINATED' 'THEN' 'TIME' +'TIMEDIFF' +'TIMESTAMP' +'TIMESTAMP_LTZ' +'TIMESTAMP_NTZ' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TINYINT' 'TO' 'TOUCH' 'TRAILING' @@ -238,6 +308,7 @@ null 'TRIM' 'TRUE' 'TRUNCATE' +'TRY_CAST' 'TYPE' 'UNARCHIVE' 'UNBOUNDED' @@ -246,18 +317,29 @@ null 'UNIQUE' 'UNKNOWN' 'UNLOCK' +'UNPIVOT' 'UNSET' 'UPDATE' 'USE' 'USER' 'USING' 'VALUES' +'VARCHAR' +'VAR' +'VARIABLE' +'VERSION' 'VIEW' 'VIEWS' +'VOID' +'WEEK' +'WEEKS' 'WHEN' 'WHERE' 'WINDOW' 'WITH' +'WITHIN' +'YEAR' +'YEARS' 'ZONE' null '<=>' @@ -277,7 +359,12 @@ null '|' '||' '^' -';' +':' +'->' +'=>' +'/*+' +'*/' +'?' null null null @@ -298,265 +385,347 @@ null token symbolic names: null -null -null -null -null -null -null -null -null -null -null -ADD -AFTER -ALL -ALTER -ANALYZE -AND -ANTI -ANY -ARCHIVE -ARRAY -AS -ASC -AT -AUTHORIZATION -BETWEEN -BOTH -BUCKET -BUCKETS -BY -CACHE -CASCADE -CASE -CAST -CHANGE -CHECK -CLEAR -CLUSTER -CLUSTERED -CODEGEN -COLLATE -COLLECTION -COLUMN -COLUMNS -COMMENT -COMMIT -COMPACT -COMPACTIONS -COMPUTE -CONCATENATE -CONSTRAINT -COST -CREATE -CROSS -CUBE -CURRENT -CURRENT_DATE -CURRENT_TIME -CURRENT_TIMESTAMP -CURRENT_USER -DATA -DATABASE -DATABASES -DBPROPERTIES -DEFINED -DELETE -DELIMITED -DESC -DESCRIBE -DFS -DIRECTORIES -DIRECTORY -DISTINCT -DISTRIBUTE -DIV -DROP -ELSE -END -ESCAPE -ESCAPED -EXCEPT -EXCHANGE -EXISTS -EXPLAIN -EXPORT -EXTENDED -EXTERNAL -EXTRACT -FALSE -FETCH -FIELDS -FILTER -FILEFORMAT -FIRST -FOLLOWING -FOR -FOREIGN -FORMAT -FORMATTED -FROM -FULL -FUNCTION -FUNCTIONS -GLOBAL -GRANT -GROUP -GROUPING -HAVING -IF -IGNORE -IMPORT -IN -INDEX -INDEXES -INNER -INPATH -INPUTFORMAT -INSERT -INTERSECT -INTERVAL -INTO -IS -ITEMS -JOIN -KEYS -LAST -LATERAL -LAZY -LEADING -LEFT -LIKE -LIMIT -LINES -LIST -LOAD -LOCAL -LOCATION -LOCK -LOCKS -LOGICAL -MACRO -MAP -MATCHED -MERGE -MSCK -NAMESPACE -NAMESPACES -NATURAL -NO -NOT -NULL -NULLS -OF -ON -ONLY -OPTION -OPTIONS -OR -ORDER -OUT -OUTER -OUTPUTFORMAT -OVER -OVERLAPS -OVERLAY -OVERWRITE -PARTITION -PARTITIONED -PARTITIONS -PERCENTLIT -PIVOT -PLACING -POSITION -PRECEDING -PRIMARY -PRINCIPALS -PROPERTIES -PURGE -QUERY -RANGE -RECORDREADER -RECORDWRITER -RECOVER -REDUCE -REFERENCES -REFRESH -RENAME -REPAIR -REPLACE -RESET -RESTRICT -REVOKE -RIGHT -RLIKE -ROLE -ROLES -ROLLBACK -ROLLUP -ROW -ROWS -SCHEMA -SELECT -SEMI -SEPARATED -SERDE -SERDEPROPERTIES -SESSION_USER -SET -SETMINUS -SETS -SHOW -SKEWED -SOME -SORT -SORTED -START -STATISTICS -STORED -STRATIFY -STRUCT -SUBSTR -SUBSTRING -TABLE -TABLES -TABLESAMPLE -TBLPROPERTIES -TEMPORARY -TERMINATED -THEN -TIME -TO -TOUCH -TRAILING -TRANSACTION -TRANSACTIONS -TRANSFORM -TRIM -TRUE -TRUNCATE -TYPE -UNARCHIVE -UNBOUNDED -UNCACHE -UNION -UNIQUE -UNKNOWN -UNLOCK -UNSET -UPDATE -USE -USER -USING -VALUES -VIEW -VIEWS -WHEN -WHERE -WINDOW -WITH -ZONE +SEMICOLON +LEFT_PAREN +RIGHT_PAREN +COMMA +DOT +LEFT_BRACKET +RIGHT_BRACKET +KW_ADD +KW_AFTER +KW_ALL +KW_ALTER +KW_ALWAYS +KW_ANALYZE +KW_AND +KW_ANTI +KW_ANY +KW_ANY_VALUE +KW_ARCHIVE +KW_ARRAY +KW_AS +KW_ASC +KW_AT +KW_AUTHORIZATION +KW_BETWEEN +KW_BIGINT +KW_BINARY +KW_BOOLEAN +KW_BOTH +KW_BUCKET +KW_BUCKETS +KW_BY +KW_BYTE +KW_CACHE +KW_CASCADE +KW_CASE +KW_CAST +KW_CATALOG +KW_CATALOGS +KW_CHANGE +KW_CHAR +KW_CHARACTER +KW_CHECK +KW_CLEAR +KW_CLUSTER +KW_CLUSTERED +KW_CODEGEN +KW_COLLATE +KW_COLLECTION +KW_COLUMN +KW_COLUMNS +KW_COMMENT +KW_COMMIT +KW_COMPACT +KW_COMPACTIONS +KW_COMPUTE +KW_CONCATENATE +KW_CONSTRAINT +KW_COST +KW_CREATE +KW_CROSS +KW_CUBE +KW_CURRENT +KW_CURRENT_DATE +KW_CURRENT_TIME +KW_CURRENT_TIMESTAMP +KW_CURRENT_USER +KW_DAY +KW_DAYS +KW_DAYOFYEAR +KW_DATA +KW_DATE +KW_DATABASE +KW_DATABASES +KW_DATEADD +KW_DATE_ADD +KW_DATEDIFF +KW_DATE_DIFF +KW_DBPROPERTIES +KW_DEC +KW_DECIMAL +KW_DECLARE +KW_DEFAULT +KW_DEFINED +KW_DELETE +KW_DELIMITED +KW_DESC +KW_DESCRIBE +KW_DFS +KW_DIRECTORIES +KW_DIRECTORY +KW_DISTINCT +KW_DISTRIBUTE +KW_DIV +KW_DOUBLE +KW_DROP +KW_ELSE +KW_END +KW_ESCAPE +KW_ESCAPED +KW_EXCEPT +KW_EXCHANGE +KW_EXCLUDE +KW_EXISTS +KW_EXPLAIN +KW_EXPORT +KW_EXTENDED +KW_EXTERNAL +KW_EXTRACT +KW_FALSE +KW_FETCH +KW_FIELDS +KW_FILTER +KW_FILEFORMAT +KW_FIRST +KW_FLOAT +KW_FOLLOWING +KW_FOR +KW_FOREIGN +KW_FORMAT +KW_FORMATTED +KW_FROM +KW_FULL +KW_FUNCTION +KW_FUNCTIONS +KW_GENERATED +KW_GLOBAL +KW_GRANT +KW_GROUP +KW_GROUPING +KW_HAVING +KW_BINARY_HEX +KW_HOUR +KW_HOURS +KW_IDENTIFIER_KW +KW_IF +KW_IGNORE +KW_IMPORT +KW_IN +KW_INCLUDE +KW_INDEX +KW_INDEXES +KW_INNER +KW_INPATH +KW_INPUTFORMAT +KW_INSERT +KW_INTERSECT +KW_INTERVAL +KW_INT +KW_INTEGER +KW_INTO +KW_IS +KW_ITEMS +KW_JOIN +KW_KEYS +KW_LAST +KW_LATERAL +KW_LAZY +KW_LEADING +KW_LEFT +KW_LIKE +KW_ILIKE +KW_LIMIT +KW_LINES +KW_LIST +KW_LOAD +KW_LOCAL +KW_LOCATION +KW_LOCK +KW_LOCKS +KW_LOGICAL +KW_LONG +KW_MACRO +KW_MAP +KW_MATCHED +KW_MERGE +KW_MICROSECOND +KW_MICROSECONDS +KW_MILLISECOND +KW_MILLISECONDS +KW_MINUTE +KW_MINUTES +KW_MONTH +KW_MONTHS +KW_MSCK +KW_NAME +KW_NAMESPACE +KW_NAMESPACES +KW_NANOSECOND +KW_NANOSECONDS +KW_NATURAL +KW_NO +KW_NOT +KW_NULL +KW_NULLS +KW_NUMERIC +KW_OF +KW_OFFSET +KW_ON +KW_ONLY +KW_OPTION +KW_OPTIONS +KW_OR +KW_ORDER +KW_OUT +KW_OUTER +KW_OUTPUTFORMAT +KW_OVER +KW_OVERLAPS +KW_OVERLAY +KW_OVERWRITE +KW_PARTITION +KW_PARTITIONED +KW_PARTITIONS +KW_PERCENTILE_CONT +KW_PERCENTILE_DISC +KW_PERCENTLIT +KW_PIVOT +KW_PLACING +KW_POSITION +KW_PRECEDING +KW_PRIMARY +KW_PRINCIPALS +KW_PROPERTIES +KW_PURGE +KW_QUARTER +KW_QUERY +KW_RANGE +KW_REAL +KW_RECORDREADER +KW_RECORDWRITER +KW_RECOVER +KW_REDUCE +KW_REFERENCES +KW_REFRESH +KW_RENAME +KW_REPAIR +KW_REPEATABLE +KW_REPLACE +KW_RESET +KW_RESPECT +KW_RESTRICT +KW_REVOKE +KW_RIGHT +KW_RLIKE +KW_ROLE +KW_ROLES +KW_ROLLBACK +KW_ROLLUP +KW_ROW +KW_ROWS +KW_SECOND +KW_SECONDS +KW_SCHEMA +KW_SCHEMAS +KW_SELECT +KW_SEMI +KW_SEPARATED +KW_SERDE +KW_SERDEPROPERTIES +KW_SESSION_USER +KW_SET +KW_SETMINUS +KW_SETS +KW_SHORT +KW_SHOW +KW_SINGLE +KW_SKEWED +KW_SMALLINT +KW_SOME +KW_SORT +KW_SORTED +KW_SOURCE +KW_START +KW_STATISTICS +KW_STORED +KW_STRATIFY +KW_STRING +KW_STRUCT +KW_SUBSTR +KW_SUBSTRING +KW_SYNC +KW_SYSTEM_TIME +KW_SYSTEM_VERSION +KW_TABLE +KW_TABLES +KW_TABLESAMPLE +KW_TARGET +KW_TBLPROPERTIES +KW_TEMPORARY +KW_TERMINATED +KW_THEN +KW_TIME +KW_TIMEDIFF +KW_TIMESTAMP +KW_TIMESTAMP_LTZ +KW_TIMESTAMP_NTZ +KW_TIMESTAMPADD +KW_TIMESTAMPDIFF +KW_TINYINT +KW_TO +KW_TOUCH +KW_TRAILING +KW_TRANSACTION +KW_TRANSACTIONS +KW_TRANSFORM +KW_TRIM +KW_TRUE +KW_TRUNCATE +KW_TRY_CAST +KW_TYPE +KW_UNARCHIVE +KW_UNBOUNDED +KW_UNCACHE +KW_UNION +KW_UNIQUE +KW_UNKNOWN +KW_UNLOCK +KW_UNPIVOT +KW_UNSET +KW_UPDATE +KW_USE +KW_USER +KW_USING +KW_VALUES +KW_VARCHAR +KW_VAR +KW_VARIABLE +KW_VERSION +KW_VIEW +KW_VIEWS +KW_VOID +KW_WEEK +KW_WEEKS +KW_WHEN +KW_WHERE +KW_WINDOW +KW_WITH +KW_WITHIN +KW_YEAR +KW_YEARS +KW_ZONE EQ NSEQ NEQ @@ -575,8 +744,14 @@ AMPERSAND PIPE CONCAT_PIPE HAT -SEMICOLON -STRING +COLON +ARROW +FAT_ARROW +HENT_START +HENT_END +QUESTION +STRING_LITERAL +DOUBLEQUOTED_STRING BIGINT_LITERAL SMALLINT_LITERAL TINYINT_LITERAL @@ -588,272 +763,353 @@ DOUBLE_LITERAL BIGDECIMAL_LITERAL IDENTIFIER BACKQUOTED_IDENTIFIER -CUSTOM_VARS SIMPLE_COMMENT BRACKETED_COMMENT WS UNRECOGNIZED rule names: -T__0 -T__1 -T__2 -T__3 -T__4 -T__5 -T__6 -T__7 -T__8 -T__9 -ADD -AFTER -ALL -ALTER -ANALYZE -AND -ANTI -ANY -ARCHIVE -ARRAY -AS -ASC -AT -AUTHORIZATION -BETWEEN -BOTH -BUCKET -BUCKETS -BY -CACHE -CASCADE -CASE -CAST -CHANGE -CHECK -CLEAR -CLUSTER -CLUSTERED -CODEGEN -COLLATE -COLLECTION -COLUMN -COLUMNS -COMMENT -COMMIT -COMPACT -COMPACTIONS -COMPUTE -CONCATENATE -CONSTRAINT -COST -CREATE -CROSS -CUBE -CURRENT -CURRENT_DATE -CURRENT_TIME -CURRENT_TIMESTAMP -CURRENT_USER -DATA -DATABASE -DATABASES -DBPROPERTIES -DEFINED -DELETE -DELIMITED -DESC -DESCRIBE -DFS -DIRECTORIES -DIRECTORY -DISTINCT -DISTRIBUTE -DIV -DROP -ELSE -END -ESCAPE -ESCAPED -EXCEPT -EXCHANGE -EXISTS -EXPLAIN -EXPORT -EXTENDED -EXTERNAL -EXTRACT -FALSE -FETCH -FIELDS -FILTER -FILEFORMAT -FIRST -FOLLOWING -FOR -FOREIGN -FORMAT -FORMATTED -FROM -FULL -FUNCTION -FUNCTIONS -GLOBAL -GRANT -GROUP -GROUPING -HAVING -IF -IGNORE -IMPORT -IN -INDEX -INDEXES -INNER -INPATH -INPUTFORMAT -INSERT -INTERSECT -INTERVAL -INTO -IS -ITEMS -JOIN -KEYS -LAST -LATERAL -LAZY -LEADING -LEFT -LIKE -LIMIT -LINES -LIST -LOAD -LOCAL -LOCATION -LOCK -LOCKS -LOGICAL -MACRO -MAP -MATCHED -MERGE -MSCK -NAMESPACE -NAMESPACES -NATURAL -NO -NOT -NULL -NULLS -OF -ON -ONLY -OPTION -OPTIONS -OR -ORDER -OUT -OUTER -OUTPUTFORMAT -OVER -OVERLAPS -OVERLAY -OVERWRITE -PARTITION -PARTITIONED -PARTITIONS -PERCENTLIT -PIVOT -PLACING -POSITION -PRECEDING -PRIMARY -PRINCIPALS -PROPERTIES -PURGE -QUERY -RANGE -RECORDREADER -RECORDWRITER -RECOVER -REDUCE -REFERENCES -REFRESH -RENAME -REPAIR -REPLACE -RESET -RESTRICT -REVOKE -RIGHT -RLIKE -ROLE -ROLES -ROLLBACK -ROLLUP -ROW -ROWS -SCHEMA -SELECT -SEMI -SEPARATED -SERDE -SERDEPROPERTIES -SESSION_USER -SET -SETMINUS -SETS -SHOW -SKEWED -SOME -SORT -SORTED -START -STATISTICS -STORED -STRATIFY -STRUCT -SUBSTR -SUBSTRING -TABLE -TABLES -TABLESAMPLE -TBLPROPERTIES -TEMPORARY -TERMINATED -THEN -TIME -TO -TOUCH -TRAILING -TRANSACTION -TRANSACTIONS -TRANSFORM -TRIM -TRUE -TRUNCATE -TYPE -UNARCHIVE -UNBOUNDED -UNCACHE -UNION -UNIQUE -UNKNOWN -UNLOCK -UNSET -UPDATE -USE -USER -USING -VALUES -VIEW -VIEWS -WHEN -WHERE -WINDOW -WITH -ZONE +SEMICOLON +LEFT_PAREN +RIGHT_PAREN +COMMA +DOT +LEFT_BRACKET +RIGHT_BRACKET +KW_ADD +KW_AFTER +KW_ALL +KW_ALTER +KW_ALWAYS +KW_ANALYZE +KW_AND +KW_ANTI +KW_ANY +KW_ANY_VALUE +KW_ARCHIVE +KW_ARRAY +KW_AS +KW_ASC +KW_AT +KW_AUTHORIZATION +KW_BETWEEN +KW_BIGINT +KW_BINARY +KW_BOOLEAN +KW_BOTH +KW_BUCKET +KW_BUCKETS +KW_BY +KW_BYTE +KW_CACHE +KW_CASCADE +KW_CASE +KW_CAST +KW_CATALOG +KW_CATALOGS +KW_CHANGE +KW_CHAR +KW_CHARACTER +KW_CHECK +KW_CLEAR +KW_CLUSTER +KW_CLUSTERED +KW_CODEGEN +KW_COLLATE +KW_COLLECTION +KW_COLUMN +KW_COLUMNS +KW_COMMENT +KW_COMMIT +KW_COMPACT +KW_COMPACTIONS +KW_COMPUTE +KW_CONCATENATE +KW_CONSTRAINT +KW_COST +KW_CREATE +KW_CROSS +KW_CUBE +KW_CURRENT +KW_CURRENT_DATE +KW_CURRENT_TIME +KW_CURRENT_TIMESTAMP +KW_CURRENT_USER +KW_DAY +KW_DAYS +KW_DAYOFYEAR +KW_DATA +KW_DATE +KW_DATABASE +KW_DATABASES +KW_DATEADD +KW_DATE_ADD +KW_DATEDIFF +KW_DATE_DIFF +KW_DBPROPERTIES +KW_DEC +KW_DECIMAL +KW_DECLARE +KW_DEFAULT +KW_DEFINED +KW_DELETE +KW_DELIMITED +KW_DESC +KW_DESCRIBE +KW_DFS +KW_DIRECTORIES +KW_DIRECTORY +KW_DISTINCT +KW_DISTRIBUTE +KW_DIV +KW_DOUBLE +KW_DROP +KW_ELSE +KW_END +KW_ESCAPE +KW_ESCAPED +KW_EXCEPT +KW_EXCHANGE +KW_EXCLUDE +KW_EXISTS +KW_EXPLAIN +KW_EXPORT +KW_EXTENDED +KW_EXTERNAL +KW_EXTRACT +KW_FALSE +KW_FETCH +KW_FIELDS +KW_FILTER +KW_FILEFORMAT +KW_FIRST +KW_FLOAT +KW_FOLLOWING +KW_FOR +KW_FOREIGN +KW_FORMAT +KW_FORMATTED +KW_FROM +KW_FULL +KW_FUNCTION +KW_FUNCTIONS +KW_GENERATED +KW_GLOBAL +KW_GRANT +KW_GROUP +KW_GROUPING +KW_HAVING +KW_BINARY_HEX +KW_HOUR +KW_HOURS +KW_IDENTIFIER_KW +KW_IF +KW_IGNORE +KW_IMPORT +KW_IN +KW_INCLUDE +KW_INDEX +KW_INDEXES +KW_INNER +KW_INPATH +KW_INPUTFORMAT +KW_INSERT +KW_INTERSECT +KW_INTERVAL +KW_INT +KW_INTEGER +KW_INTO +KW_IS +KW_ITEMS +KW_JOIN +KW_KEYS +KW_LAST +KW_LATERAL +KW_LAZY +KW_LEADING +KW_LEFT +KW_LIKE +KW_ILIKE +KW_LIMIT +KW_LINES +KW_LIST +KW_LOAD +KW_LOCAL +KW_LOCATION +KW_LOCK +KW_LOCKS +KW_LOGICAL +KW_LONG +KW_MACRO +KW_MAP +KW_MATCHED +KW_MERGE +KW_MICROSECOND +KW_MICROSECONDS +KW_MILLISECOND +KW_MILLISECONDS +KW_MINUTE +KW_MINUTES +KW_MONTH +KW_MONTHS +KW_MSCK +KW_NAME +KW_NAMESPACE +KW_NAMESPACES +KW_NANOSECOND +KW_NANOSECONDS +KW_NATURAL +KW_NO +KW_NOT +KW_NULL +KW_NULLS +KW_NUMERIC +KW_OF +KW_OFFSET +KW_ON +KW_ONLY +KW_OPTION +KW_OPTIONS +KW_OR +KW_ORDER +KW_OUT +KW_OUTER +KW_OUTPUTFORMAT +KW_OVER +KW_OVERLAPS +KW_OVERLAY +KW_OVERWRITE +KW_PARTITION +KW_PARTITIONED +KW_PARTITIONS +KW_PERCENTILE_CONT +KW_PERCENTILE_DISC +KW_PERCENTLIT +KW_PIVOT +KW_PLACING +KW_POSITION +KW_PRECEDING +KW_PRIMARY +KW_PRINCIPALS +KW_PROPERTIES +KW_PURGE +KW_QUARTER +KW_QUERY +KW_RANGE +KW_REAL +KW_RECORDREADER +KW_RECORDWRITER +KW_RECOVER +KW_REDUCE +KW_REFERENCES +KW_REFRESH +KW_RENAME +KW_REPAIR +KW_REPEATABLE +KW_REPLACE +KW_RESET +KW_RESPECT +KW_RESTRICT +KW_REVOKE +KW_RIGHT +KW_RLIKE +KW_ROLE +KW_ROLES +KW_ROLLBACK +KW_ROLLUP +KW_ROW +KW_ROWS +KW_SECOND +KW_SECONDS +KW_SCHEMA +KW_SCHEMAS +KW_SELECT +KW_SEMI +KW_SEPARATED +KW_SERDE +KW_SERDEPROPERTIES +KW_SESSION_USER +KW_SET +KW_SETMINUS +KW_SETS +KW_SHORT +KW_SHOW +KW_SINGLE +KW_SKEWED +KW_SMALLINT +KW_SOME +KW_SORT +KW_SORTED +KW_SOURCE +KW_START +KW_STATISTICS +KW_STORED +KW_STRATIFY +KW_STRING +KW_STRUCT +KW_SUBSTR +KW_SUBSTRING +KW_SYNC +KW_SYSTEM_TIME +KW_SYSTEM_VERSION +KW_TABLE +KW_TABLES +KW_TABLESAMPLE +KW_TARGET +KW_TBLPROPERTIES +KW_TEMPORARY +KW_TERMINATED +KW_THEN +KW_TIME +KW_TIMEDIFF +KW_TIMESTAMP +KW_TIMESTAMP_LTZ +KW_TIMESTAMP_NTZ +KW_TIMESTAMPADD +KW_TIMESTAMPDIFF +KW_TINYINT +KW_TO +KW_TOUCH +KW_TRAILING +KW_TRANSACTION +KW_TRANSACTIONS +KW_TRANSFORM +KW_TRIM +KW_TRUE +KW_TRUNCATE +KW_TRY_CAST +KW_TYPE +KW_UNARCHIVE +KW_UNBOUNDED +KW_UNCACHE +KW_UNION +KW_UNIQUE +KW_UNKNOWN +KW_UNLOCK +KW_UNPIVOT +KW_UNSET +KW_UPDATE +KW_USE +KW_USER +KW_USING +KW_VALUES +KW_VARCHAR +KW_VAR +KW_VARIABLE +KW_VERSION +KW_VIEW +KW_VIEWS +KW_VOID +KW_WEEK +KW_WEEKS +KW_WHEN +KW_WHERE +KW_WINDOW +KW_WITH +KW_WITHIN +KW_YEAR +KW_YEARS +KW_ZONE EQ NSEQ NEQ @@ -872,8 +1128,14 @@ AMPERSAND PIPE CONCAT_PIPE HAT -SEMICOLON -STRING +COLON +ARROW +FAT_ARROW +HENT_START +HENT_END +QUESTION +STRING_LITERAL +DOUBLEQUOTED_STRING BIGINT_LITERAL SMALLINT_LITERAL TINYINT_LITERAL @@ -885,7 +1147,6 @@ DOUBLE_LITERAL BIGDECIMAL_LITERAL IDENTIFIER BACKQUOTED_IDENTIFIER -CUSTOM_VARS DECIMAL_DIGITS EXPONENT DIGIT @@ -903,4 +1164,4 @@ mode names: DEFAULT_MODE atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 297, 2742, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 4, 222, 9, 222, 4, 223, 9, 223, 4, 224, 9, 224, 4, 225, 9, 225, 4, 226, 9, 226, 4, 227, 9, 227, 4, 228, 9, 228, 4, 229, 9, 229, 4, 230, 9, 230, 4, 231, 9, 231, 4, 232, 9, 232, 4, 233, 9, 233, 4, 234, 9, 234, 4, 235, 9, 235, 4, 236, 9, 236, 4, 237, 9, 237, 4, 238, 9, 238, 4, 239, 9, 239, 4, 240, 9, 240, 4, 241, 9, 241, 4, 242, 9, 242, 4, 243, 9, 243, 4, 244, 9, 244, 4, 245, 9, 245, 4, 246, 9, 246, 4, 247, 9, 247, 4, 248, 9, 248, 4, 249, 9, 249, 4, 250, 9, 250, 4, 251, 9, 251, 4, 252, 9, 252, 4, 253, 9, 253, 4, 254, 9, 254, 4, 255, 9, 255, 4, 256, 9, 256, 4, 257, 9, 257, 4, 258, 9, 258, 4, 259, 9, 259, 4, 260, 9, 260, 4, 261, 9, 261, 4, 262, 9, 262, 4, 263, 9, 263, 4, 264, 9, 264, 4, 265, 9, 265, 4, 266, 9, 266, 4, 267, 9, 267, 4, 268, 9, 268, 4, 269, 9, 269, 4, 270, 9, 270, 4, 271, 9, 271, 4, 272, 9, 272, 4, 273, 9, 273, 4, 274, 9, 274, 4, 275, 9, 275, 4, 276, 9, 276, 4, 277, 9, 277, 4, 278, 9, 278, 4, 279, 9, 279, 4, 280, 9, 280, 4, 281, 9, 281, 4, 282, 9, 282, 4, 283, 9, 283, 4, 284, 9, 284, 4, 285, 9, 285, 4, 286, 9, 286, 4, 287, 9, 287, 4, 288, 9, 288, 4, 289, 9, 289, 4, 290, 9, 290, 4, 291, 9, 291, 4, 292, 9, 292, 4, 293, 9, 293, 4, 294, 9, 294, 4, 295, 9, 295, 4, 296, 9, 296, 4, 297, 9, 297, 4, 298, 9, 298, 4, 299, 9, 299, 4, 300, 9, 300, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 1023, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 5, 150, 1632, 10, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 192, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 193, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 5, 194, 1978, 10, 194, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 197, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 199, 3, 199, 3, 199, 3, 199, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 203, 3, 203, 3, 203, 3, 203, 3, 203, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 205, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 208, 3, 208, 3, 208, 3, 208, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 5, 227, 2233, 10, 227, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 231, 3, 231, 3, 231, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 250, 3, 250, 3, 250, 3, 250, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 261, 3, 261, 3, 261, 5, 261, 2466, 10, 261, 3, 262, 3, 262, 3, 262, 3, 262, 3, 263, 3, 263, 3, 263, 3, 264, 3, 264, 3, 264, 3, 265, 3, 265, 3, 266, 3, 266, 3, 266, 3, 266, 5, 266, 2484, 10, 266, 3, 267, 3, 267, 3, 268, 3, 268, 3, 268, 3, 268, 5, 268, 2492, 10, 268, 3, 269, 3, 269, 3, 270, 3, 270, 3, 271, 3, 271, 3, 272, 3, 272, 3, 273, 3, 273, 3, 274, 3, 274, 3, 275, 3, 275, 3, 276, 3, 276, 3, 277, 3, 277, 3, 277, 3, 278, 3, 278, 3, 279, 3, 279, 3, 280, 3, 280, 3, 280, 3, 280, 7, 280, 2521, 10, 280, 12, 280, 14, 280, 2524, 11, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 7, 280, 2531, 10, 280, 12, 280, 14, 280, 2534, 11, 280, 3, 280, 5, 280, 2537, 10, 280, 3, 281, 6, 281, 2540, 10, 281, 13, 281, 14, 281, 2541, 3, 281, 3, 281, 3, 282, 6, 282, 2547, 10, 282, 13, 282, 14, 282, 2548, 3, 282, 3, 282, 3, 283, 6, 283, 2554, 10, 283, 13, 283, 14, 283, 2555, 3, 283, 3, 283, 3, 284, 6, 284, 2561, 10, 284, 13, 284, 14, 284, 2562, 3, 285, 6, 285, 2566, 10, 285, 13, 285, 14, 285, 2567, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 5, 285, 2576, 10, 285, 3, 286, 3, 286, 3, 286, 3, 287, 6, 287, 2582, 10, 287, 13, 287, 14, 287, 2583, 3, 287, 5, 287, 2587, 10, 287, 3, 287, 3, 287, 3, 287, 3, 287, 5, 287, 2593, 10, 287, 3, 287, 3, 287, 3, 287, 5, 287, 2598, 10, 287, 3, 288, 6, 288, 2601, 10, 288, 13, 288, 14, 288, 2602, 3, 288, 5, 288, 2606, 10, 288, 3, 288, 3, 288, 3, 288, 3, 288, 5, 288, 2612, 10, 288, 3, 288, 3, 288, 3, 288, 5, 288, 2617, 10, 288, 3, 289, 6, 289, 2620, 10, 289, 13, 289, 14, 289, 2621, 3, 289, 5, 289, 2625, 10, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 5, 289, 2632, 10, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 5, 289, 2639, 10, 289, 3, 290, 3, 290, 3, 290, 3, 290, 6, 290, 2645, 10, 290, 13, 290, 14, 290, 2646, 3, 291, 3, 291, 3, 291, 3, 291, 7, 291, 2653, 10, 291, 12, 291, 14, 291, 2656, 11, 291, 3, 291, 3, 291, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 293, 6, 293, 2667, 10, 293, 13, 293, 14, 293, 2668, 3, 293, 3, 293, 7, 293, 2673, 10, 293, 12, 293, 14, 293, 2676, 11, 293, 3, 293, 3, 293, 6, 293, 2680, 10, 293, 13, 293, 14, 293, 2681, 5, 293, 2684, 10, 293, 3, 294, 3, 294, 5, 294, 2688, 10, 294, 3, 294, 6, 294, 2691, 10, 294, 13, 294, 14, 294, 2692, 3, 295, 3, 295, 3, 296, 3, 296, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 7, 297, 2705, 10, 297, 12, 297, 14, 297, 2708, 11, 297, 3, 297, 5, 297, 2711, 10, 297, 3, 297, 5, 297, 2714, 10, 297, 3, 297, 3, 297, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 7, 298, 2724, 10, 298, 12, 298, 14, 298, 2727, 11, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 299, 6, 299, 2735, 10, 299, 13, 299, 14, 299, 2736, 3, 299, 3, 299, 3, 300, 3, 300, 3, 2725, 2, 2, 301, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 86, 171, 2, 87, 173, 2, 88, 175, 2, 89, 177, 2, 90, 179, 2, 91, 181, 2, 92, 183, 2, 93, 185, 2, 94, 187, 2, 95, 189, 2, 96, 191, 2, 97, 193, 2, 98, 195, 2, 99, 197, 2, 100, 199, 2, 101, 201, 2, 102, 203, 2, 103, 205, 2, 104, 207, 2, 105, 209, 2, 106, 211, 2, 107, 213, 2, 108, 215, 2, 109, 217, 2, 110, 219, 2, 111, 221, 2, 112, 223, 2, 113, 225, 2, 114, 227, 2, 115, 229, 2, 116, 231, 2, 117, 233, 2, 118, 235, 2, 119, 237, 2, 120, 239, 2, 121, 241, 2, 122, 243, 2, 123, 245, 2, 124, 247, 2, 125, 249, 2, 126, 251, 2, 127, 253, 2, 128, 255, 2, 129, 257, 2, 130, 259, 2, 131, 261, 2, 132, 263, 2, 133, 265, 2, 134, 267, 2, 135, 269, 2, 136, 271, 2, 137, 273, 2, 138, 275, 2, 139, 277, 2, 140, 279, 2, 141, 281, 2, 142, 283, 2, 143, 285, 2, 144, 287, 2, 145, 289, 2, 146, 291, 2, 147, 293, 2, 148, 295, 2, 149, 297, 2, 150, 299, 2, 151, 301, 2, 152, 303, 2, 153, 305, 2, 154, 307, 2, 155, 309, 2, 156, 311, 2, 157, 313, 2, 158, 315, 2, 159, 317, 2, 160, 319, 2, 161, 321, 2, 162, 323, 2, 163, 325, 2, 164, 327, 2, 165, 329, 2, 166, 331, 2, 167, 333, 2, 168, 335, 2, 169, 337, 2, 170, 339, 2, 171, 341, 2, 172, 343, 2, 173, 345, 2, 174, 347, 2, 175, 349, 2, 176, 351, 2, 177, 353, 2, 178, 355, 2, 179, 357, 2, 180, 359, 2, 181, 361, 2, 182, 363, 2, 183, 365, 2, 184, 367, 2, 185, 369, 2, 186, 371, 2, 187, 373, 2, 188, 375, 2, 189, 377, 2, 190, 379, 2, 191, 381, 2, 192, 383, 2, 193, 385, 2, 194, 387, 2, 195, 389, 2, 196, 391, 2, 197, 393, 2, 198, 395, 2, 199, 397, 2, 200, 399, 2, 201, 401, 2, 202, 403, 2, 203, 405, 2, 204, 407, 2, 205, 409, 2, 206, 411, 2, 207, 413, 2, 208, 415, 2, 209, 417, 2, 210, 419, 2, 211, 421, 2, 212, 423, 2, 213, 425, 2, 214, 427, 2, 215, 429, 2, 216, 431, 2, 217, 433, 2, 218, 435, 2, 219, 437, 2, 220, 439, 2, 221, 441, 2, 222, 443, 2, 223, 445, 2, 224, 447, 2, 225, 449, 2, 226, 451, 2, 227, 453, 2, 228, 455, 2, 229, 457, 2, 230, 459, 2, 231, 461, 2, 232, 463, 2, 233, 465, 2, 234, 467, 2, 235, 469, 2, 236, 471, 2, 237, 473, 2, 238, 475, 2, 239, 477, 2, 240, 479, 2, 241, 481, 2, 242, 483, 2, 243, 485, 2, 244, 487, 2, 245, 489, 2, 246, 491, 2, 247, 493, 2, 248, 495, 2, 249, 497, 2, 250, 499, 2, 251, 501, 2, 252, 503, 2, 253, 505, 2, 254, 507, 2, 255, 509, 2, 256, 511, 2, 257, 513, 2, 258, 515, 2, 259, 517, 2, 260, 519, 2, 261, 521, 2, 262, 523, 2, 263, 525, 2, 264, 527, 2, 265, 529, 2, 266, 531, 2, 267, 533, 2, 268, 535, 2, 269, 537, 2, 270, 539, 2, 271, 541, 2, 272, 543, 2, 273, 545, 2, 274, 547, 2, 275, 549, 2, 276, 551, 2, 277, 553, 2, 278, 555, 2, 279, 557, 2, 280, 559, 2, 281, 561, 2, 282, 563, 2, 283, 565, 2, 284, 567, 2, 285, 569, 2, 286, 571, 2, 287, 573, 2, 288, 575, 2, 289, 577, 2, 290, 579, 2, 291, 581, 2, 292, 583, 2, 293, 585, 2, 2, 587, 2, 2, 589, 2, 2, 591, 2, 2, 593, 2, 294, 595, 2, 295, 597, 2, 296, 599, 2, 297, 3, 2, 10, 4, 2, 41, 41, 94, 94, 4, 2, 36, 36, 94, 94, 3, 2, 98, 98, 4, 2, 45, 45, 47, 47, 3, 2, 50, 59, 3, 2, 67, 92, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 2786, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, 2, 317, 3, 2, 2, 2, 2, 319, 3, 2, 2, 2, 2, 321, 3, 2, 2, 2, 2, 323, 3, 2, 2, 2, 2, 325, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 335, 3, 2, 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, 3, 2, 2, 2, 2, 345, 3, 2, 2, 2, 2, 347, 3, 2, 2, 2, 2, 349, 3, 2, 2, 2, 2, 351, 3, 2, 2, 2, 2, 353, 3, 2, 2, 2, 2, 355, 3, 2, 2, 2, 2, 357, 3, 2, 2, 2, 2, 359, 3, 2, 2, 2, 2, 361, 3, 2, 2, 2, 2, 363, 3, 2, 2, 2, 2, 365, 3, 2, 2, 2, 2, 367, 3, 2, 2, 2, 2, 369, 3, 2, 2, 2, 2, 371, 3, 2, 2, 2, 2, 373, 3, 2, 2, 2, 2, 375, 3, 2, 2, 2, 2, 377, 3, 2, 2, 2, 2, 379, 3, 2, 2, 2, 2, 381, 3, 2, 2, 2, 2, 383, 3, 2, 2, 2, 2, 385, 3, 2, 2, 2, 2, 387, 3, 2, 2, 2, 2, 389, 3, 2, 2, 2, 2, 391, 3, 2, 2, 2, 2, 393, 3, 2, 2, 2, 2, 395, 3, 2, 2, 2, 2, 397, 3, 2, 2, 2, 2, 399, 3, 2, 2, 2, 2, 401, 3, 2, 2, 2, 2, 403, 3, 2, 2, 2, 2, 405, 3, 2, 2, 2, 2, 407, 3, 2, 2, 2, 2, 409, 3, 2, 2, 2, 2, 411, 3, 2, 2, 2, 2, 413, 3, 2, 2, 2, 2, 415, 3, 2, 2, 2, 2, 417, 3, 2, 2, 2, 2, 419, 3, 2, 2, 2, 2, 421, 3, 2, 2, 2, 2, 423, 3, 2, 2, 2, 2, 425, 3, 2, 2, 2, 2, 427, 3, 2, 2, 2, 2, 429, 3, 2, 2, 2, 2, 431, 3, 2, 2, 2, 2, 433, 3, 2, 2, 2, 2, 435, 3, 2, 2, 2, 2, 437, 3, 2, 2, 2, 2, 439, 3, 2, 2, 2, 2, 441, 3, 2, 2, 2, 2, 443, 3, 2, 2, 2, 2, 445, 3, 2, 2, 2, 2, 447, 3, 2, 2, 2, 2, 449, 3, 2, 2, 2, 2, 451, 3, 2, 2, 2, 2, 453, 3, 2, 2, 2, 2, 455, 3, 2, 2, 2, 2, 457, 3, 2, 2, 2, 2, 459, 3, 2, 2, 2, 2, 461, 3, 2, 2, 2, 2, 463, 3, 2, 2, 2, 2, 465, 3, 2, 2, 2, 2, 467, 3, 2, 2, 2, 2, 469, 3, 2, 2, 2, 2, 471, 3, 2, 2, 2, 2, 473, 3, 2, 2, 2, 2, 475, 3, 2, 2, 2, 2, 477, 3, 2, 2, 2, 2, 479, 3, 2, 2, 2, 2, 481, 3, 2, 2, 2, 2, 483, 3, 2, 2, 2, 2, 485, 3, 2, 2, 2, 2, 487, 3, 2, 2, 2, 2, 489, 3, 2, 2, 2, 2, 491, 3, 2, 2, 2, 2, 493, 3, 2, 2, 2, 2, 495, 3, 2, 2, 2, 2, 497, 3, 2, 2, 2, 2, 499, 3, 2, 2, 2, 2, 501, 3, 2, 2, 2, 2, 503, 3, 2, 2, 2, 2, 505, 3, 2, 2, 2, 2, 507, 3, 2, 2, 2, 2, 509, 3, 2, 2, 2, 2, 511, 3, 2, 2, 2, 2, 513, 3, 2, 2, 2, 2, 515, 3, 2, 2, 2, 2, 517, 3, 2, 2, 2, 2, 519, 3, 2, 2, 2, 2, 521, 3, 2, 2, 2, 2, 523, 3, 2, 2, 2, 2, 525, 3, 2, 2, 2, 2, 527, 3, 2, 2, 2, 2, 529, 3, 2, 2, 2, 2, 531, 3, 2, 2, 2, 2, 533, 3, 2, 2, 2, 2, 535, 3, 2, 2, 2, 2, 537, 3, 2, 2, 2, 2, 539, 3, 2, 2, 2, 2, 541, 3, 2, 2, 2, 2, 543, 3, 2, 2, 2, 2, 545, 3, 2, 2, 2, 2, 547, 3, 2, 2, 2, 2, 549, 3, 2, 2, 2, 2, 551, 3, 2, 2, 2, 2, 553, 3, 2, 2, 2, 2, 555, 3, 2, 2, 2, 2, 557, 3, 2, 2, 2, 2, 559, 3, 2, 2, 2, 2, 561, 3, 2, 2, 2, 2, 563, 3, 2, 2, 2, 2, 565, 3, 2, 2, 2, 2, 567, 3, 2, 2, 2, 2, 569, 3, 2, 2, 2, 2, 571, 3, 2, 2, 2, 2, 573, 3, 2, 2, 2, 2, 575, 3, 2, 2, 2, 2, 577, 3, 2, 2, 2, 2, 579, 3, 2, 2, 2, 2, 581, 3, 2, 2, 2, 2, 583, 3, 2, 2, 2, 2, 593, 3, 2, 2, 2, 2, 595, 3, 2, 2, 2, 2, 597, 3, 2, 2, 2, 2, 599, 3, 2, 2, 2, 3, 601, 3, 2, 2, 2, 5, 603, 3, 2, 2, 2, 7, 605, 3, 2, 2, 2, 9, 607, 3, 2, 2, 2, 11, 609, 3, 2, 2, 2, 13, 613, 3, 2, 2, 2, 15, 616, 3, 2, 2, 2, 17, 619, 3, 2, 2, 2, 19, 621, 3, 2, 2, 2, 21, 623, 3, 2, 2, 2, 23, 625, 3, 2, 2, 2, 25, 629, 3, 2, 2, 2, 27, 635, 3, 2, 2, 2, 29, 639, 3, 2, 2, 2, 31, 645, 3, 2, 2, 2, 33, 653, 3, 2, 2, 2, 35, 657, 3, 2, 2, 2, 37, 662, 3, 2, 2, 2, 39, 666, 3, 2, 2, 2, 41, 674, 3, 2, 2, 2, 43, 680, 3, 2, 2, 2, 45, 683, 3, 2, 2, 2, 47, 687, 3, 2, 2, 2, 49, 690, 3, 2, 2, 2, 51, 704, 3, 2, 2, 2, 53, 712, 3, 2, 2, 2, 55, 717, 3, 2, 2, 2, 57, 724, 3, 2, 2, 2, 59, 732, 3, 2, 2, 2, 61, 735, 3, 2, 2, 2, 63, 741, 3, 2, 2, 2, 65, 749, 3, 2, 2, 2, 67, 754, 3, 2, 2, 2, 69, 759, 3, 2, 2, 2, 71, 766, 3, 2, 2, 2, 73, 772, 3, 2, 2, 2, 75, 778, 3, 2, 2, 2, 77, 786, 3, 2, 2, 2, 79, 796, 3, 2, 2, 2, 81, 804, 3, 2, 2, 2, 83, 812, 3, 2, 2, 2, 85, 823, 3, 2, 2, 2, 87, 830, 3, 2, 2, 2, 89, 838, 3, 2, 2, 2, 91, 846, 3, 2, 2, 2, 93, 853, 3, 2, 2, 2, 95, 861, 3, 2, 2, 2, 97, 873, 3, 2, 2, 2, 99, 881, 3, 2, 2, 2, 101, 893, 3, 2, 2, 2, 103, 904, 3, 2, 2, 2, 105, 909, 3, 2, 2, 2, 107, 916, 3, 2, 2, 2, 109, 922, 3, 2, 2, 2, 111, 927, 3, 2, 2, 2, 113, 935, 3, 2, 2, 2, 115, 948, 3, 2, 2, 2, 117, 961, 3, 2, 2, 2, 119, 979, 3, 2, 2, 2, 121, 992, 3, 2, 2, 2, 123, 997, 3, 2, 2, 2, 125, 1022, 3, 2, 2, 2, 127, 1024, 3, 2, 2, 2, 129, 1037, 3, 2, 2, 2, 131, 1045, 3, 2, 2, 2, 133, 1052, 3, 2, 2, 2, 135, 1062, 3, 2, 2, 2, 137, 1067, 3, 2, 2, 2, 139, 1076, 3, 2, 2, 2, 141, 1080, 3, 2, 2, 2, 143, 1092, 3, 2, 2, 2, 145, 1102, 3, 2, 2, 2, 147, 1111, 3, 2, 2, 2, 149, 1122, 3, 2, 2, 2, 151, 1126, 3, 2, 2, 2, 153, 1131, 3, 2, 2, 2, 155, 1136, 3, 2, 2, 2, 157, 1140, 3, 2, 2, 2, 159, 1147, 3, 2, 2, 2, 161, 1155, 3, 2, 2, 2, 163, 1162, 3, 2, 2, 2, 165, 1171, 3, 2, 2, 2, 167, 1178, 3, 2, 2, 2, 169, 1186, 3, 2, 2, 2, 171, 1193, 3, 2, 2, 2, 173, 1202, 3, 2, 2, 2, 175, 1211, 3, 2, 2, 2, 177, 1219, 3, 2, 2, 2, 179, 1225, 3, 2, 2, 2, 181, 1231, 3, 2, 2, 2, 183, 1238, 3, 2, 2, 2, 185, 1245, 3, 2, 2, 2, 187, 1256, 3, 2, 2, 2, 189, 1262, 3, 2, 2, 2, 191, 1272, 3, 2, 2, 2, 193, 1276, 3, 2, 2, 2, 195, 1284, 3, 2, 2, 2, 197, 1291, 3, 2, 2, 2, 199, 1301, 3, 2, 2, 2, 201, 1306, 3, 2, 2, 2, 203, 1311, 3, 2, 2, 2, 205, 1320, 3, 2, 2, 2, 207, 1330, 3, 2, 2, 2, 209, 1337, 3, 2, 2, 2, 211, 1343, 3, 2, 2, 2, 213, 1349, 3, 2, 2, 2, 215, 1358, 3, 2, 2, 2, 217, 1365, 3, 2, 2, 2, 219, 1368, 3, 2, 2, 2, 221, 1375, 3, 2, 2, 2, 223, 1382, 3, 2, 2, 2, 225, 1385, 3, 2, 2, 2, 227, 1391, 3, 2, 2, 2, 229, 1399, 3, 2, 2, 2, 231, 1405, 3, 2, 2, 2, 233, 1412, 3, 2, 2, 2, 235, 1424, 3, 2, 2, 2, 237, 1431, 3, 2, 2, 2, 239, 1441, 3, 2, 2, 2, 241, 1450, 3, 2, 2, 2, 243, 1455, 3, 2, 2, 2, 245, 1458, 3, 2, 2, 2, 247, 1464, 3, 2, 2, 2, 249, 1469, 3, 2, 2, 2, 251, 1474, 3, 2, 2, 2, 253, 1479, 3, 2, 2, 2, 255, 1487, 3, 2, 2, 2, 257, 1492, 3, 2, 2, 2, 259, 1500, 3, 2, 2, 2, 261, 1505, 3, 2, 2, 2, 263, 1510, 3, 2, 2, 2, 265, 1516, 3, 2, 2, 2, 267, 1522, 3, 2, 2, 2, 269, 1527, 3, 2, 2, 2, 271, 1532, 3, 2, 2, 2, 273, 1538, 3, 2, 2, 2, 275, 1547, 3, 2, 2, 2, 277, 1552, 3, 2, 2, 2, 279, 1558, 3, 2, 2, 2, 281, 1566, 3, 2, 2, 2, 283, 1572, 3, 2, 2, 2, 285, 1576, 3, 2, 2, 2, 287, 1584, 3, 2, 2, 2, 289, 1590, 3, 2, 2, 2, 291, 1595, 3, 2, 2, 2, 293, 1605, 3, 2, 2, 2, 295, 1616, 3, 2, 2, 2, 297, 1624, 3, 2, 2, 2, 299, 1631, 3, 2, 2, 2, 301, 1633, 3, 2, 2, 2, 303, 1638, 3, 2, 2, 2, 305, 1644, 3, 2, 2, 2, 307, 1647, 3, 2, 2, 2, 309, 1650, 3, 2, 2, 2, 311, 1655, 3, 2, 2, 2, 313, 1662, 3, 2, 2, 2, 315, 1670, 3, 2, 2, 2, 317, 1673, 3, 2, 2, 2, 319, 1679, 3, 2, 2, 2, 321, 1683, 3, 2, 2, 2, 323, 1689, 3, 2, 2, 2, 325, 1702, 3, 2, 2, 2, 327, 1707, 3, 2, 2, 2, 329, 1716, 3, 2, 2, 2, 331, 1724, 3, 2, 2, 2, 333, 1734, 3, 2, 2, 2, 335, 1744, 3, 2, 2, 2, 337, 1756, 3, 2, 2, 2, 339, 1767, 3, 2, 2, 2, 341, 1775, 3, 2, 2, 2, 343, 1781, 3, 2, 2, 2, 345, 1789, 3, 2, 2, 2, 347, 1798, 3, 2, 2, 2, 349, 1808, 3, 2, 2, 2, 351, 1816, 3, 2, 2, 2, 353, 1827, 3, 2, 2, 2, 355, 1838, 3, 2, 2, 2, 357, 1844, 3, 2, 2, 2, 359, 1850, 3, 2, 2, 2, 361, 1856, 3, 2, 2, 2, 363, 1869, 3, 2, 2, 2, 365, 1882, 3, 2, 2, 2, 367, 1890, 3, 2, 2, 2, 369, 1897, 3, 2, 2, 2, 371, 1908, 3, 2, 2, 2, 373, 1916, 3, 2, 2, 2, 375, 1923, 3, 2, 2, 2, 377, 1930, 3, 2, 2, 2, 379, 1938, 3, 2, 2, 2, 381, 1944, 3, 2, 2, 2, 383, 1953, 3, 2, 2, 2, 385, 1960, 3, 2, 2, 2, 387, 1977, 3, 2, 2, 2, 389, 1979, 3, 2, 2, 2, 391, 1984, 3, 2, 2, 2, 393, 1990, 3, 2, 2, 2, 395, 1999, 3, 2, 2, 2, 397, 2006, 3, 2, 2, 2, 399, 2010, 3, 2, 2, 2, 401, 2015, 3, 2, 2, 2, 403, 2022, 3, 2, 2, 2, 405, 2029, 3, 2, 2, 2, 407, 2034, 3, 2, 2, 2, 409, 2044, 3, 2, 2, 2, 411, 2050, 3, 2, 2, 2, 413, 2066, 3, 2, 2, 2, 415, 2079, 3, 2, 2, 2, 417, 2083, 3, 2, 2, 2, 419, 2089, 3, 2, 2, 2, 421, 2094, 3, 2, 2, 2, 423, 2099, 3, 2, 2, 2, 425, 2106, 3, 2, 2, 2, 427, 2111, 3, 2, 2, 2, 429, 2116, 3, 2, 2, 2, 431, 2123, 3, 2, 2, 2, 433, 2129, 3, 2, 2, 2, 435, 2140, 3, 2, 2, 2, 437, 2147, 3, 2, 2, 2, 439, 2156, 3, 2, 2, 2, 441, 2163, 3, 2, 2, 2, 443, 2170, 3, 2, 2, 2, 445, 2180, 3, 2, 2, 2, 447, 2186, 3, 2, 2, 2, 449, 2193, 3, 2, 2, 2, 451, 2205, 3, 2, 2, 2, 453, 2232, 3, 2, 2, 2, 455, 2234, 3, 2, 2, 2, 457, 2245, 3, 2, 2, 2, 459, 2250, 3, 2, 2, 2, 461, 2255, 3, 2, 2, 2, 463, 2258, 3, 2, 2, 2, 465, 2264, 3, 2, 2, 2, 467, 2273, 3, 2, 2, 2, 469, 2285, 3, 2, 2, 2, 471, 2298, 3, 2, 2, 2, 473, 2308, 3, 2, 2, 2, 475, 2313, 3, 2, 2, 2, 477, 2318, 3, 2, 2, 2, 479, 2327, 3, 2, 2, 2, 481, 2332, 3, 2, 2, 2, 483, 2342, 3, 2, 2, 2, 485, 2352, 3, 2, 2, 2, 487, 2360, 3, 2, 2, 2, 489, 2366, 3, 2, 2, 2, 491, 2373, 3, 2, 2, 2, 493, 2381, 3, 2, 2, 2, 495, 2388, 3, 2, 2, 2, 497, 2394, 3, 2, 2, 2, 499, 2401, 3, 2, 2, 2, 501, 2405, 3, 2, 2, 2, 503, 2410, 3, 2, 2, 2, 505, 2416, 3, 2, 2, 2, 507, 2423, 3, 2, 2, 2, 509, 2428, 3, 2, 2, 2, 511, 2434, 3, 2, 2, 2, 513, 2439, 3, 2, 2, 2, 515, 2445, 3, 2, 2, 2, 517, 2452, 3, 2, 2, 2, 519, 2457, 3, 2, 2, 2, 521, 2465, 3, 2, 2, 2, 523, 2467, 3, 2, 2, 2, 525, 2471, 3, 2, 2, 2, 527, 2474, 3, 2, 2, 2, 529, 2477, 3, 2, 2, 2, 531, 2483, 3, 2, 2, 2, 533, 2485, 3, 2, 2, 2, 535, 2491, 3, 2, 2, 2, 537, 2493, 3, 2, 2, 2, 539, 2495, 3, 2, 2, 2, 541, 2497, 3, 2, 2, 2, 543, 2499, 3, 2, 2, 2, 545, 2501, 3, 2, 2, 2, 547, 2503, 3, 2, 2, 2, 549, 2505, 3, 2, 2, 2, 551, 2507, 3, 2, 2, 2, 553, 2509, 3, 2, 2, 2, 555, 2512, 3, 2, 2, 2, 557, 2514, 3, 2, 2, 2, 559, 2536, 3, 2, 2, 2, 561, 2539, 3, 2, 2, 2, 563, 2546, 3, 2, 2, 2, 565, 2553, 3, 2, 2, 2, 567, 2560, 3, 2, 2, 2, 569, 2575, 3, 2, 2, 2, 571, 2577, 3, 2, 2, 2, 573, 2597, 3, 2, 2, 2, 575, 2616, 3, 2, 2, 2, 577, 2638, 3, 2, 2, 2, 579, 2644, 3, 2, 2, 2, 581, 2648, 3, 2, 2, 2, 583, 2659, 3, 2, 2, 2, 585, 2683, 3, 2, 2, 2, 587, 2685, 3, 2, 2, 2, 589, 2694, 3, 2, 2, 2, 591, 2696, 3, 2, 2, 2, 593, 2698, 3, 2, 2, 2, 595, 2717, 3, 2, 2, 2, 597, 2734, 3, 2, 2, 2, 599, 2740, 3, 2, 2, 2, 601, 602, 7, 42, 2, 2, 602, 4, 3, 2, 2, 2, 603, 604, 7, 43, 2, 2, 604, 6, 3, 2, 2, 2, 605, 606, 7, 46, 2, 2, 606, 8, 3, 2, 2, 2, 607, 608, 7, 48, 2, 2, 608, 10, 3, 2, 2, 2, 609, 610, 7, 49, 2, 2, 610, 611, 7, 44, 2, 2, 611, 612, 7, 45, 2, 2, 612, 12, 3, 2, 2, 2, 613, 614, 7, 44, 2, 2, 614, 615, 7, 49, 2, 2, 615, 14, 3, 2, 2, 2, 616, 617, 7, 47, 2, 2, 617, 618, 7, 64, 2, 2, 618, 16, 3, 2, 2, 2, 619, 620, 7, 93, 2, 2, 620, 18, 3, 2, 2, 2, 621, 622, 7, 95, 2, 2, 622, 20, 3, 2, 2, 2, 623, 624, 7, 60, 2, 2, 624, 22, 3, 2, 2, 2, 625, 626, 7, 67, 2, 2, 626, 627, 7, 70, 2, 2, 627, 628, 7, 70, 2, 2, 628, 24, 3, 2, 2, 2, 629, 630, 7, 67, 2, 2, 630, 631, 7, 72, 2, 2, 631, 632, 7, 86, 2, 2, 632, 633, 7, 71, 2, 2, 633, 634, 7, 84, 2, 2, 634, 26, 3, 2, 2, 2, 635, 636, 7, 67, 2, 2, 636, 637, 7, 78, 2, 2, 637, 638, 7, 78, 2, 2, 638, 28, 3, 2, 2, 2, 639, 640, 7, 67, 2, 2, 640, 641, 7, 78, 2, 2, 641, 642, 7, 86, 2, 2, 642, 643, 7, 71, 2, 2, 643, 644, 7, 84, 2, 2, 644, 30, 3, 2, 2, 2, 645, 646, 7, 67, 2, 2, 646, 647, 7, 80, 2, 2, 647, 648, 7, 67, 2, 2, 648, 649, 7, 78, 2, 2, 649, 650, 7, 91, 2, 2, 650, 651, 7, 92, 2, 2, 651, 652, 7, 71, 2, 2, 652, 32, 3, 2, 2, 2, 653, 654, 7, 67, 2, 2, 654, 655, 7, 80, 2, 2, 655, 656, 7, 70, 2, 2, 656, 34, 3, 2, 2, 2, 657, 658, 7, 67, 2, 2, 658, 659, 7, 80, 2, 2, 659, 660, 7, 86, 2, 2, 660, 661, 7, 75, 2, 2, 661, 36, 3, 2, 2, 2, 662, 663, 7, 67, 2, 2, 663, 664, 7, 80, 2, 2, 664, 665, 7, 91, 2, 2, 665, 38, 3, 2, 2, 2, 666, 667, 7, 67, 2, 2, 667, 668, 7, 84, 2, 2, 668, 669, 7, 69, 2, 2, 669, 670, 7, 74, 2, 2, 670, 671, 7, 75, 2, 2, 671, 672, 7, 88, 2, 2, 672, 673, 7, 71, 2, 2, 673, 40, 3, 2, 2, 2, 674, 675, 7, 67, 2, 2, 675, 676, 7, 84, 2, 2, 676, 677, 7, 84, 2, 2, 677, 678, 7, 67, 2, 2, 678, 679, 7, 91, 2, 2, 679, 42, 3, 2, 2, 2, 680, 681, 7, 67, 2, 2, 681, 682, 7, 85, 2, 2, 682, 44, 3, 2, 2, 2, 683, 684, 7, 67, 2, 2, 684, 685, 7, 85, 2, 2, 685, 686, 7, 69, 2, 2, 686, 46, 3, 2, 2, 2, 687, 688, 7, 67, 2, 2, 688, 689, 7, 86, 2, 2, 689, 48, 3, 2, 2, 2, 690, 691, 7, 67, 2, 2, 691, 692, 7, 87, 2, 2, 692, 693, 7, 86, 2, 2, 693, 694, 7, 74, 2, 2, 694, 695, 7, 81, 2, 2, 695, 696, 7, 84, 2, 2, 696, 697, 7, 75, 2, 2, 697, 698, 7, 92, 2, 2, 698, 699, 7, 67, 2, 2, 699, 700, 7, 86, 2, 2, 700, 701, 7, 75, 2, 2, 701, 702, 7, 81, 2, 2, 702, 703, 7, 80, 2, 2, 703, 50, 3, 2, 2, 2, 704, 705, 7, 68, 2, 2, 705, 706, 7, 71, 2, 2, 706, 707, 7, 86, 2, 2, 707, 708, 7, 89, 2, 2, 708, 709, 7, 71, 2, 2, 709, 710, 7, 71, 2, 2, 710, 711, 7, 80, 2, 2, 711, 52, 3, 2, 2, 2, 712, 713, 7, 68, 2, 2, 713, 714, 7, 81, 2, 2, 714, 715, 7, 86, 2, 2, 715, 716, 7, 74, 2, 2, 716, 54, 3, 2, 2, 2, 717, 718, 7, 68, 2, 2, 718, 719, 7, 87, 2, 2, 719, 720, 7, 69, 2, 2, 720, 721, 7, 77, 2, 2, 721, 722, 7, 71, 2, 2, 722, 723, 7, 86, 2, 2, 723, 56, 3, 2, 2, 2, 724, 725, 7, 68, 2, 2, 725, 726, 7, 87, 2, 2, 726, 727, 7, 69, 2, 2, 727, 728, 7, 77, 2, 2, 728, 729, 7, 71, 2, 2, 729, 730, 7, 86, 2, 2, 730, 731, 7, 85, 2, 2, 731, 58, 3, 2, 2, 2, 732, 733, 7, 68, 2, 2, 733, 734, 7, 91, 2, 2, 734, 60, 3, 2, 2, 2, 735, 736, 7, 69, 2, 2, 736, 737, 7, 67, 2, 2, 737, 738, 7, 69, 2, 2, 738, 739, 7, 74, 2, 2, 739, 740, 7, 71, 2, 2, 740, 62, 3, 2, 2, 2, 741, 742, 7, 69, 2, 2, 742, 743, 7, 67, 2, 2, 743, 744, 7, 85, 2, 2, 744, 745, 7, 69, 2, 2, 745, 746, 7, 67, 2, 2, 746, 747, 7, 70, 2, 2, 747, 748, 7, 71, 2, 2, 748, 64, 3, 2, 2, 2, 749, 750, 7, 69, 2, 2, 750, 751, 7, 67, 2, 2, 751, 752, 7, 85, 2, 2, 752, 753, 7, 71, 2, 2, 753, 66, 3, 2, 2, 2, 754, 755, 7, 69, 2, 2, 755, 756, 7, 67, 2, 2, 756, 757, 7, 85, 2, 2, 757, 758, 7, 86, 2, 2, 758, 68, 3, 2, 2, 2, 759, 760, 7, 69, 2, 2, 760, 761, 7, 74, 2, 2, 761, 762, 7, 67, 2, 2, 762, 763, 7, 80, 2, 2, 763, 764, 7, 73, 2, 2, 764, 765, 7, 71, 2, 2, 765, 70, 3, 2, 2, 2, 766, 767, 7, 69, 2, 2, 767, 768, 7, 74, 2, 2, 768, 769, 7, 71, 2, 2, 769, 770, 7, 69, 2, 2, 770, 771, 7, 77, 2, 2, 771, 72, 3, 2, 2, 2, 772, 773, 7, 69, 2, 2, 773, 774, 7, 78, 2, 2, 774, 775, 7, 71, 2, 2, 775, 776, 7, 67, 2, 2, 776, 777, 7, 84, 2, 2, 777, 74, 3, 2, 2, 2, 778, 779, 7, 69, 2, 2, 779, 780, 7, 78, 2, 2, 780, 781, 7, 87, 2, 2, 781, 782, 7, 85, 2, 2, 782, 783, 7, 86, 2, 2, 783, 784, 7, 71, 2, 2, 784, 785, 7, 84, 2, 2, 785, 76, 3, 2, 2, 2, 786, 787, 7, 69, 2, 2, 787, 788, 7, 78, 2, 2, 788, 789, 7, 87, 2, 2, 789, 790, 7, 85, 2, 2, 790, 791, 7, 86, 2, 2, 791, 792, 7, 71, 2, 2, 792, 793, 7, 84, 2, 2, 793, 794, 7, 71, 2, 2, 794, 795, 7, 70, 2, 2, 795, 78, 3, 2, 2, 2, 796, 797, 7, 69, 2, 2, 797, 798, 7, 81, 2, 2, 798, 799, 7, 70, 2, 2, 799, 800, 7, 71, 2, 2, 800, 801, 7, 73, 2, 2, 801, 802, 7, 71, 2, 2, 802, 803, 7, 80, 2, 2, 803, 80, 3, 2, 2, 2, 804, 805, 7, 69, 2, 2, 805, 806, 7, 81, 2, 2, 806, 807, 7, 78, 2, 2, 807, 808, 7, 78, 2, 2, 808, 809, 7, 67, 2, 2, 809, 810, 7, 86, 2, 2, 810, 811, 7, 71, 2, 2, 811, 82, 3, 2, 2, 2, 812, 813, 7, 69, 2, 2, 813, 814, 7, 81, 2, 2, 814, 815, 7, 78, 2, 2, 815, 816, 7, 78, 2, 2, 816, 817, 7, 71, 2, 2, 817, 818, 7, 69, 2, 2, 818, 819, 7, 86, 2, 2, 819, 820, 7, 75, 2, 2, 820, 821, 7, 81, 2, 2, 821, 822, 7, 80, 2, 2, 822, 84, 3, 2, 2, 2, 823, 824, 7, 69, 2, 2, 824, 825, 7, 81, 2, 2, 825, 826, 7, 78, 2, 2, 826, 827, 7, 87, 2, 2, 827, 828, 7, 79, 2, 2, 828, 829, 7, 80, 2, 2, 829, 86, 3, 2, 2, 2, 830, 831, 7, 69, 2, 2, 831, 832, 7, 81, 2, 2, 832, 833, 7, 78, 2, 2, 833, 834, 7, 87, 2, 2, 834, 835, 7, 79, 2, 2, 835, 836, 7, 80, 2, 2, 836, 837, 7, 85, 2, 2, 837, 88, 3, 2, 2, 2, 838, 839, 7, 69, 2, 2, 839, 840, 7, 81, 2, 2, 840, 841, 7, 79, 2, 2, 841, 842, 7, 79, 2, 2, 842, 843, 7, 71, 2, 2, 843, 844, 7, 80, 2, 2, 844, 845, 7, 86, 2, 2, 845, 90, 3, 2, 2, 2, 846, 847, 7, 69, 2, 2, 847, 848, 7, 81, 2, 2, 848, 849, 7, 79, 2, 2, 849, 850, 7, 79, 2, 2, 850, 851, 7, 75, 2, 2, 851, 852, 7, 86, 2, 2, 852, 92, 3, 2, 2, 2, 853, 854, 7, 69, 2, 2, 854, 855, 7, 81, 2, 2, 855, 856, 7, 79, 2, 2, 856, 857, 7, 82, 2, 2, 857, 858, 7, 67, 2, 2, 858, 859, 7, 69, 2, 2, 859, 860, 7, 86, 2, 2, 860, 94, 3, 2, 2, 2, 861, 862, 7, 69, 2, 2, 862, 863, 7, 81, 2, 2, 863, 864, 7, 79, 2, 2, 864, 865, 7, 82, 2, 2, 865, 866, 7, 67, 2, 2, 866, 867, 7, 69, 2, 2, 867, 868, 7, 86, 2, 2, 868, 869, 7, 75, 2, 2, 869, 870, 7, 81, 2, 2, 870, 871, 7, 80, 2, 2, 871, 872, 7, 85, 2, 2, 872, 96, 3, 2, 2, 2, 873, 874, 7, 69, 2, 2, 874, 875, 7, 81, 2, 2, 875, 876, 7, 79, 2, 2, 876, 877, 7, 82, 2, 2, 877, 878, 7, 87, 2, 2, 878, 879, 7, 86, 2, 2, 879, 880, 7, 71, 2, 2, 880, 98, 3, 2, 2, 2, 881, 882, 7, 69, 2, 2, 882, 883, 7, 81, 2, 2, 883, 884, 7, 80, 2, 2, 884, 885, 7, 69, 2, 2, 885, 886, 7, 67, 2, 2, 886, 887, 7, 86, 2, 2, 887, 888, 7, 71, 2, 2, 888, 889, 7, 80, 2, 2, 889, 890, 7, 67, 2, 2, 890, 891, 7, 86, 2, 2, 891, 892, 7, 71, 2, 2, 892, 100, 3, 2, 2, 2, 893, 894, 7, 69, 2, 2, 894, 895, 7, 81, 2, 2, 895, 896, 7, 80, 2, 2, 896, 897, 7, 85, 2, 2, 897, 898, 7, 86, 2, 2, 898, 899, 7, 84, 2, 2, 899, 900, 7, 67, 2, 2, 900, 901, 7, 75, 2, 2, 901, 902, 7, 80, 2, 2, 902, 903, 7, 86, 2, 2, 903, 102, 3, 2, 2, 2, 904, 905, 7, 69, 2, 2, 905, 906, 7, 81, 2, 2, 906, 907, 7, 85, 2, 2, 907, 908, 7, 86, 2, 2, 908, 104, 3, 2, 2, 2, 909, 910, 7, 69, 2, 2, 910, 911, 7, 84, 2, 2, 911, 912, 7, 71, 2, 2, 912, 913, 7, 67, 2, 2, 913, 914, 7, 86, 2, 2, 914, 915, 7, 71, 2, 2, 915, 106, 3, 2, 2, 2, 916, 917, 7, 69, 2, 2, 917, 918, 7, 84, 2, 2, 918, 919, 7, 81, 2, 2, 919, 920, 7, 85, 2, 2, 920, 921, 7, 85, 2, 2, 921, 108, 3, 2, 2, 2, 922, 923, 7, 69, 2, 2, 923, 924, 7, 87, 2, 2, 924, 925, 7, 68, 2, 2, 925, 926, 7, 71, 2, 2, 926, 110, 3, 2, 2, 2, 927, 928, 7, 69, 2, 2, 928, 929, 7, 87, 2, 2, 929, 930, 7, 84, 2, 2, 930, 931, 7, 84, 2, 2, 931, 932, 7, 71, 2, 2, 932, 933, 7, 80, 2, 2, 933, 934, 7, 86, 2, 2, 934, 112, 3, 2, 2, 2, 935, 936, 7, 69, 2, 2, 936, 937, 7, 87, 2, 2, 937, 938, 7, 84, 2, 2, 938, 939, 7, 84, 2, 2, 939, 940, 7, 71, 2, 2, 940, 941, 7, 80, 2, 2, 941, 942, 7, 86, 2, 2, 942, 943, 7, 97, 2, 2, 943, 944, 7, 70, 2, 2, 944, 945, 7, 67, 2, 2, 945, 946, 7, 86, 2, 2, 946, 947, 7, 71, 2, 2, 947, 114, 3, 2, 2, 2, 948, 949, 7, 69, 2, 2, 949, 950, 7, 87, 2, 2, 950, 951, 7, 84, 2, 2, 951, 952, 7, 84, 2, 2, 952, 953, 7, 71, 2, 2, 953, 954, 7, 80, 2, 2, 954, 955, 7, 86, 2, 2, 955, 956, 7, 97, 2, 2, 956, 957, 7, 86, 2, 2, 957, 958, 7, 75, 2, 2, 958, 959, 7, 79, 2, 2, 959, 960, 7, 71, 2, 2, 960, 116, 3, 2, 2, 2, 961, 962, 7, 69, 2, 2, 962, 963, 7, 87, 2, 2, 963, 964, 7, 84, 2, 2, 964, 965, 7, 84, 2, 2, 965, 966, 7, 71, 2, 2, 966, 967, 7, 80, 2, 2, 967, 968, 7, 86, 2, 2, 968, 969, 7, 97, 2, 2, 969, 970, 7, 86, 2, 2, 970, 971, 7, 75, 2, 2, 971, 972, 7, 79, 2, 2, 972, 973, 7, 71, 2, 2, 973, 974, 7, 85, 2, 2, 974, 975, 7, 86, 2, 2, 975, 976, 7, 67, 2, 2, 976, 977, 7, 79, 2, 2, 977, 978, 7, 82, 2, 2, 978, 118, 3, 2, 2, 2, 979, 980, 7, 69, 2, 2, 980, 981, 7, 87, 2, 2, 981, 982, 7, 84, 2, 2, 982, 983, 7, 84, 2, 2, 983, 984, 7, 71, 2, 2, 984, 985, 7, 80, 2, 2, 985, 986, 7, 86, 2, 2, 986, 987, 7, 97, 2, 2, 987, 988, 7, 87, 2, 2, 988, 989, 7, 85, 2, 2, 989, 990, 7, 71, 2, 2, 990, 991, 7, 84, 2, 2, 991, 120, 3, 2, 2, 2, 992, 993, 7, 70, 2, 2, 993, 994, 7, 67, 2, 2, 994, 995, 7, 86, 2, 2, 995, 996, 7, 67, 2, 2, 996, 122, 3, 2, 2, 2, 997, 998, 7, 70, 2, 2, 998, 999, 7, 67, 2, 2, 999, 1000, 7, 86, 2, 2, 1000, 1001, 7, 67, 2, 2, 1001, 1002, 7, 68, 2, 2, 1002, 1003, 7, 67, 2, 2, 1003, 1004, 7, 85, 2, 2, 1004, 1005, 7, 71, 2, 2, 1005, 124, 3, 2, 2, 2, 1006, 1007, 7, 70, 2, 2, 1007, 1008, 7, 67, 2, 2, 1008, 1009, 7, 86, 2, 2, 1009, 1010, 7, 67, 2, 2, 1010, 1011, 7, 68, 2, 2, 1011, 1012, 7, 67, 2, 2, 1012, 1013, 7, 85, 2, 2, 1013, 1014, 7, 71, 2, 2, 1014, 1023, 7, 85, 2, 2, 1015, 1016, 7, 85, 2, 2, 1016, 1017, 7, 69, 2, 2, 1017, 1018, 7, 74, 2, 2, 1018, 1019, 7, 71, 2, 2, 1019, 1020, 7, 79, 2, 2, 1020, 1021, 7, 67, 2, 2, 1021, 1023, 7, 85, 2, 2, 1022, 1006, 3, 2, 2, 2, 1022, 1015, 3, 2, 2, 2, 1023, 126, 3, 2, 2, 2, 1024, 1025, 7, 70, 2, 2, 1025, 1026, 7, 68, 2, 2, 1026, 1027, 7, 82, 2, 2, 1027, 1028, 7, 84, 2, 2, 1028, 1029, 7, 81, 2, 2, 1029, 1030, 7, 82, 2, 2, 1030, 1031, 7, 71, 2, 2, 1031, 1032, 7, 84, 2, 2, 1032, 1033, 7, 86, 2, 2, 1033, 1034, 7, 75, 2, 2, 1034, 1035, 7, 71, 2, 2, 1035, 1036, 7, 85, 2, 2, 1036, 128, 3, 2, 2, 2, 1037, 1038, 7, 70, 2, 2, 1038, 1039, 7, 71, 2, 2, 1039, 1040, 7, 72, 2, 2, 1040, 1041, 7, 75, 2, 2, 1041, 1042, 7, 80, 2, 2, 1042, 1043, 7, 71, 2, 2, 1043, 1044, 7, 70, 2, 2, 1044, 130, 3, 2, 2, 2, 1045, 1046, 7, 70, 2, 2, 1046, 1047, 7, 71, 2, 2, 1047, 1048, 7, 78, 2, 2, 1048, 1049, 7, 71, 2, 2, 1049, 1050, 7, 86, 2, 2, 1050, 1051, 7, 71, 2, 2, 1051, 132, 3, 2, 2, 2, 1052, 1053, 7, 70, 2, 2, 1053, 1054, 7, 71, 2, 2, 1054, 1055, 7, 78, 2, 2, 1055, 1056, 7, 75, 2, 2, 1056, 1057, 7, 79, 2, 2, 1057, 1058, 7, 75, 2, 2, 1058, 1059, 7, 86, 2, 2, 1059, 1060, 7, 71, 2, 2, 1060, 1061, 7, 70, 2, 2, 1061, 134, 3, 2, 2, 2, 1062, 1063, 7, 70, 2, 2, 1063, 1064, 7, 71, 2, 2, 1064, 1065, 7, 85, 2, 2, 1065, 1066, 7, 69, 2, 2, 1066, 136, 3, 2, 2, 2, 1067, 1068, 7, 70, 2, 2, 1068, 1069, 7, 71, 2, 2, 1069, 1070, 7, 85, 2, 2, 1070, 1071, 7, 69, 2, 2, 1071, 1072, 7, 84, 2, 2, 1072, 1073, 7, 75, 2, 2, 1073, 1074, 7, 68, 2, 2, 1074, 1075, 7, 71, 2, 2, 1075, 138, 3, 2, 2, 2, 1076, 1077, 7, 70, 2, 2, 1077, 1078, 7, 72, 2, 2, 1078, 1079, 7, 85, 2, 2, 1079, 140, 3, 2, 2, 2, 1080, 1081, 7, 70, 2, 2, 1081, 1082, 7, 75, 2, 2, 1082, 1083, 7, 84, 2, 2, 1083, 1084, 7, 71, 2, 2, 1084, 1085, 7, 69, 2, 2, 1085, 1086, 7, 86, 2, 2, 1086, 1087, 7, 81, 2, 2, 1087, 1088, 7, 84, 2, 2, 1088, 1089, 7, 75, 2, 2, 1089, 1090, 7, 71, 2, 2, 1090, 1091, 7, 85, 2, 2, 1091, 142, 3, 2, 2, 2, 1092, 1093, 7, 70, 2, 2, 1093, 1094, 7, 75, 2, 2, 1094, 1095, 7, 84, 2, 2, 1095, 1096, 7, 71, 2, 2, 1096, 1097, 7, 69, 2, 2, 1097, 1098, 7, 86, 2, 2, 1098, 1099, 7, 81, 2, 2, 1099, 1100, 7, 84, 2, 2, 1100, 1101, 7, 91, 2, 2, 1101, 144, 3, 2, 2, 2, 1102, 1103, 7, 70, 2, 2, 1103, 1104, 7, 75, 2, 2, 1104, 1105, 7, 85, 2, 2, 1105, 1106, 7, 86, 2, 2, 1106, 1107, 7, 75, 2, 2, 1107, 1108, 7, 80, 2, 2, 1108, 1109, 7, 69, 2, 2, 1109, 1110, 7, 86, 2, 2, 1110, 146, 3, 2, 2, 2, 1111, 1112, 7, 70, 2, 2, 1112, 1113, 7, 75, 2, 2, 1113, 1114, 7, 85, 2, 2, 1114, 1115, 7, 86, 2, 2, 1115, 1116, 7, 84, 2, 2, 1116, 1117, 7, 75, 2, 2, 1117, 1118, 7, 68, 2, 2, 1118, 1119, 7, 87, 2, 2, 1119, 1120, 7, 86, 2, 2, 1120, 1121, 7, 71, 2, 2, 1121, 148, 3, 2, 2, 2, 1122, 1123, 7, 70, 2, 2, 1123, 1124, 7, 75, 2, 2, 1124, 1125, 7, 88, 2, 2, 1125, 150, 3, 2, 2, 2, 1126, 1127, 7, 70, 2, 2, 1127, 1128, 7, 84, 2, 2, 1128, 1129, 7, 81, 2, 2, 1129, 1130, 7, 82, 2, 2, 1130, 152, 3, 2, 2, 2, 1131, 1132, 7, 71, 2, 2, 1132, 1133, 7, 78, 2, 2, 1133, 1134, 7, 85, 2, 2, 1134, 1135, 7, 71, 2, 2, 1135, 154, 3, 2, 2, 2, 1136, 1137, 7, 71, 2, 2, 1137, 1138, 7, 80, 2, 2, 1138, 1139, 7, 70, 2, 2, 1139, 156, 3, 2, 2, 2, 1140, 1141, 7, 71, 2, 2, 1141, 1142, 7, 85, 2, 2, 1142, 1143, 7, 69, 2, 2, 1143, 1144, 7, 67, 2, 2, 1144, 1145, 7, 82, 2, 2, 1145, 1146, 7, 71, 2, 2, 1146, 158, 3, 2, 2, 2, 1147, 1148, 7, 71, 2, 2, 1148, 1149, 7, 85, 2, 2, 1149, 1150, 7, 69, 2, 2, 1150, 1151, 7, 67, 2, 2, 1151, 1152, 7, 82, 2, 2, 1152, 1153, 7, 71, 2, 2, 1153, 1154, 7, 70, 2, 2, 1154, 160, 3, 2, 2, 2, 1155, 1156, 7, 71, 2, 2, 1156, 1157, 7, 90, 2, 2, 1157, 1158, 7, 69, 2, 2, 1158, 1159, 7, 71, 2, 2, 1159, 1160, 7, 82, 2, 2, 1160, 1161, 7, 86, 2, 2, 1161, 162, 3, 2, 2, 2, 1162, 1163, 7, 71, 2, 2, 1163, 1164, 7, 90, 2, 2, 1164, 1165, 7, 69, 2, 2, 1165, 1166, 7, 74, 2, 2, 1166, 1167, 7, 67, 2, 2, 1167, 1168, 7, 80, 2, 2, 1168, 1169, 7, 73, 2, 2, 1169, 1170, 7, 71, 2, 2, 1170, 164, 3, 2, 2, 2, 1171, 1172, 7, 71, 2, 2, 1172, 1173, 7, 90, 2, 2, 1173, 1174, 7, 75, 2, 2, 1174, 1175, 7, 85, 2, 2, 1175, 1176, 7, 86, 2, 2, 1176, 1177, 7, 85, 2, 2, 1177, 166, 3, 2, 2, 2, 1178, 1179, 7, 71, 2, 2, 1179, 1180, 7, 90, 2, 2, 1180, 1181, 7, 82, 2, 2, 1181, 1182, 7, 78, 2, 2, 1182, 1183, 7, 67, 2, 2, 1183, 1184, 7, 75, 2, 2, 1184, 1185, 7, 80, 2, 2, 1185, 168, 3, 2, 2, 2, 1186, 1187, 7, 71, 2, 2, 1187, 1188, 7, 90, 2, 2, 1188, 1189, 7, 82, 2, 2, 1189, 1190, 7, 81, 2, 2, 1190, 1191, 7, 84, 2, 2, 1191, 1192, 7, 86, 2, 2, 1192, 170, 3, 2, 2, 2, 1193, 1194, 7, 71, 2, 2, 1194, 1195, 7, 90, 2, 2, 1195, 1196, 7, 86, 2, 2, 1196, 1197, 7, 71, 2, 2, 1197, 1198, 7, 80, 2, 2, 1198, 1199, 7, 70, 2, 2, 1199, 1200, 7, 71, 2, 2, 1200, 1201, 7, 70, 2, 2, 1201, 172, 3, 2, 2, 2, 1202, 1203, 7, 71, 2, 2, 1203, 1204, 7, 90, 2, 2, 1204, 1205, 7, 86, 2, 2, 1205, 1206, 7, 71, 2, 2, 1206, 1207, 7, 84, 2, 2, 1207, 1208, 7, 80, 2, 2, 1208, 1209, 7, 67, 2, 2, 1209, 1210, 7, 78, 2, 2, 1210, 174, 3, 2, 2, 2, 1211, 1212, 7, 71, 2, 2, 1212, 1213, 7, 90, 2, 2, 1213, 1214, 7, 86, 2, 2, 1214, 1215, 7, 84, 2, 2, 1215, 1216, 7, 67, 2, 2, 1216, 1217, 7, 69, 2, 2, 1217, 1218, 7, 86, 2, 2, 1218, 176, 3, 2, 2, 2, 1219, 1220, 7, 72, 2, 2, 1220, 1221, 7, 67, 2, 2, 1221, 1222, 7, 78, 2, 2, 1222, 1223, 7, 85, 2, 2, 1223, 1224, 7, 71, 2, 2, 1224, 178, 3, 2, 2, 2, 1225, 1226, 7, 72, 2, 2, 1226, 1227, 7, 71, 2, 2, 1227, 1228, 7, 86, 2, 2, 1228, 1229, 7, 69, 2, 2, 1229, 1230, 7, 74, 2, 2, 1230, 180, 3, 2, 2, 2, 1231, 1232, 7, 72, 2, 2, 1232, 1233, 7, 75, 2, 2, 1233, 1234, 7, 71, 2, 2, 1234, 1235, 7, 78, 2, 2, 1235, 1236, 7, 70, 2, 2, 1236, 1237, 7, 85, 2, 2, 1237, 182, 3, 2, 2, 2, 1238, 1239, 7, 72, 2, 2, 1239, 1240, 7, 75, 2, 2, 1240, 1241, 7, 78, 2, 2, 1241, 1242, 7, 86, 2, 2, 1242, 1243, 7, 71, 2, 2, 1243, 1244, 7, 84, 2, 2, 1244, 184, 3, 2, 2, 2, 1245, 1246, 7, 72, 2, 2, 1246, 1247, 7, 75, 2, 2, 1247, 1248, 7, 78, 2, 2, 1248, 1249, 7, 71, 2, 2, 1249, 1250, 7, 72, 2, 2, 1250, 1251, 7, 81, 2, 2, 1251, 1252, 7, 84, 2, 2, 1252, 1253, 7, 79, 2, 2, 1253, 1254, 7, 67, 2, 2, 1254, 1255, 7, 86, 2, 2, 1255, 186, 3, 2, 2, 2, 1256, 1257, 7, 72, 2, 2, 1257, 1258, 7, 75, 2, 2, 1258, 1259, 7, 84, 2, 2, 1259, 1260, 7, 85, 2, 2, 1260, 1261, 7, 86, 2, 2, 1261, 188, 3, 2, 2, 2, 1262, 1263, 7, 72, 2, 2, 1263, 1264, 7, 81, 2, 2, 1264, 1265, 7, 78, 2, 2, 1265, 1266, 7, 78, 2, 2, 1266, 1267, 7, 81, 2, 2, 1267, 1268, 7, 89, 2, 2, 1268, 1269, 7, 75, 2, 2, 1269, 1270, 7, 80, 2, 2, 1270, 1271, 7, 73, 2, 2, 1271, 190, 3, 2, 2, 2, 1272, 1273, 7, 72, 2, 2, 1273, 1274, 7, 81, 2, 2, 1274, 1275, 7, 84, 2, 2, 1275, 192, 3, 2, 2, 2, 1276, 1277, 7, 72, 2, 2, 1277, 1278, 7, 81, 2, 2, 1278, 1279, 7, 84, 2, 2, 1279, 1280, 7, 71, 2, 2, 1280, 1281, 7, 75, 2, 2, 1281, 1282, 7, 73, 2, 2, 1282, 1283, 7, 80, 2, 2, 1283, 194, 3, 2, 2, 2, 1284, 1285, 7, 72, 2, 2, 1285, 1286, 7, 81, 2, 2, 1286, 1287, 7, 84, 2, 2, 1287, 1288, 7, 79, 2, 2, 1288, 1289, 7, 67, 2, 2, 1289, 1290, 7, 86, 2, 2, 1290, 196, 3, 2, 2, 2, 1291, 1292, 7, 72, 2, 2, 1292, 1293, 7, 81, 2, 2, 1293, 1294, 7, 84, 2, 2, 1294, 1295, 7, 79, 2, 2, 1295, 1296, 7, 67, 2, 2, 1296, 1297, 7, 86, 2, 2, 1297, 1298, 7, 86, 2, 2, 1298, 1299, 7, 71, 2, 2, 1299, 1300, 7, 70, 2, 2, 1300, 198, 3, 2, 2, 2, 1301, 1302, 7, 72, 2, 2, 1302, 1303, 7, 84, 2, 2, 1303, 1304, 7, 81, 2, 2, 1304, 1305, 7, 79, 2, 2, 1305, 200, 3, 2, 2, 2, 1306, 1307, 7, 72, 2, 2, 1307, 1308, 7, 87, 2, 2, 1308, 1309, 7, 78, 2, 2, 1309, 1310, 7, 78, 2, 2, 1310, 202, 3, 2, 2, 2, 1311, 1312, 7, 72, 2, 2, 1312, 1313, 7, 87, 2, 2, 1313, 1314, 7, 80, 2, 2, 1314, 1315, 7, 69, 2, 2, 1315, 1316, 7, 86, 2, 2, 1316, 1317, 7, 75, 2, 2, 1317, 1318, 7, 81, 2, 2, 1318, 1319, 7, 80, 2, 2, 1319, 204, 3, 2, 2, 2, 1320, 1321, 7, 72, 2, 2, 1321, 1322, 7, 87, 2, 2, 1322, 1323, 7, 80, 2, 2, 1323, 1324, 7, 69, 2, 2, 1324, 1325, 7, 86, 2, 2, 1325, 1326, 7, 75, 2, 2, 1326, 1327, 7, 81, 2, 2, 1327, 1328, 7, 80, 2, 2, 1328, 1329, 7, 85, 2, 2, 1329, 206, 3, 2, 2, 2, 1330, 1331, 7, 73, 2, 2, 1331, 1332, 7, 78, 2, 2, 1332, 1333, 7, 81, 2, 2, 1333, 1334, 7, 68, 2, 2, 1334, 1335, 7, 67, 2, 2, 1335, 1336, 7, 78, 2, 2, 1336, 208, 3, 2, 2, 2, 1337, 1338, 7, 73, 2, 2, 1338, 1339, 7, 84, 2, 2, 1339, 1340, 7, 67, 2, 2, 1340, 1341, 7, 80, 2, 2, 1341, 1342, 7, 86, 2, 2, 1342, 210, 3, 2, 2, 2, 1343, 1344, 7, 73, 2, 2, 1344, 1345, 7, 84, 2, 2, 1345, 1346, 7, 81, 2, 2, 1346, 1347, 7, 87, 2, 2, 1347, 1348, 7, 82, 2, 2, 1348, 212, 3, 2, 2, 2, 1349, 1350, 7, 73, 2, 2, 1350, 1351, 7, 84, 2, 2, 1351, 1352, 7, 81, 2, 2, 1352, 1353, 7, 87, 2, 2, 1353, 1354, 7, 82, 2, 2, 1354, 1355, 7, 75, 2, 2, 1355, 1356, 7, 80, 2, 2, 1356, 1357, 7, 73, 2, 2, 1357, 214, 3, 2, 2, 2, 1358, 1359, 7, 74, 2, 2, 1359, 1360, 7, 67, 2, 2, 1360, 1361, 7, 88, 2, 2, 1361, 1362, 7, 75, 2, 2, 1362, 1363, 7, 80, 2, 2, 1363, 1364, 7, 73, 2, 2, 1364, 216, 3, 2, 2, 2, 1365, 1366, 7, 75, 2, 2, 1366, 1367, 7, 72, 2, 2, 1367, 218, 3, 2, 2, 2, 1368, 1369, 7, 75, 2, 2, 1369, 1370, 7, 73, 2, 2, 1370, 1371, 7, 80, 2, 2, 1371, 1372, 7, 81, 2, 2, 1372, 1373, 7, 84, 2, 2, 1373, 1374, 7, 71, 2, 2, 1374, 220, 3, 2, 2, 2, 1375, 1376, 7, 75, 2, 2, 1376, 1377, 7, 79, 2, 2, 1377, 1378, 7, 82, 2, 2, 1378, 1379, 7, 81, 2, 2, 1379, 1380, 7, 84, 2, 2, 1380, 1381, 7, 86, 2, 2, 1381, 222, 3, 2, 2, 2, 1382, 1383, 7, 75, 2, 2, 1383, 1384, 7, 80, 2, 2, 1384, 224, 3, 2, 2, 2, 1385, 1386, 7, 75, 2, 2, 1386, 1387, 7, 80, 2, 2, 1387, 1388, 7, 70, 2, 2, 1388, 1389, 7, 71, 2, 2, 1389, 1390, 7, 90, 2, 2, 1390, 226, 3, 2, 2, 2, 1391, 1392, 7, 75, 2, 2, 1392, 1393, 7, 80, 2, 2, 1393, 1394, 7, 70, 2, 2, 1394, 1395, 7, 71, 2, 2, 1395, 1396, 7, 90, 2, 2, 1396, 1397, 7, 71, 2, 2, 1397, 1398, 7, 85, 2, 2, 1398, 228, 3, 2, 2, 2, 1399, 1400, 7, 75, 2, 2, 1400, 1401, 7, 80, 2, 2, 1401, 1402, 7, 80, 2, 2, 1402, 1403, 7, 71, 2, 2, 1403, 1404, 7, 84, 2, 2, 1404, 230, 3, 2, 2, 2, 1405, 1406, 7, 75, 2, 2, 1406, 1407, 7, 80, 2, 2, 1407, 1408, 7, 82, 2, 2, 1408, 1409, 7, 67, 2, 2, 1409, 1410, 7, 86, 2, 2, 1410, 1411, 7, 74, 2, 2, 1411, 232, 3, 2, 2, 2, 1412, 1413, 7, 75, 2, 2, 1413, 1414, 7, 80, 2, 2, 1414, 1415, 7, 82, 2, 2, 1415, 1416, 7, 87, 2, 2, 1416, 1417, 7, 86, 2, 2, 1417, 1418, 7, 72, 2, 2, 1418, 1419, 7, 81, 2, 2, 1419, 1420, 7, 84, 2, 2, 1420, 1421, 7, 79, 2, 2, 1421, 1422, 7, 67, 2, 2, 1422, 1423, 7, 86, 2, 2, 1423, 234, 3, 2, 2, 2, 1424, 1425, 7, 75, 2, 2, 1425, 1426, 7, 80, 2, 2, 1426, 1427, 7, 85, 2, 2, 1427, 1428, 7, 71, 2, 2, 1428, 1429, 7, 84, 2, 2, 1429, 1430, 7, 86, 2, 2, 1430, 236, 3, 2, 2, 2, 1431, 1432, 7, 75, 2, 2, 1432, 1433, 7, 80, 2, 2, 1433, 1434, 7, 86, 2, 2, 1434, 1435, 7, 71, 2, 2, 1435, 1436, 7, 84, 2, 2, 1436, 1437, 7, 85, 2, 2, 1437, 1438, 7, 71, 2, 2, 1438, 1439, 7, 69, 2, 2, 1439, 1440, 7, 86, 2, 2, 1440, 238, 3, 2, 2, 2, 1441, 1442, 7, 75, 2, 2, 1442, 1443, 7, 80, 2, 2, 1443, 1444, 7, 86, 2, 2, 1444, 1445, 7, 71, 2, 2, 1445, 1446, 7, 84, 2, 2, 1446, 1447, 7, 88, 2, 2, 1447, 1448, 7, 67, 2, 2, 1448, 1449, 7, 78, 2, 2, 1449, 240, 3, 2, 2, 2, 1450, 1451, 7, 75, 2, 2, 1451, 1452, 7, 80, 2, 2, 1452, 1453, 7, 86, 2, 2, 1453, 1454, 7, 81, 2, 2, 1454, 242, 3, 2, 2, 2, 1455, 1456, 7, 75, 2, 2, 1456, 1457, 7, 85, 2, 2, 1457, 244, 3, 2, 2, 2, 1458, 1459, 7, 75, 2, 2, 1459, 1460, 7, 86, 2, 2, 1460, 1461, 7, 71, 2, 2, 1461, 1462, 7, 79, 2, 2, 1462, 1463, 7, 85, 2, 2, 1463, 246, 3, 2, 2, 2, 1464, 1465, 7, 76, 2, 2, 1465, 1466, 7, 81, 2, 2, 1466, 1467, 7, 75, 2, 2, 1467, 1468, 7, 80, 2, 2, 1468, 248, 3, 2, 2, 2, 1469, 1470, 7, 77, 2, 2, 1470, 1471, 7, 71, 2, 2, 1471, 1472, 7, 91, 2, 2, 1472, 1473, 7, 85, 2, 2, 1473, 250, 3, 2, 2, 2, 1474, 1475, 7, 78, 2, 2, 1475, 1476, 7, 67, 2, 2, 1476, 1477, 7, 85, 2, 2, 1477, 1478, 7, 86, 2, 2, 1478, 252, 3, 2, 2, 2, 1479, 1480, 7, 78, 2, 2, 1480, 1481, 7, 67, 2, 2, 1481, 1482, 7, 86, 2, 2, 1482, 1483, 7, 71, 2, 2, 1483, 1484, 7, 84, 2, 2, 1484, 1485, 7, 67, 2, 2, 1485, 1486, 7, 78, 2, 2, 1486, 254, 3, 2, 2, 2, 1487, 1488, 7, 78, 2, 2, 1488, 1489, 7, 67, 2, 2, 1489, 1490, 7, 92, 2, 2, 1490, 1491, 7, 91, 2, 2, 1491, 256, 3, 2, 2, 2, 1492, 1493, 7, 78, 2, 2, 1493, 1494, 7, 71, 2, 2, 1494, 1495, 7, 67, 2, 2, 1495, 1496, 7, 70, 2, 2, 1496, 1497, 7, 75, 2, 2, 1497, 1498, 7, 80, 2, 2, 1498, 1499, 7, 73, 2, 2, 1499, 258, 3, 2, 2, 2, 1500, 1501, 7, 78, 2, 2, 1501, 1502, 7, 71, 2, 2, 1502, 1503, 7, 72, 2, 2, 1503, 1504, 7, 86, 2, 2, 1504, 260, 3, 2, 2, 2, 1505, 1506, 7, 78, 2, 2, 1506, 1507, 7, 75, 2, 2, 1507, 1508, 7, 77, 2, 2, 1508, 1509, 7, 71, 2, 2, 1509, 262, 3, 2, 2, 2, 1510, 1511, 7, 78, 2, 2, 1511, 1512, 7, 75, 2, 2, 1512, 1513, 7, 79, 2, 2, 1513, 1514, 7, 75, 2, 2, 1514, 1515, 7, 86, 2, 2, 1515, 264, 3, 2, 2, 2, 1516, 1517, 7, 78, 2, 2, 1517, 1518, 7, 75, 2, 2, 1518, 1519, 7, 80, 2, 2, 1519, 1520, 7, 71, 2, 2, 1520, 1521, 7, 85, 2, 2, 1521, 266, 3, 2, 2, 2, 1522, 1523, 7, 78, 2, 2, 1523, 1524, 7, 75, 2, 2, 1524, 1525, 7, 85, 2, 2, 1525, 1526, 7, 86, 2, 2, 1526, 268, 3, 2, 2, 2, 1527, 1528, 7, 78, 2, 2, 1528, 1529, 7, 81, 2, 2, 1529, 1530, 7, 67, 2, 2, 1530, 1531, 7, 70, 2, 2, 1531, 270, 3, 2, 2, 2, 1532, 1533, 7, 78, 2, 2, 1533, 1534, 7, 81, 2, 2, 1534, 1535, 7, 69, 2, 2, 1535, 1536, 7, 67, 2, 2, 1536, 1537, 7, 78, 2, 2, 1537, 272, 3, 2, 2, 2, 1538, 1539, 7, 78, 2, 2, 1539, 1540, 7, 81, 2, 2, 1540, 1541, 7, 69, 2, 2, 1541, 1542, 7, 67, 2, 2, 1542, 1543, 7, 86, 2, 2, 1543, 1544, 7, 75, 2, 2, 1544, 1545, 7, 81, 2, 2, 1545, 1546, 7, 80, 2, 2, 1546, 274, 3, 2, 2, 2, 1547, 1548, 7, 78, 2, 2, 1548, 1549, 7, 81, 2, 2, 1549, 1550, 7, 69, 2, 2, 1550, 1551, 7, 77, 2, 2, 1551, 276, 3, 2, 2, 2, 1552, 1553, 7, 78, 2, 2, 1553, 1554, 7, 81, 2, 2, 1554, 1555, 7, 69, 2, 2, 1555, 1556, 7, 77, 2, 2, 1556, 1557, 7, 85, 2, 2, 1557, 278, 3, 2, 2, 2, 1558, 1559, 7, 78, 2, 2, 1559, 1560, 7, 81, 2, 2, 1560, 1561, 7, 73, 2, 2, 1561, 1562, 7, 75, 2, 2, 1562, 1563, 7, 69, 2, 2, 1563, 1564, 7, 67, 2, 2, 1564, 1565, 7, 78, 2, 2, 1565, 280, 3, 2, 2, 2, 1566, 1567, 7, 79, 2, 2, 1567, 1568, 7, 67, 2, 2, 1568, 1569, 7, 69, 2, 2, 1569, 1570, 7, 84, 2, 2, 1570, 1571, 7, 81, 2, 2, 1571, 282, 3, 2, 2, 2, 1572, 1573, 7, 79, 2, 2, 1573, 1574, 7, 67, 2, 2, 1574, 1575, 7, 82, 2, 2, 1575, 284, 3, 2, 2, 2, 1576, 1577, 7, 79, 2, 2, 1577, 1578, 7, 67, 2, 2, 1578, 1579, 7, 86, 2, 2, 1579, 1580, 7, 69, 2, 2, 1580, 1581, 7, 74, 2, 2, 1581, 1582, 7, 71, 2, 2, 1582, 1583, 7, 70, 2, 2, 1583, 286, 3, 2, 2, 2, 1584, 1585, 7, 79, 2, 2, 1585, 1586, 7, 71, 2, 2, 1586, 1587, 7, 84, 2, 2, 1587, 1588, 7, 73, 2, 2, 1588, 1589, 7, 71, 2, 2, 1589, 288, 3, 2, 2, 2, 1590, 1591, 7, 79, 2, 2, 1591, 1592, 7, 85, 2, 2, 1592, 1593, 7, 69, 2, 2, 1593, 1594, 7, 77, 2, 2, 1594, 290, 3, 2, 2, 2, 1595, 1596, 7, 80, 2, 2, 1596, 1597, 7, 67, 2, 2, 1597, 1598, 7, 79, 2, 2, 1598, 1599, 7, 71, 2, 2, 1599, 1600, 7, 85, 2, 2, 1600, 1601, 7, 82, 2, 2, 1601, 1602, 7, 67, 2, 2, 1602, 1603, 7, 69, 2, 2, 1603, 1604, 7, 71, 2, 2, 1604, 292, 3, 2, 2, 2, 1605, 1606, 7, 80, 2, 2, 1606, 1607, 7, 67, 2, 2, 1607, 1608, 7, 79, 2, 2, 1608, 1609, 7, 71, 2, 2, 1609, 1610, 7, 85, 2, 2, 1610, 1611, 7, 82, 2, 2, 1611, 1612, 7, 67, 2, 2, 1612, 1613, 7, 69, 2, 2, 1613, 1614, 7, 71, 2, 2, 1614, 1615, 7, 85, 2, 2, 1615, 294, 3, 2, 2, 2, 1616, 1617, 7, 80, 2, 2, 1617, 1618, 7, 67, 2, 2, 1618, 1619, 7, 86, 2, 2, 1619, 1620, 7, 87, 2, 2, 1620, 1621, 7, 84, 2, 2, 1621, 1622, 7, 67, 2, 2, 1622, 1623, 7, 78, 2, 2, 1623, 296, 3, 2, 2, 2, 1624, 1625, 7, 80, 2, 2, 1625, 1626, 7, 81, 2, 2, 1626, 298, 3, 2, 2, 2, 1627, 1628, 7, 80, 2, 2, 1628, 1629, 7, 81, 2, 2, 1629, 1632, 7, 86, 2, 2, 1630, 1632, 7, 35, 2, 2, 1631, 1627, 3, 2, 2, 2, 1631, 1630, 3, 2, 2, 2, 1632, 300, 3, 2, 2, 2, 1633, 1634, 7, 80, 2, 2, 1634, 1635, 7, 87, 2, 2, 1635, 1636, 7, 78, 2, 2, 1636, 1637, 7, 78, 2, 2, 1637, 302, 3, 2, 2, 2, 1638, 1639, 7, 80, 2, 2, 1639, 1640, 7, 87, 2, 2, 1640, 1641, 7, 78, 2, 2, 1641, 1642, 7, 78, 2, 2, 1642, 1643, 7, 85, 2, 2, 1643, 304, 3, 2, 2, 2, 1644, 1645, 7, 81, 2, 2, 1645, 1646, 7, 72, 2, 2, 1646, 306, 3, 2, 2, 2, 1647, 1648, 7, 81, 2, 2, 1648, 1649, 7, 80, 2, 2, 1649, 308, 3, 2, 2, 2, 1650, 1651, 7, 81, 2, 2, 1651, 1652, 7, 80, 2, 2, 1652, 1653, 7, 78, 2, 2, 1653, 1654, 7, 91, 2, 2, 1654, 310, 3, 2, 2, 2, 1655, 1656, 7, 81, 2, 2, 1656, 1657, 7, 82, 2, 2, 1657, 1658, 7, 86, 2, 2, 1658, 1659, 7, 75, 2, 2, 1659, 1660, 7, 81, 2, 2, 1660, 1661, 7, 80, 2, 2, 1661, 312, 3, 2, 2, 2, 1662, 1663, 7, 81, 2, 2, 1663, 1664, 7, 82, 2, 2, 1664, 1665, 7, 86, 2, 2, 1665, 1666, 7, 75, 2, 2, 1666, 1667, 7, 81, 2, 2, 1667, 1668, 7, 80, 2, 2, 1668, 1669, 7, 85, 2, 2, 1669, 314, 3, 2, 2, 2, 1670, 1671, 7, 81, 2, 2, 1671, 1672, 7, 84, 2, 2, 1672, 316, 3, 2, 2, 2, 1673, 1674, 7, 81, 2, 2, 1674, 1675, 7, 84, 2, 2, 1675, 1676, 7, 70, 2, 2, 1676, 1677, 7, 71, 2, 2, 1677, 1678, 7, 84, 2, 2, 1678, 318, 3, 2, 2, 2, 1679, 1680, 7, 81, 2, 2, 1680, 1681, 7, 87, 2, 2, 1681, 1682, 7, 86, 2, 2, 1682, 320, 3, 2, 2, 2, 1683, 1684, 7, 81, 2, 2, 1684, 1685, 7, 87, 2, 2, 1685, 1686, 7, 86, 2, 2, 1686, 1687, 7, 71, 2, 2, 1687, 1688, 7, 84, 2, 2, 1688, 322, 3, 2, 2, 2, 1689, 1690, 7, 81, 2, 2, 1690, 1691, 7, 87, 2, 2, 1691, 1692, 7, 86, 2, 2, 1692, 1693, 7, 82, 2, 2, 1693, 1694, 7, 87, 2, 2, 1694, 1695, 7, 86, 2, 2, 1695, 1696, 7, 72, 2, 2, 1696, 1697, 7, 81, 2, 2, 1697, 1698, 7, 84, 2, 2, 1698, 1699, 7, 79, 2, 2, 1699, 1700, 7, 67, 2, 2, 1700, 1701, 7, 86, 2, 2, 1701, 324, 3, 2, 2, 2, 1702, 1703, 7, 81, 2, 2, 1703, 1704, 7, 88, 2, 2, 1704, 1705, 7, 71, 2, 2, 1705, 1706, 7, 84, 2, 2, 1706, 326, 3, 2, 2, 2, 1707, 1708, 7, 81, 2, 2, 1708, 1709, 7, 88, 2, 2, 1709, 1710, 7, 71, 2, 2, 1710, 1711, 7, 84, 2, 2, 1711, 1712, 7, 78, 2, 2, 1712, 1713, 7, 67, 2, 2, 1713, 1714, 7, 82, 2, 2, 1714, 1715, 7, 85, 2, 2, 1715, 328, 3, 2, 2, 2, 1716, 1717, 7, 81, 2, 2, 1717, 1718, 7, 88, 2, 2, 1718, 1719, 7, 71, 2, 2, 1719, 1720, 7, 84, 2, 2, 1720, 1721, 7, 78, 2, 2, 1721, 1722, 7, 67, 2, 2, 1722, 1723, 7, 91, 2, 2, 1723, 330, 3, 2, 2, 2, 1724, 1725, 7, 81, 2, 2, 1725, 1726, 7, 88, 2, 2, 1726, 1727, 7, 71, 2, 2, 1727, 1728, 7, 84, 2, 2, 1728, 1729, 7, 89, 2, 2, 1729, 1730, 7, 84, 2, 2, 1730, 1731, 7, 75, 2, 2, 1731, 1732, 7, 86, 2, 2, 1732, 1733, 7, 71, 2, 2, 1733, 332, 3, 2, 2, 2, 1734, 1735, 7, 82, 2, 2, 1735, 1736, 7, 67, 2, 2, 1736, 1737, 7, 84, 2, 2, 1737, 1738, 7, 86, 2, 2, 1738, 1739, 7, 75, 2, 2, 1739, 1740, 7, 86, 2, 2, 1740, 1741, 7, 75, 2, 2, 1741, 1742, 7, 81, 2, 2, 1742, 1743, 7, 80, 2, 2, 1743, 334, 3, 2, 2, 2, 1744, 1745, 7, 82, 2, 2, 1745, 1746, 7, 67, 2, 2, 1746, 1747, 7, 84, 2, 2, 1747, 1748, 7, 86, 2, 2, 1748, 1749, 7, 75, 2, 2, 1749, 1750, 7, 86, 2, 2, 1750, 1751, 7, 75, 2, 2, 1751, 1752, 7, 81, 2, 2, 1752, 1753, 7, 80, 2, 2, 1753, 1754, 7, 71, 2, 2, 1754, 1755, 7, 70, 2, 2, 1755, 336, 3, 2, 2, 2, 1756, 1757, 7, 82, 2, 2, 1757, 1758, 7, 67, 2, 2, 1758, 1759, 7, 84, 2, 2, 1759, 1760, 7, 86, 2, 2, 1760, 1761, 7, 75, 2, 2, 1761, 1762, 7, 86, 2, 2, 1762, 1763, 7, 75, 2, 2, 1763, 1764, 7, 81, 2, 2, 1764, 1765, 7, 80, 2, 2, 1765, 1766, 7, 85, 2, 2, 1766, 338, 3, 2, 2, 2, 1767, 1768, 7, 82, 2, 2, 1768, 1769, 7, 71, 2, 2, 1769, 1770, 7, 84, 2, 2, 1770, 1771, 7, 69, 2, 2, 1771, 1772, 7, 71, 2, 2, 1772, 1773, 7, 80, 2, 2, 1773, 1774, 7, 86, 2, 2, 1774, 340, 3, 2, 2, 2, 1775, 1776, 7, 82, 2, 2, 1776, 1777, 7, 75, 2, 2, 1777, 1778, 7, 88, 2, 2, 1778, 1779, 7, 81, 2, 2, 1779, 1780, 7, 86, 2, 2, 1780, 342, 3, 2, 2, 2, 1781, 1782, 7, 82, 2, 2, 1782, 1783, 7, 78, 2, 2, 1783, 1784, 7, 67, 2, 2, 1784, 1785, 7, 69, 2, 2, 1785, 1786, 7, 75, 2, 2, 1786, 1787, 7, 80, 2, 2, 1787, 1788, 7, 73, 2, 2, 1788, 344, 3, 2, 2, 2, 1789, 1790, 7, 82, 2, 2, 1790, 1791, 7, 81, 2, 2, 1791, 1792, 7, 85, 2, 2, 1792, 1793, 7, 75, 2, 2, 1793, 1794, 7, 86, 2, 2, 1794, 1795, 7, 75, 2, 2, 1795, 1796, 7, 81, 2, 2, 1796, 1797, 7, 80, 2, 2, 1797, 346, 3, 2, 2, 2, 1798, 1799, 7, 82, 2, 2, 1799, 1800, 7, 84, 2, 2, 1800, 1801, 7, 71, 2, 2, 1801, 1802, 7, 69, 2, 2, 1802, 1803, 7, 71, 2, 2, 1803, 1804, 7, 70, 2, 2, 1804, 1805, 7, 75, 2, 2, 1805, 1806, 7, 80, 2, 2, 1806, 1807, 7, 73, 2, 2, 1807, 348, 3, 2, 2, 2, 1808, 1809, 7, 82, 2, 2, 1809, 1810, 7, 84, 2, 2, 1810, 1811, 7, 75, 2, 2, 1811, 1812, 7, 79, 2, 2, 1812, 1813, 7, 67, 2, 2, 1813, 1814, 7, 84, 2, 2, 1814, 1815, 7, 91, 2, 2, 1815, 350, 3, 2, 2, 2, 1816, 1817, 7, 82, 2, 2, 1817, 1818, 7, 84, 2, 2, 1818, 1819, 7, 75, 2, 2, 1819, 1820, 7, 80, 2, 2, 1820, 1821, 7, 69, 2, 2, 1821, 1822, 7, 75, 2, 2, 1822, 1823, 7, 82, 2, 2, 1823, 1824, 7, 67, 2, 2, 1824, 1825, 7, 78, 2, 2, 1825, 1826, 7, 85, 2, 2, 1826, 352, 3, 2, 2, 2, 1827, 1828, 7, 82, 2, 2, 1828, 1829, 7, 84, 2, 2, 1829, 1830, 7, 81, 2, 2, 1830, 1831, 7, 82, 2, 2, 1831, 1832, 7, 71, 2, 2, 1832, 1833, 7, 84, 2, 2, 1833, 1834, 7, 86, 2, 2, 1834, 1835, 7, 75, 2, 2, 1835, 1836, 7, 71, 2, 2, 1836, 1837, 7, 85, 2, 2, 1837, 354, 3, 2, 2, 2, 1838, 1839, 7, 82, 2, 2, 1839, 1840, 7, 87, 2, 2, 1840, 1841, 7, 84, 2, 2, 1841, 1842, 7, 73, 2, 2, 1842, 1843, 7, 71, 2, 2, 1843, 356, 3, 2, 2, 2, 1844, 1845, 7, 83, 2, 2, 1845, 1846, 7, 87, 2, 2, 1846, 1847, 7, 71, 2, 2, 1847, 1848, 7, 84, 2, 2, 1848, 1849, 7, 91, 2, 2, 1849, 358, 3, 2, 2, 2, 1850, 1851, 7, 84, 2, 2, 1851, 1852, 7, 67, 2, 2, 1852, 1853, 7, 80, 2, 2, 1853, 1854, 7, 73, 2, 2, 1854, 1855, 7, 71, 2, 2, 1855, 360, 3, 2, 2, 2, 1856, 1857, 7, 84, 2, 2, 1857, 1858, 7, 71, 2, 2, 1858, 1859, 7, 69, 2, 2, 1859, 1860, 7, 81, 2, 2, 1860, 1861, 7, 84, 2, 2, 1861, 1862, 7, 70, 2, 2, 1862, 1863, 7, 84, 2, 2, 1863, 1864, 7, 71, 2, 2, 1864, 1865, 7, 67, 2, 2, 1865, 1866, 7, 70, 2, 2, 1866, 1867, 7, 71, 2, 2, 1867, 1868, 7, 84, 2, 2, 1868, 362, 3, 2, 2, 2, 1869, 1870, 7, 84, 2, 2, 1870, 1871, 7, 71, 2, 2, 1871, 1872, 7, 69, 2, 2, 1872, 1873, 7, 81, 2, 2, 1873, 1874, 7, 84, 2, 2, 1874, 1875, 7, 70, 2, 2, 1875, 1876, 7, 89, 2, 2, 1876, 1877, 7, 84, 2, 2, 1877, 1878, 7, 75, 2, 2, 1878, 1879, 7, 86, 2, 2, 1879, 1880, 7, 71, 2, 2, 1880, 1881, 7, 84, 2, 2, 1881, 364, 3, 2, 2, 2, 1882, 1883, 7, 84, 2, 2, 1883, 1884, 7, 71, 2, 2, 1884, 1885, 7, 69, 2, 2, 1885, 1886, 7, 81, 2, 2, 1886, 1887, 7, 88, 2, 2, 1887, 1888, 7, 71, 2, 2, 1888, 1889, 7, 84, 2, 2, 1889, 366, 3, 2, 2, 2, 1890, 1891, 7, 84, 2, 2, 1891, 1892, 7, 71, 2, 2, 1892, 1893, 7, 70, 2, 2, 1893, 1894, 7, 87, 2, 2, 1894, 1895, 7, 69, 2, 2, 1895, 1896, 7, 71, 2, 2, 1896, 368, 3, 2, 2, 2, 1897, 1898, 7, 84, 2, 2, 1898, 1899, 7, 71, 2, 2, 1899, 1900, 7, 72, 2, 2, 1900, 1901, 7, 71, 2, 2, 1901, 1902, 7, 84, 2, 2, 1902, 1903, 7, 71, 2, 2, 1903, 1904, 7, 80, 2, 2, 1904, 1905, 7, 69, 2, 2, 1905, 1906, 7, 71, 2, 2, 1906, 1907, 7, 85, 2, 2, 1907, 370, 3, 2, 2, 2, 1908, 1909, 7, 84, 2, 2, 1909, 1910, 7, 71, 2, 2, 1910, 1911, 7, 72, 2, 2, 1911, 1912, 7, 84, 2, 2, 1912, 1913, 7, 71, 2, 2, 1913, 1914, 7, 85, 2, 2, 1914, 1915, 7, 74, 2, 2, 1915, 372, 3, 2, 2, 2, 1916, 1917, 7, 84, 2, 2, 1917, 1918, 7, 71, 2, 2, 1918, 1919, 7, 80, 2, 2, 1919, 1920, 7, 67, 2, 2, 1920, 1921, 7, 79, 2, 2, 1921, 1922, 7, 71, 2, 2, 1922, 374, 3, 2, 2, 2, 1923, 1924, 7, 84, 2, 2, 1924, 1925, 7, 71, 2, 2, 1925, 1926, 7, 82, 2, 2, 1926, 1927, 7, 67, 2, 2, 1927, 1928, 7, 75, 2, 2, 1928, 1929, 7, 84, 2, 2, 1929, 376, 3, 2, 2, 2, 1930, 1931, 7, 84, 2, 2, 1931, 1932, 7, 71, 2, 2, 1932, 1933, 7, 82, 2, 2, 1933, 1934, 7, 78, 2, 2, 1934, 1935, 7, 67, 2, 2, 1935, 1936, 7, 69, 2, 2, 1936, 1937, 7, 71, 2, 2, 1937, 378, 3, 2, 2, 2, 1938, 1939, 7, 84, 2, 2, 1939, 1940, 7, 71, 2, 2, 1940, 1941, 7, 85, 2, 2, 1941, 1942, 7, 71, 2, 2, 1942, 1943, 7, 86, 2, 2, 1943, 380, 3, 2, 2, 2, 1944, 1945, 7, 84, 2, 2, 1945, 1946, 7, 71, 2, 2, 1946, 1947, 7, 85, 2, 2, 1947, 1948, 7, 86, 2, 2, 1948, 1949, 7, 84, 2, 2, 1949, 1950, 7, 75, 2, 2, 1950, 1951, 7, 69, 2, 2, 1951, 1952, 7, 86, 2, 2, 1952, 382, 3, 2, 2, 2, 1953, 1954, 7, 84, 2, 2, 1954, 1955, 7, 71, 2, 2, 1955, 1956, 7, 88, 2, 2, 1956, 1957, 7, 81, 2, 2, 1957, 1958, 7, 77, 2, 2, 1958, 1959, 7, 71, 2, 2, 1959, 384, 3, 2, 2, 2, 1960, 1961, 7, 84, 2, 2, 1961, 1962, 7, 75, 2, 2, 1962, 1963, 7, 73, 2, 2, 1963, 1964, 7, 74, 2, 2, 1964, 1965, 7, 86, 2, 2, 1965, 386, 3, 2, 2, 2, 1966, 1967, 7, 84, 2, 2, 1967, 1968, 7, 78, 2, 2, 1968, 1969, 7, 75, 2, 2, 1969, 1970, 7, 77, 2, 2, 1970, 1978, 7, 71, 2, 2, 1971, 1972, 7, 84, 2, 2, 1972, 1973, 7, 71, 2, 2, 1973, 1974, 7, 73, 2, 2, 1974, 1975, 7, 71, 2, 2, 1975, 1976, 7, 90, 2, 2, 1976, 1978, 7, 82, 2, 2, 1977, 1966, 3, 2, 2, 2, 1977, 1971, 3, 2, 2, 2, 1978, 388, 3, 2, 2, 2, 1979, 1980, 7, 84, 2, 2, 1980, 1981, 7, 81, 2, 2, 1981, 1982, 7, 78, 2, 2, 1982, 1983, 7, 71, 2, 2, 1983, 390, 3, 2, 2, 2, 1984, 1985, 7, 84, 2, 2, 1985, 1986, 7, 81, 2, 2, 1986, 1987, 7, 78, 2, 2, 1987, 1988, 7, 71, 2, 2, 1988, 1989, 7, 85, 2, 2, 1989, 392, 3, 2, 2, 2, 1990, 1991, 7, 84, 2, 2, 1991, 1992, 7, 81, 2, 2, 1992, 1993, 7, 78, 2, 2, 1993, 1994, 7, 78, 2, 2, 1994, 1995, 7, 68, 2, 2, 1995, 1996, 7, 67, 2, 2, 1996, 1997, 7, 69, 2, 2, 1997, 1998, 7, 77, 2, 2, 1998, 394, 3, 2, 2, 2, 1999, 2000, 7, 84, 2, 2, 2000, 2001, 7, 81, 2, 2, 2001, 2002, 7, 78, 2, 2, 2002, 2003, 7, 78, 2, 2, 2003, 2004, 7, 87, 2, 2, 2004, 2005, 7, 82, 2, 2, 2005, 396, 3, 2, 2, 2, 2006, 2007, 7, 84, 2, 2, 2007, 2008, 7, 81, 2, 2, 2008, 2009, 7, 89, 2, 2, 2009, 398, 3, 2, 2, 2, 2010, 2011, 7, 84, 2, 2, 2011, 2012, 7, 81, 2, 2, 2012, 2013, 7, 89, 2, 2, 2013, 2014, 7, 85, 2, 2, 2014, 400, 3, 2, 2, 2, 2015, 2016, 7, 85, 2, 2, 2016, 2017, 7, 69, 2, 2, 2017, 2018, 7, 74, 2, 2, 2018, 2019, 7, 71, 2, 2, 2019, 2020, 7, 79, 2, 2, 2020, 2021, 7, 67, 2, 2, 2021, 402, 3, 2, 2, 2, 2022, 2023, 7, 85, 2, 2, 2023, 2024, 7, 71, 2, 2, 2024, 2025, 7, 78, 2, 2, 2025, 2026, 7, 71, 2, 2, 2026, 2027, 7, 69, 2, 2, 2027, 2028, 7, 86, 2, 2, 2028, 404, 3, 2, 2, 2, 2029, 2030, 7, 85, 2, 2, 2030, 2031, 7, 71, 2, 2, 2031, 2032, 7, 79, 2, 2, 2032, 2033, 7, 75, 2, 2, 2033, 406, 3, 2, 2, 2, 2034, 2035, 7, 85, 2, 2, 2035, 2036, 7, 71, 2, 2, 2036, 2037, 7, 82, 2, 2, 2037, 2038, 7, 67, 2, 2, 2038, 2039, 7, 84, 2, 2, 2039, 2040, 7, 67, 2, 2, 2040, 2041, 7, 86, 2, 2, 2041, 2042, 7, 71, 2, 2, 2042, 2043, 7, 70, 2, 2, 2043, 408, 3, 2, 2, 2, 2044, 2045, 7, 85, 2, 2, 2045, 2046, 7, 71, 2, 2, 2046, 2047, 7, 84, 2, 2, 2047, 2048, 7, 70, 2, 2, 2048, 2049, 7, 71, 2, 2, 2049, 410, 3, 2, 2, 2, 2050, 2051, 7, 85, 2, 2, 2051, 2052, 7, 71, 2, 2, 2052, 2053, 7, 84, 2, 2, 2053, 2054, 7, 70, 2, 2, 2054, 2055, 7, 71, 2, 2, 2055, 2056, 7, 82, 2, 2, 2056, 2057, 7, 84, 2, 2, 2057, 2058, 7, 81, 2, 2, 2058, 2059, 7, 82, 2, 2, 2059, 2060, 7, 71, 2, 2, 2060, 2061, 7, 84, 2, 2, 2061, 2062, 7, 86, 2, 2, 2062, 2063, 7, 75, 2, 2, 2063, 2064, 7, 71, 2, 2, 2064, 2065, 7, 85, 2, 2, 2065, 412, 3, 2, 2, 2, 2066, 2067, 7, 85, 2, 2, 2067, 2068, 7, 71, 2, 2, 2068, 2069, 7, 85, 2, 2, 2069, 2070, 7, 85, 2, 2, 2070, 2071, 7, 75, 2, 2, 2071, 2072, 7, 81, 2, 2, 2072, 2073, 7, 80, 2, 2, 2073, 2074, 7, 97, 2, 2, 2074, 2075, 7, 87, 2, 2, 2075, 2076, 7, 85, 2, 2, 2076, 2077, 7, 71, 2, 2, 2077, 2078, 7, 84, 2, 2, 2078, 414, 3, 2, 2, 2, 2079, 2080, 7, 85, 2, 2, 2080, 2081, 7, 71, 2, 2, 2081, 2082, 7, 86, 2, 2, 2082, 416, 3, 2, 2, 2, 2083, 2084, 7, 79, 2, 2, 2084, 2085, 7, 75, 2, 2, 2085, 2086, 7, 80, 2, 2, 2086, 2087, 7, 87, 2, 2, 2087, 2088, 7, 85, 2, 2, 2088, 418, 3, 2, 2, 2, 2089, 2090, 7, 85, 2, 2, 2090, 2091, 7, 71, 2, 2, 2091, 2092, 7, 86, 2, 2, 2092, 2093, 7, 85, 2, 2, 2093, 420, 3, 2, 2, 2, 2094, 2095, 7, 85, 2, 2, 2095, 2096, 7, 74, 2, 2, 2096, 2097, 7, 81, 2, 2, 2097, 2098, 7, 89, 2, 2, 2098, 422, 3, 2, 2, 2, 2099, 2100, 7, 85, 2, 2, 2100, 2101, 7, 77, 2, 2, 2101, 2102, 7, 71, 2, 2, 2102, 2103, 7, 89, 2, 2, 2103, 2104, 7, 71, 2, 2, 2104, 2105, 7, 70, 2, 2, 2105, 424, 3, 2, 2, 2, 2106, 2107, 7, 85, 2, 2, 2107, 2108, 7, 81, 2, 2, 2108, 2109, 7, 79, 2, 2, 2109, 2110, 7, 71, 2, 2, 2110, 426, 3, 2, 2, 2, 2111, 2112, 7, 85, 2, 2, 2112, 2113, 7, 81, 2, 2, 2113, 2114, 7, 84, 2, 2, 2114, 2115, 7, 86, 2, 2, 2115, 428, 3, 2, 2, 2, 2116, 2117, 7, 85, 2, 2, 2117, 2118, 7, 81, 2, 2, 2118, 2119, 7, 84, 2, 2, 2119, 2120, 7, 86, 2, 2, 2120, 2121, 7, 71, 2, 2, 2121, 2122, 7, 70, 2, 2, 2122, 430, 3, 2, 2, 2, 2123, 2124, 7, 85, 2, 2, 2124, 2125, 7, 86, 2, 2, 2125, 2126, 7, 67, 2, 2, 2126, 2127, 7, 84, 2, 2, 2127, 2128, 7, 86, 2, 2, 2128, 432, 3, 2, 2, 2, 2129, 2130, 7, 85, 2, 2, 2130, 2131, 7, 86, 2, 2, 2131, 2132, 7, 67, 2, 2, 2132, 2133, 7, 86, 2, 2, 2133, 2134, 7, 75, 2, 2, 2134, 2135, 7, 85, 2, 2, 2135, 2136, 7, 86, 2, 2, 2136, 2137, 7, 75, 2, 2, 2137, 2138, 7, 69, 2, 2, 2138, 2139, 7, 85, 2, 2, 2139, 434, 3, 2, 2, 2, 2140, 2141, 7, 85, 2, 2, 2141, 2142, 7, 86, 2, 2, 2142, 2143, 7, 81, 2, 2, 2143, 2144, 7, 84, 2, 2, 2144, 2145, 7, 71, 2, 2, 2145, 2146, 7, 70, 2, 2, 2146, 436, 3, 2, 2, 2, 2147, 2148, 7, 85, 2, 2, 2148, 2149, 7, 86, 2, 2, 2149, 2150, 7, 84, 2, 2, 2150, 2151, 7, 67, 2, 2, 2151, 2152, 7, 86, 2, 2, 2152, 2153, 7, 75, 2, 2, 2153, 2154, 7, 72, 2, 2, 2154, 2155, 7, 91, 2, 2, 2155, 438, 3, 2, 2, 2, 2156, 2157, 7, 85, 2, 2, 2157, 2158, 7, 86, 2, 2, 2158, 2159, 7, 84, 2, 2, 2159, 2160, 7, 87, 2, 2, 2160, 2161, 7, 69, 2, 2, 2161, 2162, 7, 86, 2, 2, 2162, 440, 3, 2, 2, 2, 2163, 2164, 7, 85, 2, 2, 2164, 2165, 7, 87, 2, 2, 2165, 2166, 7, 68, 2, 2, 2166, 2167, 7, 85, 2, 2, 2167, 2168, 7, 86, 2, 2, 2168, 2169, 7, 84, 2, 2, 2169, 442, 3, 2, 2, 2, 2170, 2171, 7, 85, 2, 2, 2171, 2172, 7, 87, 2, 2, 2172, 2173, 7, 68, 2, 2, 2173, 2174, 7, 85, 2, 2, 2174, 2175, 7, 86, 2, 2, 2175, 2176, 7, 84, 2, 2, 2176, 2177, 7, 75, 2, 2, 2177, 2178, 7, 80, 2, 2, 2178, 2179, 7, 73, 2, 2, 2179, 444, 3, 2, 2, 2, 2180, 2181, 7, 86, 2, 2, 2181, 2182, 7, 67, 2, 2, 2182, 2183, 7, 68, 2, 2, 2183, 2184, 7, 78, 2, 2, 2184, 2185, 7, 71, 2, 2, 2185, 446, 3, 2, 2, 2, 2186, 2187, 7, 86, 2, 2, 2187, 2188, 7, 67, 2, 2, 2188, 2189, 7, 68, 2, 2, 2189, 2190, 7, 78, 2, 2, 2190, 2191, 7, 71, 2, 2, 2191, 2192, 7, 85, 2, 2, 2192, 448, 3, 2, 2, 2, 2193, 2194, 7, 86, 2, 2, 2194, 2195, 7, 67, 2, 2, 2195, 2196, 7, 68, 2, 2, 2196, 2197, 7, 78, 2, 2, 2197, 2198, 7, 71, 2, 2, 2198, 2199, 7, 85, 2, 2, 2199, 2200, 7, 67, 2, 2, 2200, 2201, 7, 79, 2, 2, 2201, 2202, 7, 82, 2, 2, 2202, 2203, 7, 78, 2, 2, 2203, 2204, 7, 71, 2, 2, 2204, 450, 3, 2, 2, 2, 2205, 2206, 7, 86, 2, 2, 2206, 2207, 7, 68, 2, 2, 2207, 2208, 7, 78, 2, 2, 2208, 2209, 7, 82, 2, 2, 2209, 2210, 7, 84, 2, 2, 2210, 2211, 7, 81, 2, 2, 2211, 2212, 7, 82, 2, 2, 2212, 2213, 7, 71, 2, 2, 2213, 2214, 7, 84, 2, 2, 2214, 2215, 7, 86, 2, 2, 2215, 2216, 7, 75, 2, 2, 2216, 2217, 7, 71, 2, 2, 2217, 2218, 7, 85, 2, 2, 2218, 452, 3, 2, 2, 2, 2219, 2220, 7, 86, 2, 2, 2220, 2221, 7, 71, 2, 2, 2221, 2222, 7, 79, 2, 2, 2222, 2223, 7, 82, 2, 2, 2223, 2224, 7, 81, 2, 2, 2224, 2225, 7, 84, 2, 2, 2225, 2226, 7, 67, 2, 2, 2226, 2227, 7, 84, 2, 2, 2227, 2233, 7, 91, 2, 2, 2228, 2229, 7, 86, 2, 2, 2229, 2230, 7, 71, 2, 2, 2230, 2231, 7, 79, 2, 2, 2231, 2233, 7, 82, 2, 2, 2232, 2219, 3, 2, 2, 2, 2232, 2228, 3, 2, 2, 2, 2233, 454, 3, 2, 2, 2, 2234, 2235, 7, 86, 2, 2, 2235, 2236, 7, 71, 2, 2, 2236, 2237, 7, 84, 2, 2, 2237, 2238, 7, 79, 2, 2, 2238, 2239, 7, 75, 2, 2, 2239, 2240, 7, 80, 2, 2, 2240, 2241, 7, 67, 2, 2, 2241, 2242, 7, 86, 2, 2, 2242, 2243, 7, 71, 2, 2, 2243, 2244, 7, 70, 2, 2, 2244, 456, 3, 2, 2, 2, 2245, 2246, 7, 86, 2, 2, 2246, 2247, 7, 74, 2, 2, 2247, 2248, 7, 71, 2, 2, 2248, 2249, 7, 80, 2, 2, 2249, 458, 3, 2, 2, 2, 2250, 2251, 7, 86, 2, 2, 2251, 2252, 7, 75, 2, 2, 2252, 2253, 7, 79, 2, 2, 2253, 2254, 7, 71, 2, 2, 2254, 460, 3, 2, 2, 2, 2255, 2256, 7, 86, 2, 2, 2256, 2257, 7, 81, 2, 2, 2257, 462, 3, 2, 2, 2, 2258, 2259, 7, 86, 2, 2, 2259, 2260, 7, 81, 2, 2, 2260, 2261, 7, 87, 2, 2, 2261, 2262, 7, 69, 2, 2, 2262, 2263, 7, 74, 2, 2, 2263, 464, 3, 2, 2, 2, 2264, 2265, 7, 86, 2, 2, 2265, 2266, 7, 84, 2, 2, 2266, 2267, 7, 67, 2, 2, 2267, 2268, 7, 75, 2, 2, 2268, 2269, 7, 78, 2, 2, 2269, 2270, 7, 75, 2, 2, 2270, 2271, 7, 80, 2, 2, 2271, 2272, 7, 73, 2, 2, 2272, 466, 3, 2, 2, 2, 2273, 2274, 7, 86, 2, 2, 2274, 2275, 7, 84, 2, 2, 2275, 2276, 7, 67, 2, 2, 2276, 2277, 7, 80, 2, 2, 2277, 2278, 7, 85, 2, 2, 2278, 2279, 7, 67, 2, 2, 2279, 2280, 7, 69, 2, 2, 2280, 2281, 7, 86, 2, 2, 2281, 2282, 7, 75, 2, 2, 2282, 2283, 7, 81, 2, 2, 2283, 2284, 7, 80, 2, 2, 2284, 468, 3, 2, 2, 2, 2285, 2286, 7, 86, 2, 2, 2286, 2287, 7, 84, 2, 2, 2287, 2288, 7, 67, 2, 2, 2288, 2289, 7, 80, 2, 2, 2289, 2290, 7, 85, 2, 2, 2290, 2291, 7, 67, 2, 2, 2291, 2292, 7, 69, 2, 2, 2292, 2293, 7, 86, 2, 2, 2293, 2294, 7, 75, 2, 2, 2294, 2295, 7, 81, 2, 2, 2295, 2296, 7, 80, 2, 2, 2296, 2297, 7, 85, 2, 2, 2297, 470, 3, 2, 2, 2, 2298, 2299, 7, 86, 2, 2, 2299, 2300, 7, 84, 2, 2, 2300, 2301, 7, 67, 2, 2, 2301, 2302, 7, 80, 2, 2, 2302, 2303, 7, 85, 2, 2, 2303, 2304, 7, 72, 2, 2, 2304, 2305, 7, 81, 2, 2, 2305, 2306, 7, 84, 2, 2, 2306, 2307, 7, 79, 2, 2, 2307, 472, 3, 2, 2, 2, 2308, 2309, 7, 86, 2, 2, 2309, 2310, 7, 84, 2, 2, 2310, 2311, 7, 75, 2, 2, 2311, 2312, 7, 79, 2, 2, 2312, 474, 3, 2, 2, 2, 2313, 2314, 7, 86, 2, 2, 2314, 2315, 7, 84, 2, 2, 2315, 2316, 7, 87, 2, 2, 2316, 2317, 7, 71, 2, 2, 2317, 476, 3, 2, 2, 2, 2318, 2319, 7, 86, 2, 2, 2319, 2320, 7, 84, 2, 2, 2320, 2321, 7, 87, 2, 2, 2321, 2322, 7, 80, 2, 2, 2322, 2323, 7, 69, 2, 2, 2323, 2324, 7, 67, 2, 2, 2324, 2325, 7, 86, 2, 2, 2325, 2326, 7, 71, 2, 2, 2326, 478, 3, 2, 2, 2, 2327, 2328, 7, 86, 2, 2, 2328, 2329, 7, 91, 2, 2, 2329, 2330, 7, 82, 2, 2, 2330, 2331, 7, 71, 2, 2, 2331, 480, 3, 2, 2, 2, 2332, 2333, 7, 87, 2, 2, 2333, 2334, 7, 80, 2, 2, 2334, 2335, 7, 67, 2, 2, 2335, 2336, 7, 84, 2, 2, 2336, 2337, 7, 69, 2, 2, 2337, 2338, 7, 74, 2, 2, 2338, 2339, 7, 75, 2, 2, 2339, 2340, 7, 88, 2, 2, 2340, 2341, 7, 71, 2, 2, 2341, 482, 3, 2, 2, 2, 2342, 2343, 7, 87, 2, 2, 2343, 2344, 7, 80, 2, 2, 2344, 2345, 7, 68, 2, 2, 2345, 2346, 7, 81, 2, 2, 2346, 2347, 7, 87, 2, 2, 2347, 2348, 7, 80, 2, 2, 2348, 2349, 7, 70, 2, 2, 2349, 2350, 7, 71, 2, 2, 2350, 2351, 7, 70, 2, 2, 2351, 484, 3, 2, 2, 2, 2352, 2353, 7, 87, 2, 2, 2353, 2354, 7, 80, 2, 2, 2354, 2355, 7, 69, 2, 2, 2355, 2356, 7, 67, 2, 2, 2356, 2357, 7, 69, 2, 2, 2357, 2358, 7, 74, 2, 2, 2358, 2359, 7, 71, 2, 2, 2359, 486, 3, 2, 2, 2, 2360, 2361, 7, 87, 2, 2, 2361, 2362, 7, 80, 2, 2, 2362, 2363, 7, 75, 2, 2, 2363, 2364, 7, 81, 2, 2, 2364, 2365, 7, 80, 2, 2, 2365, 488, 3, 2, 2, 2, 2366, 2367, 7, 87, 2, 2, 2367, 2368, 7, 80, 2, 2, 2368, 2369, 7, 75, 2, 2, 2369, 2370, 7, 83, 2, 2, 2370, 2371, 7, 87, 2, 2, 2371, 2372, 7, 71, 2, 2, 2372, 490, 3, 2, 2, 2, 2373, 2374, 7, 87, 2, 2, 2374, 2375, 7, 80, 2, 2, 2375, 2376, 7, 77, 2, 2, 2376, 2377, 7, 80, 2, 2, 2377, 2378, 7, 81, 2, 2, 2378, 2379, 7, 89, 2, 2, 2379, 2380, 7, 80, 2, 2, 2380, 492, 3, 2, 2, 2, 2381, 2382, 7, 87, 2, 2, 2382, 2383, 7, 80, 2, 2, 2383, 2384, 7, 78, 2, 2, 2384, 2385, 7, 81, 2, 2, 2385, 2386, 7, 69, 2, 2, 2386, 2387, 7, 77, 2, 2, 2387, 494, 3, 2, 2, 2, 2388, 2389, 7, 87, 2, 2, 2389, 2390, 7, 80, 2, 2, 2390, 2391, 7, 85, 2, 2, 2391, 2392, 7, 71, 2, 2, 2392, 2393, 7, 86, 2, 2, 2393, 496, 3, 2, 2, 2, 2394, 2395, 7, 87, 2, 2, 2395, 2396, 7, 82, 2, 2, 2396, 2397, 7, 70, 2, 2, 2397, 2398, 7, 67, 2, 2, 2398, 2399, 7, 86, 2, 2, 2399, 2400, 7, 71, 2, 2, 2400, 498, 3, 2, 2, 2, 2401, 2402, 7, 87, 2, 2, 2402, 2403, 7, 85, 2, 2, 2403, 2404, 7, 71, 2, 2, 2404, 500, 3, 2, 2, 2, 2405, 2406, 7, 87, 2, 2, 2406, 2407, 7, 85, 2, 2, 2407, 2408, 7, 71, 2, 2, 2408, 2409, 7, 84, 2, 2, 2409, 502, 3, 2, 2, 2, 2410, 2411, 7, 87, 2, 2, 2411, 2412, 7, 85, 2, 2, 2412, 2413, 7, 75, 2, 2, 2413, 2414, 7, 80, 2, 2, 2414, 2415, 7, 73, 2, 2, 2415, 504, 3, 2, 2, 2, 2416, 2417, 7, 88, 2, 2, 2417, 2418, 7, 67, 2, 2, 2418, 2419, 7, 78, 2, 2, 2419, 2420, 7, 87, 2, 2, 2420, 2421, 7, 71, 2, 2, 2421, 2422, 7, 85, 2, 2, 2422, 506, 3, 2, 2, 2, 2423, 2424, 7, 88, 2, 2, 2424, 2425, 7, 75, 2, 2, 2425, 2426, 7, 71, 2, 2, 2426, 2427, 7, 89, 2, 2, 2427, 508, 3, 2, 2, 2, 2428, 2429, 7, 88, 2, 2, 2429, 2430, 7, 75, 2, 2, 2430, 2431, 7, 71, 2, 2, 2431, 2432, 7, 89, 2, 2, 2432, 2433, 7, 85, 2, 2, 2433, 510, 3, 2, 2, 2, 2434, 2435, 7, 89, 2, 2, 2435, 2436, 7, 74, 2, 2, 2436, 2437, 7, 71, 2, 2, 2437, 2438, 7, 80, 2, 2, 2438, 512, 3, 2, 2, 2, 2439, 2440, 7, 89, 2, 2, 2440, 2441, 7, 74, 2, 2, 2441, 2442, 7, 71, 2, 2, 2442, 2443, 7, 84, 2, 2, 2443, 2444, 7, 71, 2, 2, 2444, 514, 3, 2, 2, 2, 2445, 2446, 7, 89, 2, 2, 2446, 2447, 7, 75, 2, 2, 2447, 2448, 7, 80, 2, 2, 2448, 2449, 7, 70, 2, 2, 2449, 2450, 7, 81, 2, 2, 2450, 2451, 7, 89, 2, 2, 2451, 516, 3, 2, 2, 2, 2452, 2453, 7, 89, 2, 2, 2453, 2454, 7, 75, 2, 2, 2454, 2455, 7, 86, 2, 2, 2455, 2456, 7, 74, 2, 2, 2456, 518, 3, 2, 2, 2, 2457, 2458, 7, 92, 2, 2, 2458, 2459, 7, 81, 2, 2, 2459, 2460, 7, 80, 2, 2, 2460, 2461, 7, 71, 2, 2, 2461, 520, 3, 2, 2, 2, 2462, 2466, 7, 63, 2, 2, 2463, 2464, 7, 63, 2, 2, 2464, 2466, 7, 63, 2, 2, 2465, 2462, 3, 2, 2, 2, 2465, 2463, 3, 2, 2, 2, 2466, 522, 3, 2, 2, 2, 2467, 2468, 7, 62, 2, 2, 2468, 2469, 7, 63, 2, 2, 2469, 2470, 7, 64, 2, 2, 2470, 524, 3, 2, 2, 2, 2471, 2472, 7, 62, 2, 2, 2472, 2473, 7, 64, 2, 2, 2473, 526, 3, 2, 2, 2, 2474, 2475, 7, 35, 2, 2, 2475, 2476, 7, 63, 2, 2, 2476, 528, 3, 2, 2, 2, 2477, 2478, 7, 62, 2, 2, 2478, 530, 3, 2, 2, 2, 2479, 2480, 7, 62, 2, 2, 2480, 2484, 7, 63, 2, 2, 2481, 2482, 7, 35, 2, 2, 2482, 2484, 7, 64, 2, 2, 2483, 2479, 3, 2, 2, 2, 2483, 2481, 3, 2, 2, 2, 2484, 532, 3, 2, 2, 2, 2485, 2486, 7, 64, 2, 2, 2486, 534, 3, 2, 2, 2, 2487, 2488, 7, 64, 2, 2, 2488, 2492, 7, 63, 2, 2, 2489, 2490, 7, 35, 2, 2, 2490, 2492, 7, 62, 2, 2, 2491, 2487, 3, 2, 2, 2, 2491, 2489, 3, 2, 2, 2, 2492, 536, 3, 2, 2, 2, 2493, 2494, 7, 45, 2, 2, 2494, 538, 3, 2, 2, 2, 2495, 2496, 7, 47, 2, 2, 2496, 540, 3, 2, 2, 2, 2497, 2498, 7, 44, 2, 2, 2498, 542, 3, 2, 2, 2, 2499, 2500, 7, 49, 2, 2, 2500, 544, 3, 2, 2, 2, 2501, 2502, 7, 39, 2, 2, 2502, 546, 3, 2, 2, 2, 2503, 2504, 7, 128, 2, 2, 2504, 548, 3, 2, 2, 2, 2505, 2506, 7, 40, 2, 2, 2506, 550, 3, 2, 2, 2, 2507, 2508, 7, 126, 2, 2, 2508, 552, 3, 2, 2, 2, 2509, 2510, 7, 126, 2, 2, 2510, 2511, 7, 126, 2, 2, 2511, 554, 3, 2, 2, 2, 2512, 2513, 7, 96, 2, 2, 2513, 556, 3, 2, 2, 2, 2514, 2515, 7, 61, 2, 2, 2515, 558, 3, 2, 2, 2, 2516, 2522, 7, 41, 2, 2, 2517, 2521, 10, 2, 2, 2, 2518, 2519, 7, 94, 2, 2, 2519, 2521, 11, 2, 2, 2, 2520, 2517, 3, 2, 2, 2, 2520, 2518, 3, 2, 2, 2, 2521, 2524, 3, 2, 2, 2, 2522, 2520, 3, 2, 2, 2, 2522, 2523, 3, 2, 2, 2, 2523, 2525, 3, 2, 2, 2, 2524, 2522, 3, 2, 2, 2, 2525, 2537, 7, 41, 2, 2, 2526, 2532, 7, 36, 2, 2, 2527, 2531, 10, 3, 2, 2, 2528, 2529, 7, 94, 2, 2, 2529, 2531, 11, 2, 2, 2, 2530, 2527, 3, 2, 2, 2, 2530, 2528, 3, 2, 2, 2, 2531, 2534, 3, 2, 2, 2, 2532, 2530, 3, 2, 2, 2, 2532, 2533, 3, 2, 2, 2, 2533, 2535, 3, 2, 2, 2, 2534, 2532, 3, 2, 2, 2, 2535, 2537, 7, 36, 2, 2, 2536, 2516, 3, 2, 2, 2, 2536, 2526, 3, 2, 2, 2, 2537, 560, 3, 2, 2, 2, 2538, 2540, 5, 589, 295, 2, 2539, 2538, 3, 2, 2, 2, 2540, 2541, 3, 2, 2, 2, 2541, 2539, 3, 2, 2, 2, 2541, 2542, 3, 2, 2, 2, 2542, 2543, 3, 2, 2, 2, 2543, 2544, 7, 78, 2, 2, 2544, 562, 3, 2, 2, 2, 2545, 2547, 5, 589, 295, 2, 2546, 2545, 3, 2, 2, 2, 2547, 2548, 3, 2, 2, 2, 2548, 2546, 3, 2, 2, 2, 2548, 2549, 3, 2, 2, 2, 2549, 2550, 3, 2, 2, 2, 2550, 2551, 7, 85, 2, 2, 2551, 564, 3, 2, 2, 2, 2552, 2554, 5, 589, 295, 2, 2553, 2552, 3, 2, 2, 2, 2554, 2555, 3, 2, 2, 2, 2555, 2553, 3, 2, 2, 2, 2555, 2556, 3, 2, 2, 2, 2556, 2557, 3, 2, 2, 2, 2557, 2558, 7, 91, 2, 2, 2558, 566, 3, 2, 2, 2, 2559, 2561, 5, 589, 295, 2, 2560, 2559, 3, 2, 2, 2, 2561, 2562, 3, 2, 2, 2, 2562, 2560, 3, 2, 2, 2, 2562, 2563, 3, 2, 2, 2, 2563, 568, 3, 2, 2, 2, 2564, 2566, 5, 589, 295, 2, 2565, 2564, 3, 2, 2, 2, 2566, 2567, 3, 2, 2, 2, 2567, 2565, 3, 2, 2, 2, 2567, 2568, 3, 2, 2, 2, 2568, 2569, 3, 2, 2, 2, 2569, 2570, 5, 587, 294, 2, 2570, 2576, 3, 2, 2, 2, 2571, 2572, 5, 585, 293, 2, 2572, 2573, 5, 587, 294, 2, 2573, 2574, 6, 285, 2, 2, 2574, 2576, 3, 2, 2, 2, 2575, 2565, 3, 2, 2, 2, 2575, 2571, 3, 2, 2, 2, 2576, 570, 3, 2, 2, 2, 2577, 2578, 5, 585, 293, 2, 2578, 2579, 6, 286, 3, 2, 2579, 572, 3, 2, 2, 2, 2580, 2582, 5, 589, 295, 2, 2581, 2580, 3, 2, 2, 2, 2582, 2583, 3, 2, 2, 2, 2583, 2581, 3, 2, 2, 2, 2583, 2584, 3, 2, 2, 2, 2584, 2586, 3, 2, 2, 2, 2585, 2587, 5, 587, 294, 2, 2586, 2585, 3, 2, 2, 2, 2586, 2587, 3, 2, 2, 2, 2587, 2588, 3, 2, 2, 2, 2588, 2589, 7, 72, 2, 2, 2589, 2598, 3, 2, 2, 2, 2590, 2592, 5, 585, 293, 2, 2591, 2593, 5, 587, 294, 2, 2592, 2591, 3, 2, 2, 2, 2592, 2593, 3, 2, 2, 2, 2593, 2594, 3, 2, 2, 2, 2594, 2595, 7, 72, 2, 2, 2595, 2596, 6, 287, 4, 2, 2596, 2598, 3, 2, 2, 2, 2597, 2581, 3, 2, 2, 2, 2597, 2590, 3, 2, 2, 2, 2598, 574, 3, 2, 2, 2, 2599, 2601, 5, 589, 295, 2, 2600, 2599, 3, 2, 2, 2, 2601, 2602, 3, 2, 2, 2, 2602, 2600, 3, 2, 2, 2, 2602, 2603, 3, 2, 2, 2, 2603, 2605, 3, 2, 2, 2, 2604, 2606, 5, 587, 294, 2, 2605, 2604, 3, 2, 2, 2, 2605, 2606, 3, 2, 2, 2, 2606, 2607, 3, 2, 2, 2, 2607, 2608, 7, 70, 2, 2, 2608, 2617, 3, 2, 2, 2, 2609, 2611, 5, 585, 293, 2, 2610, 2612, 5, 587, 294, 2, 2611, 2610, 3, 2, 2, 2, 2611, 2612, 3, 2, 2, 2, 2612, 2613, 3, 2, 2, 2, 2613, 2614, 7, 70, 2, 2, 2614, 2615, 6, 288, 5, 2, 2615, 2617, 3, 2, 2, 2, 2616, 2600, 3, 2, 2, 2, 2616, 2609, 3, 2, 2, 2, 2617, 576, 3, 2, 2, 2, 2618, 2620, 5, 589, 295, 2, 2619, 2618, 3, 2, 2, 2, 2620, 2621, 3, 2, 2, 2, 2621, 2619, 3, 2, 2, 2, 2621, 2622, 3, 2, 2, 2, 2622, 2624, 3, 2, 2, 2, 2623, 2625, 5, 587, 294, 2, 2624, 2623, 3, 2, 2, 2, 2624, 2625, 3, 2, 2, 2, 2625, 2626, 3, 2, 2, 2, 2626, 2627, 7, 68, 2, 2, 2627, 2628, 7, 70, 2, 2, 2628, 2639, 3, 2, 2, 2, 2629, 2631, 5, 585, 293, 2, 2630, 2632, 5, 587, 294, 2, 2631, 2630, 3, 2, 2, 2, 2631, 2632, 3, 2, 2, 2, 2632, 2633, 3, 2, 2, 2, 2633, 2634, 7, 68, 2, 2, 2634, 2635, 7, 70, 2, 2, 2635, 2636, 3, 2, 2, 2, 2636, 2637, 6, 289, 6, 2, 2637, 2639, 3, 2, 2, 2, 2638, 2619, 3, 2, 2, 2, 2638, 2629, 3, 2, 2, 2, 2639, 578, 3, 2, 2, 2, 2640, 2645, 5, 591, 296, 2, 2641, 2645, 5, 589, 295, 2, 2642, 2645, 7, 97, 2, 2, 2643, 2645, 5, 583, 292, 2, 2644, 2640, 3, 2, 2, 2, 2644, 2641, 3, 2, 2, 2, 2644, 2642, 3, 2, 2, 2, 2644, 2643, 3, 2, 2, 2, 2645, 2646, 3, 2, 2, 2, 2646, 2644, 3, 2, 2, 2, 2646, 2647, 3, 2, 2, 2, 2647, 580, 3, 2, 2, 2, 2648, 2654, 7, 98, 2, 2, 2649, 2653, 10, 4, 2, 2, 2650, 2651, 7, 98, 2, 2, 2651, 2653, 7, 98, 2, 2, 2652, 2649, 3, 2, 2, 2, 2652, 2650, 3, 2, 2, 2, 2653, 2656, 3, 2, 2, 2, 2654, 2652, 3, 2, 2, 2, 2654, 2655, 3, 2, 2, 2, 2655, 2657, 3, 2, 2, 2, 2656, 2654, 3, 2, 2, 2, 2657, 2658, 7, 98, 2, 2, 2658, 582, 3, 2, 2, 2, 2659, 2660, 7, 38, 2, 2, 2660, 2661, 7, 125, 2, 2, 2661, 2662, 3, 2, 2, 2, 2662, 2663, 5, 579, 290, 2, 2663, 2664, 7, 127, 2, 2, 2664, 584, 3, 2, 2, 2, 2665, 2667, 5, 589, 295, 2, 2666, 2665, 3, 2, 2, 2, 2667, 2668, 3, 2, 2, 2, 2668, 2666, 3, 2, 2, 2, 2668, 2669, 3, 2, 2, 2, 2669, 2670, 3, 2, 2, 2, 2670, 2674, 7, 48, 2, 2, 2671, 2673, 5, 589, 295, 2, 2672, 2671, 3, 2, 2, 2, 2673, 2676, 3, 2, 2, 2, 2674, 2672, 3, 2, 2, 2, 2674, 2675, 3, 2, 2, 2, 2675, 2684, 3, 2, 2, 2, 2676, 2674, 3, 2, 2, 2, 2677, 2679, 7, 48, 2, 2, 2678, 2680, 5, 589, 295, 2, 2679, 2678, 3, 2, 2, 2, 2680, 2681, 3, 2, 2, 2, 2681, 2679, 3, 2, 2, 2, 2681, 2682, 3, 2, 2, 2, 2682, 2684, 3, 2, 2, 2, 2683, 2666, 3, 2, 2, 2, 2683, 2677, 3, 2, 2, 2, 2684, 586, 3, 2, 2, 2, 2685, 2687, 7, 71, 2, 2, 2686, 2688, 9, 5, 2, 2, 2687, 2686, 3, 2, 2, 2, 2687, 2688, 3, 2, 2, 2, 2688, 2690, 3, 2, 2, 2, 2689, 2691, 5, 589, 295, 2, 2690, 2689, 3, 2, 2, 2, 2691, 2692, 3, 2, 2, 2, 2692, 2690, 3, 2, 2, 2, 2692, 2693, 3, 2, 2, 2, 2693, 588, 3, 2, 2, 2, 2694, 2695, 9, 6, 2, 2, 2695, 590, 3, 2, 2, 2, 2696, 2697, 9, 7, 2, 2, 2697, 592, 3, 2, 2, 2, 2698, 2699, 7, 47, 2, 2, 2699, 2700, 7, 47, 2, 2, 2700, 2706, 3, 2, 2, 2, 2701, 2702, 7, 94, 2, 2, 2702, 2705, 7, 12, 2, 2, 2703, 2705, 10, 8, 2, 2, 2704, 2701, 3, 2, 2, 2, 2704, 2703, 3, 2, 2, 2, 2705, 2708, 3, 2, 2, 2, 2706, 2704, 3, 2, 2, 2, 2706, 2707, 3, 2, 2, 2, 2707, 2710, 3, 2, 2, 2, 2708, 2706, 3, 2, 2, 2, 2709, 2711, 7, 15, 2, 2, 2710, 2709, 3, 2, 2, 2, 2710, 2711, 3, 2, 2, 2, 2711, 2713, 3, 2, 2, 2, 2712, 2714, 7, 12, 2, 2, 2713, 2712, 3, 2, 2, 2, 2713, 2714, 3, 2, 2, 2, 2714, 2715, 3, 2, 2, 2, 2715, 2716, 8, 297, 2, 2, 2716, 594, 3, 2, 2, 2, 2717, 2718, 7, 49, 2, 2, 2718, 2719, 7, 44, 2, 2, 2719, 2720, 3, 2, 2, 2, 2720, 2725, 6, 298, 7, 2, 2721, 2724, 5, 595, 298, 2, 2722, 2724, 11, 2, 2, 2, 2723, 2721, 3, 2, 2, 2, 2723, 2722, 3, 2, 2, 2, 2724, 2727, 3, 2, 2, 2, 2725, 2726, 3, 2, 2, 2, 2725, 2723, 3, 2, 2, 2, 2726, 2728, 3, 2, 2, 2, 2727, 2725, 3, 2, 2, 2, 2728, 2729, 7, 44, 2, 2, 2729, 2730, 7, 49, 2, 2, 2730, 2731, 3, 2, 2, 2, 2731, 2732, 8, 298, 2, 2, 2732, 596, 3, 2, 2, 2, 2733, 2735, 9, 9, 2, 2, 2734, 2733, 3, 2, 2, 2, 2735, 2736, 3, 2, 2, 2, 2736, 2734, 3, 2, 2, 2, 2736, 2737, 3, 2, 2, 2, 2737, 2738, 3, 2, 2, 2, 2738, 2739, 8, 299, 2, 2, 2739, 598, 3, 2, 2, 2, 2740, 2741, 11, 2, 2, 2, 2741, 600, 3, 2, 2, 2, 50, 2, 1022, 1631, 1977, 2232, 2465, 2483, 2491, 2520, 2522, 2530, 2532, 2536, 2541, 2548, 2555, 2562, 2567, 2575, 2583, 2586, 2592, 2597, 2602, 2605, 2611, 2616, 2621, 2624, 2631, 2638, 2644, 2646, 2652, 2654, 2668, 2674, 2681, 2683, 2687, 2692, 2704, 2706, 2710, 2713, 2723, 2725, 2736, 3, 2, 3, 2] \ No newline at end of file +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 384, 3618, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 4, 222, 9, 222, 4, 223, 9, 223, 4, 224, 9, 224, 4, 225, 9, 225, 4, 226, 9, 226, 4, 227, 9, 227, 4, 228, 9, 228, 4, 229, 9, 229, 4, 230, 9, 230, 4, 231, 9, 231, 4, 232, 9, 232, 4, 233, 9, 233, 4, 234, 9, 234, 4, 235, 9, 235, 4, 236, 9, 236, 4, 237, 9, 237, 4, 238, 9, 238, 4, 239, 9, 239, 4, 240, 9, 240, 4, 241, 9, 241, 4, 242, 9, 242, 4, 243, 9, 243, 4, 244, 9, 244, 4, 245, 9, 245, 4, 246, 9, 246, 4, 247, 9, 247, 4, 248, 9, 248, 4, 249, 9, 249, 4, 250, 9, 250, 4, 251, 9, 251, 4, 252, 9, 252, 4, 253, 9, 253, 4, 254, 9, 254, 4, 255, 9, 255, 4, 256, 9, 256, 4, 257, 9, 257, 4, 258, 9, 258, 4, 259, 9, 259, 4, 260, 9, 260, 4, 261, 9, 261, 4, 262, 9, 262, 4, 263, 9, 263, 4, 264, 9, 264, 4, 265, 9, 265, 4, 266, 9, 266, 4, 267, 9, 267, 4, 268, 9, 268, 4, 269, 9, 269, 4, 270, 9, 270, 4, 271, 9, 271, 4, 272, 9, 272, 4, 273, 9, 273, 4, 274, 9, 274, 4, 275, 9, 275, 4, 276, 9, 276, 4, 277, 9, 277, 4, 278, 9, 278, 4, 279, 9, 279, 4, 280, 9, 280, 4, 281, 9, 281, 4, 282, 9, 282, 4, 283, 9, 283, 4, 284, 9, 284, 4, 285, 9, 285, 4, 286, 9, 286, 4, 287, 9, 287, 4, 288, 9, 288, 4, 289, 9, 289, 4, 290, 9, 290, 4, 291, 9, 291, 4, 292, 9, 292, 4, 293, 9, 293, 4, 294, 9, 294, 4, 295, 9, 295, 4, 296, 9, 296, 4, 297, 9, 297, 4, 298, 9, 298, 4, 299, 9, 299, 4, 300, 9, 300, 4, 301, 9, 301, 4, 302, 9, 302, 4, 303, 9, 303, 4, 304, 9, 304, 4, 305, 9, 305, 4, 306, 9, 306, 4, 307, 9, 307, 4, 308, 9, 308, 4, 309, 9, 309, 4, 310, 9, 310, 4, 311, 9, 311, 4, 312, 9, 312, 4, 313, 9, 313, 4, 314, 9, 314, 4, 315, 9, 315, 4, 316, 9, 316, 4, 317, 9, 317, 4, 318, 9, 318, 4, 319, 9, 319, 4, 320, 9, 320, 4, 321, 9, 321, 4, 322, 9, 322, 4, 323, 9, 323, 4, 324, 9, 324, 4, 325, 9, 325, 4, 326, 9, 326, 4, 327, 9, 327, 4, 328, 9, 328, 4, 329, 9, 329, 4, 330, 9, 330, 4, 331, 9, 331, 4, 332, 9, 332, 4, 333, 9, 333, 4, 334, 9, 334, 4, 335, 9, 335, 4, 336, 9, 336, 4, 337, 9, 337, 4, 338, 9, 338, 4, 339, 9, 339, 4, 340, 9, 340, 4, 341, 9, 341, 4, 342, 9, 342, 4, 343, 9, 343, 4, 344, 9, 344, 4, 345, 9, 345, 4, 346, 9, 346, 4, 347, 9, 347, 4, 348, 9, 348, 4, 349, 9, 349, 4, 350, 9, 350, 4, 351, 9, 351, 4, 352, 9, 352, 4, 353, 9, 353, 4, 354, 9, 354, 4, 355, 9, 355, 4, 356, 9, 356, 4, 357, 9, 357, 4, 358, 9, 358, 4, 359, 9, 359, 4, 360, 9, 360, 4, 361, 9, 361, 4, 362, 9, 362, 4, 363, 9, 363, 4, 364, 9, 364, 4, 365, 9, 365, 4, 366, 9, 366, 4, 367, 9, 367, 4, 368, 9, 368, 4, 369, 9, 369, 4, 370, 9, 370, 4, 371, 9, 371, 4, 372, 9, 372, 4, 373, 9, 373, 4, 374, 9, 374, 4, 375, 9, 375, 4, 376, 9, 376, 4, 377, 9, 377, 4, 378, 9, 378, 4, 379, 9, 379, 4, 380, 9, 380, 4, 381, 9, 381, 4, 382, 9, 382, 4, 383, 9, 383, 4, 384, 9, 384, 4, 385, 9, 385, 4, 386, 9, 386, 4, 387, 9, 387, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 138, 3, 139, 3, 139, 3, 139, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 140, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 147, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 149, 3, 149, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 160, 3, 160, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 3, 172, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 176, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 180, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 181, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, 3, 193, 3, 193, 3, 193, 3, 193, 5, 193, 2144, 10, 193, 3, 194, 3, 194, 3, 194, 3, 194, 3, 194, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 195, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 196, 3, 197, 3, 197, 3, 197, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 198, 3, 199, 3, 199, 3, 199, 3, 200, 3, 200, 3, 200, 3, 200, 3, 200, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 201, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 202, 3, 203, 3, 203, 3, 203, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 204, 3, 205, 3, 205, 3, 205, 3, 205, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 206, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 207, 3, 208, 3, 208, 3, 208, 3, 208, 3, 208, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 209, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 210, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 211, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 212, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 213, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 214, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 215, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 216, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 217, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 218, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 219, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 220, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 221, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 222, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 223, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 224, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 225, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 226, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 227, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 228, 3, 229, 3, 229, 3, 229, 3, 229, 3, 229, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 230, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 231, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 232, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 233, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 234, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 235, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 236, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 237, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 240, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 241, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 242, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 243, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 244, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 3, 245, 5, 245, 2569, 10, 245, 3, 246, 3, 246, 3, 246, 3, 246, 3, 246, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 247, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 248, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 249, 3, 250, 3, 250, 3, 250, 3, 250, 3, 251, 3, 251, 3, 251, 3, 251, 3, 251, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 252, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 253, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 254, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 255, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 256, 3, 257, 3, 257, 3, 257, 3, 257, 3, 257, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 258, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 259, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 260, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 261, 3, 262, 3, 262, 3, 262, 3, 262, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 263, 3, 264, 3, 264, 3, 264, 3, 264, 3, 264, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 265, 3, 266, 3, 266, 3, 266, 3, 266, 3, 266, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 267, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 268, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 269, 3, 270, 3, 270, 3, 270, 3, 270, 3, 270, 3, 271, 3, 271, 3, 271, 3, 271, 3, 271, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 272, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 273, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 274, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 275, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 276, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 277, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 278, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 279, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 280, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 281, 3, 282, 3, 282, 3, 282, 3, 282, 3, 282, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 283, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 284, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 285, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 286, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 287, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 288, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 289, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 3, 290, 5, 290, 2922, 10, 290, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 291, 3, 292, 3, 292, 3, 292, 3, 292, 3, 292, 3, 293, 3, 293, 3, 293, 3, 293, 3, 293, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 294, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 295, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 296, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 297, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 298, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 299, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 300, 3, 301, 3, 301, 3, 301, 3, 302, 3, 302, 3, 302, 3, 302, 3, 302, 3, 302, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 303, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 304, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 305, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 306, 3, 307, 3, 307, 3, 307, 3, 307, 3, 307, 3, 308, 3, 308, 3, 308, 3, 308, 3, 308, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 309, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 310, 3, 311, 3, 311, 3, 311, 3, 311, 3, 311, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 312, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 313, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 314, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 315, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 316, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 317, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 318, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 319, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 320, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 321, 3, 322, 3, 322, 3, 322, 3, 322, 3, 323, 3, 323, 3, 323, 3, 323, 3, 323, 3, 324, 3, 324, 3, 324, 3, 324, 3, 324, 3, 324, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 325, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 326, 3, 327, 3, 327, 3, 327, 3, 327, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 328, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 329, 3, 330, 3, 330, 3, 330, 3, 330, 3, 330, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 331, 3, 332, 3, 332, 3, 332, 3, 332, 3, 332, 3, 333, 3, 333, 3, 333, 3, 333, 3, 333, 3, 334, 3, 334, 3, 334, 3, 334, 3, 334, 3, 334, 3, 335, 3, 335, 3, 335, 3, 335, 3, 335, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 336, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 337, 3, 338, 3, 338, 3, 338, 3, 338, 3, 338, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 339, 3, 340, 3, 340, 3, 340, 3, 340, 3, 340, 3, 341, 3, 341, 3, 341, 3, 341, 3, 341, 3, 341, 3, 342, 3, 342, 3, 342, 3, 342, 3, 342, 3, 343, 3, 343, 3, 343, 5, 343, 3317, 10, 343, 3, 344, 3, 344, 3, 344, 3, 344, 3, 345, 3, 345, 3, 345, 3, 346, 3, 346, 3, 346, 3, 347, 3, 347, 3, 348, 3, 348, 3, 348, 3, 348, 5, 348, 3335, 10, 348, 3, 349, 3, 349, 3, 350, 3, 350, 3, 350, 3, 350, 5, 350, 3343, 10, 350, 3, 351, 3, 351, 3, 352, 3, 352, 3, 353, 3, 353, 3, 354, 3, 354, 3, 355, 3, 355, 3, 356, 3, 356, 3, 357, 3, 357, 3, 358, 3, 358, 3, 359, 3, 359, 3, 359, 3, 360, 3, 360, 3, 361, 3, 361, 3, 362, 3, 362, 3, 362, 3, 363, 3, 363, 3, 363, 3, 364, 3, 364, 3, 364, 3, 364, 3, 365, 3, 365, 3, 365, 3, 366, 3, 366, 3, 367, 3, 367, 3, 367, 3, 367, 7, 367, 3387, 10, 367, 12, 367, 14, 367, 3390, 11, 367, 3, 367, 3, 367, 3, 367, 3, 367, 3, 367, 7, 367, 3397, 10, 367, 12, 367, 14, 367, 3400, 11, 367, 3, 367, 3, 367, 3, 367, 3, 367, 3, 367, 7, 367, 3407, 10, 367, 12, 367, 14, 367, 3410, 11, 367, 3, 367, 5, 367, 3413, 10, 367, 3, 368, 3, 368, 3, 368, 3, 368, 7, 368, 3419, 10, 368, 12, 368, 14, 368, 3422, 11, 368, 3, 368, 3, 368, 3, 369, 6, 369, 3427, 10, 369, 13, 369, 14, 369, 3428, 3, 369, 3, 369, 3, 370, 6, 370, 3434, 10, 370, 13, 370, 14, 370, 3435, 3, 370, 3, 370, 3, 371, 6, 371, 3441, 10, 371, 13, 371, 14, 371, 3442, 3, 371, 3, 371, 3, 372, 6, 372, 3448, 10, 372, 13, 372, 14, 372, 3449, 3, 373, 6, 373, 3453, 10, 373, 13, 373, 14, 373, 3454, 3, 373, 3, 373, 3, 373, 3, 373, 3, 373, 5, 373, 3462, 10, 373, 3, 374, 3, 374, 3, 375, 6, 375, 3467, 10, 375, 13, 375, 14, 375, 3468, 3, 375, 5, 375, 3472, 10, 375, 3, 375, 3, 375, 3, 375, 3, 375, 5, 375, 3478, 10, 375, 3, 375, 3, 375, 5, 375, 3482, 10, 375, 3, 376, 6, 376, 3485, 10, 376, 13, 376, 14, 376, 3486, 3, 376, 5, 376, 3490, 10, 376, 3, 376, 3, 376, 3, 376, 3, 376, 5, 376, 3496, 10, 376, 3, 376, 3, 376, 5, 376, 3500, 10, 376, 3, 377, 6, 377, 3503, 10, 377, 13, 377, 14, 377, 3504, 3, 377, 5, 377, 3508, 10, 377, 3, 377, 3, 377, 3, 377, 3, 377, 3, 377, 5, 377, 3515, 10, 377, 3, 377, 3, 377, 3, 377, 5, 377, 3520, 10, 377, 3, 378, 3, 378, 3, 378, 6, 378, 3525, 10, 378, 13, 378, 14, 378, 3526, 3, 379, 3, 379, 3, 379, 3, 379, 7, 379, 3533, 10, 379, 12, 379, 14, 379, 3536, 11, 379, 3, 379, 3, 379, 3, 380, 6, 380, 3541, 10, 380, 13, 380, 14, 380, 3542, 3, 380, 3, 380, 7, 380, 3547, 10, 380, 12, 380, 14, 380, 3550, 11, 380, 3, 380, 3, 380, 6, 380, 3554, 10, 380, 13, 380, 14, 380, 3555, 5, 380, 3558, 10, 380, 3, 381, 3, 381, 5, 381, 3562, 10, 381, 3, 381, 6, 381, 3565, 10, 381, 13, 381, 14, 381, 3566, 3, 382, 3, 382, 3, 383, 3, 383, 3, 384, 3, 384, 3, 384, 3, 384, 3, 384, 3, 384, 7, 384, 3579, 10, 384, 12, 384, 14, 384, 3582, 11, 384, 3, 384, 5, 384, 3585, 10, 384, 3, 384, 5, 384, 3588, 10, 384, 3, 384, 3, 384, 3, 385, 3, 385, 3, 385, 3, 385, 3, 385, 7, 385, 3597, 10, 385, 12, 385, 14, 385, 3600, 11, 385, 3, 385, 3, 385, 3, 385, 3, 385, 5, 385, 3606, 10, 385, 3, 385, 3, 385, 3, 386, 6, 386, 3611, 10, 386, 13, 386, 14, 386, 3612, 3, 386, 3, 386, 3, 387, 3, 387, 3, 3598, 2, 2, 388, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 119, 2, 61, 121, 2, 62, 123, 2, 63, 125, 2, 64, 127, 2, 65, 129, 2, 66, 131, 2, 67, 133, 2, 68, 135, 2, 69, 137, 2, 70, 139, 2, 71, 141, 2, 72, 143, 2, 73, 145, 2, 74, 147, 2, 75, 149, 2, 76, 151, 2, 77, 153, 2, 78, 155, 2, 79, 157, 2, 80, 159, 2, 81, 161, 2, 82, 163, 2, 83, 165, 2, 84, 167, 2, 85, 169, 2, 86, 171, 2, 87, 173, 2, 88, 175, 2, 89, 177, 2, 90, 179, 2, 91, 181, 2, 92, 183, 2, 93, 185, 2, 94, 187, 2, 95, 189, 2, 96, 191, 2, 97, 193, 2, 98, 195, 2, 99, 197, 2, 100, 199, 2, 101, 201, 2, 102, 203, 2, 103, 205, 2, 104, 207, 2, 105, 209, 2, 106, 211, 2, 107, 213, 2, 108, 215, 2, 109, 217, 2, 110, 219, 2, 111, 221, 2, 112, 223, 2, 113, 225, 2, 114, 227, 2, 115, 229, 2, 116, 231, 2, 117, 233, 2, 118, 235, 2, 119, 237, 2, 120, 239, 2, 121, 241, 2, 122, 243, 2, 123, 245, 2, 124, 247, 2, 125, 249, 2, 126, 251, 2, 127, 253, 2, 128, 255, 2, 129, 257, 2, 130, 259, 2, 131, 261, 2, 132, 263, 2, 133, 265, 2, 134, 267, 2, 135, 269, 2, 136, 271, 2, 137, 273, 2, 138, 275, 2, 139, 277, 2, 140, 279, 2, 141, 281, 2, 142, 283, 2, 143, 285, 2, 144, 287, 2, 145, 289, 2, 146, 291, 2, 147, 293, 2, 148, 295, 2, 149, 297, 2, 150, 299, 2, 151, 301, 2, 152, 303, 2, 153, 305, 2, 154, 307, 2, 155, 309, 2, 156, 311, 2, 157, 313, 2, 158, 315, 2, 159, 317, 2, 160, 319, 2, 161, 321, 2, 162, 323, 2, 163, 325, 2, 164, 327, 2, 165, 329, 2, 166, 331, 2, 167, 333, 2, 168, 335, 2, 169, 337, 2, 170, 339, 2, 171, 341, 2, 172, 343, 2, 173, 345, 2, 174, 347, 2, 175, 349, 2, 176, 351, 2, 177, 353, 2, 178, 355, 2, 179, 357, 2, 180, 359, 2, 181, 361, 2, 182, 363, 2, 183, 365, 2, 184, 367, 2, 185, 369, 2, 186, 371, 2, 187, 373, 2, 188, 375, 2, 189, 377, 2, 190, 379, 2, 191, 381, 2, 192, 383, 2, 193, 385, 2, 194, 387, 2, 195, 389, 2, 196, 391, 2, 197, 393, 2, 198, 395, 2, 199, 397, 2, 200, 399, 2, 201, 401, 2, 202, 403, 2, 203, 405, 2, 204, 407, 2, 205, 409, 2, 206, 411, 2, 207, 413, 2, 208, 415, 2, 209, 417, 2, 210, 419, 2, 211, 421, 2, 212, 423, 2, 213, 425, 2, 214, 427, 2, 215, 429, 2, 216, 431, 2, 217, 433, 2, 218, 435, 2, 219, 437, 2, 220, 439, 2, 221, 441, 2, 222, 443, 2, 223, 445, 2, 224, 447, 2, 225, 449, 2, 226, 451, 2, 227, 453, 2, 228, 455, 2, 229, 457, 2, 230, 459, 2, 231, 461, 2, 232, 463, 2, 233, 465, 2, 234, 467, 2, 235, 469, 2, 236, 471, 2, 237, 473, 2, 238, 475, 2, 239, 477, 2, 240, 479, 2, 241, 481, 2, 242, 483, 2, 243, 485, 2, 244, 487, 2, 245, 489, 2, 246, 491, 2, 247, 493, 2, 248, 495, 2, 249, 497, 2, 250, 499, 2, 251, 501, 2, 252, 503, 2, 253, 505, 2, 254, 507, 2, 255, 509, 2, 256, 511, 2, 257, 513, 2, 258, 515, 2, 259, 517, 2, 260, 519, 2, 261, 521, 2, 262, 523, 2, 263, 525, 2, 264, 527, 2, 265, 529, 2, 266, 531, 2, 267, 533, 2, 268, 535, 2, 269, 537, 2, 270, 539, 2, 271, 541, 2, 272, 543, 2, 273, 545, 2, 274, 547, 2, 275, 549, 2, 276, 551, 2, 277, 553, 2, 278, 555, 2, 279, 557, 2, 280, 559, 2, 281, 561, 2, 282, 563, 2, 283, 565, 2, 284, 567, 2, 285, 569, 2, 286, 571, 2, 287, 573, 2, 288, 575, 2, 289, 577, 2, 290, 579, 2, 291, 581, 2, 292, 583, 2, 293, 585, 2, 294, 587, 2, 295, 589, 2, 296, 591, 2, 297, 593, 2, 298, 595, 2, 299, 597, 2, 300, 599, 2, 301, 601, 2, 302, 603, 2, 303, 605, 2, 304, 607, 2, 305, 609, 2, 306, 611, 2, 307, 613, 2, 308, 615, 2, 309, 617, 2, 310, 619, 2, 311, 621, 2, 312, 623, 2, 313, 625, 2, 314, 627, 2, 315, 629, 2, 316, 631, 2, 317, 633, 2, 318, 635, 2, 319, 637, 2, 320, 639, 2, 321, 641, 2, 322, 643, 2, 323, 645, 2, 324, 647, 2, 325, 649, 2, 326, 651, 2, 327, 653, 2, 328, 655, 2, 329, 657, 2, 330, 659, 2, 331, 661, 2, 332, 663, 2, 333, 665, 2, 334, 667, 2, 335, 669, 2, 336, 671, 2, 337, 673, 2, 338, 675, 2, 339, 677, 2, 340, 679, 2, 341, 681, 2, 342, 683, 2, 343, 685, 2, 344, 687, 2, 345, 689, 2, 346, 691, 2, 347, 693, 2, 348, 695, 2, 349, 697, 2, 350, 699, 2, 351, 701, 2, 352, 703, 2, 353, 705, 2, 354, 707, 2, 355, 709, 2, 356, 711, 2, 357, 713, 2, 358, 715, 2, 359, 717, 2, 360, 719, 2, 361, 721, 2, 362, 723, 2, 363, 725, 2, 364, 727, 2, 365, 729, 2, 366, 731, 2, 367, 733, 2, 368, 735, 2, 369, 737, 2, 370, 739, 2, 371, 741, 2, 372, 743, 2, 373, 745, 2, 374, 747, 2, 375, 749, 2, 376, 751, 2, 377, 753, 2, 378, 755, 2, 379, 757, 2, 380, 759, 2, 2, 761, 2, 2, 763, 2, 2, 765, 2, 2, 767, 2, 381, 769, 2, 382, 771, 2, 383, 773, 2, 384, 3, 2, 12, 4, 2, 41, 41, 94, 94, 3, 2, 41, 41, 3, 2, 36, 36, 4, 2, 36, 36, 94, 94, 3, 2, 98, 98, 4, 2, 45, 45, 47, 47, 3, 2, 50, 59, 4, 2, 67, 92, 99, 124, 4, 2, 12, 12, 15, 15, 5, 2, 11, 12, 15, 15, 34, 34, 2, 3664, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 265, 3, 2, 2, 2, 2, 267, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 271, 3, 2, 2, 2, 2, 273, 3, 2, 2, 2, 2, 275, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 285, 3, 2, 2, 2, 2, 287, 3, 2, 2, 2, 2, 289, 3, 2, 2, 2, 2, 291, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 295, 3, 2, 2, 2, 2, 297, 3, 2, 2, 2, 2, 299, 3, 2, 2, 2, 2, 301, 3, 2, 2, 2, 2, 303, 3, 2, 2, 2, 2, 305, 3, 2, 2, 2, 2, 307, 3, 2, 2, 2, 2, 309, 3, 2, 2, 2, 2, 311, 3, 2, 2, 2, 2, 313, 3, 2, 2, 2, 2, 315, 3, 2, 2, 2, 2, 317, 3, 2, 2, 2, 2, 319, 3, 2, 2, 2, 2, 321, 3, 2, 2, 2, 2, 323, 3, 2, 2, 2, 2, 325, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 335, 3, 2, 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, 3, 2, 2, 2, 2, 345, 3, 2, 2, 2, 2, 347, 3, 2, 2, 2, 2, 349, 3, 2, 2, 2, 2, 351, 3, 2, 2, 2, 2, 353, 3, 2, 2, 2, 2, 355, 3, 2, 2, 2, 2, 357, 3, 2, 2, 2, 2, 359, 3, 2, 2, 2, 2, 361, 3, 2, 2, 2, 2, 363, 3, 2, 2, 2, 2, 365, 3, 2, 2, 2, 2, 367, 3, 2, 2, 2, 2, 369, 3, 2, 2, 2, 2, 371, 3, 2, 2, 2, 2, 373, 3, 2, 2, 2, 2, 375, 3, 2, 2, 2, 2, 377, 3, 2, 2, 2, 2, 379, 3, 2, 2, 2, 2, 381, 3, 2, 2, 2, 2, 383, 3, 2, 2, 2, 2, 385, 3, 2, 2, 2, 2, 387, 3, 2, 2, 2, 2, 389, 3, 2, 2, 2, 2, 391, 3, 2, 2, 2, 2, 393, 3, 2, 2, 2, 2, 395, 3, 2, 2, 2, 2, 397, 3, 2, 2, 2, 2, 399, 3, 2, 2, 2, 2, 401, 3, 2, 2, 2, 2, 403, 3, 2, 2, 2, 2, 405, 3, 2, 2, 2, 2, 407, 3, 2, 2, 2, 2, 409, 3, 2, 2, 2, 2, 411, 3, 2, 2, 2, 2, 413, 3, 2, 2, 2, 2, 415, 3, 2, 2, 2, 2, 417, 3, 2, 2, 2, 2, 419, 3, 2, 2, 2, 2, 421, 3, 2, 2, 2, 2, 423, 3, 2, 2, 2, 2, 425, 3, 2, 2, 2, 2, 427, 3, 2, 2, 2, 2, 429, 3, 2, 2, 2, 2, 431, 3, 2, 2, 2, 2, 433, 3, 2, 2, 2, 2, 435, 3, 2, 2, 2, 2, 437, 3, 2, 2, 2, 2, 439, 3, 2, 2, 2, 2, 441, 3, 2, 2, 2, 2, 443, 3, 2, 2, 2, 2, 445, 3, 2, 2, 2, 2, 447, 3, 2, 2, 2, 2, 449, 3, 2, 2, 2, 2, 451, 3, 2, 2, 2, 2, 453, 3, 2, 2, 2, 2, 455, 3, 2, 2, 2, 2, 457, 3, 2, 2, 2, 2, 459, 3, 2, 2, 2, 2, 461, 3, 2, 2, 2, 2, 463, 3, 2, 2, 2, 2, 465, 3, 2, 2, 2, 2, 467, 3, 2, 2, 2, 2, 469, 3, 2, 2, 2, 2, 471, 3, 2, 2, 2, 2, 473, 3, 2, 2, 2, 2, 475, 3, 2, 2, 2, 2, 477, 3, 2, 2, 2, 2, 479, 3, 2, 2, 2, 2, 481, 3, 2, 2, 2, 2, 483, 3, 2, 2, 2, 2, 485, 3, 2, 2, 2, 2, 487, 3, 2, 2, 2, 2, 489, 3, 2, 2, 2, 2, 491, 3, 2, 2, 2, 2, 493, 3, 2, 2, 2, 2, 495, 3, 2, 2, 2, 2, 497, 3, 2, 2, 2, 2, 499, 3, 2, 2, 2, 2, 501, 3, 2, 2, 2, 2, 503, 3, 2, 2, 2, 2, 505, 3, 2, 2, 2, 2, 507, 3, 2, 2, 2, 2, 509, 3, 2, 2, 2, 2, 511, 3, 2, 2, 2, 2, 513, 3, 2, 2, 2, 2, 515, 3, 2, 2, 2, 2, 517, 3, 2, 2, 2, 2, 519, 3, 2, 2, 2, 2, 521, 3, 2, 2, 2, 2, 523, 3, 2, 2, 2, 2, 525, 3, 2, 2, 2, 2, 527, 3, 2, 2, 2, 2, 529, 3, 2, 2, 2, 2, 531, 3, 2, 2, 2, 2, 533, 3, 2, 2, 2, 2, 535, 3, 2, 2, 2, 2, 537, 3, 2, 2, 2, 2, 539, 3, 2, 2, 2, 2, 541, 3, 2, 2, 2, 2, 543, 3, 2, 2, 2, 2, 545, 3, 2, 2, 2, 2, 547, 3, 2, 2, 2, 2, 549, 3, 2, 2, 2, 2, 551, 3, 2, 2, 2, 2, 553, 3, 2, 2, 2, 2, 555, 3, 2, 2, 2, 2, 557, 3, 2, 2, 2, 2, 559, 3, 2, 2, 2, 2, 561, 3, 2, 2, 2, 2, 563, 3, 2, 2, 2, 2, 565, 3, 2, 2, 2, 2, 567, 3, 2, 2, 2, 2, 569, 3, 2, 2, 2, 2, 571, 3, 2, 2, 2, 2, 573, 3, 2, 2, 2, 2, 575, 3, 2, 2, 2, 2, 577, 3, 2, 2, 2, 2, 579, 3, 2, 2, 2, 2, 581, 3, 2, 2, 2, 2, 583, 3, 2, 2, 2, 2, 585, 3, 2, 2, 2, 2, 587, 3, 2, 2, 2, 2, 589, 3, 2, 2, 2, 2, 591, 3, 2, 2, 2, 2, 593, 3, 2, 2, 2, 2, 595, 3, 2, 2, 2, 2, 597, 3, 2, 2, 2, 2, 599, 3, 2, 2, 2, 2, 601, 3, 2, 2, 2, 2, 603, 3, 2, 2, 2, 2, 605, 3, 2, 2, 2, 2, 607, 3, 2, 2, 2, 2, 609, 3, 2, 2, 2, 2, 611, 3, 2, 2, 2, 2, 613, 3, 2, 2, 2, 2, 615, 3, 2, 2, 2, 2, 617, 3, 2, 2, 2, 2, 619, 3, 2, 2, 2, 2, 621, 3, 2, 2, 2, 2, 623, 3, 2, 2, 2, 2, 625, 3, 2, 2, 2, 2, 627, 3, 2, 2, 2, 2, 629, 3, 2, 2, 2, 2, 631, 3, 2, 2, 2, 2, 633, 3, 2, 2, 2, 2, 635, 3, 2, 2, 2, 2, 637, 3, 2, 2, 2, 2, 639, 3, 2, 2, 2, 2, 641, 3, 2, 2, 2, 2, 643, 3, 2, 2, 2, 2, 645, 3, 2, 2, 2, 2, 647, 3, 2, 2, 2, 2, 649, 3, 2, 2, 2, 2, 651, 3, 2, 2, 2, 2, 653, 3, 2, 2, 2, 2, 655, 3, 2, 2, 2, 2, 657, 3, 2, 2, 2, 2, 659, 3, 2, 2, 2, 2, 661, 3, 2, 2, 2, 2, 663, 3, 2, 2, 2, 2, 665, 3, 2, 2, 2, 2, 667, 3, 2, 2, 2, 2, 669, 3, 2, 2, 2, 2, 671, 3, 2, 2, 2, 2, 673, 3, 2, 2, 2, 2, 675, 3, 2, 2, 2, 2, 677, 3, 2, 2, 2, 2, 679, 3, 2, 2, 2, 2, 681, 3, 2, 2, 2, 2, 683, 3, 2, 2, 2, 2, 685, 3, 2, 2, 2, 2, 687, 3, 2, 2, 2, 2, 689, 3, 2, 2, 2, 2, 691, 3, 2, 2, 2, 2, 693, 3, 2, 2, 2, 2, 695, 3, 2, 2, 2, 2, 697, 3, 2, 2, 2, 2, 699, 3, 2, 2, 2, 2, 701, 3, 2, 2, 2, 2, 703, 3, 2, 2, 2, 2, 705, 3, 2, 2, 2, 2, 707, 3, 2, 2, 2, 2, 709, 3, 2, 2, 2, 2, 711, 3, 2, 2, 2, 2, 713, 3, 2, 2, 2, 2, 715, 3, 2, 2, 2, 2, 717, 3, 2, 2, 2, 2, 719, 3, 2, 2, 2, 2, 721, 3, 2, 2, 2, 2, 723, 3, 2, 2, 2, 2, 725, 3, 2, 2, 2, 2, 727, 3, 2, 2, 2, 2, 729, 3, 2, 2, 2, 2, 731, 3, 2, 2, 2, 2, 733, 3, 2, 2, 2, 2, 735, 3, 2, 2, 2, 2, 737, 3, 2, 2, 2, 2, 739, 3, 2, 2, 2, 2, 741, 3, 2, 2, 2, 2, 743, 3, 2, 2, 2, 2, 745, 3, 2, 2, 2, 2, 747, 3, 2, 2, 2, 2, 749, 3, 2, 2, 2, 2, 751, 3, 2, 2, 2, 2, 753, 3, 2, 2, 2, 2, 755, 3, 2, 2, 2, 2, 757, 3, 2, 2, 2, 2, 767, 3, 2, 2, 2, 2, 769, 3, 2, 2, 2, 2, 771, 3, 2, 2, 2, 2, 773, 3, 2, 2, 2, 3, 775, 3, 2, 2, 2, 5, 777, 3, 2, 2, 2, 7, 779, 3, 2, 2, 2, 9, 781, 3, 2, 2, 2, 11, 783, 3, 2, 2, 2, 13, 785, 3, 2, 2, 2, 15, 787, 3, 2, 2, 2, 17, 789, 3, 2, 2, 2, 19, 793, 3, 2, 2, 2, 21, 799, 3, 2, 2, 2, 23, 803, 3, 2, 2, 2, 25, 809, 3, 2, 2, 2, 27, 816, 3, 2, 2, 2, 29, 824, 3, 2, 2, 2, 31, 828, 3, 2, 2, 2, 33, 833, 3, 2, 2, 2, 35, 837, 3, 2, 2, 2, 37, 847, 3, 2, 2, 2, 39, 855, 3, 2, 2, 2, 41, 861, 3, 2, 2, 2, 43, 864, 3, 2, 2, 2, 45, 868, 3, 2, 2, 2, 47, 871, 3, 2, 2, 2, 49, 885, 3, 2, 2, 2, 51, 893, 3, 2, 2, 2, 53, 900, 3, 2, 2, 2, 55, 907, 3, 2, 2, 2, 57, 915, 3, 2, 2, 2, 59, 920, 3, 2, 2, 2, 61, 927, 3, 2, 2, 2, 63, 935, 3, 2, 2, 2, 65, 938, 3, 2, 2, 2, 67, 943, 3, 2, 2, 2, 69, 949, 3, 2, 2, 2, 71, 957, 3, 2, 2, 2, 73, 962, 3, 2, 2, 2, 75, 967, 3, 2, 2, 2, 77, 975, 3, 2, 2, 2, 79, 984, 3, 2, 2, 2, 81, 991, 3, 2, 2, 2, 83, 996, 3, 2, 2, 2, 85, 1006, 3, 2, 2, 2, 87, 1012, 3, 2, 2, 2, 89, 1018, 3, 2, 2, 2, 91, 1026, 3, 2, 2, 2, 93, 1036, 3, 2, 2, 2, 95, 1044, 3, 2, 2, 2, 97, 1052, 3, 2, 2, 2, 99, 1063, 3, 2, 2, 2, 101, 1070, 3, 2, 2, 2, 103, 1078, 3, 2, 2, 2, 105, 1086, 3, 2, 2, 2, 107, 1093, 3, 2, 2, 2, 109, 1101, 3, 2, 2, 2, 111, 1113, 3, 2, 2, 2, 113, 1121, 3, 2, 2, 2, 115, 1133, 3, 2, 2, 2, 117, 1144, 3, 2, 2, 2, 119, 1149, 3, 2, 2, 2, 121, 1156, 3, 2, 2, 2, 123, 1162, 3, 2, 2, 2, 125, 1167, 3, 2, 2, 2, 127, 1175, 3, 2, 2, 2, 129, 1188, 3, 2, 2, 2, 131, 1201, 3, 2, 2, 2, 133, 1219, 3, 2, 2, 2, 135, 1232, 3, 2, 2, 2, 137, 1236, 3, 2, 2, 2, 139, 1241, 3, 2, 2, 2, 141, 1251, 3, 2, 2, 2, 143, 1256, 3, 2, 2, 2, 145, 1261, 3, 2, 2, 2, 147, 1270, 3, 2, 2, 2, 149, 1280, 3, 2, 2, 2, 151, 1288, 3, 2, 2, 2, 153, 1297, 3, 2, 2, 2, 155, 1306, 3, 2, 2, 2, 157, 1316, 3, 2, 2, 2, 159, 1329, 3, 2, 2, 2, 161, 1333, 3, 2, 2, 2, 163, 1341, 3, 2, 2, 2, 165, 1349, 3, 2, 2, 2, 167, 1357, 3, 2, 2, 2, 169, 1365, 3, 2, 2, 2, 171, 1372, 3, 2, 2, 2, 173, 1382, 3, 2, 2, 2, 175, 1387, 3, 2, 2, 2, 177, 1396, 3, 2, 2, 2, 179, 1400, 3, 2, 2, 2, 181, 1412, 3, 2, 2, 2, 183, 1422, 3, 2, 2, 2, 185, 1431, 3, 2, 2, 2, 187, 1442, 3, 2, 2, 2, 189, 1446, 3, 2, 2, 2, 191, 1453, 3, 2, 2, 2, 193, 1458, 3, 2, 2, 2, 195, 1463, 3, 2, 2, 2, 197, 1467, 3, 2, 2, 2, 199, 1474, 3, 2, 2, 2, 201, 1482, 3, 2, 2, 2, 203, 1489, 3, 2, 2, 2, 205, 1498, 3, 2, 2, 2, 207, 1506, 3, 2, 2, 2, 209, 1513, 3, 2, 2, 2, 211, 1521, 3, 2, 2, 2, 213, 1528, 3, 2, 2, 2, 215, 1537, 3, 2, 2, 2, 217, 1546, 3, 2, 2, 2, 219, 1554, 3, 2, 2, 2, 221, 1560, 3, 2, 2, 2, 223, 1566, 3, 2, 2, 2, 225, 1573, 3, 2, 2, 2, 227, 1580, 3, 2, 2, 2, 229, 1591, 3, 2, 2, 2, 231, 1597, 3, 2, 2, 2, 233, 1603, 3, 2, 2, 2, 235, 1613, 3, 2, 2, 2, 237, 1617, 3, 2, 2, 2, 239, 1625, 3, 2, 2, 2, 241, 1632, 3, 2, 2, 2, 243, 1642, 3, 2, 2, 2, 245, 1647, 3, 2, 2, 2, 247, 1652, 3, 2, 2, 2, 249, 1661, 3, 2, 2, 2, 251, 1671, 3, 2, 2, 2, 253, 1681, 3, 2, 2, 2, 255, 1688, 3, 2, 2, 2, 257, 1694, 3, 2, 2, 2, 259, 1700, 3, 2, 2, 2, 261, 1709, 3, 2, 2, 2, 263, 1716, 3, 2, 2, 2, 265, 1718, 3, 2, 2, 2, 267, 1723, 3, 2, 2, 2, 269, 1729, 3, 2, 2, 2, 271, 1740, 3, 2, 2, 2, 273, 1743, 3, 2, 2, 2, 275, 1750, 3, 2, 2, 2, 277, 1757, 3, 2, 2, 2, 279, 1760, 3, 2, 2, 2, 281, 1768, 3, 2, 2, 2, 283, 1774, 3, 2, 2, 2, 285, 1782, 3, 2, 2, 2, 287, 1788, 3, 2, 2, 2, 289, 1795, 3, 2, 2, 2, 291, 1807, 3, 2, 2, 2, 293, 1814, 3, 2, 2, 2, 295, 1824, 3, 2, 2, 2, 297, 1833, 3, 2, 2, 2, 299, 1837, 3, 2, 2, 2, 301, 1845, 3, 2, 2, 2, 303, 1850, 3, 2, 2, 2, 305, 1853, 3, 2, 2, 2, 307, 1859, 3, 2, 2, 2, 309, 1864, 3, 2, 2, 2, 311, 1869, 3, 2, 2, 2, 313, 1874, 3, 2, 2, 2, 315, 1882, 3, 2, 2, 2, 317, 1887, 3, 2, 2, 2, 319, 1895, 3, 2, 2, 2, 321, 1900, 3, 2, 2, 2, 323, 1905, 3, 2, 2, 2, 325, 1911, 3, 2, 2, 2, 327, 1917, 3, 2, 2, 2, 329, 1923, 3, 2, 2, 2, 331, 1928, 3, 2, 2, 2, 333, 1933, 3, 2, 2, 2, 335, 1939, 3, 2, 2, 2, 337, 1948, 3, 2, 2, 2, 339, 1953, 3, 2, 2, 2, 341, 1959, 3, 2, 2, 2, 343, 1967, 3, 2, 2, 2, 345, 1972, 3, 2, 2, 2, 347, 1978, 3, 2, 2, 2, 349, 1982, 3, 2, 2, 2, 351, 1990, 3, 2, 2, 2, 353, 1996, 3, 2, 2, 2, 355, 2008, 3, 2, 2, 2, 357, 2021, 3, 2, 2, 2, 359, 2033, 3, 2, 2, 2, 361, 2046, 3, 2, 2, 2, 363, 2053, 3, 2, 2, 2, 365, 2061, 3, 2, 2, 2, 367, 2067, 3, 2, 2, 2, 369, 2074, 3, 2, 2, 2, 371, 2079, 3, 2, 2, 2, 373, 2084, 3, 2, 2, 2, 375, 2094, 3, 2, 2, 2, 377, 2105, 3, 2, 2, 2, 379, 2116, 3, 2, 2, 2, 381, 2128, 3, 2, 2, 2, 383, 2136, 3, 2, 2, 2, 385, 2143, 3, 2, 2, 2, 387, 2145, 3, 2, 2, 2, 389, 2150, 3, 2, 2, 2, 391, 2156, 3, 2, 2, 2, 393, 2164, 3, 2, 2, 2, 395, 2167, 3, 2, 2, 2, 397, 2174, 3, 2, 2, 2, 399, 2177, 3, 2, 2, 2, 401, 2182, 3, 2, 2, 2, 403, 2189, 3, 2, 2, 2, 405, 2197, 3, 2, 2, 2, 407, 2200, 3, 2, 2, 2, 409, 2206, 3, 2, 2, 2, 411, 2210, 3, 2, 2, 2, 413, 2216, 3, 2, 2, 2, 415, 2229, 3, 2, 2, 2, 417, 2234, 3, 2, 2, 2, 419, 2243, 3, 2, 2, 2, 421, 2251, 3, 2, 2, 2, 423, 2261, 3, 2, 2, 2, 425, 2271, 3, 2, 2, 2, 427, 2283, 3, 2, 2, 2, 429, 2294, 3, 2, 2, 2, 431, 2310, 3, 2, 2, 2, 433, 2326, 3, 2, 2, 2, 435, 2334, 3, 2, 2, 2, 437, 2340, 3, 2, 2, 2, 439, 2348, 3, 2, 2, 2, 441, 2357, 3, 2, 2, 2, 443, 2367, 3, 2, 2, 2, 445, 2375, 3, 2, 2, 2, 447, 2386, 3, 2, 2, 2, 449, 2397, 3, 2, 2, 2, 451, 2403, 3, 2, 2, 2, 453, 2411, 3, 2, 2, 2, 455, 2417, 3, 2, 2, 2, 457, 2423, 3, 2, 2, 2, 459, 2428, 3, 2, 2, 2, 461, 2441, 3, 2, 2, 2, 463, 2454, 3, 2, 2, 2, 465, 2462, 3, 2, 2, 2, 467, 2469, 3, 2, 2, 2, 469, 2480, 3, 2, 2, 2, 471, 2488, 3, 2, 2, 2, 473, 2495, 3, 2, 2, 2, 475, 2502, 3, 2, 2, 2, 477, 2513, 3, 2, 2, 2, 479, 2521, 3, 2, 2, 2, 481, 2527, 3, 2, 2, 2, 483, 2535, 3, 2, 2, 2, 485, 2544, 3, 2, 2, 2, 487, 2551, 3, 2, 2, 2, 489, 2568, 3, 2, 2, 2, 491, 2570, 3, 2, 2, 2, 493, 2575, 3, 2, 2, 2, 495, 2581, 3, 2, 2, 2, 497, 2590, 3, 2, 2, 2, 499, 2597, 3, 2, 2, 2, 501, 2601, 3, 2, 2, 2, 503, 2606, 3, 2, 2, 2, 505, 2613, 3, 2, 2, 2, 507, 2621, 3, 2, 2, 2, 509, 2628, 3, 2, 2, 2, 511, 2636, 3, 2, 2, 2, 513, 2643, 3, 2, 2, 2, 515, 2648, 3, 2, 2, 2, 517, 2658, 3, 2, 2, 2, 519, 2664, 3, 2, 2, 2, 521, 2680, 3, 2, 2, 2, 523, 2693, 3, 2, 2, 2, 525, 2697, 3, 2, 2, 2, 527, 2703, 3, 2, 2, 2, 529, 2708, 3, 2, 2, 2, 531, 2714, 3, 2, 2, 2, 533, 2719, 3, 2, 2, 2, 535, 2726, 3, 2, 2, 2, 537, 2733, 3, 2, 2, 2, 539, 2742, 3, 2, 2, 2, 541, 2747, 3, 2, 2, 2, 543, 2752, 3, 2, 2, 2, 545, 2759, 3, 2, 2, 2, 547, 2766, 3, 2, 2, 2, 549, 2772, 3, 2, 2, 2, 551, 2783, 3, 2, 2, 2, 553, 2790, 3, 2, 2, 2, 555, 2799, 3, 2, 2, 2, 557, 2806, 3, 2, 2, 2, 559, 2813, 3, 2, 2, 2, 561, 2820, 3, 2, 2, 2, 563, 2830, 3, 2, 2, 2, 565, 2835, 3, 2, 2, 2, 567, 2847, 3, 2, 2, 2, 569, 2862, 3, 2, 2, 2, 571, 2868, 3, 2, 2, 2, 573, 2875, 3, 2, 2, 2, 575, 2887, 3, 2, 2, 2, 577, 2894, 3, 2, 2, 2, 579, 2921, 3, 2, 2, 2, 581, 2923, 3, 2, 2, 2, 583, 2934, 3, 2, 2, 2, 585, 2939, 3, 2, 2, 2, 587, 2944, 3, 2, 2, 2, 589, 2953, 3, 2, 2, 2, 591, 2963, 3, 2, 2, 2, 593, 2977, 3, 2, 2, 2, 595, 2991, 3, 2, 2, 2, 597, 3004, 3, 2, 2, 2, 599, 3018, 3, 2, 2, 2, 601, 3026, 3, 2, 2, 2, 603, 3029, 3, 2, 2, 2, 605, 3035, 3, 2, 2, 2, 607, 3044, 3, 2, 2, 2, 609, 3056, 3, 2, 2, 2, 611, 3069, 3, 2, 2, 2, 613, 3079, 3, 2, 2, 2, 615, 3084, 3, 2, 2, 2, 617, 3089, 3, 2, 2, 2, 619, 3098, 3, 2, 2, 2, 621, 3107, 3, 2, 2, 2, 623, 3112, 3, 2, 2, 2, 625, 3122, 3, 2, 2, 2, 627, 3132, 3, 2, 2, 2, 629, 3140, 3, 2, 2, 2, 631, 3146, 3, 2, 2, 2, 633, 3153, 3, 2, 2, 2, 635, 3161, 3, 2, 2, 2, 637, 3168, 3, 2, 2, 2, 639, 3176, 3, 2, 2, 2, 641, 3182, 3, 2, 2, 2, 643, 3189, 3, 2, 2, 2, 645, 3193, 3, 2, 2, 2, 647, 3198, 3, 2, 2, 2, 649, 3204, 3, 2, 2, 2, 651, 3211, 3, 2, 2, 2, 653, 3219, 3, 2, 2, 2, 655, 3223, 3, 2, 2, 2, 657, 3232, 3, 2, 2, 2, 659, 3240, 3, 2, 2, 2, 661, 3245, 3, 2, 2, 2, 663, 3251, 3, 2, 2, 2, 665, 3256, 3, 2, 2, 2, 667, 3261, 3, 2, 2, 2, 669, 3267, 3, 2, 2, 2, 671, 3272, 3, 2, 2, 2, 673, 3278, 3, 2, 2, 2, 675, 3285, 3, 2, 2, 2, 677, 3290, 3, 2, 2, 2, 679, 3297, 3, 2, 2, 2, 681, 3302, 3, 2, 2, 2, 683, 3308, 3, 2, 2, 2, 685, 3316, 3, 2, 2, 2, 687, 3318, 3, 2, 2, 2, 689, 3322, 3, 2, 2, 2, 691, 3325, 3, 2, 2, 2, 693, 3328, 3, 2, 2, 2, 695, 3334, 3, 2, 2, 2, 697, 3336, 3, 2, 2, 2, 699, 3342, 3, 2, 2, 2, 701, 3344, 3, 2, 2, 2, 703, 3346, 3, 2, 2, 2, 705, 3348, 3, 2, 2, 2, 707, 3350, 3, 2, 2, 2, 709, 3352, 3, 2, 2, 2, 711, 3354, 3, 2, 2, 2, 713, 3356, 3, 2, 2, 2, 715, 3358, 3, 2, 2, 2, 717, 3360, 3, 2, 2, 2, 719, 3363, 3, 2, 2, 2, 721, 3365, 3, 2, 2, 2, 723, 3367, 3, 2, 2, 2, 725, 3370, 3, 2, 2, 2, 727, 3373, 3, 2, 2, 2, 729, 3377, 3, 2, 2, 2, 731, 3380, 3, 2, 2, 2, 733, 3412, 3, 2, 2, 2, 735, 3414, 3, 2, 2, 2, 737, 3426, 3, 2, 2, 2, 739, 3433, 3, 2, 2, 2, 741, 3440, 3, 2, 2, 2, 743, 3447, 3, 2, 2, 2, 745, 3461, 3, 2, 2, 2, 747, 3463, 3, 2, 2, 2, 749, 3481, 3, 2, 2, 2, 751, 3499, 3, 2, 2, 2, 753, 3519, 3, 2, 2, 2, 755, 3524, 3, 2, 2, 2, 757, 3528, 3, 2, 2, 2, 759, 3557, 3, 2, 2, 2, 761, 3559, 3, 2, 2, 2, 763, 3568, 3, 2, 2, 2, 765, 3570, 3, 2, 2, 2, 767, 3572, 3, 2, 2, 2, 769, 3591, 3, 2, 2, 2, 771, 3610, 3, 2, 2, 2, 773, 3616, 3, 2, 2, 2, 775, 776, 7, 61, 2, 2, 776, 4, 3, 2, 2, 2, 777, 778, 7, 42, 2, 2, 778, 6, 3, 2, 2, 2, 779, 780, 7, 43, 2, 2, 780, 8, 3, 2, 2, 2, 781, 782, 7, 46, 2, 2, 782, 10, 3, 2, 2, 2, 783, 784, 7, 48, 2, 2, 784, 12, 3, 2, 2, 2, 785, 786, 7, 93, 2, 2, 786, 14, 3, 2, 2, 2, 787, 788, 7, 95, 2, 2, 788, 16, 3, 2, 2, 2, 789, 790, 7, 67, 2, 2, 790, 791, 7, 70, 2, 2, 791, 792, 7, 70, 2, 2, 792, 18, 3, 2, 2, 2, 793, 794, 7, 67, 2, 2, 794, 795, 7, 72, 2, 2, 795, 796, 7, 86, 2, 2, 796, 797, 7, 71, 2, 2, 797, 798, 7, 84, 2, 2, 798, 20, 3, 2, 2, 2, 799, 800, 7, 67, 2, 2, 800, 801, 7, 78, 2, 2, 801, 802, 7, 78, 2, 2, 802, 22, 3, 2, 2, 2, 803, 804, 7, 67, 2, 2, 804, 805, 7, 78, 2, 2, 805, 806, 7, 86, 2, 2, 806, 807, 7, 71, 2, 2, 807, 808, 7, 84, 2, 2, 808, 24, 3, 2, 2, 2, 809, 810, 7, 67, 2, 2, 810, 811, 7, 78, 2, 2, 811, 812, 7, 89, 2, 2, 812, 813, 7, 67, 2, 2, 813, 814, 7, 91, 2, 2, 814, 815, 7, 85, 2, 2, 815, 26, 3, 2, 2, 2, 816, 817, 7, 67, 2, 2, 817, 818, 7, 80, 2, 2, 818, 819, 7, 67, 2, 2, 819, 820, 7, 78, 2, 2, 820, 821, 7, 91, 2, 2, 821, 822, 7, 92, 2, 2, 822, 823, 7, 71, 2, 2, 823, 28, 3, 2, 2, 2, 824, 825, 7, 67, 2, 2, 825, 826, 7, 80, 2, 2, 826, 827, 7, 70, 2, 2, 827, 30, 3, 2, 2, 2, 828, 829, 7, 67, 2, 2, 829, 830, 7, 80, 2, 2, 830, 831, 7, 86, 2, 2, 831, 832, 7, 75, 2, 2, 832, 32, 3, 2, 2, 2, 833, 834, 7, 67, 2, 2, 834, 835, 7, 80, 2, 2, 835, 836, 7, 91, 2, 2, 836, 34, 3, 2, 2, 2, 837, 838, 7, 67, 2, 2, 838, 839, 7, 80, 2, 2, 839, 840, 7, 91, 2, 2, 840, 841, 7, 97, 2, 2, 841, 842, 7, 88, 2, 2, 842, 843, 7, 67, 2, 2, 843, 844, 7, 78, 2, 2, 844, 845, 7, 87, 2, 2, 845, 846, 7, 71, 2, 2, 846, 36, 3, 2, 2, 2, 847, 848, 7, 67, 2, 2, 848, 849, 7, 84, 2, 2, 849, 850, 7, 69, 2, 2, 850, 851, 7, 74, 2, 2, 851, 852, 7, 75, 2, 2, 852, 853, 7, 88, 2, 2, 853, 854, 7, 71, 2, 2, 854, 38, 3, 2, 2, 2, 855, 856, 7, 67, 2, 2, 856, 857, 7, 84, 2, 2, 857, 858, 7, 84, 2, 2, 858, 859, 7, 67, 2, 2, 859, 860, 7, 91, 2, 2, 860, 40, 3, 2, 2, 2, 861, 862, 7, 67, 2, 2, 862, 863, 7, 85, 2, 2, 863, 42, 3, 2, 2, 2, 864, 865, 7, 67, 2, 2, 865, 866, 7, 85, 2, 2, 866, 867, 7, 69, 2, 2, 867, 44, 3, 2, 2, 2, 868, 869, 7, 67, 2, 2, 869, 870, 7, 86, 2, 2, 870, 46, 3, 2, 2, 2, 871, 872, 7, 67, 2, 2, 872, 873, 7, 87, 2, 2, 873, 874, 7, 86, 2, 2, 874, 875, 7, 74, 2, 2, 875, 876, 7, 81, 2, 2, 876, 877, 7, 84, 2, 2, 877, 878, 7, 75, 2, 2, 878, 879, 7, 92, 2, 2, 879, 880, 7, 67, 2, 2, 880, 881, 7, 86, 2, 2, 881, 882, 7, 75, 2, 2, 882, 883, 7, 81, 2, 2, 883, 884, 7, 80, 2, 2, 884, 48, 3, 2, 2, 2, 885, 886, 7, 68, 2, 2, 886, 887, 7, 71, 2, 2, 887, 888, 7, 86, 2, 2, 888, 889, 7, 89, 2, 2, 889, 890, 7, 71, 2, 2, 890, 891, 7, 71, 2, 2, 891, 892, 7, 80, 2, 2, 892, 50, 3, 2, 2, 2, 893, 894, 7, 68, 2, 2, 894, 895, 7, 75, 2, 2, 895, 896, 7, 73, 2, 2, 896, 897, 7, 75, 2, 2, 897, 898, 7, 80, 2, 2, 898, 899, 7, 86, 2, 2, 899, 52, 3, 2, 2, 2, 900, 901, 7, 68, 2, 2, 901, 902, 7, 75, 2, 2, 902, 903, 7, 80, 2, 2, 903, 904, 7, 67, 2, 2, 904, 905, 7, 84, 2, 2, 905, 906, 7, 91, 2, 2, 906, 54, 3, 2, 2, 2, 907, 908, 7, 68, 2, 2, 908, 909, 7, 81, 2, 2, 909, 910, 7, 81, 2, 2, 910, 911, 7, 78, 2, 2, 911, 912, 7, 71, 2, 2, 912, 913, 7, 67, 2, 2, 913, 914, 7, 80, 2, 2, 914, 56, 3, 2, 2, 2, 915, 916, 7, 68, 2, 2, 916, 917, 7, 81, 2, 2, 917, 918, 7, 86, 2, 2, 918, 919, 7, 74, 2, 2, 919, 58, 3, 2, 2, 2, 920, 921, 7, 68, 2, 2, 921, 922, 7, 87, 2, 2, 922, 923, 7, 69, 2, 2, 923, 924, 7, 77, 2, 2, 924, 925, 7, 71, 2, 2, 925, 926, 7, 86, 2, 2, 926, 60, 3, 2, 2, 2, 927, 928, 7, 68, 2, 2, 928, 929, 7, 87, 2, 2, 929, 930, 7, 69, 2, 2, 930, 931, 7, 77, 2, 2, 931, 932, 7, 71, 2, 2, 932, 933, 7, 86, 2, 2, 933, 934, 7, 85, 2, 2, 934, 62, 3, 2, 2, 2, 935, 936, 7, 68, 2, 2, 936, 937, 7, 91, 2, 2, 937, 64, 3, 2, 2, 2, 938, 939, 7, 68, 2, 2, 939, 940, 7, 91, 2, 2, 940, 941, 7, 86, 2, 2, 941, 942, 7, 71, 2, 2, 942, 66, 3, 2, 2, 2, 943, 944, 7, 69, 2, 2, 944, 945, 7, 67, 2, 2, 945, 946, 7, 69, 2, 2, 946, 947, 7, 74, 2, 2, 947, 948, 7, 71, 2, 2, 948, 68, 3, 2, 2, 2, 949, 950, 7, 69, 2, 2, 950, 951, 7, 67, 2, 2, 951, 952, 7, 85, 2, 2, 952, 953, 7, 69, 2, 2, 953, 954, 7, 67, 2, 2, 954, 955, 7, 70, 2, 2, 955, 956, 7, 71, 2, 2, 956, 70, 3, 2, 2, 2, 957, 958, 7, 69, 2, 2, 958, 959, 7, 67, 2, 2, 959, 960, 7, 85, 2, 2, 960, 961, 7, 71, 2, 2, 961, 72, 3, 2, 2, 2, 962, 963, 7, 69, 2, 2, 963, 964, 7, 67, 2, 2, 964, 965, 7, 85, 2, 2, 965, 966, 7, 86, 2, 2, 966, 74, 3, 2, 2, 2, 967, 968, 7, 69, 2, 2, 968, 969, 7, 67, 2, 2, 969, 970, 7, 86, 2, 2, 970, 971, 7, 67, 2, 2, 971, 972, 7, 78, 2, 2, 972, 973, 7, 81, 2, 2, 973, 974, 7, 73, 2, 2, 974, 76, 3, 2, 2, 2, 975, 976, 7, 69, 2, 2, 976, 977, 7, 67, 2, 2, 977, 978, 7, 86, 2, 2, 978, 979, 7, 67, 2, 2, 979, 980, 7, 78, 2, 2, 980, 981, 7, 81, 2, 2, 981, 982, 7, 73, 2, 2, 982, 983, 7, 85, 2, 2, 983, 78, 3, 2, 2, 2, 984, 985, 7, 69, 2, 2, 985, 986, 7, 74, 2, 2, 986, 987, 7, 67, 2, 2, 987, 988, 7, 80, 2, 2, 988, 989, 7, 73, 2, 2, 989, 990, 7, 71, 2, 2, 990, 80, 3, 2, 2, 2, 991, 992, 7, 69, 2, 2, 992, 993, 7, 74, 2, 2, 993, 994, 7, 67, 2, 2, 994, 995, 7, 84, 2, 2, 995, 82, 3, 2, 2, 2, 996, 997, 7, 69, 2, 2, 997, 998, 7, 74, 2, 2, 998, 999, 7, 67, 2, 2, 999, 1000, 7, 84, 2, 2, 1000, 1001, 7, 67, 2, 2, 1001, 1002, 7, 69, 2, 2, 1002, 1003, 7, 86, 2, 2, 1003, 1004, 7, 71, 2, 2, 1004, 1005, 7, 84, 2, 2, 1005, 84, 3, 2, 2, 2, 1006, 1007, 7, 69, 2, 2, 1007, 1008, 7, 74, 2, 2, 1008, 1009, 7, 71, 2, 2, 1009, 1010, 7, 69, 2, 2, 1010, 1011, 7, 77, 2, 2, 1011, 86, 3, 2, 2, 2, 1012, 1013, 7, 69, 2, 2, 1013, 1014, 7, 78, 2, 2, 1014, 1015, 7, 71, 2, 2, 1015, 1016, 7, 67, 2, 2, 1016, 1017, 7, 84, 2, 2, 1017, 88, 3, 2, 2, 2, 1018, 1019, 7, 69, 2, 2, 1019, 1020, 7, 78, 2, 2, 1020, 1021, 7, 87, 2, 2, 1021, 1022, 7, 85, 2, 2, 1022, 1023, 7, 86, 2, 2, 1023, 1024, 7, 71, 2, 2, 1024, 1025, 7, 84, 2, 2, 1025, 90, 3, 2, 2, 2, 1026, 1027, 7, 69, 2, 2, 1027, 1028, 7, 78, 2, 2, 1028, 1029, 7, 87, 2, 2, 1029, 1030, 7, 85, 2, 2, 1030, 1031, 7, 86, 2, 2, 1031, 1032, 7, 71, 2, 2, 1032, 1033, 7, 84, 2, 2, 1033, 1034, 7, 71, 2, 2, 1034, 1035, 7, 70, 2, 2, 1035, 92, 3, 2, 2, 2, 1036, 1037, 7, 69, 2, 2, 1037, 1038, 7, 81, 2, 2, 1038, 1039, 7, 70, 2, 2, 1039, 1040, 7, 71, 2, 2, 1040, 1041, 7, 73, 2, 2, 1041, 1042, 7, 71, 2, 2, 1042, 1043, 7, 80, 2, 2, 1043, 94, 3, 2, 2, 2, 1044, 1045, 7, 69, 2, 2, 1045, 1046, 7, 81, 2, 2, 1046, 1047, 7, 78, 2, 2, 1047, 1048, 7, 78, 2, 2, 1048, 1049, 7, 67, 2, 2, 1049, 1050, 7, 86, 2, 2, 1050, 1051, 7, 71, 2, 2, 1051, 96, 3, 2, 2, 2, 1052, 1053, 7, 69, 2, 2, 1053, 1054, 7, 81, 2, 2, 1054, 1055, 7, 78, 2, 2, 1055, 1056, 7, 78, 2, 2, 1056, 1057, 7, 71, 2, 2, 1057, 1058, 7, 69, 2, 2, 1058, 1059, 7, 86, 2, 2, 1059, 1060, 7, 75, 2, 2, 1060, 1061, 7, 81, 2, 2, 1061, 1062, 7, 80, 2, 2, 1062, 98, 3, 2, 2, 2, 1063, 1064, 7, 69, 2, 2, 1064, 1065, 7, 81, 2, 2, 1065, 1066, 7, 78, 2, 2, 1066, 1067, 7, 87, 2, 2, 1067, 1068, 7, 79, 2, 2, 1068, 1069, 7, 80, 2, 2, 1069, 100, 3, 2, 2, 2, 1070, 1071, 7, 69, 2, 2, 1071, 1072, 7, 81, 2, 2, 1072, 1073, 7, 78, 2, 2, 1073, 1074, 7, 87, 2, 2, 1074, 1075, 7, 79, 2, 2, 1075, 1076, 7, 80, 2, 2, 1076, 1077, 7, 85, 2, 2, 1077, 102, 3, 2, 2, 2, 1078, 1079, 7, 69, 2, 2, 1079, 1080, 7, 81, 2, 2, 1080, 1081, 7, 79, 2, 2, 1081, 1082, 7, 79, 2, 2, 1082, 1083, 7, 71, 2, 2, 1083, 1084, 7, 80, 2, 2, 1084, 1085, 7, 86, 2, 2, 1085, 104, 3, 2, 2, 2, 1086, 1087, 7, 69, 2, 2, 1087, 1088, 7, 81, 2, 2, 1088, 1089, 7, 79, 2, 2, 1089, 1090, 7, 79, 2, 2, 1090, 1091, 7, 75, 2, 2, 1091, 1092, 7, 86, 2, 2, 1092, 106, 3, 2, 2, 2, 1093, 1094, 7, 69, 2, 2, 1094, 1095, 7, 81, 2, 2, 1095, 1096, 7, 79, 2, 2, 1096, 1097, 7, 82, 2, 2, 1097, 1098, 7, 67, 2, 2, 1098, 1099, 7, 69, 2, 2, 1099, 1100, 7, 86, 2, 2, 1100, 108, 3, 2, 2, 2, 1101, 1102, 7, 69, 2, 2, 1102, 1103, 7, 81, 2, 2, 1103, 1104, 7, 79, 2, 2, 1104, 1105, 7, 82, 2, 2, 1105, 1106, 7, 67, 2, 2, 1106, 1107, 7, 69, 2, 2, 1107, 1108, 7, 86, 2, 2, 1108, 1109, 7, 75, 2, 2, 1109, 1110, 7, 81, 2, 2, 1110, 1111, 7, 80, 2, 2, 1111, 1112, 7, 85, 2, 2, 1112, 110, 3, 2, 2, 2, 1113, 1114, 7, 69, 2, 2, 1114, 1115, 7, 81, 2, 2, 1115, 1116, 7, 79, 2, 2, 1116, 1117, 7, 82, 2, 2, 1117, 1118, 7, 87, 2, 2, 1118, 1119, 7, 86, 2, 2, 1119, 1120, 7, 71, 2, 2, 1120, 112, 3, 2, 2, 2, 1121, 1122, 7, 69, 2, 2, 1122, 1123, 7, 81, 2, 2, 1123, 1124, 7, 80, 2, 2, 1124, 1125, 7, 69, 2, 2, 1125, 1126, 7, 67, 2, 2, 1126, 1127, 7, 86, 2, 2, 1127, 1128, 7, 71, 2, 2, 1128, 1129, 7, 80, 2, 2, 1129, 1130, 7, 67, 2, 2, 1130, 1131, 7, 86, 2, 2, 1131, 1132, 7, 71, 2, 2, 1132, 114, 3, 2, 2, 2, 1133, 1134, 7, 69, 2, 2, 1134, 1135, 7, 81, 2, 2, 1135, 1136, 7, 80, 2, 2, 1136, 1137, 7, 85, 2, 2, 1137, 1138, 7, 86, 2, 2, 1138, 1139, 7, 84, 2, 2, 1139, 1140, 7, 67, 2, 2, 1140, 1141, 7, 75, 2, 2, 1141, 1142, 7, 80, 2, 2, 1142, 1143, 7, 86, 2, 2, 1143, 116, 3, 2, 2, 2, 1144, 1145, 7, 69, 2, 2, 1145, 1146, 7, 81, 2, 2, 1146, 1147, 7, 85, 2, 2, 1147, 1148, 7, 86, 2, 2, 1148, 118, 3, 2, 2, 2, 1149, 1150, 7, 69, 2, 2, 1150, 1151, 7, 84, 2, 2, 1151, 1152, 7, 71, 2, 2, 1152, 1153, 7, 67, 2, 2, 1153, 1154, 7, 86, 2, 2, 1154, 1155, 7, 71, 2, 2, 1155, 120, 3, 2, 2, 2, 1156, 1157, 7, 69, 2, 2, 1157, 1158, 7, 84, 2, 2, 1158, 1159, 7, 81, 2, 2, 1159, 1160, 7, 85, 2, 2, 1160, 1161, 7, 85, 2, 2, 1161, 122, 3, 2, 2, 2, 1162, 1163, 7, 69, 2, 2, 1163, 1164, 7, 87, 2, 2, 1164, 1165, 7, 68, 2, 2, 1165, 1166, 7, 71, 2, 2, 1166, 124, 3, 2, 2, 2, 1167, 1168, 7, 69, 2, 2, 1168, 1169, 7, 87, 2, 2, 1169, 1170, 7, 84, 2, 2, 1170, 1171, 7, 84, 2, 2, 1171, 1172, 7, 71, 2, 2, 1172, 1173, 7, 80, 2, 2, 1173, 1174, 7, 86, 2, 2, 1174, 126, 3, 2, 2, 2, 1175, 1176, 7, 69, 2, 2, 1176, 1177, 7, 87, 2, 2, 1177, 1178, 7, 84, 2, 2, 1178, 1179, 7, 84, 2, 2, 1179, 1180, 7, 71, 2, 2, 1180, 1181, 7, 80, 2, 2, 1181, 1182, 7, 86, 2, 2, 1182, 1183, 7, 97, 2, 2, 1183, 1184, 7, 70, 2, 2, 1184, 1185, 7, 67, 2, 2, 1185, 1186, 7, 86, 2, 2, 1186, 1187, 7, 71, 2, 2, 1187, 128, 3, 2, 2, 2, 1188, 1189, 7, 69, 2, 2, 1189, 1190, 7, 87, 2, 2, 1190, 1191, 7, 84, 2, 2, 1191, 1192, 7, 84, 2, 2, 1192, 1193, 7, 71, 2, 2, 1193, 1194, 7, 80, 2, 2, 1194, 1195, 7, 86, 2, 2, 1195, 1196, 7, 97, 2, 2, 1196, 1197, 7, 86, 2, 2, 1197, 1198, 7, 75, 2, 2, 1198, 1199, 7, 79, 2, 2, 1199, 1200, 7, 71, 2, 2, 1200, 130, 3, 2, 2, 2, 1201, 1202, 7, 69, 2, 2, 1202, 1203, 7, 87, 2, 2, 1203, 1204, 7, 84, 2, 2, 1204, 1205, 7, 84, 2, 2, 1205, 1206, 7, 71, 2, 2, 1206, 1207, 7, 80, 2, 2, 1207, 1208, 7, 86, 2, 2, 1208, 1209, 7, 97, 2, 2, 1209, 1210, 7, 86, 2, 2, 1210, 1211, 7, 75, 2, 2, 1211, 1212, 7, 79, 2, 2, 1212, 1213, 7, 71, 2, 2, 1213, 1214, 7, 85, 2, 2, 1214, 1215, 7, 86, 2, 2, 1215, 1216, 7, 67, 2, 2, 1216, 1217, 7, 79, 2, 2, 1217, 1218, 7, 82, 2, 2, 1218, 132, 3, 2, 2, 2, 1219, 1220, 7, 69, 2, 2, 1220, 1221, 7, 87, 2, 2, 1221, 1222, 7, 84, 2, 2, 1222, 1223, 7, 84, 2, 2, 1223, 1224, 7, 71, 2, 2, 1224, 1225, 7, 80, 2, 2, 1225, 1226, 7, 86, 2, 2, 1226, 1227, 7, 97, 2, 2, 1227, 1228, 7, 87, 2, 2, 1228, 1229, 7, 85, 2, 2, 1229, 1230, 7, 71, 2, 2, 1230, 1231, 7, 84, 2, 2, 1231, 134, 3, 2, 2, 2, 1232, 1233, 7, 70, 2, 2, 1233, 1234, 7, 67, 2, 2, 1234, 1235, 7, 91, 2, 2, 1235, 136, 3, 2, 2, 2, 1236, 1237, 7, 70, 2, 2, 1237, 1238, 7, 67, 2, 2, 1238, 1239, 7, 91, 2, 2, 1239, 1240, 7, 85, 2, 2, 1240, 138, 3, 2, 2, 2, 1241, 1242, 7, 70, 2, 2, 1242, 1243, 7, 67, 2, 2, 1243, 1244, 7, 91, 2, 2, 1244, 1245, 7, 81, 2, 2, 1245, 1246, 7, 72, 2, 2, 1246, 1247, 7, 91, 2, 2, 1247, 1248, 7, 71, 2, 2, 1248, 1249, 7, 67, 2, 2, 1249, 1250, 7, 84, 2, 2, 1250, 140, 3, 2, 2, 2, 1251, 1252, 7, 70, 2, 2, 1252, 1253, 7, 67, 2, 2, 1253, 1254, 7, 86, 2, 2, 1254, 1255, 7, 67, 2, 2, 1255, 142, 3, 2, 2, 2, 1256, 1257, 7, 70, 2, 2, 1257, 1258, 7, 67, 2, 2, 1258, 1259, 7, 86, 2, 2, 1259, 1260, 7, 71, 2, 2, 1260, 144, 3, 2, 2, 2, 1261, 1262, 7, 70, 2, 2, 1262, 1263, 7, 67, 2, 2, 1263, 1264, 7, 86, 2, 2, 1264, 1265, 7, 67, 2, 2, 1265, 1266, 7, 68, 2, 2, 1266, 1267, 7, 67, 2, 2, 1267, 1268, 7, 85, 2, 2, 1268, 1269, 7, 71, 2, 2, 1269, 146, 3, 2, 2, 2, 1270, 1271, 7, 70, 2, 2, 1271, 1272, 7, 67, 2, 2, 1272, 1273, 7, 86, 2, 2, 1273, 1274, 7, 67, 2, 2, 1274, 1275, 7, 68, 2, 2, 1275, 1276, 7, 67, 2, 2, 1276, 1277, 7, 85, 2, 2, 1277, 1278, 7, 71, 2, 2, 1278, 1279, 7, 85, 2, 2, 1279, 148, 3, 2, 2, 2, 1280, 1281, 7, 70, 2, 2, 1281, 1282, 7, 67, 2, 2, 1282, 1283, 7, 86, 2, 2, 1283, 1284, 7, 71, 2, 2, 1284, 1285, 7, 67, 2, 2, 1285, 1286, 7, 70, 2, 2, 1286, 1287, 7, 70, 2, 2, 1287, 150, 3, 2, 2, 2, 1288, 1289, 7, 70, 2, 2, 1289, 1290, 7, 67, 2, 2, 1290, 1291, 7, 86, 2, 2, 1291, 1292, 7, 71, 2, 2, 1292, 1293, 7, 97, 2, 2, 1293, 1294, 7, 67, 2, 2, 1294, 1295, 7, 70, 2, 2, 1295, 1296, 7, 70, 2, 2, 1296, 152, 3, 2, 2, 2, 1297, 1298, 7, 70, 2, 2, 1298, 1299, 7, 67, 2, 2, 1299, 1300, 7, 86, 2, 2, 1300, 1301, 7, 71, 2, 2, 1301, 1302, 7, 70, 2, 2, 1302, 1303, 7, 75, 2, 2, 1303, 1304, 7, 72, 2, 2, 1304, 1305, 7, 72, 2, 2, 1305, 154, 3, 2, 2, 2, 1306, 1307, 7, 70, 2, 2, 1307, 1308, 7, 67, 2, 2, 1308, 1309, 7, 86, 2, 2, 1309, 1310, 7, 71, 2, 2, 1310, 1311, 7, 97, 2, 2, 1311, 1312, 7, 70, 2, 2, 1312, 1313, 7, 75, 2, 2, 1313, 1314, 7, 72, 2, 2, 1314, 1315, 7, 72, 2, 2, 1315, 156, 3, 2, 2, 2, 1316, 1317, 7, 70, 2, 2, 1317, 1318, 7, 68, 2, 2, 1318, 1319, 7, 82, 2, 2, 1319, 1320, 7, 84, 2, 2, 1320, 1321, 7, 81, 2, 2, 1321, 1322, 7, 82, 2, 2, 1322, 1323, 7, 71, 2, 2, 1323, 1324, 7, 84, 2, 2, 1324, 1325, 7, 86, 2, 2, 1325, 1326, 7, 75, 2, 2, 1326, 1327, 7, 71, 2, 2, 1327, 1328, 7, 85, 2, 2, 1328, 158, 3, 2, 2, 2, 1329, 1330, 7, 70, 2, 2, 1330, 1331, 7, 71, 2, 2, 1331, 1332, 7, 69, 2, 2, 1332, 160, 3, 2, 2, 2, 1333, 1334, 7, 70, 2, 2, 1334, 1335, 7, 71, 2, 2, 1335, 1336, 7, 69, 2, 2, 1336, 1337, 7, 75, 2, 2, 1337, 1338, 7, 79, 2, 2, 1338, 1339, 7, 67, 2, 2, 1339, 1340, 7, 78, 2, 2, 1340, 162, 3, 2, 2, 2, 1341, 1342, 7, 70, 2, 2, 1342, 1343, 7, 71, 2, 2, 1343, 1344, 7, 69, 2, 2, 1344, 1345, 7, 78, 2, 2, 1345, 1346, 7, 67, 2, 2, 1346, 1347, 7, 84, 2, 2, 1347, 1348, 7, 71, 2, 2, 1348, 164, 3, 2, 2, 2, 1349, 1350, 7, 70, 2, 2, 1350, 1351, 7, 71, 2, 2, 1351, 1352, 7, 72, 2, 2, 1352, 1353, 7, 67, 2, 2, 1353, 1354, 7, 87, 2, 2, 1354, 1355, 7, 78, 2, 2, 1355, 1356, 7, 86, 2, 2, 1356, 166, 3, 2, 2, 2, 1357, 1358, 7, 70, 2, 2, 1358, 1359, 7, 71, 2, 2, 1359, 1360, 7, 72, 2, 2, 1360, 1361, 7, 75, 2, 2, 1361, 1362, 7, 80, 2, 2, 1362, 1363, 7, 71, 2, 2, 1363, 1364, 7, 70, 2, 2, 1364, 168, 3, 2, 2, 2, 1365, 1366, 7, 70, 2, 2, 1366, 1367, 7, 71, 2, 2, 1367, 1368, 7, 78, 2, 2, 1368, 1369, 7, 71, 2, 2, 1369, 1370, 7, 86, 2, 2, 1370, 1371, 7, 71, 2, 2, 1371, 170, 3, 2, 2, 2, 1372, 1373, 7, 70, 2, 2, 1373, 1374, 7, 71, 2, 2, 1374, 1375, 7, 78, 2, 2, 1375, 1376, 7, 75, 2, 2, 1376, 1377, 7, 79, 2, 2, 1377, 1378, 7, 75, 2, 2, 1378, 1379, 7, 86, 2, 2, 1379, 1380, 7, 71, 2, 2, 1380, 1381, 7, 70, 2, 2, 1381, 172, 3, 2, 2, 2, 1382, 1383, 7, 70, 2, 2, 1383, 1384, 7, 71, 2, 2, 1384, 1385, 7, 85, 2, 2, 1385, 1386, 7, 69, 2, 2, 1386, 174, 3, 2, 2, 2, 1387, 1388, 7, 70, 2, 2, 1388, 1389, 7, 71, 2, 2, 1389, 1390, 7, 85, 2, 2, 1390, 1391, 7, 69, 2, 2, 1391, 1392, 7, 84, 2, 2, 1392, 1393, 7, 75, 2, 2, 1393, 1394, 7, 68, 2, 2, 1394, 1395, 7, 71, 2, 2, 1395, 176, 3, 2, 2, 2, 1396, 1397, 7, 70, 2, 2, 1397, 1398, 7, 72, 2, 2, 1398, 1399, 7, 85, 2, 2, 1399, 178, 3, 2, 2, 2, 1400, 1401, 7, 70, 2, 2, 1401, 1402, 7, 75, 2, 2, 1402, 1403, 7, 84, 2, 2, 1403, 1404, 7, 71, 2, 2, 1404, 1405, 7, 69, 2, 2, 1405, 1406, 7, 86, 2, 2, 1406, 1407, 7, 81, 2, 2, 1407, 1408, 7, 84, 2, 2, 1408, 1409, 7, 75, 2, 2, 1409, 1410, 7, 71, 2, 2, 1410, 1411, 7, 85, 2, 2, 1411, 180, 3, 2, 2, 2, 1412, 1413, 7, 70, 2, 2, 1413, 1414, 7, 75, 2, 2, 1414, 1415, 7, 84, 2, 2, 1415, 1416, 7, 71, 2, 2, 1416, 1417, 7, 69, 2, 2, 1417, 1418, 7, 86, 2, 2, 1418, 1419, 7, 81, 2, 2, 1419, 1420, 7, 84, 2, 2, 1420, 1421, 7, 91, 2, 2, 1421, 182, 3, 2, 2, 2, 1422, 1423, 7, 70, 2, 2, 1423, 1424, 7, 75, 2, 2, 1424, 1425, 7, 85, 2, 2, 1425, 1426, 7, 86, 2, 2, 1426, 1427, 7, 75, 2, 2, 1427, 1428, 7, 80, 2, 2, 1428, 1429, 7, 69, 2, 2, 1429, 1430, 7, 86, 2, 2, 1430, 184, 3, 2, 2, 2, 1431, 1432, 7, 70, 2, 2, 1432, 1433, 7, 75, 2, 2, 1433, 1434, 7, 85, 2, 2, 1434, 1435, 7, 86, 2, 2, 1435, 1436, 7, 84, 2, 2, 1436, 1437, 7, 75, 2, 2, 1437, 1438, 7, 68, 2, 2, 1438, 1439, 7, 87, 2, 2, 1439, 1440, 7, 86, 2, 2, 1440, 1441, 7, 71, 2, 2, 1441, 186, 3, 2, 2, 2, 1442, 1443, 7, 70, 2, 2, 1443, 1444, 7, 75, 2, 2, 1444, 1445, 7, 88, 2, 2, 1445, 188, 3, 2, 2, 2, 1446, 1447, 7, 70, 2, 2, 1447, 1448, 7, 81, 2, 2, 1448, 1449, 7, 87, 2, 2, 1449, 1450, 7, 68, 2, 2, 1450, 1451, 7, 78, 2, 2, 1451, 1452, 7, 71, 2, 2, 1452, 190, 3, 2, 2, 2, 1453, 1454, 7, 70, 2, 2, 1454, 1455, 7, 84, 2, 2, 1455, 1456, 7, 81, 2, 2, 1456, 1457, 7, 82, 2, 2, 1457, 192, 3, 2, 2, 2, 1458, 1459, 7, 71, 2, 2, 1459, 1460, 7, 78, 2, 2, 1460, 1461, 7, 85, 2, 2, 1461, 1462, 7, 71, 2, 2, 1462, 194, 3, 2, 2, 2, 1463, 1464, 7, 71, 2, 2, 1464, 1465, 7, 80, 2, 2, 1465, 1466, 7, 70, 2, 2, 1466, 196, 3, 2, 2, 2, 1467, 1468, 7, 71, 2, 2, 1468, 1469, 7, 85, 2, 2, 1469, 1470, 7, 69, 2, 2, 1470, 1471, 7, 67, 2, 2, 1471, 1472, 7, 82, 2, 2, 1472, 1473, 7, 71, 2, 2, 1473, 198, 3, 2, 2, 2, 1474, 1475, 7, 71, 2, 2, 1475, 1476, 7, 85, 2, 2, 1476, 1477, 7, 69, 2, 2, 1477, 1478, 7, 67, 2, 2, 1478, 1479, 7, 82, 2, 2, 1479, 1480, 7, 71, 2, 2, 1480, 1481, 7, 70, 2, 2, 1481, 200, 3, 2, 2, 2, 1482, 1483, 7, 71, 2, 2, 1483, 1484, 7, 90, 2, 2, 1484, 1485, 7, 69, 2, 2, 1485, 1486, 7, 71, 2, 2, 1486, 1487, 7, 82, 2, 2, 1487, 1488, 7, 86, 2, 2, 1488, 202, 3, 2, 2, 2, 1489, 1490, 7, 71, 2, 2, 1490, 1491, 7, 90, 2, 2, 1491, 1492, 7, 69, 2, 2, 1492, 1493, 7, 74, 2, 2, 1493, 1494, 7, 67, 2, 2, 1494, 1495, 7, 80, 2, 2, 1495, 1496, 7, 73, 2, 2, 1496, 1497, 7, 71, 2, 2, 1497, 204, 3, 2, 2, 2, 1498, 1499, 7, 71, 2, 2, 1499, 1500, 7, 90, 2, 2, 1500, 1501, 7, 69, 2, 2, 1501, 1502, 7, 78, 2, 2, 1502, 1503, 7, 87, 2, 2, 1503, 1504, 7, 70, 2, 2, 1504, 1505, 7, 71, 2, 2, 1505, 206, 3, 2, 2, 2, 1506, 1507, 7, 71, 2, 2, 1507, 1508, 7, 90, 2, 2, 1508, 1509, 7, 75, 2, 2, 1509, 1510, 7, 85, 2, 2, 1510, 1511, 7, 86, 2, 2, 1511, 1512, 7, 85, 2, 2, 1512, 208, 3, 2, 2, 2, 1513, 1514, 7, 71, 2, 2, 1514, 1515, 7, 90, 2, 2, 1515, 1516, 7, 82, 2, 2, 1516, 1517, 7, 78, 2, 2, 1517, 1518, 7, 67, 2, 2, 1518, 1519, 7, 75, 2, 2, 1519, 1520, 7, 80, 2, 2, 1520, 210, 3, 2, 2, 2, 1521, 1522, 7, 71, 2, 2, 1522, 1523, 7, 90, 2, 2, 1523, 1524, 7, 82, 2, 2, 1524, 1525, 7, 81, 2, 2, 1525, 1526, 7, 84, 2, 2, 1526, 1527, 7, 86, 2, 2, 1527, 212, 3, 2, 2, 2, 1528, 1529, 7, 71, 2, 2, 1529, 1530, 7, 90, 2, 2, 1530, 1531, 7, 86, 2, 2, 1531, 1532, 7, 71, 2, 2, 1532, 1533, 7, 80, 2, 2, 1533, 1534, 7, 70, 2, 2, 1534, 1535, 7, 71, 2, 2, 1535, 1536, 7, 70, 2, 2, 1536, 214, 3, 2, 2, 2, 1537, 1538, 7, 71, 2, 2, 1538, 1539, 7, 90, 2, 2, 1539, 1540, 7, 86, 2, 2, 1540, 1541, 7, 71, 2, 2, 1541, 1542, 7, 84, 2, 2, 1542, 1543, 7, 80, 2, 2, 1543, 1544, 7, 67, 2, 2, 1544, 1545, 7, 78, 2, 2, 1545, 216, 3, 2, 2, 2, 1546, 1547, 7, 71, 2, 2, 1547, 1548, 7, 90, 2, 2, 1548, 1549, 7, 86, 2, 2, 1549, 1550, 7, 84, 2, 2, 1550, 1551, 7, 67, 2, 2, 1551, 1552, 7, 69, 2, 2, 1552, 1553, 7, 86, 2, 2, 1553, 218, 3, 2, 2, 2, 1554, 1555, 7, 72, 2, 2, 1555, 1556, 7, 67, 2, 2, 1556, 1557, 7, 78, 2, 2, 1557, 1558, 7, 85, 2, 2, 1558, 1559, 7, 71, 2, 2, 1559, 220, 3, 2, 2, 2, 1560, 1561, 7, 72, 2, 2, 1561, 1562, 7, 71, 2, 2, 1562, 1563, 7, 86, 2, 2, 1563, 1564, 7, 69, 2, 2, 1564, 1565, 7, 74, 2, 2, 1565, 222, 3, 2, 2, 2, 1566, 1567, 7, 72, 2, 2, 1567, 1568, 7, 75, 2, 2, 1568, 1569, 7, 71, 2, 2, 1569, 1570, 7, 78, 2, 2, 1570, 1571, 7, 70, 2, 2, 1571, 1572, 7, 85, 2, 2, 1572, 224, 3, 2, 2, 2, 1573, 1574, 7, 72, 2, 2, 1574, 1575, 7, 75, 2, 2, 1575, 1576, 7, 78, 2, 2, 1576, 1577, 7, 86, 2, 2, 1577, 1578, 7, 71, 2, 2, 1578, 1579, 7, 84, 2, 2, 1579, 226, 3, 2, 2, 2, 1580, 1581, 7, 72, 2, 2, 1581, 1582, 7, 75, 2, 2, 1582, 1583, 7, 78, 2, 2, 1583, 1584, 7, 71, 2, 2, 1584, 1585, 7, 72, 2, 2, 1585, 1586, 7, 81, 2, 2, 1586, 1587, 7, 84, 2, 2, 1587, 1588, 7, 79, 2, 2, 1588, 1589, 7, 67, 2, 2, 1589, 1590, 7, 86, 2, 2, 1590, 228, 3, 2, 2, 2, 1591, 1592, 7, 72, 2, 2, 1592, 1593, 7, 75, 2, 2, 1593, 1594, 7, 84, 2, 2, 1594, 1595, 7, 85, 2, 2, 1595, 1596, 7, 86, 2, 2, 1596, 230, 3, 2, 2, 2, 1597, 1598, 7, 72, 2, 2, 1598, 1599, 7, 78, 2, 2, 1599, 1600, 7, 81, 2, 2, 1600, 1601, 7, 67, 2, 2, 1601, 1602, 7, 86, 2, 2, 1602, 232, 3, 2, 2, 2, 1603, 1604, 7, 72, 2, 2, 1604, 1605, 7, 81, 2, 2, 1605, 1606, 7, 78, 2, 2, 1606, 1607, 7, 78, 2, 2, 1607, 1608, 7, 81, 2, 2, 1608, 1609, 7, 89, 2, 2, 1609, 1610, 7, 75, 2, 2, 1610, 1611, 7, 80, 2, 2, 1611, 1612, 7, 73, 2, 2, 1612, 234, 3, 2, 2, 2, 1613, 1614, 7, 72, 2, 2, 1614, 1615, 7, 81, 2, 2, 1615, 1616, 7, 84, 2, 2, 1616, 236, 3, 2, 2, 2, 1617, 1618, 7, 72, 2, 2, 1618, 1619, 7, 81, 2, 2, 1619, 1620, 7, 84, 2, 2, 1620, 1621, 7, 71, 2, 2, 1621, 1622, 7, 75, 2, 2, 1622, 1623, 7, 73, 2, 2, 1623, 1624, 7, 80, 2, 2, 1624, 238, 3, 2, 2, 2, 1625, 1626, 7, 72, 2, 2, 1626, 1627, 7, 81, 2, 2, 1627, 1628, 7, 84, 2, 2, 1628, 1629, 7, 79, 2, 2, 1629, 1630, 7, 67, 2, 2, 1630, 1631, 7, 86, 2, 2, 1631, 240, 3, 2, 2, 2, 1632, 1633, 7, 72, 2, 2, 1633, 1634, 7, 81, 2, 2, 1634, 1635, 7, 84, 2, 2, 1635, 1636, 7, 79, 2, 2, 1636, 1637, 7, 67, 2, 2, 1637, 1638, 7, 86, 2, 2, 1638, 1639, 7, 86, 2, 2, 1639, 1640, 7, 71, 2, 2, 1640, 1641, 7, 70, 2, 2, 1641, 242, 3, 2, 2, 2, 1642, 1643, 7, 72, 2, 2, 1643, 1644, 7, 84, 2, 2, 1644, 1645, 7, 81, 2, 2, 1645, 1646, 7, 79, 2, 2, 1646, 244, 3, 2, 2, 2, 1647, 1648, 7, 72, 2, 2, 1648, 1649, 7, 87, 2, 2, 1649, 1650, 7, 78, 2, 2, 1650, 1651, 7, 78, 2, 2, 1651, 246, 3, 2, 2, 2, 1652, 1653, 7, 72, 2, 2, 1653, 1654, 7, 87, 2, 2, 1654, 1655, 7, 80, 2, 2, 1655, 1656, 7, 69, 2, 2, 1656, 1657, 7, 86, 2, 2, 1657, 1658, 7, 75, 2, 2, 1658, 1659, 7, 81, 2, 2, 1659, 1660, 7, 80, 2, 2, 1660, 248, 3, 2, 2, 2, 1661, 1662, 7, 72, 2, 2, 1662, 1663, 7, 87, 2, 2, 1663, 1664, 7, 80, 2, 2, 1664, 1665, 7, 69, 2, 2, 1665, 1666, 7, 86, 2, 2, 1666, 1667, 7, 75, 2, 2, 1667, 1668, 7, 81, 2, 2, 1668, 1669, 7, 80, 2, 2, 1669, 1670, 7, 85, 2, 2, 1670, 250, 3, 2, 2, 2, 1671, 1672, 7, 73, 2, 2, 1672, 1673, 7, 71, 2, 2, 1673, 1674, 7, 80, 2, 2, 1674, 1675, 7, 71, 2, 2, 1675, 1676, 7, 84, 2, 2, 1676, 1677, 7, 67, 2, 2, 1677, 1678, 7, 86, 2, 2, 1678, 1679, 7, 71, 2, 2, 1679, 1680, 7, 70, 2, 2, 1680, 252, 3, 2, 2, 2, 1681, 1682, 7, 73, 2, 2, 1682, 1683, 7, 78, 2, 2, 1683, 1684, 7, 81, 2, 2, 1684, 1685, 7, 68, 2, 2, 1685, 1686, 7, 67, 2, 2, 1686, 1687, 7, 78, 2, 2, 1687, 254, 3, 2, 2, 2, 1688, 1689, 7, 73, 2, 2, 1689, 1690, 7, 84, 2, 2, 1690, 1691, 7, 67, 2, 2, 1691, 1692, 7, 80, 2, 2, 1692, 1693, 7, 86, 2, 2, 1693, 256, 3, 2, 2, 2, 1694, 1695, 7, 73, 2, 2, 1695, 1696, 7, 84, 2, 2, 1696, 1697, 7, 81, 2, 2, 1697, 1698, 7, 87, 2, 2, 1698, 1699, 7, 82, 2, 2, 1699, 258, 3, 2, 2, 2, 1700, 1701, 7, 73, 2, 2, 1701, 1702, 7, 84, 2, 2, 1702, 1703, 7, 81, 2, 2, 1703, 1704, 7, 87, 2, 2, 1704, 1705, 7, 82, 2, 2, 1705, 1706, 7, 75, 2, 2, 1706, 1707, 7, 80, 2, 2, 1707, 1708, 7, 73, 2, 2, 1708, 260, 3, 2, 2, 2, 1709, 1710, 7, 74, 2, 2, 1710, 1711, 7, 67, 2, 2, 1711, 1712, 7, 88, 2, 2, 1712, 1713, 7, 75, 2, 2, 1713, 1714, 7, 80, 2, 2, 1714, 1715, 7, 73, 2, 2, 1715, 262, 3, 2, 2, 2, 1716, 1717, 7, 90, 2, 2, 1717, 264, 3, 2, 2, 2, 1718, 1719, 7, 74, 2, 2, 1719, 1720, 7, 81, 2, 2, 1720, 1721, 7, 87, 2, 2, 1721, 1722, 7, 84, 2, 2, 1722, 266, 3, 2, 2, 2, 1723, 1724, 7, 74, 2, 2, 1724, 1725, 7, 81, 2, 2, 1725, 1726, 7, 87, 2, 2, 1726, 1727, 7, 84, 2, 2, 1727, 1728, 7, 85, 2, 2, 1728, 268, 3, 2, 2, 2, 1729, 1730, 7, 75, 2, 2, 1730, 1731, 7, 70, 2, 2, 1731, 1732, 7, 71, 2, 2, 1732, 1733, 7, 80, 2, 2, 1733, 1734, 7, 86, 2, 2, 1734, 1735, 7, 75, 2, 2, 1735, 1736, 7, 72, 2, 2, 1736, 1737, 7, 75, 2, 2, 1737, 1738, 7, 71, 2, 2, 1738, 1739, 7, 84, 2, 2, 1739, 270, 3, 2, 2, 2, 1740, 1741, 7, 75, 2, 2, 1741, 1742, 7, 72, 2, 2, 1742, 272, 3, 2, 2, 2, 1743, 1744, 7, 75, 2, 2, 1744, 1745, 7, 73, 2, 2, 1745, 1746, 7, 80, 2, 2, 1746, 1747, 7, 81, 2, 2, 1747, 1748, 7, 84, 2, 2, 1748, 1749, 7, 71, 2, 2, 1749, 274, 3, 2, 2, 2, 1750, 1751, 7, 75, 2, 2, 1751, 1752, 7, 79, 2, 2, 1752, 1753, 7, 82, 2, 2, 1753, 1754, 7, 81, 2, 2, 1754, 1755, 7, 84, 2, 2, 1755, 1756, 7, 86, 2, 2, 1756, 276, 3, 2, 2, 2, 1757, 1758, 7, 75, 2, 2, 1758, 1759, 7, 80, 2, 2, 1759, 278, 3, 2, 2, 2, 1760, 1761, 7, 75, 2, 2, 1761, 1762, 7, 80, 2, 2, 1762, 1763, 7, 69, 2, 2, 1763, 1764, 7, 78, 2, 2, 1764, 1765, 7, 87, 2, 2, 1765, 1766, 7, 70, 2, 2, 1766, 1767, 7, 71, 2, 2, 1767, 280, 3, 2, 2, 2, 1768, 1769, 7, 75, 2, 2, 1769, 1770, 7, 80, 2, 2, 1770, 1771, 7, 70, 2, 2, 1771, 1772, 7, 71, 2, 2, 1772, 1773, 7, 90, 2, 2, 1773, 282, 3, 2, 2, 2, 1774, 1775, 7, 75, 2, 2, 1775, 1776, 7, 80, 2, 2, 1776, 1777, 7, 70, 2, 2, 1777, 1778, 7, 71, 2, 2, 1778, 1779, 7, 90, 2, 2, 1779, 1780, 7, 71, 2, 2, 1780, 1781, 7, 85, 2, 2, 1781, 284, 3, 2, 2, 2, 1782, 1783, 7, 75, 2, 2, 1783, 1784, 7, 80, 2, 2, 1784, 1785, 7, 80, 2, 2, 1785, 1786, 7, 71, 2, 2, 1786, 1787, 7, 84, 2, 2, 1787, 286, 3, 2, 2, 2, 1788, 1789, 7, 75, 2, 2, 1789, 1790, 7, 80, 2, 2, 1790, 1791, 7, 82, 2, 2, 1791, 1792, 7, 67, 2, 2, 1792, 1793, 7, 86, 2, 2, 1793, 1794, 7, 74, 2, 2, 1794, 288, 3, 2, 2, 2, 1795, 1796, 7, 75, 2, 2, 1796, 1797, 7, 80, 2, 2, 1797, 1798, 7, 82, 2, 2, 1798, 1799, 7, 87, 2, 2, 1799, 1800, 7, 86, 2, 2, 1800, 1801, 7, 72, 2, 2, 1801, 1802, 7, 81, 2, 2, 1802, 1803, 7, 84, 2, 2, 1803, 1804, 7, 79, 2, 2, 1804, 1805, 7, 67, 2, 2, 1805, 1806, 7, 86, 2, 2, 1806, 290, 3, 2, 2, 2, 1807, 1808, 7, 75, 2, 2, 1808, 1809, 7, 80, 2, 2, 1809, 1810, 7, 85, 2, 2, 1810, 1811, 7, 71, 2, 2, 1811, 1812, 7, 84, 2, 2, 1812, 1813, 7, 86, 2, 2, 1813, 292, 3, 2, 2, 2, 1814, 1815, 7, 75, 2, 2, 1815, 1816, 7, 80, 2, 2, 1816, 1817, 7, 86, 2, 2, 1817, 1818, 7, 71, 2, 2, 1818, 1819, 7, 84, 2, 2, 1819, 1820, 7, 85, 2, 2, 1820, 1821, 7, 71, 2, 2, 1821, 1822, 7, 69, 2, 2, 1822, 1823, 7, 86, 2, 2, 1823, 294, 3, 2, 2, 2, 1824, 1825, 7, 75, 2, 2, 1825, 1826, 7, 80, 2, 2, 1826, 1827, 7, 86, 2, 2, 1827, 1828, 7, 71, 2, 2, 1828, 1829, 7, 84, 2, 2, 1829, 1830, 7, 88, 2, 2, 1830, 1831, 7, 67, 2, 2, 1831, 1832, 7, 78, 2, 2, 1832, 296, 3, 2, 2, 2, 1833, 1834, 7, 75, 2, 2, 1834, 1835, 7, 80, 2, 2, 1835, 1836, 7, 86, 2, 2, 1836, 298, 3, 2, 2, 2, 1837, 1838, 7, 75, 2, 2, 1838, 1839, 7, 80, 2, 2, 1839, 1840, 7, 86, 2, 2, 1840, 1841, 7, 71, 2, 2, 1841, 1842, 7, 73, 2, 2, 1842, 1843, 7, 71, 2, 2, 1843, 1844, 7, 84, 2, 2, 1844, 300, 3, 2, 2, 2, 1845, 1846, 7, 75, 2, 2, 1846, 1847, 7, 80, 2, 2, 1847, 1848, 7, 86, 2, 2, 1848, 1849, 7, 81, 2, 2, 1849, 302, 3, 2, 2, 2, 1850, 1851, 7, 75, 2, 2, 1851, 1852, 7, 85, 2, 2, 1852, 304, 3, 2, 2, 2, 1853, 1854, 7, 75, 2, 2, 1854, 1855, 7, 86, 2, 2, 1855, 1856, 7, 71, 2, 2, 1856, 1857, 7, 79, 2, 2, 1857, 1858, 7, 85, 2, 2, 1858, 306, 3, 2, 2, 2, 1859, 1860, 7, 76, 2, 2, 1860, 1861, 7, 81, 2, 2, 1861, 1862, 7, 75, 2, 2, 1862, 1863, 7, 80, 2, 2, 1863, 308, 3, 2, 2, 2, 1864, 1865, 7, 77, 2, 2, 1865, 1866, 7, 71, 2, 2, 1866, 1867, 7, 91, 2, 2, 1867, 1868, 7, 85, 2, 2, 1868, 310, 3, 2, 2, 2, 1869, 1870, 7, 78, 2, 2, 1870, 1871, 7, 67, 2, 2, 1871, 1872, 7, 85, 2, 2, 1872, 1873, 7, 86, 2, 2, 1873, 312, 3, 2, 2, 2, 1874, 1875, 7, 78, 2, 2, 1875, 1876, 7, 67, 2, 2, 1876, 1877, 7, 86, 2, 2, 1877, 1878, 7, 71, 2, 2, 1878, 1879, 7, 84, 2, 2, 1879, 1880, 7, 67, 2, 2, 1880, 1881, 7, 78, 2, 2, 1881, 314, 3, 2, 2, 2, 1882, 1883, 7, 78, 2, 2, 1883, 1884, 7, 67, 2, 2, 1884, 1885, 7, 92, 2, 2, 1885, 1886, 7, 91, 2, 2, 1886, 316, 3, 2, 2, 2, 1887, 1888, 7, 78, 2, 2, 1888, 1889, 7, 71, 2, 2, 1889, 1890, 7, 67, 2, 2, 1890, 1891, 7, 70, 2, 2, 1891, 1892, 7, 75, 2, 2, 1892, 1893, 7, 80, 2, 2, 1893, 1894, 7, 73, 2, 2, 1894, 318, 3, 2, 2, 2, 1895, 1896, 7, 78, 2, 2, 1896, 1897, 7, 71, 2, 2, 1897, 1898, 7, 72, 2, 2, 1898, 1899, 7, 86, 2, 2, 1899, 320, 3, 2, 2, 2, 1900, 1901, 7, 78, 2, 2, 1901, 1902, 7, 75, 2, 2, 1902, 1903, 7, 77, 2, 2, 1903, 1904, 7, 71, 2, 2, 1904, 322, 3, 2, 2, 2, 1905, 1906, 7, 75, 2, 2, 1906, 1907, 7, 78, 2, 2, 1907, 1908, 7, 75, 2, 2, 1908, 1909, 7, 77, 2, 2, 1909, 1910, 7, 71, 2, 2, 1910, 324, 3, 2, 2, 2, 1911, 1912, 7, 78, 2, 2, 1912, 1913, 7, 75, 2, 2, 1913, 1914, 7, 79, 2, 2, 1914, 1915, 7, 75, 2, 2, 1915, 1916, 7, 86, 2, 2, 1916, 326, 3, 2, 2, 2, 1917, 1918, 7, 78, 2, 2, 1918, 1919, 7, 75, 2, 2, 1919, 1920, 7, 80, 2, 2, 1920, 1921, 7, 71, 2, 2, 1921, 1922, 7, 85, 2, 2, 1922, 328, 3, 2, 2, 2, 1923, 1924, 7, 78, 2, 2, 1924, 1925, 7, 75, 2, 2, 1925, 1926, 7, 85, 2, 2, 1926, 1927, 7, 86, 2, 2, 1927, 330, 3, 2, 2, 2, 1928, 1929, 7, 78, 2, 2, 1929, 1930, 7, 81, 2, 2, 1930, 1931, 7, 67, 2, 2, 1931, 1932, 7, 70, 2, 2, 1932, 332, 3, 2, 2, 2, 1933, 1934, 7, 78, 2, 2, 1934, 1935, 7, 81, 2, 2, 1935, 1936, 7, 69, 2, 2, 1936, 1937, 7, 67, 2, 2, 1937, 1938, 7, 78, 2, 2, 1938, 334, 3, 2, 2, 2, 1939, 1940, 7, 78, 2, 2, 1940, 1941, 7, 81, 2, 2, 1941, 1942, 7, 69, 2, 2, 1942, 1943, 7, 67, 2, 2, 1943, 1944, 7, 86, 2, 2, 1944, 1945, 7, 75, 2, 2, 1945, 1946, 7, 81, 2, 2, 1946, 1947, 7, 80, 2, 2, 1947, 336, 3, 2, 2, 2, 1948, 1949, 7, 78, 2, 2, 1949, 1950, 7, 81, 2, 2, 1950, 1951, 7, 69, 2, 2, 1951, 1952, 7, 77, 2, 2, 1952, 338, 3, 2, 2, 2, 1953, 1954, 7, 78, 2, 2, 1954, 1955, 7, 81, 2, 2, 1955, 1956, 7, 69, 2, 2, 1956, 1957, 7, 77, 2, 2, 1957, 1958, 7, 85, 2, 2, 1958, 340, 3, 2, 2, 2, 1959, 1960, 7, 78, 2, 2, 1960, 1961, 7, 81, 2, 2, 1961, 1962, 7, 73, 2, 2, 1962, 1963, 7, 75, 2, 2, 1963, 1964, 7, 69, 2, 2, 1964, 1965, 7, 67, 2, 2, 1965, 1966, 7, 78, 2, 2, 1966, 342, 3, 2, 2, 2, 1967, 1968, 7, 78, 2, 2, 1968, 1969, 7, 81, 2, 2, 1969, 1970, 7, 80, 2, 2, 1970, 1971, 7, 73, 2, 2, 1971, 344, 3, 2, 2, 2, 1972, 1973, 7, 79, 2, 2, 1973, 1974, 7, 67, 2, 2, 1974, 1975, 7, 69, 2, 2, 1975, 1976, 7, 84, 2, 2, 1976, 1977, 7, 81, 2, 2, 1977, 346, 3, 2, 2, 2, 1978, 1979, 7, 79, 2, 2, 1979, 1980, 7, 67, 2, 2, 1980, 1981, 7, 82, 2, 2, 1981, 348, 3, 2, 2, 2, 1982, 1983, 7, 79, 2, 2, 1983, 1984, 7, 67, 2, 2, 1984, 1985, 7, 86, 2, 2, 1985, 1986, 7, 69, 2, 2, 1986, 1987, 7, 74, 2, 2, 1987, 1988, 7, 71, 2, 2, 1988, 1989, 7, 70, 2, 2, 1989, 350, 3, 2, 2, 2, 1990, 1991, 7, 79, 2, 2, 1991, 1992, 7, 71, 2, 2, 1992, 1993, 7, 84, 2, 2, 1993, 1994, 7, 73, 2, 2, 1994, 1995, 7, 71, 2, 2, 1995, 352, 3, 2, 2, 2, 1996, 1997, 7, 79, 2, 2, 1997, 1998, 7, 75, 2, 2, 1998, 1999, 7, 69, 2, 2, 1999, 2000, 7, 84, 2, 2, 2000, 2001, 7, 81, 2, 2, 2001, 2002, 7, 85, 2, 2, 2002, 2003, 7, 71, 2, 2, 2003, 2004, 7, 69, 2, 2, 2004, 2005, 7, 81, 2, 2, 2005, 2006, 7, 80, 2, 2, 2006, 2007, 7, 70, 2, 2, 2007, 354, 3, 2, 2, 2, 2008, 2009, 7, 79, 2, 2, 2009, 2010, 7, 75, 2, 2, 2010, 2011, 7, 69, 2, 2, 2011, 2012, 7, 84, 2, 2, 2012, 2013, 7, 81, 2, 2, 2013, 2014, 7, 85, 2, 2, 2014, 2015, 7, 71, 2, 2, 2015, 2016, 7, 69, 2, 2, 2016, 2017, 7, 81, 2, 2, 2017, 2018, 7, 80, 2, 2, 2018, 2019, 7, 70, 2, 2, 2019, 2020, 7, 85, 2, 2, 2020, 356, 3, 2, 2, 2, 2021, 2022, 7, 79, 2, 2, 2022, 2023, 7, 75, 2, 2, 2023, 2024, 7, 78, 2, 2, 2024, 2025, 7, 78, 2, 2, 2025, 2026, 7, 75, 2, 2, 2026, 2027, 7, 85, 2, 2, 2027, 2028, 7, 71, 2, 2, 2028, 2029, 7, 69, 2, 2, 2029, 2030, 7, 81, 2, 2, 2030, 2031, 7, 80, 2, 2, 2031, 2032, 7, 70, 2, 2, 2032, 358, 3, 2, 2, 2, 2033, 2034, 7, 79, 2, 2, 2034, 2035, 7, 75, 2, 2, 2035, 2036, 7, 78, 2, 2, 2036, 2037, 7, 78, 2, 2, 2037, 2038, 7, 75, 2, 2, 2038, 2039, 7, 85, 2, 2, 2039, 2040, 7, 71, 2, 2, 2040, 2041, 7, 69, 2, 2, 2041, 2042, 7, 81, 2, 2, 2042, 2043, 7, 80, 2, 2, 2043, 2044, 7, 70, 2, 2, 2044, 2045, 7, 85, 2, 2, 2045, 360, 3, 2, 2, 2, 2046, 2047, 7, 79, 2, 2, 2047, 2048, 7, 75, 2, 2, 2048, 2049, 7, 80, 2, 2, 2049, 2050, 7, 87, 2, 2, 2050, 2051, 7, 86, 2, 2, 2051, 2052, 7, 71, 2, 2, 2052, 362, 3, 2, 2, 2, 2053, 2054, 7, 79, 2, 2, 2054, 2055, 7, 75, 2, 2, 2055, 2056, 7, 80, 2, 2, 2056, 2057, 7, 87, 2, 2, 2057, 2058, 7, 86, 2, 2, 2058, 2059, 7, 71, 2, 2, 2059, 2060, 7, 85, 2, 2, 2060, 364, 3, 2, 2, 2, 2061, 2062, 7, 79, 2, 2, 2062, 2063, 7, 81, 2, 2, 2063, 2064, 7, 80, 2, 2, 2064, 2065, 7, 86, 2, 2, 2065, 2066, 7, 74, 2, 2, 2066, 366, 3, 2, 2, 2, 2067, 2068, 7, 79, 2, 2, 2068, 2069, 7, 81, 2, 2, 2069, 2070, 7, 80, 2, 2, 2070, 2071, 7, 86, 2, 2, 2071, 2072, 7, 74, 2, 2, 2072, 2073, 7, 85, 2, 2, 2073, 368, 3, 2, 2, 2, 2074, 2075, 7, 79, 2, 2, 2075, 2076, 7, 85, 2, 2, 2076, 2077, 7, 69, 2, 2, 2077, 2078, 7, 77, 2, 2, 2078, 370, 3, 2, 2, 2, 2079, 2080, 7, 80, 2, 2, 2080, 2081, 7, 67, 2, 2, 2081, 2082, 7, 79, 2, 2, 2082, 2083, 7, 71, 2, 2, 2083, 372, 3, 2, 2, 2, 2084, 2085, 7, 80, 2, 2, 2085, 2086, 7, 67, 2, 2, 2086, 2087, 7, 79, 2, 2, 2087, 2088, 7, 71, 2, 2, 2088, 2089, 7, 85, 2, 2, 2089, 2090, 7, 82, 2, 2, 2090, 2091, 7, 67, 2, 2, 2091, 2092, 7, 69, 2, 2, 2092, 2093, 7, 71, 2, 2, 2093, 374, 3, 2, 2, 2, 2094, 2095, 7, 80, 2, 2, 2095, 2096, 7, 67, 2, 2, 2096, 2097, 7, 79, 2, 2, 2097, 2098, 7, 71, 2, 2, 2098, 2099, 7, 85, 2, 2, 2099, 2100, 7, 82, 2, 2, 2100, 2101, 7, 67, 2, 2, 2101, 2102, 7, 69, 2, 2, 2102, 2103, 7, 71, 2, 2, 2103, 2104, 7, 85, 2, 2, 2104, 376, 3, 2, 2, 2, 2105, 2106, 7, 80, 2, 2, 2106, 2107, 7, 67, 2, 2, 2107, 2108, 7, 80, 2, 2, 2108, 2109, 7, 81, 2, 2, 2109, 2110, 7, 85, 2, 2, 2110, 2111, 7, 71, 2, 2, 2111, 2112, 7, 69, 2, 2, 2112, 2113, 7, 81, 2, 2, 2113, 2114, 7, 80, 2, 2, 2114, 2115, 7, 70, 2, 2, 2115, 378, 3, 2, 2, 2, 2116, 2117, 7, 80, 2, 2, 2117, 2118, 7, 67, 2, 2, 2118, 2119, 7, 80, 2, 2, 2119, 2120, 7, 81, 2, 2, 2120, 2121, 7, 85, 2, 2, 2121, 2122, 7, 71, 2, 2, 2122, 2123, 7, 69, 2, 2, 2123, 2124, 7, 81, 2, 2, 2124, 2125, 7, 80, 2, 2, 2125, 2126, 7, 70, 2, 2, 2126, 2127, 7, 85, 2, 2, 2127, 380, 3, 2, 2, 2, 2128, 2129, 7, 80, 2, 2, 2129, 2130, 7, 67, 2, 2, 2130, 2131, 7, 86, 2, 2, 2131, 2132, 7, 87, 2, 2, 2132, 2133, 7, 84, 2, 2, 2133, 2134, 7, 67, 2, 2, 2134, 2135, 7, 78, 2, 2, 2135, 382, 3, 2, 2, 2, 2136, 2137, 7, 80, 2, 2, 2137, 2138, 7, 81, 2, 2, 2138, 384, 3, 2, 2, 2, 2139, 2140, 7, 80, 2, 2, 2140, 2141, 7, 81, 2, 2, 2141, 2144, 7, 86, 2, 2, 2142, 2144, 7, 35, 2, 2, 2143, 2139, 3, 2, 2, 2, 2143, 2142, 3, 2, 2, 2, 2144, 386, 3, 2, 2, 2, 2145, 2146, 7, 80, 2, 2, 2146, 2147, 7, 87, 2, 2, 2147, 2148, 7, 78, 2, 2, 2148, 2149, 7, 78, 2, 2, 2149, 388, 3, 2, 2, 2, 2150, 2151, 7, 80, 2, 2, 2151, 2152, 7, 87, 2, 2, 2152, 2153, 7, 78, 2, 2, 2153, 2154, 7, 78, 2, 2, 2154, 2155, 7, 85, 2, 2, 2155, 390, 3, 2, 2, 2, 2156, 2157, 7, 80, 2, 2, 2157, 2158, 7, 87, 2, 2, 2158, 2159, 7, 79, 2, 2, 2159, 2160, 7, 71, 2, 2, 2160, 2161, 7, 84, 2, 2, 2161, 2162, 7, 75, 2, 2, 2162, 2163, 7, 69, 2, 2, 2163, 392, 3, 2, 2, 2, 2164, 2165, 7, 81, 2, 2, 2165, 2166, 7, 72, 2, 2, 2166, 394, 3, 2, 2, 2, 2167, 2168, 7, 81, 2, 2, 2168, 2169, 7, 72, 2, 2, 2169, 2170, 7, 72, 2, 2, 2170, 2171, 7, 85, 2, 2, 2171, 2172, 7, 71, 2, 2, 2172, 2173, 7, 86, 2, 2, 2173, 396, 3, 2, 2, 2, 2174, 2175, 7, 81, 2, 2, 2175, 2176, 7, 80, 2, 2, 2176, 398, 3, 2, 2, 2, 2177, 2178, 7, 81, 2, 2, 2178, 2179, 7, 80, 2, 2, 2179, 2180, 7, 78, 2, 2, 2180, 2181, 7, 91, 2, 2, 2181, 400, 3, 2, 2, 2, 2182, 2183, 7, 81, 2, 2, 2183, 2184, 7, 82, 2, 2, 2184, 2185, 7, 86, 2, 2, 2185, 2186, 7, 75, 2, 2, 2186, 2187, 7, 81, 2, 2, 2187, 2188, 7, 80, 2, 2, 2188, 402, 3, 2, 2, 2, 2189, 2190, 7, 81, 2, 2, 2190, 2191, 7, 82, 2, 2, 2191, 2192, 7, 86, 2, 2, 2192, 2193, 7, 75, 2, 2, 2193, 2194, 7, 81, 2, 2, 2194, 2195, 7, 80, 2, 2, 2195, 2196, 7, 85, 2, 2, 2196, 404, 3, 2, 2, 2, 2197, 2198, 7, 81, 2, 2, 2198, 2199, 7, 84, 2, 2, 2199, 406, 3, 2, 2, 2, 2200, 2201, 7, 81, 2, 2, 2201, 2202, 7, 84, 2, 2, 2202, 2203, 7, 70, 2, 2, 2203, 2204, 7, 71, 2, 2, 2204, 2205, 7, 84, 2, 2, 2205, 408, 3, 2, 2, 2, 2206, 2207, 7, 81, 2, 2, 2207, 2208, 7, 87, 2, 2, 2208, 2209, 7, 86, 2, 2, 2209, 410, 3, 2, 2, 2, 2210, 2211, 7, 81, 2, 2, 2211, 2212, 7, 87, 2, 2, 2212, 2213, 7, 86, 2, 2, 2213, 2214, 7, 71, 2, 2, 2214, 2215, 7, 84, 2, 2, 2215, 412, 3, 2, 2, 2, 2216, 2217, 7, 81, 2, 2, 2217, 2218, 7, 87, 2, 2, 2218, 2219, 7, 86, 2, 2, 2219, 2220, 7, 82, 2, 2, 2220, 2221, 7, 87, 2, 2, 2221, 2222, 7, 86, 2, 2, 2222, 2223, 7, 72, 2, 2, 2223, 2224, 7, 81, 2, 2, 2224, 2225, 7, 84, 2, 2, 2225, 2226, 7, 79, 2, 2, 2226, 2227, 7, 67, 2, 2, 2227, 2228, 7, 86, 2, 2, 2228, 414, 3, 2, 2, 2, 2229, 2230, 7, 81, 2, 2, 2230, 2231, 7, 88, 2, 2, 2231, 2232, 7, 71, 2, 2, 2232, 2233, 7, 84, 2, 2, 2233, 416, 3, 2, 2, 2, 2234, 2235, 7, 81, 2, 2, 2235, 2236, 7, 88, 2, 2, 2236, 2237, 7, 71, 2, 2, 2237, 2238, 7, 84, 2, 2, 2238, 2239, 7, 78, 2, 2, 2239, 2240, 7, 67, 2, 2, 2240, 2241, 7, 82, 2, 2, 2241, 2242, 7, 85, 2, 2, 2242, 418, 3, 2, 2, 2, 2243, 2244, 7, 81, 2, 2, 2244, 2245, 7, 88, 2, 2, 2245, 2246, 7, 71, 2, 2, 2246, 2247, 7, 84, 2, 2, 2247, 2248, 7, 78, 2, 2, 2248, 2249, 7, 67, 2, 2, 2249, 2250, 7, 91, 2, 2, 2250, 420, 3, 2, 2, 2, 2251, 2252, 7, 81, 2, 2, 2252, 2253, 7, 88, 2, 2, 2253, 2254, 7, 71, 2, 2, 2254, 2255, 7, 84, 2, 2, 2255, 2256, 7, 89, 2, 2, 2256, 2257, 7, 84, 2, 2, 2257, 2258, 7, 75, 2, 2, 2258, 2259, 7, 86, 2, 2, 2259, 2260, 7, 71, 2, 2, 2260, 422, 3, 2, 2, 2, 2261, 2262, 7, 82, 2, 2, 2262, 2263, 7, 67, 2, 2, 2263, 2264, 7, 84, 2, 2, 2264, 2265, 7, 86, 2, 2, 2265, 2266, 7, 75, 2, 2, 2266, 2267, 7, 86, 2, 2, 2267, 2268, 7, 75, 2, 2, 2268, 2269, 7, 81, 2, 2, 2269, 2270, 7, 80, 2, 2, 2270, 424, 3, 2, 2, 2, 2271, 2272, 7, 82, 2, 2, 2272, 2273, 7, 67, 2, 2, 2273, 2274, 7, 84, 2, 2, 2274, 2275, 7, 86, 2, 2, 2275, 2276, 7, 75, 2, 2, 2276, 2277, 7, 86, 2, 2, 2277, 2278, 7, 75, 2, 2, 2278, 2279, 7, 81, 2, 2, 2279, 2280, 7, 80, 2, 2, 2280, 2281, 7, 71, 2, 2, 2281, 2282, 7, 70, 2, 2, 2282, 426, 3, 2, 2, 2, 2283, 2284, 7, 82, 2, 2, 2284, 2285, 7, 67, 2, 2, 2285, 2286, 7, 84, 2, 2, 2286, 2287, 7, 86, 2, 2, 2287, 2288, 7, 75, 2, 2, 2288, 2289, 7, 86, 2, 2, 2289, 2290, 7, 75, 2, 2, 2290, 2291, 7, 81, 2, 2, 2291, 2292, 7, 80, 2, 2, 2292, 2293, 7, 85, 2, 2, 2293, 428, 3, 2, 2, 2, 2294, 2295, 7, 82, 2, 2, 2295, 2296, 7, 71, 2, 2, 2296, 2297, 7, 84, 2, 2, 2297, 2298, 7, 69, 2, 2, 2298, 2299, 7, 71, 2, 2, 2299, 2300, 7, 80, 2, 2, 2300, 2301, 7, 86, 2, 2, 2301, 2302, 7, 75, 2, 2, 2302, 2303, 7, 78, 2, 2, 2303, 2304, 7, 71, 2, 2, 2304, 2305, 7, 97, 2, 2, 2305, 2306, 7, 69, 2, 2, 2306, 2307, 7, 81, 2, 2, 2307, 2308, 7, 80, 2, 2, 2308, 2309, 7, 86, 2, 2, 2309, 430, 3, 2, 2, 2, 2310, 2311, 7, 82, 2, 2, 2311, 2312, 7, 71, 2, 2, 2312, 2313, 7, 84, 2, 2, 2313, 2314, 7, 69, 2, 2, 2314, 2315, 7, 71, 2, 2, 2315, 2316, 7, 80, 2, 2, 2316, 2317, 7, 86, 2, 2, 2317, 2318, 7, 75, 2, 2, 2318, 2319, 7, 78, 2, 2, 2319, 2320, 7, 71, 2, 2, 2320, 2321, 7, 97, 2, 2, 2321, 2322, 7, 70, 2, 2, 2322, 2323, 7, 75, 2, 2, 2323, 2324, 7, 85, 2, 2, 2324, 2325, 7, 69, 2, 2, 2325, 432, 3, 2, 2, 2, 2326, 2327, 7, 82, 2, 2, 2327, 2328, 7, 71, 2, 2, 2328, 2329, 7, 84, 2, 2, 2329, 2330, 7, 69, 2, 2, 2330, 2331, 7, 71, 2, 2, 2331, 2332, 7, 80, 2, 2, 2332, 2333, 7, 86, 2, 2, 2333, 434, 3, 2, 2, 2, 2334, 2335, 7, 82, 2, 2, 2335, 2336, 7, 75, 2, 2, 2336, 2337, 7, 88, 2, 2, 2337, 2338, 7, 81, 2, 2, 2338, 2339, 7, 86, 2, 2, 2339, 436, 3, 2, 2, 2, 2340, 2341, 7, 82, 2, 2, 2341, 2342, 7, 78, 2, 2, 2342, 2343, 7, 67, 2, 2, 2343, 2344, 7, 69, 2, 2, 2344, 2345, 7, 75, 2, 2, 2345, 2346, 7, 80, 2, 2, 2346, 2347, 7, 73, 2, 2, 2347, 438, 3, 2, 2, 2, 2348, 2349, 7, 82, 2, 2, 2349, 2350, 7, 81, 2, 2, 2350, 2351, 7, 85, 2, 2, 2351, 2352, 7, 75, 2, 2, 2352, 2353, 7, 86, 2, 2, 2353, 2354, 7, 75, 2, 2, 2354, 2355, 7, 81, 2, 2, 2355, 2356, 7, 80, 2, 2, 2356, 440, 3, 2, 2, 2, 2357, 2358, 7, 82, 2, 2, 2358, 2359, 7, 84, 2, 2, 2359, 2360, 7, 71, 2, 2, 2360, 2361, 7, 69, 2, 2, 2361, 2362, 7, 71, 2, 2, 2362, 2363, 7, 70, 2, 2, 2363, 2364, 7, 75, 2, 2, 2364, 2365, 7, 80, 2, 2, 2365, 2366, 7, 73, 2, 2, 2366, 442, 3, 2, 2, 2, 2367, 2368, 7, 82, 2, 2, 2368, 2369, 7, 84, 2, 2, 2369, 2370, 7, 75, 2, 2, 2370, 2371, 7, 79, 2, 2, 2371, 2372, 7, 67, 2, 2, 2372, 2373, 7, 84, 2, 2, 2373, 2374, 7, 91, 2, 2, 2374, 444, 3, 2, 2, 2, 2375, 2376, 7, 82, 2, 2, 2376, 2377, 7, 84, 2, 2, 2377, 2378, 7, 75, 2, 2, 2378, 2379, 7, 80, 2, 2, 2379, 2380, 7, 69, 2, 2, 2380, 2381, 7, 75, 2, 2, 2381, 2382, 7, 82, 2, 2, 2382, 2383, 7, 67, 2, 2, 2383, 2384, 7, 78, 2, 2, 2384, 2385, 7, 85, 2, 2, 2385, 446, 3, 2, 2, 2, 2386, 2387, 7, 82, 2, 2, 2387, 2388, 7, 84, 2, 2, 2388, 2389, 7, 81, 2, 2, 2389, 2390, 7, 82, 2, 2, 2390, 2391, 7, 71, 2, 2, 2391, 2392, 7, 84, 2, 2, 2392, 2393, 7, 86, 2, 2, 2393, 2394, 7, 75, 2, 2, 2394, 2395, 7, 71, 2, 2, 2395, 2396, 7, 85, 2, 2, 2396, 448, 3, 2, 2, 2, 2397, 2398, 7, 82, 2, 2, 2398, 2399, 7, 87, 2, 2, 2399, 2400, 7, 84, 2, 2, 2400, 2401, 7, 73, 2, 2, 2401, 2402, 7, 71, 2, 2, 2402, 450, 3, 2, 2, 2, 2403, 2404, 7, 83, 2, 2, 2404, 2405, 7, 87, 2, 2, 2405, 2406, 7, 67, 2, 2, 2406, 2407, 7, 84, 2, 2, 2407, 2408, 7, 86, 2, 2, 2408, 2409, 7, 71, 2, 2, 2409, 2410, 7, 84, 2, 2, 2410, 452, 3, 2, 2, 2, 2411, 2412, 7, 83, 2, 2, 2412, 2413, 7, 87, 2, 2, 2413, 2414, 7, 71, 2, 2, 2414, 2415, 7, 84, 2, 2, 2415, 2416, 7, 91, 2, 2, 2416, 454, 3, 2, 2, 2, 2417, 2418, 7, 84, 2, 2, 2418, 2419, 7, 67, 2, 2, 2419, 2420, 7, 80, 2, 2, 2420, 2421, 7, 73, 2, 2, 2421, 2422, 7, 71, 2, 2, 2422, 456, 3, 2, 2, 2, 2423, 2424, 7, 84, 2, 2, 2424, 2425, 7, 71, 2, 2, 2425, 2426, 7, 67, 2, 2, 2426, 2427, 7, 78, 2, 2, 2427, 458, 3, 2, 2, 2, 2428, 2429, 7, 84, 2, 2, 2429, 2430, 7, 71, 2, 2, 2430, 2431, 7, 69, 2, 2, 2431, 2432, 7, 81, 2, 2, 2432, 2433, 7, 84, 2, 2, 2433, 2434, 7, 70, 2, 2, 2434, 2435, 7, 84, 2, 2, 2435, 2436, 7, 71, 2, 2, 2436, 2437, 7, 67, 2, 2, 2437, 2438, 7, 70, 2, 2, 2438, 2439, 7, 71, 2, 2, 2439, 2440, 7, 84, 2, 2, 2440, 460, 3, 2, 2, 2, 2441, 2442, 7, 84, 2, 2, 2442, 2443, 7, 71, 2, 2, 2443, 2444, 7, 69, 2, 2, 2444, 2445, 7, 81, 2, 2, 2445, 2446, 7, 84, 2, 2, 2446, 2447, 7, 70, 2, 2, 2447, 2448, 7, 89, 2, 2, 2448, 2449, 7, 84, 2, 2, 2449, 2450, 7, 75, 2, 2, 2450, 2451, 7, 86, 2, 2, 2451, 2452, 7, 71, 2, 2, 2452, 2453, 7, 84, 2, 2, 2453, 462, 3, 2, 2, 2, 2454, 2455, 7, 84, 2, 2, 2455, 2456, 7, 71, 2, 2, 2456, 2457, 7, 69, 2, 2, 2457, 2458, 7, 81, 2, 2, 2458, 2459, 7, 88, 2, 2, 2459, 2460, 7, 71, 2, 2, 2460, 2461, 7, 84, 2, 2, 2461, 464, 3, 2, 2, 2, 2462, 2463, 7, 84, 2, 2, 2463, 2464, 7, 71, 2, 2, 2464, 2465, 7, 70, 2, 2, 2465, 2466, 7, 87, 2, 2, 2466, 2467, 7, 69, 2, 2, 2467, 2468, 7, 71, 2, 2, 2468, 466, 3, 2, 2, 2, 2469, 2470, 7, 84, 2, 2, 2470, 2471, 7, 71, 2, 2, 2471, 2472, 7, 72, 2, 2, 2472, 2473, 7, 71, 2, 2, 2473, 2474, 7, 84, 2, 2, 2474, 2475, 7, 71, 2, 2, 2475, 2476, 7, 80, 2, 2, 2476, 2477, 7, 69, 2, 2, 2477, 2478, 7, 71, 2, 2, 2478, 2479, 7, 85, 2, 2, 2479, 468, 3, 2, 2, 2, 2480, 2481, 7, 84, 2, 2, 2481, 2482, 7, 71, 2, 2, 2482, 2483, 7, 72, 2, 2, 2483, 2484, 7, 84, 2, 2, 2484, 2485, 7, 71, 2, 2, 2485, 2486, 7, 85, 2, 2, 2486, 2487, 7, 74, 2, 2, 2487, 470, 3, 2, 2, 2, 2488, 2489, 7, 84, 2, 2, 2489, 2490, 7, 71, 2, 2, 2490, 2491, 7, 80, 2, 2, 2491, 2492, 7, 67, 2, 2, 2492, 2493, 7, 79, 2, 2, 2493, 2494, 7, 71, 2, 2, 2494, 472, 3, 2, 2, 2, 2495, 2496, 7, 84, 2, 2, 2496, 2497, 7, 71, 2, 2, 2497, 2498, 7, 82, 2, 2, 2498, 2499, 7, 67, 2, 2, 2499, 2500, 7, 75, 2, 2, 2500, 2501, 7, 84, 2, 2, 2501, 474, 3, 2, 2, 2, 2502, 2503, 7, 84, 2, 2, 2503, 2504, 7, 71, 2, 2, 2504, 2505, 7, 82, 2, 2, 2505, 2506, 7, 71, 2, 2, 2506, 2507, 7, 67, 2, 2, 2507, 2508, 7, 86, 2, 2, 2508, 2509, 7, 67, 2, 2, 2509, 2510, 7, 68, 2, 2, 2510, 2511, 7, 78, 2, 2, 2511, 2512, 7, 71, 2, 2, 2512, 476, 3, 2, 2, 2, 2513, 2514, 7, 84, 2, 2, 2514, 2515, 7, 71, 2, 2, 2515, 2516, 7, 82, 2, 2, 2516, 2517, 7, 78, 2, 2, 2517, 2518, 7, 67, 2, 2, 2518, 2519, 7, 69, 2, 2, 2519, 2520, 7, 71, 2, 2, 2520, 478, 3, 2, 2, 2, 2521, 2522, 7, 84, 2, 2, 2522, 2523, 7, 71, 2, 2, 2523, 2524, 7, 85, 2, 2, 2524, 2525, 7, 71, 2, 2, 2525, 2526, 7, 86, 2, 2, 2526, 480, 3, 2, 2, 2, 2527, 2528, 7, 84, 2, 2, 2528, 2529, 7, 71, 2, 2, 2529, 2530, 7, 85, 2, 2, 2530, 2531, 7, 82, 2, 2, 2531, 2532, 7, 71, 2, 2, 2532, 2533, 7, 69, 2, 2, 2533, 2534, 7, 86, 2, 2, 2534, 482, 3, 2, 2, 2, 2535, 2536, 7, 84, 2, 2, 2536, 2537, 7, 71, 2, 2, 2537, 2538, 7, 85, 2, 2, 2538, 2539, 7, 86, 2, 2, 2539, 2540, 7, 84, 2, 2, 2540, 2541, 7, 75, 2, 2, 2541, 2542, 7, 69, 2, 2, 2542, 2543, 7, 86, 2, 2, 2543, 484, 3, 2, 2, 2, 2544, 2545, 7, 84, 2, 2, 2545, 2546, 7, 71, 2, 2, 2546, 2547, 7, 88, 2, 2, 2547, 2548, 7, 81, 2, 2, 2548, 2549, 7, 77, 2, 2, 2549, 2550, 7, 71, 2, 2, 2550, 486, 3, 2, 2, 2, 2551, 2552, 7, 84, 2, 2, 2552, 2553, 7, 75, 2, 2, 2553, 2554, 7, 73, 2, 2, 2554, 2555, 7, 74, 2, 2, 2555, 2556, 7, 86, 2, 2, 2556, 488, 3, 2, 2, 2, 2557, 2558, 7, 84, 2, 2, 2558, 2559, 7, 78, 2, 2, 2559, 2560, 7, 75, 2, 2, 2560, 2561, 7, 77, 2, 2, 2561, 2569, 7, 71, 2, 2, 2562, 2563, 7, 84, 2, 2, 2563, 2564, 7, 71, 2, 2, 2564, 2565, 7, 73, 2, 2, 2565, 2566, 7, 71, 2, 2, 2566, 2567, 7, 90, 2, 2, 2567, 2569, 7, 82, 2, 2, 2568, 2557, 3, 2, 2, 2, 2568, 2562, 3, 2, 2, 2, 2569, 490, 3, 2, 2, 2, 2570, 2571, 7, 84, 2, 2, 2571, 2572, 7, 81, 2, 2, 2572, 2573, 7, 78, 2, 2, 2573, 2574, 7, 71, 2, 2, 2574, 492, 3, 2, 2, 2, 2575, 2576, 7, 84, 2, 2, 2576, 2577, 7, 81, 2, 2, 2577, 2578, 7, 78, 2, 2, 2578, 2579, 7, 71, 2, 2, 2579, 2580, 7, 85, 2, 2, 2580, 494, 3, 2, 2, 2, 2581, 2582, 7, 84, 2, 2, 2582, 2583, 7, 81, 2, 2, 2583, 2584, 7, 78, 2, 2, 2584, 2585, 7, 78, 2, 2, 2585, 2586, 7, 68, 2, 2, 2586, 2587, 7, 67, 2, 2, 2587, 2588, 7, 69, 2, 2, 2588, 2589, 7, 77, 2, 2, 2589, 496, 3, 2, 2, 2, 2590, 2591, 7, 84, 2, 2, 2591, 2592, 7, 81, 2, 2, 2592, 2593, 7, 78, 2, 2, 2593, 2594, 7, 78, 2, 2, 2594, 2595, 7, 87, 2, 2, 2595, 2596, 7, 82, 2, 2, 2596, 498, 3, 2, 2, 2, 2597, 2598, 7, 84, 2, 2, 2598, 2599, 7, 81, 2, 2, 2599, 2600, 7, 89, 2, 2, 2600, 500, 3, 2, 2, 2, 2601, 2602, 7, 84, 2, 2, 2602, 2603, 7, 81, 2, 2, 2603, 2604, 7, 89, 2, 2, 2604, 2605, 7, 85, 2, 2, 2605, 502, 3, 2, 2, 2, 2606, 2607, 7, 85, 2, 2, 2607, 2608, 7, 71, 2, 2, 2608, 2609, 7, 69, 2, 2, 2609, 2610, 7, 81, 2, 2, 2610, 2611, 7, 80, 2, 2, 2611, 2612, 7, 70, 2, 2, 2612, 504, 3, 2, 2, 2, 2613, 2614, 7, 85, 2, 2, 2614, 2615, 7, 71, 2, 2, 2615, 2616, 7, 69, 2, 2, 2616, 2617, 7, 81, 2, 2, 2617, 2618, 7, 80, 2, 2, 2618, 2619, 7, 70, 2, 2, 2619, 2620, 7, 85, 2, 2, 2620, 506, 3, 2, 2, 2, 2621, 2622, 7, 85, 2, 2, 2622, 2623, 7, 69, 2, 2, 2623, 2624, 7, 74, 2, 2, 2624, 2625, 7, 71, 2, 2, 2625, 2626, 7, 79, 2, 2, 2626, 2627, 7, 67, 2, 2, 2627, 508, 3, 2, 2, 2, 2628, 2629, 7, 85, 2, 2, 2629, 2630, 7, 69, 2, 2, 2630, 2631, 7, 74, 2, 2, 2631, 2632, 7, 71, 2, 2, 2632, 2633, 7, 79, 2, 2, 2633, 2634, 7, 67, 2, 2, 2634, 2635, 7, 85, 2, 2, 2635, 510, 3, 2, 2, 2, 2636, 2637, 7, 85, 2, 2, 2637, 2638, 7, 71, 2, 2, 2638, 2639, 7, 78, 2, 2, 2639, 2640, 7, 71, 2, 2, 2640, 2641, 7, 69, 2, 2, 2641, 2642, 7, 86, 2, 2, 2642, 512, 3, 2, 2, 2, 2643, 2644, 7, 85, 2, 2, 2644, 2645, 7, 71, 2, 2, 2645, 2646, 7, 79, 2, 2, 2646, 2647, 7, 75, 2, 2, 2647, 514, 3, 2, 2, 2, 2648, 2649, 7, 85, 2, 2, 2649, 2650, 7, 71, 2, 2, 2650, 2651, 7, 82, 2, 2, 2651, 2652, 7, 67, 2, 2, 2652, 2653, 7, 84, 2, 2, 2653, 2654, 7, 67, 2, 2, 2654, 2655, 7, 86, 2, 2, 2655, 2656, 7, 71, 2, 2, 2656, 2657, 7, 70, 2, 2, 2657, 516, 3, 2, 2, 2, 2658, 2659, 7, 85, 2, 2, 2659, 2660, 7, 71, 2, 2, 2660, 2661, 7, 84, 2, 2, 2661, 2662, 7, 70, 2, 2, 2662, 2663, 7, 71, 2, 2, 2663, 518, 3, 2, 2, 2, 2664, 2665, 7, 85, 2, 2, 2665, 2666, 7, 71, 2, 2, 2666, 2667, 7, 84, 2, 2, 2667, 2668, 7, 70, 2, 2, 2668, 2669, 7, 71, 2, 2, 2669, 2670, 7, 82, 2, 2, 2670, 2671, 7, 84, 2, 2, 2671, 2672, 7, 81, 2, 2, 2672, 2673, 7, 82, 2, 2, 2673, 2674, 7, 71, 2, 2, 2674, 2675, 7, 84, 2, 2, 2675, 2676, 7, 86, 2, 2, 2676, 2677, 7, 75, 2, 2, 2677, 2678, 7, 71, 2, 2, 2678, 2679, 7, 85, 2, 2, 2679, 520, 3, 2, 2, 2, 2680, 2681, 7, 85, 2, 2, 2681, 2682, 7, 71, 2, 2, 2682, 2683, 7, 85, 2, 2, 2683, 2684, 7, 85, 2, 2, 2684, 2685, 7, 75, 2, 2, 2685, 2686, 7, 81, 2, 2, 2686, 2687, 7, 80, 2, 2, 2687, 2688, 7, 97, 2, 2, 2688, 2689, 7, 87, 2, 2, 2689, 2690, 7, 85, 2, 2, 2690, 2691, 7, 71, 2, 2, 2691, 2692, 7, 84, 2, 2, 2692, 522, 3, 2, 2, 2, 2693, 2694, 7, 85, 2, 2, 2694, 2695, 7, 71, 2, 2, 2695, 2696, 7, 86, 2, 2, 2696, 524, 3, 2, 2, 2, 2697, 2698, 7, 79, 2, 2, 2698, 2699, 7, 75, 2, 2, 2699, 2700, 7, 80, 2, 2, 2700, 2701, 7, 87, 2, 2, 2701, 2702, 7, 85, 2, 2, 2702, 526, 3, 2, 2, 2, 2703, 2704, 7, 85, 2, 2, 2704, 2705, 7, 71, 2, 2, 2705, 2706, 7, 86, 2, 2, 2706, 2707, 7, 85, 2, 2, 2707, 528, 3, 2, 2, 2, 2708, 2709, 7, 85, 2, 2, 2709, 2710, 7, 74, 2, 2, 2710, 2711, 7, 81, 2, 2, 2711, 2712, 7, 84, 2, 2, 2712, 2713, 7, 86, 2, 2, 2713, 530, 3, 2, 2, 2, 2714, 2715, 7, 85, 2, 2, 2715, 2716, 7, 74, 2, 2, 2716, 2717, 7, 81, 2, 2, 2717, 2718, 7, 89, 2, 2, 2718, 532, 3, 2, 2, 2, 2719, 2720, 7, 85, 2, 2, 2720, 2721, 7, 75, 2, 2, 2721, 2722, 7, 80, 2, 2, 2722, 2723, 7, 73, 2, 2, 2723, 2724, 7, 78, 2, 2, 2724, 2725, 7, 71, 2, 2, 2725, 534, 3, 2, 2, 2, 2726, 2727, 7, 85, 2, 2, 2727, 2728, 7, 77, 2, 2, 2728, 2729, 7, 71, 2, 2, 2729, 2730, 7, 89, 2, 2, 2730, 2731, 7, 71, 2, 2, 2731, 2732, 7, 70, 2, 2, 2732, 536, 3, 2, 2, 2, 2733, 2734, 7, 85, 2, 2, 2734, 2735, 7, 79, 2, 2, 2735, 2736, 7, 67, 2, 2, 2736, 2737, 7, 78, 2, 2, 2737, 2738, 7, 78, 2, 2, 2738, 2739, 7, 75, 2, 2, 2739, 2740, 7, 80, 2, 2, 2740, 2741, 7, 86, 2, 2, 2741, 538, 3, 2, 2, 2, 2742, 2743, 7, 85, 2, 2, 2743, 2744, 7, 81, 2, 2, 2744, 2745, 7, 79, 2, 2, 2745, 2746, 7, 71, 2, 2, 2746, 540, 3, 2, 2, 2, 2747, 2748, 7, 85, 2, 2, 2748, 2749, 7, 81, 2, 2, 2749, 2750, 7, 84, 2, 2, 2750, 2751, 7, 86, 2, 2, 2751, 542, 3, 2, 2, 2, 2752, 2753, 7, 85, 2, 2, 2753, 2754, 7, 81, 2, 2, 2754, 2755, 7, 84, 2, 2, 2755, 2756, 7, 86, 2, 2, 2756, 2757, 7, 71, 2, 2, 2757, 2758, 7, 70, 2, 2, 2758, 544, 3, 2, 2, 2, 2759, 2760, 7, 85, 2, 2, 2760, 2761, 7, 81, 2, 2, 2761, 2762, 7, 87, 2, 2, 2762, 2763, 7, 84, 2, 2, 2763, 2764, 7, 69, 2, 2, 2764, 2765, 7, 71, 2, 2, 2765, 546, 3, 2, 2, 2, 2766, 2767, 7, 85, 2, 2, 2767, 2768, 7, 86, 2, 2, 2768, 2769, 7, 67, 2, 2, 2769, 2770, 7, 84, 2, 2, 2770, 2771, 7, 86, 2, 2, 2771, 548, 3, 2, 2, 2, 2772, 2773, 7, 85, 2, 2, 2773, 2774, 7, 86, 2, 2, 2774, 2775, 7, 67, 2, 2, 2775, 2776, 7, 86, 2, 2, 2776, 2777, 7, 75, 2, 2, 2777, 2778, 7, 85, 2, 2, 2778, 2779, 7, 86, 2, 2, 2779, 2780, 7, 75, 2, 2, 2780, 2781, 7, 69, 2, 2, 2781, 2782, 7, 85, 2, 2, 2782, 550, 3, 2, 2, 2, 2783, 2784, 7, 85, 2, 2, 2784, 2785, 7, 86, 2, 2, 2785, 2786, 7, 81, 2, 2, 2786, 2787, 7, 84, 2, 2, 2787, 2788, 7, 71, 2, 2, 2788, 2789, 7, 70, 2, 2, 2789, 552, 3, 2, 2, 2, 2790, 2791, 7, 85, 2, 2, 2791, 2792, 7, 86, 2, 2, 2792, 2793, 7, 84, 2, 2, 2793, 2794, 7, 67, 2, 2, 2794, 2795, 7, 86, 2, 2, 2795, 2796, 7, 75, 2, 2, 2796, 2797, 7, 72, 2, 2, 2797, 2798, 7, 91, 2, 2, 2798, 554, 3, 2, 2, 2, 2799, 2800, 7, 85, 2, 2, 2800, 2801, 7, 86, 2, 2, 2801, 2802, 7, 84, 2, 2, 2802, 2803, 7, 75, 2, 2, 2803, 2804, 7, 80, 2, 2, 2804, 2805, 7, 73, 2, 2, 2805, 556, 3, 2, 2, 2, 2806, 2807, 7, 85, 2, 2, 2807, 2808, 7, 86, 2, 2, 2808, 2809, 7, 84, 2, 2, 2809, 2810, 7, 87, 2, 2, 2810, 2811, 7, 69, 2, 2, 2811, 2812, 7, 86, 2, 2, 2812, 558, 3, 2, 2, 2, 2813, 2814, 7, 85, 2, 2, 2814, 2815, 7, 87, 2, 2, 2815, 2816, 7, 68, 2, 2, 2816, 2817, 7, 85, 2, 2, 2817, 2818, 7, 86, 2, 2, 2818, 2819, 7, 84, 2, 2, 2819, 560, 3, 2, 2, 2, 2820, 2821, 7, 85, 2, 2, 2821, 2822, 7, 87, 2, 2, 2822, 2823, 7, 68, 2, 2, 2823, 2824, 7, 85, 2, 2, 2824, 2825, 7, 86, 2, 2, 2825, 2826, 7, 84, 2, 2, 2826, 2827, 7, 75, 2, 2, 2827, 2828, 7, 80, 2, 2, 2828, 2829, 7, 73, 2, 2, 2829, 562, 3, 2, 2, 2, 2830, 2831, 7, 85, 2, 2, 2831, 2832, 7, 91, 2, 2, 2832, 2833, 7, 80, 2, 2, 2833, 2834, 7, 69, 2, 2, 2834, 564, 3, 2, 2, 2, 2835, 2836, 7, 85, 2, 2, 2836, 2837, 7, 91, 2, 2, 2837, 2838, 7, 85, 2, 2, 2838, 2839, 7, 86, 2, 2, 2839, 2840, 7, 71, 2, 2, 2840, 2841, 7, 79, 2, 2, 2841, 2842, 7, 97, 2, 2, 2842, 2843, 7, 86, 2, 2, 2843, 2844, 7, 75, 2, 2, 2844, 2845, 7, 79, 2, 2, 2845, 2846, 7, 71, 2, 2, 2846, 566, 3, 2, 2, 2, 2847, 2848, 7, 85, 2, 2, 2848, 2849, 7, 91, 2, 2, 2849, 2850, 7, 85, 2, 2, 2850, 2851, 7, 86, 2, 2, 2851, 2852, 7, 71, 2, 2, 2852, 2853, 7, 79, 2, 2, 2853, 2854, 7, 97, 2, 2, 2854, 2855, 7, 88, 2, 2, 2855, 2856, 7, 71, 2, 2, 2856, 2857, 7, 84, 2, 2, 2857, 2858, 7, 85, 2, 2, 2858, 2859, 7, 75, 2, 2, 2859, 2860, 7, 81, 2, 2, 2860, 2861, 7, 80, 2, 2, 2861, 568, 3, 2, 2, 2, 2862, 2863, 7, 86, 2, 2, 2863, 2864, 7, 67, 2, 2, 2864, 2865, 7, 68, 2, 2, 2865, 2866, 7, 78, 2, 2, 2866, 2867, 7, 71, 2, 2, 2867, 570, 3, 2, 2, 2, 2868, 2869, 7, 86, 2, 2, 2869, 2870, 7, 67, 2, 2, 2870, 2871, 7, 68, 2, 2, 2871, 2872, 7, 78, 2, 2, 2872, 2873, 7, 71, 2, 2, 2873, 2874, 7, 85, 2, 2, 2874, 572, 3, 2, 2, 2, 2875, 2876, 7, 86, 2, 2, 2876, 2877, 7, 67, 2, 2, 2877, 2878, 7, 68, 2, 2, 2878, 2879, 7, 78, 2, 2, 2879, 2880, 7, 71, 2, 2, 2880, 2881, 7, 85, 2, 2, 2881, 2882, 7, 67, 2, 2, 2882, 2883, 7, 79, 2, 2, 2883, 2884, 7, 82, 2, 2, 2884, 2885, 7, 78, 2, 2, 2885, 2886, 7, 71, 2, 2, 2886, 574, 3, 2, 2, 2, 2887, 2888, 7, 86, 2, 2, 2888, 2889, 7, 67, 2, 2, 2889, 2890, 7, 84, 2, 2, 2890, 2891, 7, 73, 2, 2, 2891, 2892, 7, 71, 2, 2, 2892, 2893, 7, 86, 2, 2, 2893, 576, 3, 2, 2, 2, 2894, 2895, 7, 86, 2, 2, 2895, 2896, 7, 68, 2, 2, 2896, 2897, 7, 78, 2, 2, 2897, 2898, 7, 82, 2, 2, 2898, 2899, 7, 84, 2, 2, 2899, 2900, 7, 81, 2, 2, 2900, 2901, 7, 82, 2, 2, 2901, 2902, 7, 71, 2, 2, 2902, 2903, 7, 84, 2, 2, 2903, 2904, 7, 86, 2, 2, 2904, 2905, 7, 75, 2, 2, 2905, 2906, 7, 71, 2, 2, 2906, 2907, 7, 85, 2, 2, 2907, 578, 3, 2, 2, 2, 2908, 2909, 7, 86, 2, 2, 2909, 2910, 7, 71, 2, 2, 2910, 2911, 7, 79, 2, 2, 2911, 2912, 7, 82, 2, 2, 2912, 2913, 7, 81, 2, 2, 2913, 2914, 7, 84, 2, 2, 2914, 2915, 7, 67, 2, 2, 2915, 2916, 7, 84, 2, 2, 2916, 2922, 7, 91, 2, 2, 2917, 2918, 7, 86, 2, 2, 2918, 2919, 7, 71, 2, 2, 2919, 2920, 7, 79, 2, 2, 2920, 2922, 7, 82, 2, 2, 2921, 2908, 3, 2, 2, 2, 2921, 2917, 3, 2, 2, 2, 2922, 580, 3, 2, 2, 2, 2923, 2924, 7, 86, 2, 2, 2924, 2925, 7, 71, 2, 2, 2925, 2926, 7, 84, 2, 2, 2926, 2927, 7, 79, 2, 2, 2927, 2928, 7, 75, 2, 2, 2928, 2929, 7, 80, 2, 2, 2929, 2930, 7, 67, 2, 2, 2930, 2931, 7, 86, 2, 2, 2931, 2932, 7, 71, 2, 2, 2932, 2933, 7, 70, 2, 2, 2933, 582, 3, 2, 2, 2, 2934, 2935, 7, 86, 2, 2, 2935, 2936, 7, 74, 2, 2, 2936, 2937, 7, 71, 2, 2, 2937, 2938, 7, 80, 2, 2, 2938, 584, 3, 2, 2, 2, 2939, 2940, 7, 86, 2, 2, 2940, 2941, 7, 75, 2, 2, 2941, 2942, 7, 79, 2, 2, 2942, 2943, 7, 71, 2, 2, 2943, 586, 3, 2, 2, 2, 2944, 2945, 7, 86, 2, 2, 2945, 2946, 7, 75, 2, 2, 2946, 2947, 7, 79, 2, 2, 2947, 2948, 7, 71, 2, 2, 2948, 2949, 7, 70, 2, 2, 2949, 2950, 7, 75, 2, 2, 2950, 2951, 7, 72, 2, 2, 2951, 2952, 7, 72, 2, 2, 2952, 588, 3, 2, 2, 2, 2953, 2954, 7, 86, 2, 2, 2954, 2955, 7, 75, 2, 2, 2955, 2956, 7, 79, 2, 2, 2956, 2957, 7, 71, 2, 2, 2957, 2958, 7, 85, 2, 2, 2958, 2959, 7, 86, 2, 2, 2959, 2960, 7, 67, 2, 2, 2960, 2961, 7, 79, 2, 2, 2961, 2962, 7, 82, 2, 2, 2962, 590, 3, 2, 2, 2, 2963, 2964, 7, 86, 2, 2, 2964, 2965, 7, 75, 2, 2, 2965, 2966, 7, 79, 2, 2, 2966, 2967, 7, 71, 2, 2, 2967, 2968, 7, 85, 2, 2, 2968, 2969, 7, 86, 2, 2, 2969, 2970, 7, 67, 2, 2, 2970, 2971, 7, 79, 2, 2, 2971, 2972, 7, 82, 2, 2, 2972, 2973, 7, 97, 2, 2, 2973, 2974, 7, 78, 2, 2, 2974, 2975, 7, 86, 2, 2, 2975, 2976, 7, 92, 2, 2, 2976, 592, 3, 2, 2, 2, 2977, 2978, 7, 86, 2, 2, 2978, 2979, 7, 75, 2, 2, 2979, 2980, 7, 79, 2, 2, 2980, 2981, 7, 71, 2, 2, 2981, 2982, 7, 85, 2, 2, 2982, 2983, 7, 86, 2, 2, 2983, 2984, 7, 67, 2, 2, 2984, 2985, 7, 79, 2, 2, 2985, 2986, 7, 82, 2, 2, 2986, 2987, 7, 97, 2, 2, 2987, 2988, 7, 80, 2, 2, 2988, 2989, 7, 86, 2, 2, 2989, 2990, 7, 92, 2, 2, 2990, 594, 3, 2, 2, 2, 2991, 2992, 7, 86, 2, 2, 2992, 2993, 7, 75, 2, 2, 2993, 2994, 7, 79, 2, 2, 2994, 2995, 7, 71, 2, 2, 2995, 2996, 7, 85, 2, 2, 2996, 2997, 7, 86, 2, 2, 2997, 2998, 7, 67, 2, 2, 2998, 2999, 7, 79, 2, 2, 2999, 3000, 7, 82, 2, 2, 3000, 3001, 7, 67, 2, 2, 3001, 3002, 7, 70, 2, 2, 3002, 3003, 7, 70, 2, 2, 3003, 596, 3, 2, 2, 2, 3004, 3005, 7, 86, 2, 2, 3005, 3006, 7, 75, 2, 2, 3006, 3007, 7, 79, 2, 2, 3007, 3008, 7, 71, 2, 2, 3008, 3009, 7, 85, 2, 2, 3009, 3010, 7, 86, 2, 2, 3010, 3011, 7, 67, 2, 2, 3011, 3012, 7, 79, 2, 2, 3012, 3013, 7, 82, 2, 2, 3013, 3014, 7, 70, 2, 2, 3014, 3015, 7, 75, 2, 2, 3015, 3016, 7, 72, 2, 2, 3016, 3017, 7, 72, 2, 2, 3017, 598, 3, 2, 2, 2, 3018, 3019, 7, 86, 2, 2, 3019, 3020, 7, 75, 2, 2, 3020, 3021, 7, 80, 2, 2, 3021, 3022, 7, 91, 2, 2, 3022, 3023, 7, 75, 2, 2, 3023, 3024, 7, 80, 2, 2, 3024, 3025, 7, 86, 2, 2, 3025, 600, 3, 2, 2, 2, 3026, 3027, 7, 86, 2, 2, 3027, 3028, 7, 81, 2, 2, 3028, 602, 3, 2, 2, 2, 3029, 3030, 7, 86, 2, 2, 3030, 3031, 7, 81, 2, 2, 3031, 3032, 7, 87, 2, 2, 3032, 3033, 7, 69, 2, 2, 3033, 3034, 7, 74, 2, 2, 3034, 604, 3, 2, 2, 2, 3035, 3036, 7, 86, 2, 2, 3036, 3037, 7, 84, 2, 2, 3037, 3038, 7, 67, 2, 2, 3038, 3039, 7, 75, 2, 2, 3039, 3040, 7, 78, 2, 2, 3040, 3041, 7, 75, 2, 2, 3041, 3042, 7, 80, 2, 2, 3042, 3043, 7, 73, 2, 2, 3043, 606, 3, 2, 2, 2, 3044, 3045, 7, 86, 2, 2, 3045, 3046, 7, 84, 2, 2, 3046, 3047, 7, 67, 2, 2, 3047, 3048, 7, 80, 2, 2, 3048, 3049, 7, 85, 2, 2, 3049, 3050, 7, 67, 2, 2, 3050, 3051, 7, 69, 2, 2, 3051, 3052, 7, 86, 2, 2, 3052, 3053, 7, 75, 2, 2, 3053, 3054, 7, 81, 2, 2, 3054, 3055, 7, 80, 2, 2, 3055, 608, 3, 2, 2, 2, 3056, 3057, 7, 86, 2, 2, 3057, 3058, 7, 84, 2, 2, 3058, 3059, 7, 67, 2, 2, 3059, 3060, 7, 80, 2, 2, 3060, 3061, 7, 85, 2, 2, 3061, 3062, 7, 67, 2, 2, 3062, 3063, 7, 69, 2, 2, 3063, 3064, 7, 86, 2, 2, 3064, 3065, 7, 75, 2, 2, 3065, 3066, 7, 81, 2, 2, 3066, 3067, 7, 80, 2, 2, 3067, 3068, 7, 85, 2, 2, 3068, 610, 3, 2, 2, 2, 3069, 3070, 7, 86, 2, 2, 3070, 3071, 7, 84, 2, 2, 3071, 3072, 7, 67, 2, 2, 3072, 3073, 7, 80, 2, 2, 3073, 3074, 7, 85, 2, 2, 3074, 3075, 7, 72, 2, 2, 3075, 3076, 7, 81, 2, 2, 3076, 3077, 7, 84, 2, 2, 3077, 3078, 7, 79, 2, 2, 3078, 612, 3, 2, 2, 2, 3079, 3080, 7, 86, 2, 2, 3080, 3081, 7, 84, 2, 2, 3081, 3082, 7, 75, 2, 2, 3082, 3083, 7, 79, 2, 2, 3083, 614, 3, 2, 2, 2, 3084, 3085, 7, 86, 2, 2, 3085, 3086, 7, 84, 2, 2, 3086, 3087, 7, 87, 2, 2, 3087, 3088, 7, 71, 2, 2, 3088, 616, 3, 2, 2, 2, 3089, 3090, 7, 86, 2, 2, 3090, 3091, 7, 84, 2, 2, 3091, 3092, 7, 87, 2, 2, 3092, 3093, 7, 80, 2, 2, 3093, 3094, 7, 69, 2, 2, 3094, 3095, 7, 67, 2, 2, 3095, 3096, 7, 86, 2, 2, 3096, 3097, 7, 71, 2, 2, 3097, 618, 3, 2, 2, 2, 3098, 3099, 7, 86, 2, 2, 3099, 3100, 7, 84, 2, 2, 3100, 3101, 7, 91, 2, 2, 3101, 3102, 7, 97, 2, 2, 3102, 3103, 7, 69, 2, 2, 3103, 3104, 7, 67, 2, 2, 3104, 3105, 7, 85, 2, 2, 3105, 3106, 7, 86, 2, 2, 3106, 620, 3, 2, 2, 2, 3107, 3108, 7, 86, 2, 2, 3108, 3109, 7, 91, 2, 2, 3109, 3110, 7, 82, 2, 2, 3110, 3111, 7, 71, 2, 2, 3111, 622, 3, 2, 2, 2, 3112, 3113, 7, 87, 2, 2, 3113, 3114, 7, 80, 2, 2, 3114, 3115, 7, 67, 2, 2, 3115, 3116, 7, 84, 2, 2, 3116, 3117, 7, 69, 2, 2, 3117, 3118, 7, 74, 2, 2, 3118, 3119, 7, 75, 2, 2, 3119, 3120, 7, 88, 2, 2, 3120, 3121, 7, 71, 2, 2, 3121, 624, 3, 2, 2, 2, 3122, 3123, 7, 87, 2, 2, 3123, 3124, 7, 80, 2, 2, 3124, 3125, 7, 68, 2, 2, 3125, 3126, 7, 81, 2, 2, 3126, 3127, 7, 87, 2, 2, 3127, 3128, 7, 80, 2, 2, 3128, 3129, 7, 70, 2, 2, 3129, 3130, 7, 71, 2, 2, 3130, 3131, 7, 70, 2, 2, 3131, 626, 3, 2, 2, 2, 3132, 3133, 7, 87, 2, 2, 3133, 3134, 7, 80, 2, 2, 3134, 3135, 7, 69, 2, 2, 3135, 3136, 7, 67, 2, 2, 3136, 3137, 7, 69, 2, 2, 3137, 3138, 7, 74, 2, 2, 3138, 3139, 7, 71, 2, 2, 3139, 628, 3, 2, 2, 2, 3140, 3141, 7, 87, 2, 2, 3141, 3142, 7, 80, 2, 2, 3142, 3143, 7, 75, 2, 2, 3143, 3144, 7, 81, 2, 2, 3144, 3145, 7, 80, 2, 2, 3145, 630, 3, 2, 2, 2, 3146, 3147, 7, 87, 2, 2, 3147, 3148, 7, 80, 2, 2, 3148, 3149, 7, 75, 2, 2, 3149, 3150, 7, 83, 2, 2, 3150, 3151, 7, 87, 2, 2, 3151, 3152, 7, 71, 2, 2, 3152, 632, 3, 2, 2, 2, 3153, 3154, 7, 87, 2, 2, 3154, 3155, 7, 80, 2, 2, 3155, 3156, 7, 77, 2, 2, 3156, 3157, 7, 80, 2, 2, 3157, 3158, 7, 81, 2, 2, 3158, 3159, 7, 89, 2, 2, 3159, 3160, 7, 80, 2, 2, 3160, 634, 3, 2, 2, 2, 3161, 3162, 7, 87, 2, 2, 3162, 3163, 7, 80, 2, 2, 3163, 3164, 7, 78, 2, 2, 3164, 3165, 7, 81, 2, 2, 3165, 3166, 7, 69, 2, 2, 3166, 3167, 7, 77, 2, 2, 3167, 636, 3, 2, 2, 2, 3168, 3169, 7, 87, 2, 2, 3169, 3170, 7, 80, 2, 2, 3170, 3171, 7, 82, 2, 2, 3171, 3172, 7, 75, 2, 2, 3172, 3173, 7, 88, 2, 2, 3173, 3174, 7, 81, 2, 2, 3174, 3175, 7, 86, 2, 2, 3175, 638, 3, 2, 2, 2, 3176, 3177, 7, 87, 2, 2, 3177, 3178, 7, 80, 2, 2, 3178, 3179, 7, 85, 2, 2, 3179, 3180, 7, 71, 2, 2, 3180, 3181, 7, 86, 2, 2, 3181, 640, 3, 2, 2, 2, 3182, 3183, 7, 87, 2, 2, 3183, 3184, 7, 82, 2, 2, 3184, 3185, 7, 70, 2, 2, 3185, 3186, 7, 67, 2, 2, 3186, 3187, 7, 86, 2, 2, 3187, 3188, 7, 71, 2, 2, 3188, 642, 3, 2, 2, 2, 3189, 3190, 7, 87, 2, 2, 3190, 3191, 7, 85, 2, 2, 3191, 3192, 7, 71, 2, 2, 3192, 644, 3, 2, 2, 2, 3193, 3194, 7, 87, 2, 2, 3194, 3195, 7, 85, 2, 2, 3195, 3196, 7, 71, 2, 2, 3196, 3197, 7, 84, 2, 2, 3197, 646, 3, 2, 2, 2, 3198, 3199, 7, 87, 2, 2, 3199, 3200, 7, 85, 2, 2, 3200, 3201, 7, 75, 2, 2, 3201, 3202, 7, 80, 2, 2, 3202, 3203, 7, 73, 2, 2, 3203, 648, 3, 2, 2, 2, 3204, 3205, 7, 88, 2, 2, 3205, 3206, 7, 67, 2, 2, 3206, 3207, 7, 78, 2, 2, 3207, 3208, 7, 87, 2, 2, 3208, 3209, 7, 71, 2, 2, 3209, 3210, 7, 85, 2, 2, 3210, 650, 3, 2, 2, 2, 3211, 3212, 7, 88, 2, 2, 3212, 3213, 7, 67, 2, 2, 3213, 3214, 7, 84, 2, 2, 3214, 3215, 7, 69, 2, 2, 3215, 3216, 7, 74, 2, 2, 3216, 3217, 7, 67, 2, 2, 3217, 3218, 7, 84, 2, 2, 3218, 652, 3, 2, 2, 2, 3219, 3220, 7, 88, 2, 2, 3220, 3221, 7, 67, 2, 2, 3221, 3222, 7, 84, 2, 2, 3222, 654, 3, 2, 2, 2, 3223, 3224, 7, 88, 2, 2, 3224, 3225, 7, 67, 2, 2, 3225, 3226, 7, 84, 2, 2, 3226, 3227, 7, 75, 2, 2, 3227, 3228, 7, 67, 2, 2, 3228, 3229, 7, 68, 2, 2, 3229, 3230, 7, 78, 2, 2, 3230, 3231, 7, 71, 2, 2, 3231, 656, 3, 2, 2, 2, 3232, 3233, 7, 88, 2, 2, 3233, 3234, 7, 71, 2, 2, 3234, 3235, 7, 84, 2, 2, 3235, 3236, 7, 85, 2, 2, 3236, 3237, 7, 75, 2, 2, 3237, 3238, 7, 81, 2, 2, 3238, 3239, 7, 80, 2, 2, 3239, 658, 3, 2, 2, 2, 3240, 3241, 7, 88, 2, 2, 3241, 3242, 7, 75, 2, 2, 3242, 3243, 7, 71, 2, 2, 3243, 3244, 7, 89, 2, 2, 3244, 660, 3, 2, 2, 2, 3245, 3246, 7, 88, 2, 2, 3246, 3247, 7, 75, 2, 2, 3247, 3248, 7, 71, 2, 2, 3248, 3249, 7, 89, 2, 2, 3249, 3250, 7, 85, 2, 2, 3250, 662, 3, 2, 2, 2, 3251, 3252, 7, 88, 2, 2, 3252, 3253, 7, 81, 2, 2, 3253, 3254, 7, 75, 2, 2, 3254, 3255, 7, 70, 2, 2, 3255, 664, 3, 2, 2, 2, 3256, 3257, 7, 89, 2, 2, 3257, 3258, 7, 71, 2, 2, 3258, 3259, 7, 71, 2, 2, 3259, 3260, 7, 77, 2, 2, 3260, 666, 3, 2, 2, 2, 3261, 3262, 7, 89, 2, 2, 3262, 3263, 7, 71, 2, 2, 3263, 3264, 7, 71, 2, 2, 3264, 3265, 7, 77, 2, 2, 3265, 3266, 7, 85, 2, 2, 3266, 668, 3, 2, 2, 2, 3267, 3268, 7, 89, 2, 2, 3268, 3269, 7, 74, 2, 2, 3269, 3270, 7, 71, 2, 2, 3270, 3271, 7, 80, 2, 2, 3271, 670, 3, 2, 2, 2, 3272, 3273, 7, 89, 2, 2, 3273, 3274, 7, 74, 2, 2, 3274, 3275, 7, 71, 2, 2, 3275, 3276, 7, 84, 2, 2, 3276, 3277, 7, 71, 2, 2, 3277, 672, 3, 2, 2, 2, 3278, 3279, 7, 89, 2, 2, 3279, 3280, 7, 75, 2, 2, 3280, 3281, 7, 80, 2, 2, 3281, 3282, 7, 70, 2, 2, 3282, 3283, 7, 81, 2, 2, 3283, 3284, 7, 89, 2, 2, 3284, 674, 3, 2, 2, 2, 3285, 3286, 7, 89, 2, 2, 3286, 3287, 7, 75, 2, 2, 3287, 3288, 7, 86, 2, 2, 3288, 3289, 7, 74, 2, 2, 3289, 676, 3, 2, 2, 2, 3290, 3291, 7, 89, 2, 2, 3291, 3292, 7, 75, 2, 2, 3292, 3293, 7, 86, 2, 2, 3293, 3294, 7, 74, 2, 2, 3294, 3295, 7, 75, 2, 2, 3295, 3296, 7, 80, 2, 2, 3296, 678, 3, 2, 2, 2, 3297, 3298, 7, 91, 2, 2, 3298, 3299, 7, 71, 2, 2, 3299, 3300, 7, 67, 2, 2, 3300, 3301, 7, 84, 2, 2, 3301, 680, 3, 2, 2, 2, 3302, 3303, 7, 91, 2, 2, 3303, 3304, 7, 71, 2, 2, 3304, 3305, 7, 67, 2, 2, 3305, 3306, 7, 84, 2, 2, 3306, 3307, 7, 85, 2, 2, 3307, 682, 3, 2, 2, 2, 3308, 3309, 7, 92, 2, 2, 3309, 3310, 7, 81, 2, 2, 3310, 3311, 7, 80, 2, 2, 3311, 3312, 7, 71, 2, 2, 3312, 684, 3, 2, 2, 2, 3313, 3317, 7, 63, 2, 2, 3314, 3315, 7, 63, 2, 2, 3315, 3317, 7, 63, 2, 2, 3316, 3313, 3, 2, 2, 2, 3316, 3314, 3, 2, 2, 2, 3317, 686, 3, 2, 2, 2, 3318, 3319, 7, 62, 2, 2, 3319, 3320, 7, 63, 2, 2, 3320, 3321, 7, 64, 2, 2, 3321, 688, 3, 2, 2, 2, 3322, 3323, 7, 62, 2, 2, 3323, 3324, 7, 64, 2, 2, 3324, 690, 3, 2, 2, 2, 3325, 3326, 7, 35, 2, 2, 3326, 3327, 7, 63, 2, 2, 3327, 692, 3, 2, 2, 2, 3328, 3329, 7, 62, 2, 2, 3329, 694, 3, 2, 2, 2, 3330, 3331, 7, 62, 2, 2, 3331, 3335, 7, 63, 2, 2, 3332, 3333, 7, 35, 2, 2, 3333, 3335, 7, 64, 2, 2, 3334, 3330, 3, 2, 2, 2, 3334, 3332, 3, 2, 2, 2, 3335, 696, 3, 2, 2, 2, 3336, 3337, 7, 64, 2, 2, 3337, 698, 3, 2, 2, 2, 3338, 3339, 7, 64, 2, 2, 3339, 3343, 7, 63, 2, 2, 3340, 3341, 7, 35, 2, 2, 3341, 3343, 7, 62, 2, 2, 3342, 3338, 3, 2, 2, 2, 3342, 3340, 3, 2, 2, 2, 3343, 700, 3, 2, 2, 2, 3344, 3345, 7, 45, 2, 2, 3345, 702, 3, 2, 2, 2, 3346, 3347, 7, 47, 2, 2, 3347, 704, 3, 2, 2, 2, 3348, 3349, 7, 44, 2, 2, 3349, 706, 3, 2, 2, 2, 3350, 3351, 7, 49, 2, 2, 3351, 708, 3, 2, 2, 2, 3352, 3353, 7, 39, 2, 2, 3353, 710, 3, 2, 2, 2, 3354, 3355, 7, 128, 2, 2, 3355, 712, 3, 2, 2, 2, 3356, 3357, 7, 40, 2, 2, 3357, 714, 3, 2, 2, 2, 3358, 3359, 7, 126, 2, 2, 3359, 716, 3, 2, 2, 2, 3360, 3361, 7, 126, 2, 2, 3361, 3362, 7, 126, 2, 2, 3362, 718, 3, 2, 2, 2, 3363, 3364, 7, 96, 2, 2, 3364, 720, 3, 2, 2, 2, 3365, 3366, 7, 60, 2, 2, 3366, 722, 3, 2, 2, 2, 3367, 3368, 7, 47, 2, 2, 3368, 3369, 7, 64, 2, 2, 3369, 724, 3, 2, 2, 2, 3370, 3371, 7, 63, 2, 2, 3371, 3372, 7, 64, 2, 2, 3372, 726, 3, 2, 2, 2, 3373, 3374, 7, 49, 2, 2, 3374, 3375, 7, 44, 2, 2, 3375, 3376, 7, 45, 2, 2, 3376, 728, 3, 2, 2, 2, 3377, 3378, 7, 44, 2, 2, 3378, 3379, 7, 49, 2, 2, 3379, 730, 3, 2, 2, 2, 3380, 3381, 7, 65, 2, 2, 3381, 732, 3, 2, 2, 2, 3382, 3388, 7, 41, 2, 2, 3383, 3387, 10, 2, 2, 2, 3384, 3385, 7, 94, 2, 2, 3385, 3387, 11, 2, 2, 2, 3386, 3383, 3, 2, 2, 2, 3386, 3384, 3, 2, 2, 2, 3387, 3390, 3, 2, 2, 2, 3388, 3386, 3, 2, 2, 2, 3388, 3389, 3, 2, 2, 2, 3389, 3391, 3, 2, 2, 2, 3390, 3388, 3, 2, 2, 2, 3391, 3413, 7, 41, 2, 2, 3392, 3393, 7, 84, 2, 2, 3393, 3394, 7, 41, 2, 2, 3394, 3398, 3, 2, 2, 2, 3395, 3397, 10, 3, 2, 2, 3396, 3395, 3, 2, 2, 2, 3397, 3400, 3, 2, 2, 2, 3398, 3396, 3, 2, 2, 2, 3398, 3399, 3, 2, 2, 2, 3399, 3401, 3, 2, 2, 2, 3400, 3398, 3, 2, 2, 2, 3401, 3413, 7, 41, 2, 2, 3402, 3403, 7, 84, 2, 2, 3403, 3404, 7, 36, 2, 2, 3404, 3408, 3, 2, 2, 2, 3405, 3407, 10, 4, 2, 2, 3406, 3405, 3, 2, 2, 2, 3407, 3410, 3, 2, 2, 2, 3408, 3406, 3, 2, 2, 2, 3408, 3409, 3, 2, 2, 2, 3409, 3411, 3, 2, 2, 2, 3410, 3408, 3, 2, 2, 2, 3411, 3413, 7, 36, 2, 2, 3412, 3382, 3, 2, 2, 2, 3412, 3392, 3, 2, 2, 2, 3412, 3402, 3, 2, 2, 2, 3413, 734, 3, 2, 2, 2, 3414, 3420, 7, 36, 2, 2, 3415, 3419, 10, 5, 2, 2, 3416, 3417, 7, 94, 2, 2, 3417, 3419, 11, 2, 2, 2, 3418, 3415, 3, 2, 2, 2, 3418, 3416, 3, 2, 2, 2, 3419, 3422, 3, 2, 2, 2, 3420, 3418, 3, 2, 2, 2, 3420, 3421, 3, 2, 2, 2, 3421, 3423, 3, 2, 2, 2, 3422, 3420, 3, 2, 2, 2, 3423, 3424, 7, 36, 2, 2, 3424, 736, 3, 2, 2, 2, 3425, 3427, 5, 763, 382, 2, 3426, 3425, 3, 2, 2, 2, 3427, 3428, 3, 2, 2, 2, 3428, 3426, 3, 2, 2, 2, 3428, 3429, 3, 2, 2, 2, 3429, 3430, 3, 2, 2, 2, 3430, 3431, 7, 78, 2, 2, 3431, 738, 3, 2, 2, 2, 3432, 3434, 5, 763, 382, 2, 3433, 3432, 3, 2, 2, 2, 3434, 3435, 3, 2, 2, 2, 3435, 3433, 3, 2, 2, 2, 3435, 3436, 3, 2, 2, 2, 3436, 3437, 3, 2, 2, 2, 3437, 3438, 7, 85, 2, 2, 3438, 740, 3, 2, 2, 2, 3439, 3441, 5, 763, 382, 2, 3440, 3439, 3, 2, 2, 2, 3441, 3442, 3, 2, 2, 2, 3442, 3440, 3, 2, 2, 2, 3442, 3443, 3, 2, 2, 2, 3443, 3444, 3, 2, 2, 2, 3444, 3445, 7, 91, 2, 2, 3445, 742, 3, 2, 2, 2, 3446, 3448, 5, 763, 382, 2, 3447, 3446, 3, 2, 2, 2, 3448, 3449, 3, 2, 2, 2, 3449, 3447, 3, 2, 2, 2, 3449, 3450, 3, 2, 2, 2, 3450, 744, 3, 2, 2, 2, 3451, 3453, 5, 763, 382, 2, 3452, 3451, 3, 2, 2, 2, 3453, 3454, 3, 2, 2, 2, 3454, 3452, 3, 2, 2, 2, 3454, 3455, 3, 2, 2, 2, 3455, 3456, 3, 2, 2, 2, 3456, 3457, 5, 761, 381, 2, 3457, 3462, 3, 2, 2, 2, 3458, 3459, 5, 759, 380, 2, 3459, 3460, 5, 761, 381, 2, 3460, 3462, 3, 2, 2, 2, 3461, 3452, 3, 2, 2, 2, 3461, 3458, 3, 2, 2, 2, 3462, 746, 3, 2, 2, 2, 3463, 3464, 5, 759, 380, 2, 3464, 748, 3, 2, 2, 2, 3465, 3467, 5, 763, 382, 2, 3466, 3465, 3, 2, 2, 2, 3467, 3468, 3, 2, 2, 2, 3468, 3466, 3, 2, 2, 2, 3468, 3469, 3, 2, 2, 2, 3469, 3471, 3, 2, 2, 2, 3470, 3472, 5, 761, 381, 2, 3471, 3470, 3, 2, 2, 2, 3471, 3472, 3, 2, 2, 2, 3472, 3473, 3, 2, 2, 2, 3473, 3474, 7, 72, 2, 2, 3474, 3482, 3, 2, 2, 2, 3475, 3477, 5, 759, 380, 2, 3476, 3478, 5, 761, 381, 2, 3477, 3476, 3, 2, 2, 2, 3477, 3478, 3, 2, 2, 2, 3478, 3479, 3, 2, 2, 2, 3479, 3480, 7, 72, 2, 2, 3480, 3482, 3, 2, 2, 2, 3481, 3466, 3, 2, 2, 2, 3481, 3475, 3, 2, 2, 2, 3482, 750, 3, 2, 2, 2, 3483, 3485, 5, 763, 382, 2, 3484, 3483, 3, 2, 2, 2, 3485, 3486, 3, 2, 2, 2, 3486, 3484, 3, 2, 2, 2, 3486, 3487, 3, 2, 2, 2, 3487, 3489, 3, 2, 2, 2, 3488, 3490, 5, 761, 381, 2, 3489, 3488, 3, 2, 2, 2, 3489, 3490, 3, 2, 2, 2, 3490, 3491, 3, 2, 2, 2, 3491, 3492, 7, 70, 2, 2, 3492, 3500, 3, 2, 2, 2, 3493, 3495, 5, 759, 380, 2, 3494, 3496, 5, 761, 381, 2, 3495, 3494, 3, 2, 2, 2, 3495, 3496, 3, 2, 2, 2, 3496, 3497, 3, 2, 2, 2, 3497, 3498, 7, 70, 2, 2, 3498, 3500, 3, 2, 2, 2, 3499, 3484, 3, 2, 2, 2, 3499, 3493, 3, 2, 2, 2, 3500, 752, 3, 2, 2, 2, 3501, 3503, 5, 763, 382, 2, 3502, 3501, 3, 2, 2, 2, 3503, 3504, 3, 2, 2, 2, 3504, 3502, 3, 2, 2, 2, 3504, 3505, 3, 2, 2, 2, 3505, 3507, 3, 2, 2, 2, 3506, 3508, 5, 761, 381, 2, 3507, 3506, 3, 2, 2, 2, 3507, 3508, 3, 2, 2, 2, 3508, 3509, 3, 2, 2, 2, 3509, 3510, 7, 68, 2, 2, 3510, 3511, 7, 70, 2, 2, 3511, 3520, 3, 2, 2, 2, 3512, 3514, 5, 759, 380, 2, 3513, 3515, 5, 761, 381, 2, 3514, 3513, 3, 2, 2, 2, 3514, 3515, 3, 2, 2, 2, 3515, 3516, 3, 2, 2, 2, 3516, 3517, 7, 68, 2, 2, 3517, 3518, 7, 70, 2, 2, 3518, 3520, 3, 2, 2, 2, 3519, 3502, 3, 2, 2, 2, 3519, 3512, 3, 2, 2, 2, 3520, 754, 3, 2, 2, 2, 3521, 3525, 5, 765, 383, 2, 3522, 3525, 5, 763, 382, 2, 3523, 3525, 7, 97, 2, 2, 3524, 3521, 3, 2, 2, 2, 3524, 3522, 3, 2, 2, 2, 3524, 3523, 3, 2, 2, 2, 3525, 3526, 3, 2, 2, 2, 3526, 3524, 3, 2, 2, 2, 3526, 3527, 3, 2, 2, 2, 3527, 756, 3, 2, 2, 2, 3528, 3534, 7, 98, 2, 2, 3529, 3533, 10, 6, 2, 2, 3530, 3531, 7, 98, 2, 2, 3531, 3533, 7, 98, 2, 2, 3532, 3529, 3, 2, 2, 2, 3532, 3530, 3, 2, 2, 2, 3533, 3536, 3, 2, 2, 2, 3534, 3532, 3, 2, 2, 2, 3534, 3535, 3, 2, 2, 2, 3535, 3537, 3, 2, 2, 2, 3536, 3534, 3, 2, 2, 2, 3537, 3538, 7, 98, 2, 2, 3538, 758, 3, 2, 2, 2, 3539, 3541, 5, 763, 382, 2, 3540, 3539, 3, 2, 2, 2, 3541, 3542, 3, 2, 2, 2, 3542, 3540, 3, 2, 2, 2, 3542, 3543, 3, 2, 2, 2, 3543, 3544, 3, 2, 2, 2, 3544, 3548, 7, 48, 2, 2, 3545, 3547, 5, 763, 382, 2, 3546, 3545, 3, 2, 2, 2, 3547, 3550, 3, 2, 2, 2, 3548, 3546, 3, 2, 2, 2, 3548, 3549, 3, 2, 2, 2, 3549, 3558, 3, 2, 2, 2, 3550, 3548, 3, 2, 2, 2, 3551, 3553, 7, 48, 2, 2, 3552, 3554, 5, 763, 382, 2, 3553, 3552, 3, 2, 2, 2, 3554, 3555, 3, 2, 2, 2, 3555, 3553, 3, 2, 2, 2, 3555, 3556, 3, 2, 2, 2, 3556, 3558, 3, 2, 2, 2, 3557, 3540, 3, 2, 2, 2, 3557, 3551, 3, 2, 2, 2, 3558, 760, 3, 2, 2, 2, 3559, 3561, 7, 71, 2, 2, 3560, 3562, 9, 7, 2, 2, 3561, 3560, 3, 2, 2, 2, 3561, 3562, 3, 2, 2, 2, 3562, 3564, 3, 2, 2, 2, 3563, 3565, 5, 763, 382, 2, 3564, 3563, 3, 2, 2, 2, 3565, 3566, 3, 2, 2, 2, 3566, 3564, 3, 2, 2, 2, 3566, 3567, 3, 2, 2, 2, 3567, 762, 3, 2, 2, 2, 3568, 3569, 9, 8, 2, 2, 3569, 764, 3, 2, 2, 2, 3570, 3571, 9, 9, 2, 2, 3571, 766, 3, 2, 2, 2, 3572, 3573, 7, 47, 2, 2, 3573, 3574, 7, 47, 2, 2, 3574, 3580, 3, 2, 2, 2, 3575, 3576, 7, 94, 2, 2, 3576, 3579, 7, 12, 2, 2, 3577, 3579, 10, 10, 2, 2, 3578, 3575, 3, 2, 2, 2, 3578, 3577, 3, 2, 2, 2, 3579, 3582, 3, 2, 2, 2, 3580, 3578, 3, 2, 2, 2, 3580, 3581, 3, 2, 2, 2, 3581, 3584, 3, 2, 2, 2, 3582, 3580, 3, 2, 2, 2, 3583, 3585, 7, 15, 2, 2, 3584, 3583, 3, 2, 2, 2, 3584, 3585, 3, 2, 2, 2, 3585, 3587, 3, 2, 2, 2, 3586, 3588, 7, 12, 2, 2, 3587, 3586, 3, 2, 2, 2, 3587, 3588, 3, 2, 2, 2, 3588, 3589, 3, 2, 2, 2, 3589, 3590, 8, 384, 2, 2, 3590, 768, 3, 2, 2, 2, 3591, 3592, 7, 49, 2, 2, 3592, 3593, 7, 44, 2, 2, 3593, 3598, 3, 2, 2, 2, 3594, 3597, 5, 769, 385, 2, 3595, 3597, 11, 2, 2, 2, 3596, 3594, 3, 2, 2, 2, 3596, 3595, 3, 2, 2, 2, 3597, 3600, 3, 2, 2, 2, 3598, 3599, 3, 2, 2, 2, 3598, 3596, 3, 2, 2, 2, 3599, 3605, 3, 2, 2, 2, 3600, 3598, 3, 2, 2, 2, 3601, 3602, 7, 44, 2, 2, 3602, 3606, 7, 49, 2, 2, 3603, 3604, 8, 385, 3, 2, 3604, 3606, 7, 2, 2, 3, 3605, 3601, 3, 2, 2, 2, 3605, 3603, 3, 2, 2, 2, 3606, 3607, 3, 2, 2, 2, 3607, 3608, 8, 385, 2, 2, 3608, 770, 3, 2, 2, 2, 3609, 3611, 9, 11, 2, 2, 3610, 3609, 3, 2, 2, 2, 3611, 3612, 3, 2, 2, 2, 3612, 3610, 3, 2, 2, 2, 3612, 3613, 3, 2, 2, 2, 3613, 3614, 3, 2, 2, 2, 3614, 3615, 8, 386, 2, 2, 3615, 772, 3, 2, 2, 2, 3616, 3617, 11, 2, 2, 2, 3617, 774, 3, 2, 2, 2, 52, 2, 2143, 2568, 2921, 3316, 3334, 3342, 3386, 3388, 3398, 3408, 3412, 3418, 3420, 3428, 3435, 3442, 3449, 3454, 3461, 3468, 3471, 3477, 3481, 3486, 3489, 3495, 3499, 3504, 3507, 3514, 3519, 3524, 3526, 3532, 3534, 3542, 3548, 3555, 3557, 3561, 3566, 3578, 3580, 3584, 3587, 3596, 3598, 3605, 3612, 4, 2, 3, 2, 3, 385, 2] \ No newline at end of file diff --git a/src/lib/spark/SparkSqlLexer.tokens b/src/lib/spark/SparkSqlLexer.tokens index 6b07647c..fa6c02c0 100644 --- a/src/lib/spark/SparkSqlLexer.tokens +++ b/src/lib/spark/SparkSqlLexer.tokens @@ -1,566 +1,741 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -ADD=11 -AFTER=12 -ALL=13 -ALTER=14 -ANALYZE=15 -AND=16 -ANTI=17 -ANY=18 -ARCHIVE=19 -ARRAY=20 -AS=21 -ASC=22 -AT=23 -AUTHORIZATION=24 -BETWEEN=25 -BOTH=26 -BUCKET=27 -BUCKETS=28 -BY=29 -CACHE=30 -CASCADE=31 -CASE=32 -CAST=33 -CHANGE=34 -CHECK=35 -CLEAR=36 -CLUSTER=37 -CLUSTERED=38 -CODEGEN=39 -COLLATE=40 -COLLECTION=41 -COLUMN=42 -COLUMNS=43 -COMMENT=44 -COMMIT=45 -COMPACT=46 -COMPACTIONS=47 -COMPUTE=48 -CONCATENATE=49 -CONSTRAINT=50 -COST=51 -CREATE=52 -CROSS=53 -CUBE=54 -CURRENT=55 -CURRENT_DATE=56 -CURRENT_TIME=57 -CURRENT_TIMESTAMP=58 -CURRENT_USER=59 -DATA=60 -DATABASE=61 -DATABASES=62 -DBPROPERTIES=63 -DEFINED=64 -DELETE=65 -DELIMITED=66 -DESC=67 -DESCRIBE=68 -DFS=69 -DIRECTORIES=70 -DIRECTORY=71 -DISTINCT=72 -DISTRIBUTE=73 -DIV=74 -DROP=75 -ELSE=76 -END=77 -ESCAPE=78 -ESCAPED=79 -EXCEPT=80 -EXCHANGE=81 -EXISTS=82 -EXPLAIN=83 -EXPORT=84 -EXTENDED=85 -EXTERNAL=86 -EXTRACT=87 -FALSE=88 -FETCH=89 -FIELDS=90 -FILTER=91 -FILEFORMAT=92 -FIRST=93 -FOLLOWING=94 -FOR=95 -FOREIGN=96 -FORMAT=97 -FORMATTED=98 -FROM=99 -FULL=100 -FUNCTION=101 -FUNCTIONS=102 -GLOBAL=103 -GRANT=104 -GROUP=105 -GROUPING=106 -HAVING=107 -IF=108 -IGNORE=109 -IMPORT=110 -IN=111 -INDEX=112 -INDEXES=113 -INNER=114 -INPATH=115 -INPUTFORMAT=116 -INSERT=117 -INTERSECT=118 -INTERVAL=119 -INTO=120 -IS=121 -ITEMS=122 -JOIN=123 -KEYS=124 -LAST=125 -LATERAL=126 -LAZY=127 -LEADING=128 -LEFT=129 -LIKE=130 -LIMIT=131 -LINES=132 -LIST=133 -LOAD=134 -LOCAL=135 -LOCATION=136 -LOCK=137 -LOCKS=138 -LOGICAL=139 -MACRO=140 -MAP=141 -MATCHED=142 -MERGE=143 -MSCK=144 -NAMESPACE=145 -NAMESPACES=146 -NATURAL=147 -NO=148 -NOT=149 -NULL=150 -NULLS=151 -OF=152 -ON=153 -ONLY=154 -OPTION=155 -OPTIONS=156 -OR=157 -ORDER=158 -OUT=159 -OUTER=160 -OUTPUTFORMAT=161 -OVER=162 -OVERLAPS=163 -OVERLAY=164 -OVERWRITE=165 -PARTITION=166 -PARTITIONED=167 -PARTITIONS=168 -PERCENTLIT=169 -PIVOT=170 -PLACING=171 -POSITION=172 -PRECEDING=173 -PRIMARY=174 -PRINCIPALS=175 -PROPERTIES=176 -PURGE=177 -QUERY=178 -RANGE=179 -RECORDREADER=180 -RECORDWRITER=181 -RECOVER=182 -REDUCE=183 -REFERENCES=184 -REFRESH=185 -RENAME=186 -REPAIR=187 -REPLACE=188 -RESET=189 -RESTRICT=190 -REVOKE=191 -RIGHT=192 -RLIKE=193 -ROLE=194 -ROLES=195 -ROLLBACK=196 -ROLLUP=197 -ROW=198 -ROWS=199 -SCHEMA=200 -SELECT=201 -SEMI=202 -SEPARATED=203 -SERDE=204 -SERDEPROPERTIES=205 -SESSION_USER=206 -SET=207 -SETMINUS=208 -SETS=209 -SHOW=210 -SKEWED=211 -SOME=212 -SORT=213 -SORTED=214 -START=215 -STATISTICS=216 -STORED=217 -STRATIFY=218 -STRUCT=219 -SUBSTR=220 -SUBSTRING=221 -TABLE=222 -TABLES=223 -TABLESAMPLE=224 -TBLPROPERTIES=225 -TEMPORARY=226 -TERMINATED=227 -THEN=228 -TIME=229 -TO=230 -TOUCH=231 -TRAILING=232 -TRANSACTION=233 -TRANSACTIONS=234 -TRANSFORM=235 -TRIM=236 -TRUE=237 -TRUNCATE=238 -TYPE=239 -UNARCHIVE=240 -UNBOUNDED=241 -UNCACHE=242 -UNION=243 -UNIQUE=244 -UNKNOWN=245 -UNLOCK=246 -UNSET=247 -UPDATE=248 -USE=249 -USER=250 -USING=251 -VALUES=252 -VIEW=253 -VIEWS=254 -WHEN=255 -WHERE=256 -WINDOW=257 -WITH=258 -ZONE=259 -EQ=260 -NSEQ=261 -NEQ=262 -NEQJ=263 -LT=264 -LTE=265 -GT=266 -GTE=267 -PLUS=268 -MINUS=269 -ASTERISK=270 -SLASH=271 -PERCENT=272 -TILDE=273 -AMPERSAND=274 -PIPE=275 -CONCAT_PIPE=276 -HAT=277 -SEMICOLON=278 -STRING=279 -BIGINT_LITERAL=280 -SMALLINT_LITERAL=281 -TINYINT_LITERAL=282 -INTEGER_VALUE=283 -EXPONENT_VALUE=284 -DECIMAL_VALUE=285 -FLOAT_LITERAL=286 -DOUBLE_LITERAL=287 -BIGDECIMAL_LITERAL=288 -IDENTIFIER=289 -BACKQUOTED_IDENTIFIER=290 -CUSTOM_VARS=291 -SIMPLE_COMMENT=292 -BRACKETED_COMMENT=293 -WS=294 -UNRECOGNIZED=295 -'('=1 -')'=2 -','=3 -'.'=4 -'/*+'=5 -'*/'=6 -'->'=7 -'['=8 -']'=9 -':'=10 -'ADD'=11 -'AFTER'=12 -'ALL'=13 -'ALTER'=14 -'ANALYZE'=15 -'AND'=16 -'ANTI'=17 -'ANY'=18 -'ARCHIVE'=19 -'ARRAY'=20 -'AS'=21 -'ASC'=22 -'AT'=23 -'AUTHORIZATION'=24 -'BETWEEN'=25 -'BOTH'=26 -'BUCKET'=27 -'BUCKETS'=28 -'BY'=29 -'CACHE'=30 -'CASCADE'=31 -'CASE'=32 -'CAST'=33 -'CHANGE'=34 -'CHECK'=35 -'CLEAR'=36 -'CLUSTER'=37 -'CLUSTERED'=38 -'CODEGEN'=39 -'COLLATE'=40 -'COLLECTION'=41 -'COLUMN'=42 -'COLUMNS'=43 -'COMMENT'=44 -'COMMIT'=45 -'COMPACT'=46 -'COMPACTIONS'=47 -'COMPUTE'=48 -'CONCATENATE'=49 -'CONSTRAINT'=50 -'COST'=51 -'CREATE'=52 -'CROSS'=53 -'CUBE'=54 -'CURRENT'=55 -'CURRENT_DATE'=56 -'CURRENT_TIME'=57 -'CURRENT_TIMESTAMP'=58 -'CURRENT_USER'=59 -'DATA'=60 -'DATABASE'=61 -'DBPROPERTIES'=63 -'DEFINED'=64 -'DELETE'=65 -'DELIMITED'=66 -'DESC'=67 -'DESCRIBE'=68 -'DFS'=69 -'DIRECTORIES'=70 -'DIRECTORY'=71 -'DISTINCT'=72 -'DISTRIBUTE'=73 -'DIV'=74 -'DROP'=75 -'ELSE'=76 -'END'=77 -'ESCAPE'=78 -'ESCAPED'=79 -'EXCEPT'=80 -'EXCHANGE'=81 -'EXISTS'=82 -'EXPLAIN'=83 -'EXPORT'=84 -'EXTENDED'=85 -'EXTERNAL'=86 -'EXTRACT'=87 -'FALSE'=88 -'FETCH'=89 -'FIELDS'=90 -'FILTER'=91 -'FILEFORMAT'=92 -'FIRST'=93 -'FOLLOWING'=94 -'FOR'=95 -'FOREIGN'=96 -'FORMAT'=97 -'FORMATTED'=98 -'FROM'=99 -'FULL'=100 -'FUNCTION'=101 -'FUNCTIONS'=102 -'GLOBAL'=103 -'GRANT'=104 -'GROUP'=105 -'GROUPING'=106 -'HAVING'=107 -'IF'=108 -'IGNORE'=109 -'IMPORT'=110 -'IN'=111 -'INDEX'=112 -'INDEXES'=113 -'INNER'=114 -'INPATH'=115 -'INPUTFORMAT'=116 -'INSERT'=117 -'INTERSECT'=118 -'INTERVAL'=119 -'INTO'=120 -'IS'=121 -'ITEMS'=122 -'JOIN'=123 -'KEYS'=124 -'LAST'=125 -'LATERAL'=126 -'LAZY'=127 -'LEADING'=128 -'LEFT'=129 -'LIKE'=130 -'LIMIT'=131 -'LINES'=132 -'LIST'=133 -'LOAD'=134 -'LOCAL'=135 -'LOCATION'=136 -'LOCK'=137 -'LOCKS'=138 -'LOGICAL'=139 -'MACRO'=140 -'MAP'=141 -'MATCHED'=142 -'MERGE'=143 -'MSCK'=144 -'NAMESPACE'=145 -'NAMESPACES'=146 -'NATURAL'=147 -'NO'=148 -'NULL'=150 -'NULLS'=151 -'OF'=152 -'ON'=153 -'ONLY'=154 -'OPTION'=155 -'OPTIONS'=156 -'OR'=157 -'ORDER'=158 -'OUT'=159 -'OUTER'=160 -'OUTPUTFORMAT'=161 -'OVER'=162 -'OVERLAPS'=163 -'OVERLAY'=164 -'OVERWRITE'=165 -'PARTITION'=166 -'PARTITIONED'=167 -'PARTITIONS'=168 -'PERCENT'=169 -'PIVOT'=170 -'PLACING'=171 -'POSITION'=172 -'PRECEDING'=173 -'PRIMARY'=174 -'PRINCIPALS'=175 -'PROPERTIES'=176 -'PURGE'=177 -'QUERY'=178 -'RANGE'=179 -'RECORDREADER'=180 -'RECORDWRITER'=181 -'RECOVER'=182 -'REDUCE'=183 -'REFERENCES'=184 -'REFRESH'=185 -'RENAME'=186 -'REPAIR'=187 -'REPLACE'=188 -'RESET'=189 -'RESTRICT'=190 -'REVOKE'=191 -'RIGHT'=192 -'ROLE'=194 -'ROLES'=195 -'ROLLBACK'=196 -'ROLLUP'=197 -'ROW'=198 -'ROWS'=199 -'SCHEMA'=200 -'SELECT'=201 -'SEMI'=202 -'SEPARATED'=203 -'SERDE'=204 -'SERDEPROPERTIES'=205 -'SESSION_USER'=206 -'SET'=207 -'MINUS'=208 -'SETS'=209 -'SHOW'=210 -'SKEWED'=211 -'SOME'=212 -'SORT'=213 -'SORTED'=214 -'START'=215 -'STATISTICS'=216 -'STORED'=217 -'STRATIFY'=218 -'STRUCT'=219 -'SUBSTR'=220 -'SUBSTRING'=221 -'TABLE'=222 -'TABLES'=223 -'TABLESAMPLE'=224 -'TBLPROPERTIES'=225 -'TERMINATED'=227 -'THEN'=228 -'TIME'=229 -'TO'=230 -'TOUCH'=231 -'TRAILING'=232 -'TRANSACTION'=233 -'TRANSACTIONS'=234 -'TRANSFORM'=235 -'TRIM'=236 -'TRUE'=237 -'TRUNCATE'=238 -'TYPE'=239 -'UNARCHIVE'=240 -'UNBOUNDED'=241 -'UNCACHE'=242 -'UNION'=243 -'UNIQUE'=244 -'UNKNOWN'=245 -'UNLOCK'=246 -'UNSET'=247 -'UPDATE'=248 -'USE'=249 -'USER'=250 -'USING'=251 -'VALUES'=252 -'VIEW'=253 -'VIEWS'=254 -'WHEN'=255 -'WHERE'=256 -'WINDOW'=257 -'WITH'=258 -'ZONE'=259 -'<=>'=261 -'<>'=262 -'!='=263 -'<'=264 -'>'=266 -'+'=268 -'-'=269 -'*'=270 -'/'=271 -'%'=272 -'~'=273 -'&'=274 -'|'=275 -'||'=276 -'^'=277 -';'=278 +SEMICOLON=1 +LEFT_PAREN=2 +RIGHT_PAREN=3 +COMMA=4 +DOT=5 +LEFT_BRACKET=6 +RIGHT_BRACKET=7 +KW_ADD=8 +KW_AFTER=9 +KW_ALL=10 +KW_ALTER=11 +KW_ALWAYS=12 +KW_ANALYZE=13 +KW_AND=14 +KW_ANTI=15 +KW_ANY=16 +KW_ANY_VALUE=17 +KW_ARCHIVE=18 +KW_ARRAY=19 +KW_AS=20 +KW_ASC=21 +KW_AT=22 +KW_AUTHORIZATION=23 +KW_BETWEEN=24 +KW_BIGINT=25 +KW_BINARY=26 +KW_BOOLEAN=27 +KW_BOTH=28 +KW_BUCKET=29 +KW_BUCKETS=30 +KW_BY=31 +KW_BYTE=32 +KW_CACHE=33 +KW_CASCADE=34 +KW_CASE=35 +KW_CAST=36 +KW_CATALOG=37 +KW_CATALOGS=38 +KW_CHANGE=39 +KW_CHAR=40 +KW_CHARACTER=41 +KW_CHECK=42 +KW_CLEAR=43 +KW_CLUSTER=44 +KW_CLUSTERED=45 +KW_CODEGEN=46 +KW_COLLATE=47 +KW_COLLECTION=48 +KW_COLUMN=49 +KW_COLUMNS=50 +KW_COMMENT=51 +KW_COMMIT=52 +KW_COMPACT=53 +KW_COMPACTIONS=54 +KW_COMPUTE=55 +KW_CONCATENATE=56 +KW_CONSTRAINT=57 +KW_COST=58 +KW_CREATE=59 +KW_CROSS=60 +KW_CUBE=61 +KW_CURRENT=62 +KW_CURRENT_DATE=63 +KW_CURRENT_TIME=64 +KW_CURRENT_TIMESTAMP=65 +KW_CURRENT_USER=66 +KW_DAY=67 +KW_DAYS=68 +KW_DAYOFYEAR=69 +KW_DATA=70 +KW_DATE=71 +KW_DATABASE=72 +KW_DATABASES=73 +KW_DATEADD=74 +KW_DATE_ADD=75 +KW_DATEDIFF=76 +KW_DATE_DIFF=77 +KW_DBPROPERTIES=78 +KW_DEC=79 +KW_DECIMAL=80 +KW_DECLARE=81 +KW_DEFAULT=82 +KW_DEFINED=83 +KW_DELETE=84 +KW_DELIMITED=85 +KW_DESC=86 +KW_DESCRIBE=87 +KW_DFS=88 +KW_DIRECTORIES=89 +KW_DIRECTORY=90 +KW_DISTINCT=91 +KW_DISTRIBUTE=92 +KW_DIV=93 +KW_DOUBLE=94 +KW_DROP=95 +KW_ELSE=96 +KW_END=97 +KW_ESCAPE=98 +KW_ESCAPED=99 +KW_EXCEPT=100 +KW_EXCHANGE=101 +KW_EXCLUDE=102 +KW_EXISTS=103 +KW_EXPLAIN=104 +KW_EXPORT=105 +KW_EXTENDED=106 +KW_EXTERNAL=107 +KW_EXTRACT=108 +KW_FALSE=109 +KW_FETCH=110 +KW_FIELDS=111 +KW_FILTER=112 +KW_FILEFORMAT=113 +KW_FIRST=114 +KW_FLOAT=115 +KW_FOLLOWING=116 +KW_FOR=117 +KW_FOREIGN=118 +KW_FORMAT=119 +KW_FORMATTED=120 +KW_FROM=121 +KW_FULL=122 +KW_FUNCTION=123 +KW_FUNCTIONS=124 +KW_GENERATED=125 +KW_GLOBAL=126 +KW_GRANT=127 +KW_GROUP=128 +KW_GROUPING=129 +KW_HAVING=130 +KW_BINARY_HEX=131 +KW_HOUR=132 +KW_HOURS=133 +KW_IDENTIFIER_KW=134 +KW_IF=135 +KW_IGNORE=136 +KW_IMPORT=137 +KW_IN=138 +KW_INCLUDE=139 +KW_INDEX=140 +KW_INDEXES=141 +KW_INNER=142 +KW_INPATH=143 +KW_INPUTFORMAT=144 +KW_INSERT=145 +KW_INTERSECT=146 +KW_INTERVAL=147 +KW_INT=148 +KW_INTEGER=149 +KW_INTO=150 +KW_IS=151 +KW_ITEMS=152 +KW_JOIN=153 +KW_KEYS=154 +KW_LAST=155 +KW_LATERAL=156 +KW_LAZY=157 +KW_LEADING=158 +KW_LEFT=159 +KW_LIKE=160 +KW_ILIKE=161 +KW_LIMIT=162 +KW_LINES=163 +KW_LIST=164 +KW_LOAD=165 +KW_LOCAL=166 +KW_LOCATION=167 +KW_LOCK=168 +KW_LOCKS=169 +KW_LOGICAL=170 +KW_LONG=171 +KW_MACRO=172 +KW_MAP=173 +KW_MATCHED=174 +KW_MERGE=175 +KW_MICROSECOND=176 +KW_MICROSECONDS=177 +KW_MILLISECOND=178 +KW_MILLISECONDS=179 +KW_MINUTE=180 +KW_MINUTES=181 +KW_MONTH=182 +KW_MONTHS=183 +KW_MSCK=184 +KW_NAME=185 +KW_NAMESPACE=186 +KW_NAMESPACES=187 +KW_NANOSECOND=188 +KW_NANOSECONDS=189 +KW_NATURAL=190 +KW_NO=191 +KW_NOT=192 +KW_NULL=193 +KW_NULLS=194 +KW_NUMERIC=195 +KW_OF=196 +KW_OFFSET=197 +KW_ON=198 +KW_ONLY=199 +KW_OPTION=200 +KW_OPTIONS=201 +KW_OR=202 +KW_ORDER=203 +KW_OUT=204 +KW_OUTER=205 +KW_OUTPUTFORMAT=206 +KW_OVER=207 +KW_OVERLAPS=208 +KW_OVERLAY=209 +KW_OVERWRITE=210 +KW_PARTITION=211 +KW_PARTITIONED=212 +KW_PARTITIONS=213 +KW_PERCENTILE_CONT=214 +KW_PERCENTILE_DISC=215 +KW_PERCENTLIT=216 +KW_PIVOT=217 +KW_PLACING=218 +KW_POSITION=219 +KW_PRECEDING=220 +KW_PRIMARY=221 +KW_PRINCIPALS=222 +KW_PROPERTIES=223 +KW_PURGE=224 +KW_QUARTER=225 +KW_QUERY=226 +KW_RANGE=227 +KW_REAL=228 +KW_RECORDREADER=229 +KW_RECORDWRITER=230 +KW_RECOVER=231 +KW_REDUCE=232 +KW_REFERENCES=233 +KW_REFRESH=234 +KW_RENAME=235 +KW_REPAIR=236 +KW_REPEATABLE=237 +KW_REPLACE=238 +KW_RESET=239 +KW_RESPECT=240 +KW_RESTRICT=241 +KW_REVOKE=242 +KW_RIGHT=243 +KW_RLIKE=244 +KW_ROLE=245 +KW_ROLES=246 +KW_ROLLBACK=247 +KW_ROLLUP=248 +KW_ROW=249 +KW_ROWS=250 +KW_SECOND=251 +KW_SECONDS=252 +KW_SCHEMA=253 +KW_SCHEMAS=254 +KW_SELECT=255 +KW_SEMI=256 +KW_SEPARATED=257 +KW_SERDE=258 +KW_SERDEPROPERTIES=259 +KW_SESSION_USER=260 +KW_SET=261 +KW_SETMINUS=262 +KW_SETS=263 +KW_SHORT=264 +KW_SHOW=265 +KW_SINGLE=266 +KW_SKEWED=267 +KW_SMALLINT=268 +KW_SOME=269 +KW_SORT=270 +KW_SORTED=271 +KW_SOURCE=272 +KW_START=273 +KW_STATISTICS=274 +KW_STORED=275 +KW_STRATIFY=276 +KW_STRING=277 +KW_STRUCT=278 +KW_SUBSTR=279 +KW_SUBSTRING=280 +KW_SYNC=281 +KW_SYSTEM_TIME=282 +KW_SYSTEM_VERSION=283 +KW_TABLE=284 +KW_TABLES=285 +KW_TABLESAMPLE=286 +KW_TARGET=287 +KW_TBLPROPERTIES=288 +KW_TEMPORARY=289 +KW_TERMINATED=290 +KW_THEN=291 +KW_TIME=292 +KW_TIMEDIFF=293 +KW_TIMESTAMP=294 +KW_TIMESTAMP_LTZ=295 +KW_TIMESTAMP_NTZ=296 +KW_TIMESTAMPADD=297 +KW_TIMESTAMPDIFF=298 +KW_TINYINT=299 +KW_TO=300 +KW_TOUCH=301 +KW_TRAILING=302 +KW_TRANSACTION=303 +KW_TRANSACTIONS=304 +KW_TRANSFORM=305 +KW_TRIM=306 +KW_TRUE=307 +KW_TRUNCATE=308 +KW_TRY_CAST=309 +KW_TYPE=310 +KW_UNARCHIVE=311 +KW_UNBOUNDED=312 +KW_UNCACHE=313 +KW_UNION=314 +KW_UNIQUE=315 +KW_UNKNOWN=316 +KW_UNLOCK=317 +KW_UNPIVOT=318 +KW_UNSET=319 +KW_UPDATE=320 +KW_USE=321 +KW_USER=322 +KW_USING=323 +KW_VALUES=324 +KW_VARCHAR=325 +KW_VAR=326 +KW_VARIABLE=327 +KW_VERSION=328 +KW_VIEW=329 +KW_VIEWS=330 +KW_VOID=331 +KW_WEEK=332 +KW_WEEKS=333 +KW_WHEN=334 +KW_WHERE=335 +KW_WINDOW=336 +KW_WITH=337 +KW_WITHIN=338 +KW_YEAR=339 +KW_YEARS=340 +KW_ZONE=341 +EQ=342 +NSEQ=343 +NEQ=344 +NEQJ=345 +LT=346 +LTE=347 +GT=348 +GTE=349 +PLUS=350 +MINUS=351 +ASTERISK=352 +SLASH=353 +PERCENT=354 +TILDE=355 +AMPERSAND=356 +PIPE=357 +CONCAT_PIPE=358 +HAT=359 +COLON=360 +ARROW=361 +FAT_ARROW=362 +HENT_START=363 +HENT_END=364 +QUESTION=365 +STRING_LITERAL=366 +DOUBLEQUOTED_STRING=367 +BIGINT_LITERAL=368 +SMALLINT_LITERAL=369 +TINYINT_LITERAL=370 +INTEGER_VALUE=371 +EXPONENT_VALUE=372 +DECIMAL_VALUE=373 +FLOAT_LITERAL=374 +DOUBLE_LITERAL=375 +BIGDECIMAL_LITERAL=376 +IDENTIFIER=377 +BACKQUOTED_IDENTIFIER=378 +SIMPLE_COMMENT=379 +BRACKETED_COMMENT=380 +WS=381 +UNRECOGNIZED=382 +';'=1 +'('=2 +')'=3 +','=4 +'.'=5 +'['=6 +']'=7 +'ADD'=8 +'AFTER'=9 +'ALL'=10 +'ALTER'=11 +'ALWAYS'=12 +'ANALYZE'=13 +'AND'=14 +'ANTI'=15 +'ANY'=16 +'ANY_VALUE'=17 +'ARCHIVE'=18 +'ARRAY'=19 +'AS'=20 +'ASC'=21 +'AT'=22 +'AUTHORIZATION'=23 +'BETWEEN'=24 +'BIGINT'=25 +'BINARY'=26 +'BOOLEAN'=27 +'BOTH'=28 +'BUCKET'=29 +'BUCKETS'=30 +'BY'=31 +'BYTE'=32 +'CACHE'=33 +'CASCADE'=34 +'CASE'=35 +'CAST'=36 +'CATALOG'=37 +'CATALOGS'=38 +'CHANGE'=39 +'CHAR'=40 +'CHARACTER'=41 +'CHECK'=42 +'CLEAR'=43 +'CLUSTER'=44 +'CLUSTERED'=45 +'CODEGEN'=46 +'COLLATE'=47 +'COLLECTION'=48 +'COLUMN'=49 +'COLUMNS'=50 +'COMMENT'=51 +'COMMIT'=52 +'COMPACT'=53 +'COMPACTIONS'=54 +'COMPUTE'=55 +'CONCATENATE'=56 +'CONSTRAINT'=57 +'COST'=58 +'CREATE'=59 +'CROSS'=60 +'CUBE'=61 +'CURRENT'=62 +'CURRENT_DATE'=63 +'CURRENT_TIME'=64 +'CURRENT_TIMESTAMP'=65 +'CURRENT_USER'=66 +'DAY'=67 +'DAYS'=68 +'DAYOFYEAR'=69 +'DATA'=70 +'DATE'=71 +'DATABASE'=72 +'DATABASES'=73 +'DATEADD'=74 +'DATE_ADD'=75 +'DATEDIFF'=76 +'DATE_DIFF'=77 +'DBPROPERTIES'=78 +'DEC'=79 +'DECIMAL'=80 +'DECLARE'=81 +'DEFAULT'=82 +'DEFINED'=83 +'DELETE'=84 +'DELIMITED'=85 +'DESC'=86 +'DESCRIBE'=87 +'DFS'=88 +'DIRECTORIES'=89 +'DIRECTORY'=90 +'DISTINCT'=91 +'DISTRIBUTE'=92 +'DIV'=93 +'DOUBLE'=94 +'DROP'=95 +'ELSE'=96 +'END'=97 +'ESCAPE'=98 +'ESCAPED'=99 +'EXCEPT'=100 +'EXCHANGE'=101 +'EXCLUDE'=102 +'EXISTS'=103 +'EXPLAIN'=104 +'EXPORT'=105 +'EXTENDED'=106 +'EXTERNAL'=107 +'EXTRACT'=108 +'FALSE'=109 +'FETCH'=110 +'FIELDS'=111 +'FILTER'=112 +'FILEFORMAT'=113 +'FIRST'=114 +'FLOAT'=115 +'FOLLOWING'=116 +'FOR'=117 +'FOREIGN'=118 +'FORMAT'=119 +'FORMATTED'=120 +'FROM'=121 +'FULL'=122 +'FUNCTION'=123 +'FUNCTIONS'=124 +'GENERATED'=125 +'GLOBAL'=126 +'GRANT'=127 +'GROUP'=128 +'GROUPING'=129 +'HAVING'=130 +'X'=131 +'HOUR'=132 +'HOURS'=133 +'IDENTIFIER'=134 +'IF'=135 +'IGNORE'=136 +'IMPORT'=137 +'IN'=138 +'INCLUDE'=139 +'INDEX'=140 +'INDEXES'=141 +'INNER'=142 +'INPATH'=143 +'INPUTFORMAT'=144 +'INSERT'=145 +'INTERSECT'=146 +'INTERVAL'=147 +'INT'=148 +'INTEGER'=149 +'INTO'=150 +'IS'=151 +'ITEMS'=152 +'JOIN'=153 +'KEYS'=154 +'LAST'=155 +'LATERAL'=156 +'LAZY'=157 +'LEADING'=158 +'LEFT'=159 +'LIKE'=160 +'ILIKE'=161 +'LIMIT'=162 +'LINES'=163 +'LIST'=164 +'LOAD'=165 +'LOCAL'=166 +'LOCATION'=167 +'LOCK'=168 +'LOCKS'=169 +'LOGICAL'=170 +'LONG'=171 +'MACRO'=172 +'MAP'=173 +'MATCHED'=174 +'MERGE'=175 +'MICROSECOND'=176 +'MICROSECONDS'=177 +'MILLISECOND'=178 +'MILLISECONDS'=179 +'MINUTE'=180 +'MINUTES'=181 +'MONTH'=182 +'MONTHS'=183 +'MSCK'=184 +'NAME'=185 +'NAMESPACE'=186 +'NAMESPACES'=187 +'NANOSECOND'=188 +'NANOSECONDS'=189 +'NATURAL'=190 +'NO'=191 +'NULL'=193 +'NULLS'=194 +'NUMERIC'=195 +'OF'=196 +'OFFSET'=197 +'ON'=198 +'ONLY'=199 +'OPTION'=200 +'OPTIONS'=201 +'OR'=202 +'ORDER'=203 +'OUT'=204 +'OUTER'=205 +'OUTPUTFORMAT'=206 +'OVER'=207 +'OVERLAPS'=208 +'OVERLAY'=209 +'OVERWRITE'=210 +'PARTITION'=211 +'PARTITIONED'=212 +'PARTITIONS'=213 +'PERCENTILE_CONT'=214 +'PERCENTILE_DISC'=215 +'PERCENT'=216 +'PIVOT'=217 +'PLACING'=218 +'POSITION'=219 +'PRECEDING'=220 +'PRIMARY'=221 +'PRINCIPALS'=222 +'PROPERTIES'=223 +'PURGE'=224 +'QUARTER'=225 +'QUERY'=226 +'RANGE'=227 +'REAL'=228 +'RECORDREADER'=229 +'RECORDWRITER'=230 +'RECOVER'=231 +'REDUCE'=232 +'REFERENCES'=233 +'REFRESH'=234 +'RENAME'=235 +'REPAIR'=236 +'REPEATABLE'=237 +'REPLACE'=238 +'RESET'=239 +'RESPECT'=240 +'RESTRICT'=241 +'REVOKE'=242 +'RIGHT'=243 +'ROLE'=245 +'ROLES'=246 +'ROLLBACK'=247 +'ROLLUP'=248 +'ROW'=249 +'ROWS'=250 +'SECOND'=251 +'SECONDS'=252 +'SCHEMA'=253 +'SCHEMAS'=254 +'SELECT'=255 +'SEMI'=256 +'SEPARATED'=257 +'SERDE'=258 +'SERDEPROPERTIES'=259 +'SESSION_USER'=260 +'SET'=261 +'MINUS'=262 +'SETS'=263 +'SHORT'=264 +'SHOW'=265 +'SINGLE'=266 +'SKEWED'=267 +'SMALLINT'=268 +'SOME'=269 +'SORT'=270 +'SORTED'=271 +'SOURCE'=272 +'START'=273 +'STATISTICS'=274 +'STORED'=275 +'STRATIFY'=276 +'STRING'=277 +'STRUCT'=278 +'SUBSTR'=279 +'SUBSTRING'=280 +'SYNC'=281 +'SYSTEM_TIME'=282 +'SYSTEM_VERSION'=283 +'TABLE'=284 +'TABLES'=285 +'TABLESAMPLE'=286 +'TARGET'=287 +'TBLPROPERTIES'=288 +'TERMINATED'=290 +'THEN'=291 +'TIME'=292 +'TIMEDIFF'=293 +'TIMESTAMP'=294 +'TIMESTAMP_LTZ'=295 +'TIMESTAMP_NTZ'=296 +'TIMESTAMPADD'=297 +'TIMESTAMPDIFF'=298 +'TINYINT'=299 +'TO'=300 +'TOUCH'=301 +'TRAILING'=302 +'TRANSACTION'=303 +'TRANSACTIONS'=304 +'TRANSFORM'=305 +'TRIM'=306 +'TRUE'=307 +'TRUNCATE'=308 +'TRY_CAST'=309 +'TYPE'=310 +'UNARCHIVE'=311 +'UNBOUNDED'=312 +'UNCACHE'=313 +'UNION'=314 +'UNIQUE'=315 +'UNKNOWN'=316 +'UNLOCK'=317 +'UNPIVOT'=318 +'UNSET'=319 +'UPDATE'=320 +'USE'=321 +'USER'=322 +'USING'=323 +'VALUES'=324 +'VARCHAR'=325 +'VAR'=326 +'VARIABLE'=327 +'VERSION'=328 +'VIEW'=329 +'VIEWS'=330 +'VOID'=331 +'WEEK'=332 +'WEEKS'=333 +'WHEN'=334 +'WHERE'=335 +'WINDOW'=336 +'WITH'=337 +'WITHIN'=338 +'YEAR'=339 +'YEARS'=340 +'ZONE'=341 +'<=>'=343 +'<>'=344 +'!='=345 +'<'=346 +'>'=348 +'+'=350 +'-'=351 +'*'=352 +'/'=353 +'%'=354 +'~'=355 +'&'=356 +'|'=357 +'||'=358 +'^'=359 +':'=360 +'->'=361 +'=>'=362 +'/*+'=363 +'*/'=364 +'?'=365 diff --git a/src/lib/spark/SparkSqlLexer.ts b/src/lib/spark/SparkSqlLexer.ts index 75dcdaef..657b83e5 100644 --- a/src/lib/spark/SparkSqlLexer.ts +++ b/src/lib/spark/SparkSqlLexer.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/spark/SparkSql.g4 by ANTLR 4.9.0-SNAPSHOT +// Generated from /Users/edy/github/dt-sql-parser/src/grammar/spark/SparkSqlLexer.g4 by ANTLR 4.9.0-SNAPSHOT import { ATN } from "antlr4ts/atn/ATN"; @@ -16,301 +16,388 @@ import * as Utils from "antlr4ts/misc/Utils"; export class SparkSqlLexer extends Lexer { - public static readonly T__0 = 1; - public static readonly T__1 = 2; - public static readonly T__2 = 3; - public static readonly T__3 = 4; - public static readonly T__4 = 5; - public static readonly T__5 = 6; - public static readonly T__6 = 7; - public static readonly T__7 = 8; - public static readonly T__8 = 9; - public static readonly T__9 = 10; - public static readonly ADD = 11; - public static readonly AFTER = 12; - public static readonly ALL = 13; - public static readonly ALTER = 14; - public static readonly ANALYZE = 15; - public static readonly AND = 16; - public static readonly ANTI = 17; - public static readonly ANY = 18; - public static readonly ARCHIVE = 19; - public static readonly ARRAY = 20; - public static readonly AS = 21; - public static readonly ASC = 22; - public static readonly AT = 23; - public static readonly AUTHORIZATION = 24; - public static readonly BETWEEN = 25; - public static readonly BOTH = 26; - public static readonly BUCKET = 27; - public static readonly BUCKETS = 28; - public static readonly BY = 29; - public static readonly CACHE = 30; - public static readonly CASCADE = 31; - public static readonly CASE = 32; - public static readonly CAST = 33; - public static readonly CHANGE = 34; - public static readonly CHECK = 35; - public static readonly CLEAR = 36; - public static readonly CLUSTER = 37; - public static readonly CLUSTERED = 38; - public static readonly CODEGEN = 39; - public static readonly COLLATE = 40; - public static readonly COLLECTION = 41; - public static readonly COLUMN = 42; - public static readonly COLUMNS = 43; - public static readonly COMMENT = 44; - public static readonly COMMIT = 45; - public static readonly COMPACT = 46; - public static readonly COMPACTIONS = 47; - public static readonly COMPUTE = 48; - public static readonly CONCATENATE = 49; - public static readonly CONSTRAINT = 50; - public static readonly COST = 51; - public static readonly CREATE = 52; - public static readonly CROSS = 53; - public static readonly CUBE = 54; - public static readonly CURRENT = 55; - public static readonly CURRENT_DATE = 56; - public static readonly CURRENT_TIME = 57; - public static readonly CURRENT_TIMESTAMP = 58; - public static readonly CURRENT_USER = 59; - public static readonly DATA = 60; - public static readonly DATABASE = 61; - public static readonly DATABASES = 62; - public static readonly DBPROPERTIES = 63; - public static readonly DEFINED = 64; - public static readonly DELETE = 65; - public static readonly DELIMITED = 66; - public static readonly DESC = 67; - public static readonly DESCRIBE = 68; - public static readonly DFS = 69; - public static readonly DIRECTORIES = 70; - public static readonly DIRECTORY = 71; - public static readonly DISTINCT = 72; - public static readonly DISTRIBUTE = 73; - public static readonly DIV = 74; - public static readonly DROP = 75; - public static readonly ELSE = 76; - public static readonly END = 77; - public static readonly ESCAPE = 78; - public static readonly ESCAPED = 79; - public static readonly EXCEPT = 80; - public static readonly EXCHANGE = 81; - public static readonly EXISTS = 82; - public static readonly EXPLAIN = 83; - public static readonly EXPORT = 84; - public static readonly EXTENDED = 85; - public static readonly EXTERNAL = 86; - public static readonly EXTRACT = 87; - public static readonly FALSE = 88; - public static readonly FETCH = 89; - public static readonly FIELDS = 90; - public static readonly FILTER = 91; - public static readonly FILEFORMAT = 92; - public static readonly FIRST = 93; - public static readonly FOLLOWING = 94; - public static readonly FOR = 95; - public static readonly FOREIGN = 96; - public static readonly FORMAT = 97; - public static readonly FORMATTED = 98; - public static readonly FROM = 99; - public static readonly FULL = 100; - public static readonly FUNCTION = 101; - public static readonly FUNCTIONS = 102; - public static readonly GLOBAL = 103; - public static readonly GRANT = 104; - public static readonly GROUP = 105; - public static readonly GROUPING = 106; - public static readonly HAVING = 107; - public static readonly IF = 108; - public static readonly IGNORE = 109; - public static readonly IMPORT = 110; - public static readonly IN = 111; - public static readonly INDEX = 112; - public static readonly INDEXES = 113; - public static readonly INNER = 114; - public static readonly INPATH = 115; - public static readonly INPUTFORMAT = 116; - public static readonly INSERT = 117; - public static readonly INTERSECT = 118; - public static readonly INTERVAL = 119; - public static readonly INTO = 120; - public static readonly IS = 121; - public static readonly ITEMS = 122; - public static readonly JOIN = 123; - public static readonly KEYS = 124; - public static readonly LAST = 125; - public static readonly LATERAL = 126; - public static readonly LAZY = 127; - public static readonly LEADING = 128; - public static readonly LEFT = 129; - public static readonly LIKE = 130; - public static readonly LIMIT = 131; - public static readonly LINES = 132; - public static readonly LIST = 133; - public static readonly LOAD = 134; - public static readonly LOCAL = 135; - public static readonly LOCATION = 136; - public static readonly LOCK = 137; - public static readonly LOCKS = 138; - public static readonly LOGICAL = 139; - public static readonly MACRO = 140; - public static readonly MAP = 141; - public static readonly MATCHED = 142; - public static readonly MERGE = 143; - public static readonly MSCK = 144; - public static readonly NAMESPACE = 145; - public static readonly NAMESPACES = 146; - public static readonly NATURAL = 147; - public static readonly NO = 148; - public static readonly NOT = 149; - public static readonly NULL = 150; - public static readonly NULLS = 151; - public static readonly OF = 152; - public static readonly ON = 153; - public static readonly ONLY = 154; - public static readonly OPTION = 155; - public static readonly OPTIONS = 156; - public static readonly OR = 157; - public static readonly ORDER = 158; - public static readonly OUT = 159; - public static readonly OUTER = 160; - public static readonly OUTPUTFORMAT = 161; - public static readonly OVER = 162; - public static readonly OVERLAPS = 163; - public static readonly OVERLAY = 164; - public static readonly OVERWRITE = 165; - public static readonly PARTITION = 166; - public static readonly PARTITIONED = 167; - public static readonly PARTITIONS = 168; - public static readonly PERCENTLIT = 169; - public static readonly PIVOT = 170; - public static readonly PLACING = 171; - public static readonly POSITION = 172; - public static readonly PRECEDING = 173; - public static readonly PRIMARY = 174; - public static readonly PRINCIPALS = 175; - public static readonly PROPERTIES = 176; - public static readonly PURGE = 177; - public static readonly QUERY = 178; - public static readonly RANGE = 179; - public static readonly RECORDREADER = 180; - public static readonly RECORDWRITER = 181; - public static readonly RECOVER = 182; - public static readonly REDUCE = 183; - public static readonly REFERENCES = 184; - public static readonly REFRESH = 185; - public static readonly RENAME = 186; - public static readonly REPAIR = 187; - public static readonly REPLACE = 188; - public static readonly RESET = 189; - public static readonly RESTRICT = 190; - public static readonly REVOKE = 191; - public static readonly RIGHT = 192; - public static readonly RLIKE = 193; - public static readonly ROLE = 194; - public static readonly ROLES = 195; - public static readonly ROLLBACK = 196; - public static readonly ROLLUP = 197; - public static readonly ROW = 198; - public static readonly ROWS = 199; - public static readonly SCHEMA = 200; - public static readonly SELECT = 201; - public static readonly SEMI = 202; - public static readonly SEPARATED = 203; - public static readonly SERDE = 204; - public static readonly SERDEPROPERTIES = 205; - public static readonly SESSION_USER = 206; - public static readonly SET = 207; - public static readonly SETMINUS = 208; - public static readonly SETS = 209; - public static readonly SHOW = 210; - public static readonly SKEWED = 211; - public static readonly SOME = 212; - public static readonly SORT = 213; - public static readonly SORTED = 214; - public static readonly START = 215; - public static readonly STATISTICS = 216; - public static readonly STORED = 217; - public static readonly STRATIFY = 218; - public static readonly STRUCT = 219; - public static readonly SUBSTR = 220; - public static readonly SUBSTRING = 221; - public static readonly TABLE = 222; - public static readonly TABLES = 223; - public static readonly TABLESAMPLE = 224; - public static readonly TBLPROPERTIES = 225; - public static readonly TEMPORARY = 226; - public static readonly TERMINATED = 227; - public static readonly THEN = 228; - public static readonly TIME = 229; - public static readonly TO = 230; - public static readonly TOUCH = 231; - public static readonly TRAILING = 232; - public static readonly TRANSACTION = 233; - public static readonly TRANSACTIONS = 234; - public static readonly TRANSFORM = 235; - public static readonly TRIM = 236; - public static readonly TRUE = 237; - public static readonly TRUNCATE = 238; - public static readonly TYPE = 239; - public static readonly UNARCHIVE = 240; - public static readonly UNBOUNDED = 241; - public static readonly UNCACHE = 242; - public static readonly UNION = 243; - public static readonly UNIQUE = 244; - public static readonly UNKNOWN = 245; - public static readonly UNLOCK = 246; - public static readonly UNSET = 247; - public static readonly UPDATE = 248; - public static readonly USE = 249; - public static readonly USER = 250; - public static readonly USING = 251; - public static readonly VALUES = 252; - public static readonly VIEW = 253; - public static readonly VIEWS = 254; - public static readonly WHEN = 255; - public static readonly WHERE = 256; - public static readonly WINDOW = 257; - public static readonly WITH = 258; - public static readonly ZONE = 259; - public static readonly EQ = 260; - public static readonly NSEQ = 261; - public static readonly NEQ = 262; - public static readonly NEQJ = 263; - public static readonly LT = 264; - public static readonly LTE = 265; - public static readonly GT = 266; - public static readonly GTE = 267; - public static readonly PLUS = 268; - public static readonly MINUS = 269; - public static readonly ASTERISK = 270; - public static readonly SLASH = 271; - public static readonly PERCENT = 272; - public static readonly TILDE = 273; - public static readonly AMPERSAND = 274; - public static readonly PIPE = 275; - public static readonly CONCAT_PIPE = 276; - public static readonly HAT = 277; - public static readonly SEMICOLON = 278; - public static readonly STRING = 279; - public static readonly BIGINT_LITERAL = 280; - public static readonly SMALLINT_LITERAL = 281; - public static readonly TINYINT_LITERAL = 282; - public static readonly INTEGER_VALUE = 283; - public static readonly EXPONENT_VALUE = 284; - public static readonly DECIMAL_VALUE = 285; - public static readonly FLOAT_LITERAL = 286; - public static readonly DOUBLE_LITERAL = 287; - public static readonly BIGDECIMAL_LITERAL = 288; - public static readonly IDENTIFIER = 289; - public static readonly BACKQUOTED_IDENTIFIER = 290; - public static readonly CUSTOM_VARS = 291; - public static readonly SIMPLE_COMMENT = 292; - public static readonly BRACKETED_COMMENT = 293; - public static readonly WS = 294; - public static readonly UNRECOGNIZED = 295; + public static readonly SEMICOLON = 1; + public static readonly LEFT_PAREN = 2; + public static readonly RIGHT_PAREN = 3; + public static readonly COMMA = 4; + public static readonly DOT = 5; + public static readonly LEFT_BRACKET = 6; + public static readonly RIGHT_BRACKET = 7; + public static readonly KW_ADD = 8; + public static readonly KW_AFTER = 9; + public static readonly KW_ALL = 10; + public static readonly KW_ALTER = 11; + public static readonly KW_ALWAYS = 12; + public static readonly KW_ANALYZE = 13; + public static readonly KW_AND = 14; + public static readonly KW_ANTI = 15; + public static readonly KW_ANY = 16; + public static readonly KW_ANY_VALUE = 17; + public static readonly KW_ARCHIVE = 18; + public static readonly KW_ARRAY = 19; + public static readonly KW_AS = 20; + public static readonly KW_ASC = 21; + public static readonly KW_AT = 22; + public static readonly KW_AUTHORIZATION = 23; + public static readonly KW_BETWEEN = 24; + public static readonly KW_BIGINT = 25; + public static readonly KW_BINARY = 26; + public static readonly KW_BOOLEAN = 27; + public static readonly KW_BOTH = 28; + public static readonly KW_BUCKET = 29; + public static readonly KW_BUCKETS = 30; + public static readonly KW_BY = 31; + public static readonly KW_BYTE = 32; + public static readonly KW_CACHE = 33; + public static readonly KW_CASCADE = 34; + public static readonly KW_CASE = 35; + public static readonly KW_CAST = 36; + public static readonly KW_CATALOG = 37; + public static readonly KW_CATALOGS = 38; + public static readonly KW_CHANGE = 39; + public static readonly KW_CHAR = 40; + public static readonly KW_CHARACTER = 41; + public static readonly KW_CHECK = 42; + public static readonly KW_CLEAR = 43; + public static readonly KW_CLUSTER = 44; + public static readonly KW_CLUSTERED = 45; + public static readonly KW_CODEGEN = 46; + public static readonly KW_COLLATE = 47; + public static readonly KW_COLLECTION = 48; + public static readonly KW_COLUMN = 49; + public static readonly KW_COLUMNS = 50; + public static readonly KW_COMMENT = 51; + public static readonly KW_COMMIT = 52; + public static readonly KW_COMPACT = 53; + public static readonly KW_COMPACTIONS = 54; + public static readonly KW_COMPUTE = 55; + public static readonly KW_CONCATENATE = 56; + public static readonly KW_CONSTRAINT = 57; + public static readonly KW_COST = 58; + public static readonly KW_CREATE = 59; + public static readonly KW_CROSS = 60; + public static readonly KW_CUBE = 61; + public static readonly KW_CURRENT = 62; + public static readonly KW_CURRENT_DATE = 63; + public static readonly KW_CURRENT_TIME = 64; + public static readonly KW_CURRENT_TIMESTAMP = 65; + public static readonly KW_CURRENT_USER = 66; + public static readonly KW_DAY = 67; + public static readonly KW_DAYS = 68; + public static readonly KW_DAYOFYEAR = 69; + public static readonly KW_DATA = 70; + public static readonly KW_DATE = 71; + public static readonly KW_DATABASE = 72; + public static readonly KW_DATABASES = 73; + public static readonly KW_DATEADD = 74; + public static readonly KW_DATE_ADD = 75; + public static readonly KW_DATEDIFF = 76; + public static readonly KW_DATE_DIFF = 77; + public static readonly KW_DBPROPERTIES = 78; + public static readonly KW_DEC = 79; + public static readonly KW_DECIMAL = 80; + public static readonly KW_DECLARE = 81; + public static readonly KW_DEFAULT = 82; + public static readonly KW_DEFINED = 83; + public static readonly KW_DELETE = 84; + public static readonly KW_DELIMITED = 85; + public static readonly KW_DESC = 86; + public static readonly KW_DESCRIBE = 87; + public static readonly KW_DFS = 88; + public static readonly KW_DIRECTORIES = 89; + public static readonly KW_DIRECTORY = 90; + public static readonly KW_DISTINCT = 91; + public static readonly KW_DISTRIBUTE = 92; + public static readonly KW_DIV = 93; + public static readonly KW_DOUBLE = 94; + public static readonly KW_DROP = 95; + public static readonly KW_ELSE = 96; + public static readonly KW_END = 97; + public static readonly KW_ESCAPE = 98; + public static readonly KW_ESCAPED = 99; + public static readonly KW_EXCEPT = 100; + public static readonly KW_EXCHANGE = 101; + public static readonly KW_EXCLUDE = 102; + public static readonly KW_EXISTS = 103; + public static readonly KW_EXPLAIN = 104; + public static readonly KW_EXPORT = 105; + public static readonly KW_EXTENDED = 106; + public static readonly KW_EXTERNAL = 107; + public static readonly KW_EXTRACT = 108; + public static readonly KW_FALSE = 109; + public static readonly KW_FETCH = 110; + public static readonly KW_FIELDS = 111; + public static readonly KW_FILTER = 112; + public static readonly KW_FILEFORMAT = 113; + public static readonly KW_FIRST = 114; + public static readonly KW_FLOAT = 115; + public static readonly KW_FOLLOWING = 116; + public static readonly KW_FOR = 117; + public static readonly KW_FOREIGN = 118; + public static readonly KW_FORMAT = 119; + public static readonly KW_FORMATTED = 120; + public static readonly KW_FROM = 121; + public static readonly KW_FULL = 122; + public static readonly KW_FUNCTION = 123; + public static readonly KW_FUNCTIONS = 124; + public static readonly KW_GENERATED = 125; + public static readonly KW_GLOBAL = 126; + public static readonly KW_GRANT = 127; + public static readonly KW_GROUP = 128; + public static readonly KW_GROUPING = 129; + public static readonly KW_HAVING = 130; + public static readonly KW_BINARY_HEX = 131; + public static readonly KW_HOUR = 132; + public static readonly KW_HOURS = 133; + public static readonly KW_IDENTIFIER_KW = 134; + public static readonly KW_IF = 135; + public static readonly KW_IGNORE = 136; + public static readonly KW_IMPORT = 137; + public static readonly KW_IN = 138; + public static readonly KW_INCLUDE = 139; + public static readonly KW_INDEX = 140; + public static readonly KW_INDEXES = 141; + public static readonly KW_INNER = 142; + public static readonly KW_INPATH = 143; + public static readonly KW_INPUTFORMAT = 144; + public static readonly KW_INSERT = 145; + public static readonly KW_INTERSECT = 146; + public static readonly KW_INTERVAL = 147; + public static readonly KW_INT = 148; + public static readonly KW_INTEGER = 149; + public static readonly KW_INTO = 150; + public static readonly KW_IS = 151; + public static readonly KW_ITEMS = 152; + public static readonly KW_JOIN = 153; + public static readonly KW_KEYS = 154; + public static readonly KW_LAST = 155; + public static readonly KW_LATERAL = 156; + public static readonly KW_LAZY = 157; + public static readonly KW_LEADING = 158; + public static readonly KW_LEFT = 159; + public static readonly KW_LIKE = 160; + public static readonly KW_ILIKE = 161; + public static readonly KW_LIMIT = 162; + public static readonly KW_LINES = 163; + public static readonly KW_LIST = 164; + public static readonly KW_LOAD = 165; + public static readonly KW_LOCAL = 166; + public static readonly KW_LOCATION = 167; + public static readonly KW_LOCK = 168; + public static readonly KW_LOCKS = 169; + public static readonly KW_LOGICAL = 170; + public static readonly KW_LONG = 171; + public static readonly KW_MACRO = 172; + public static readonly KW_MAP = 173; + public static readonly KW_MATCHED = 174; + public static readonly KW_MERGE = 175; + public static readonly KW_MICROSECOND = 176; + public static readonly KW_MICROSECONDS = 177; + public static readonly KW_MILLISECOND = 178; + public static readonly KW_MILLISECONDS = 179; + public static readonly KW_MINUTE = 180; + public static readonly KW_MINUTES = 181; + public static readonly KW_MONTH = 182; + public static readonly KW_MONTHS = 183; + public static readonly KW_MSCK = 184; + public static readonly KW_NAME = 185; + public static readonly KW_NAMESPACE = 186; + public static readonly KW_NAMESPACES = 187; + public static readonly KW_NANOSECOND = 188; + public static readonly KW_NANOSECONDS = 189; + public static readonly KW_NATURAL = 190; + public static readonly KW_NO = 191; + public static readonly KW_NOT = 192; + public static readonly KW_NULL = 193; + public static readonly KW_NULLS = 194; + public static readonly KW_NUMERIC = 195; + public static readonly KW_OF = 196; + public static readonly KW_OFFSET = 197; + public static readonly KW_ON = 198; + public static readonly KW_ONLY = 199; + public static readonly KW_OPTION = 200; + public static readonly KW_OPTIONS = 201; + public static readonly KW_OR = 202; + public static readonly KW_ORDER = 203; + public static readonly KW_OUT = 204; + public static readonly KW_OUTER = 205; + public static readonly KW_OUTPUTFORMAT = 206; + public static readonly KW_OVER = 207; + public static readonly KW_OVERLAPS = 208; + public static readonly KW_OVERLAY = 209; + public static readonly KW_OVERWRITE = 210; + public static readonly KW_PARTITION = 211; + public static readonly KW_PARTITIONED = 212; + public static readonly KW_PARTITIONS = 213; + public static readonly KW_PERCENTILE_CONT = 214; + public static readonly KW_PERCENTILE_DISC = 215; + public static readonly KW_PERCENTLIT = 216; + public static readonly KW_PIVOT = 217; + public static readonly KW_PLACING = 218; + public static readonly KW_POSITION = 219; + public static readonly KW_PRECEDING = 220; + public static readonly KW_PRIMARY = 221; + public static readonly KW_PRINCIPALS = 222; + public static readonly KW_PROPERTIES = 223; + public static readonly KW_PURGE = 224; + public static readonly KW_QUARTER = 225; + public static readonly KW_QUERY = 226; + public static readonly KW_RANGE = 227; + public static readonly KW_REAL = 228; + public static readonly KW_RECORDREADER = 229; + public static readonly KW_RECORDWRITER = 230; + public static readonly KW_RECOVER = 231; + public static readonly KW_REDUCE = 232; + public static readonly KW_REFERENCES = 233; + public static readonly KW_REFRESH = 234; + public static readonly KW_RENAME = 235; + public static readonly KW_REPAIR = 236; + public static readonly KW_REPEATABLE = 237; + public static readonly KW_REPLACE = 238; + public static readonly KW_RESET = 239; + public static readonly KW_RESPECT = 240; + public static readonly KW_RESTRICT = 241; + public static readonly KW_REVOKE = 242; + public static readonly KW_RIGHT = 243; + public static readonly KW_RLIKE = 244; + public static readonly KW_ROLE = 245; + public static readonly KW_ROLES = 246; + public static readonly KW_ROLLBACK = 247; + public static readonly KW_ROLLUP = 248; + public static readonly KW_ROW = 249; + public static readonly KW_ROWS = 250; + public static readonly KW_SECOND = 251; + public static readonly KW_SECONDS = 252; + public static readonly KW_SCHEMA = 253; + public static readonly KW_SCHEMAS = 254; + public static readonly KW_SELECT = 255; + public static readonly KW_SEMI = 256; + public static readonly KW_SEPARATED = 257; + public static readonly KW_SERDE = 258; + public static readonly KW_SERDEPROPERTIES = 259; + public static readonly KW_SESSION_USER = 260; + public static readonly KW_SET = 261; + public static readonly KW_SETMINUS = 262; + public static readonly KW_SETS = 263; + public static readonly KW_SHORT = 264; + public static readonly KW_SHOW = 265; + public static readonly KW_SINGLE = 266; + public static readonly KW_SKEWED = 267; + public static readonly KW_SMALLINT = 268; + public static readonly KW_SOME = 269; + public static readonly KW_SORT = 270; + public static readonly KW_SORTED = 271; + public static readonly KW_SOURCE = 272; + public static readonly KW_START = 273; + public static readonly KW_STATISTICS = 274; + public static readonly KW_STORED = 275; + public static readonly KW_STRATIFY = 276; + public static readonly KW_STRING = 277; + public static readonly KW_STRUCT = 278; + public static readonly KW_SUBSTR = 279; + public static readonly KW_SUBSTRING = 280; + public static readonly KW_SYNC = 281; + public static readonly KW_SYSTEM_TIME = 282; + public static readonly KW_SYSTEM_VERSION = 283; + public static readonly KW_TABLE = 284; + public static readonly KW_TABLES = 285; + public static readonly KW_TABLESAMPLE = 286; + public static readonly KW_TARGET = 287; + public static readonly KW_TBLPROPERTIES = 288; + public static readonly KW_TEMPORARY = 289; + public static readonly KW_TERMINATED = 290; + public static readonly KW_THEN = 291; + public static readonly KW_TIME = 292; + public static readonly KW_TIMEDIFF = 293; + public static readonly KW_TIMESTAMP = 294; + public static readonly KW_TIMESTAMP_LTZ = 295; + public static readonly KW_TIMESTAMP_NTZ = 296; + public static readonly KW_TIMESTAMPADD = 297; + public static readonly KW_TIMESTAMPDIFF = 298; + public static readonly KW_TINYINT = 299; + public static readonly KW_TO = 300; + public static readonly KW_TOUCH = 301; + public static readonly KW_TRAILING = 302; + public static readonly KW_TRANSACTION = 303; + public static readonly KW_TRANSACTIONS = 304; + public static readonly KW_TRANSFORM = 305; + public static readonly KW_TRIM = 306; + public static readonly KW_TRUE = 307; + public static readonly KW_TRUNCATE = 308; + public static readonly KW_TRY_CAST = 309; + public static readonly KW_TYPE = 310; + public static readonly KW_UNARCHIVE = 311; + public static readonly KW_UNBOUNDED = 312; + public static readonly KW_UNCACHE = 313; + public static readonly KW_UNION = 314; + public static readonly KW_UNIQUE = 315; + public static readonly KW_UNKNOWN = 316; + public static readonly KW_UNLOCK = 317; + public static readonly KW_UNPIVOT = 318; + public static readonly KW_UNSET = 319; + public static readonly KW_UPDATE = 320; + public static readonly KW_USE = 321; + public static readonly KW_USER = 322; + public static readonly KW_USING = 323; + public static readonly KW_VALUES = 324; + public static readonly KW_VARCHAR = 325; + public static readonly KW_VAR = 326; + public static readonly KW_VARIABLE = 327; + public static readonly KW_VERSION = 328; + public static readonly KW_VIEW = 329; + public static readonly KW_VIEWS = 330; + public static readonly KW_VOID = 331; + public static readonly KW_WEEK = 332; + public static readonly KW_WEEKS = 333; + public static readonly KW_WHEN = 334; + public static readonly KW_WHERE = 335; + public static readonly KW_WINDOW = 336; + public static readonly KW_WITH = 337; + public static readonly KW_WITHIN = 338; + public static readonly KW_YEAR = 339; + public static readonly KW_YEARS = 340; + public static readonly KW_ZONE = 341; + public static readonly EQ = 342; + public static readonly NSEQ = 343; + public static readonly NEQ = 344; + public static readonly NEQJ = 345; + public static readonly LT = 346; + public static readonly LTE = 347; + public static readonly GT = 348; + public static readonly GTE = 349; + public static readonly PLUS = 350; + public static readonly MINUS = 351; + public static readonly ASTERISK = 352; + public static readonly SLASH = 353; + public static readonly PERCENT = 354; + public static readonly TILDE = 355; + public static readonly AMPERSAND = 356; + public static readonly PIPE = 357; + public static readonly CONCAT_PIPE = 358; + public static readonly HAT = 359; + public static readonly COLON = 360; + public static readonly ARROW = 361; + public static readonly FAT_ARROW = 362; + public static readonly HENT_START = 363; + public static readonly HENT_END = 364; + public static readonly QUESTION = 365; + public static readonly STRING_LITERAL = 366; + public static readonly DOUBLEQUOTED_STRING = 367; + public static readonly BIGINT_LITERAL = 368; + public static readonly SMALLINT_LITERAL = 369; + public static readonly TINYINT_LITERAL = 370; + public static readonly INTEGER_VALUE = 371; + public static readonly EXPONENT_VALUE = 372; + public static readonly DECIMAL_VALUE = 373; + public static readonly FLOAT_LITERAL = 374; + public static readonly DOUBLE_LITERAL = 375; + public static readonly BIGDECIMAL_LITERAL = 376; + public static readonly IDENTIFIER = 377; + public static readonly BACKQUOTED_IDENTIFIER = 378; + public static readonly SIMPLE_COMMENT = 379; + public static readonly BRACKETED_COMMENT = 380; + public static readonly WS = 381; + public static readonly UNRECOGNIZED = 382; // tslint:disable:no-trailing-whitespace public static readonly channelNames: string[] = [ @@ -323,141 +410,206 @@ export class SparkSqlLexer extends Lexer { ]; public static readonly ruleNames: string[] = [ - "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", - "T__9", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "ANTI", "ANY", - "ARCHIVE", "ARRAY", "AS", "ASC", "AT", "AUTHORIZATION", "BETWEEN", "BOTH", - "BUCKET", "BUCKETS", "BY", "CACHE", "CASCADE", "CASE", "CAST", "CHANGE", - "CHECK", "CLEAR", "CLUSTER", "CLUSTERED", "CODEGEN", "COLLATE", "COLLECTION", - "COLUMN", "COLUMNS", "COMMENT", "COMMIT", "COMPACT", "COMPACTIONS", "COMPUTE", - "CONCATENATE", "CONSTRAINT", "COST", "CREATE", "CROSS", "CUBE", "CURRENT", - "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", "DATA", - "DATABASE", "DATABASES", "DBPROPERTIES", "DEFINED", "DELETE", "DELIMITED", - "DESC", "DESCRIBE", "DFS", "DIRECTORIES", "DIRECTORY", "DISTINCT", "DISTRIBUTE", - "DIV", "DROP", "ELSE", "END", "ESCAPE", "ESCAPED", "EXCEPT", "EXCHANGE", - "EXISTS", "EXPLAIN", "EXPORT", "EXTENDED", "EXTERNAL", "EXTRACT", "FALSE", - "FETCH", "FIELDS", "FILTER", "FILEFORMAT", "FIRST", "FOLLOWING", "FOR", - "FOREIGN", "FORMAT", "FORMATTED", "FROM", "FULL", "FUNCTION", "FUNCTIONS", - "GLOBAL", "GRANT", "GROUP", "GROUPING", "HAVING", "IF", "IGNORE", "IMPORT", - "IN", "INDEX", "INDEXES", "INNER", "INPATH", "INPUTFORMAT", "INSERT", - "INTERSECT", "INTERVAL", "INTO", "IS", "ITEMS", "JOIN", "KEYS", "LAST", - "LATERAL", "LAZY", "LEADING", "LEFT", "LIKE", "LIMIT", "LINES", "LIST", - "LOAD", "LOCAL", "LOCATION", "LOCK", "LOCKS", "LOGICAL", "MACRO", "MAP", - "MATCHED", "MERGE", "MSCK", "NAMESPACE", "NAMESPACES", "NATURAL", "NO", - "NOT", "NULL", "NULLS", "OF", "ON", "ONLY", "OPTION", "OPTIONS", "OR", - "ORDER", "OUT", "OUTER", "OUTPUTFORMAT", "OVER", "OVERLAPS", "OVERLAY", - "OVERWRITE", "PARTITION", "PARTITIONED", "PARTITIONS", "PERCENTLIT", "PIVOT", - "PLACING", "POSITION", "PRECEDING", "PRIMARY", "PRINCIPALS", "PROPERTIES", - "PURGE", "QUERY", "RANGE", "RECORDREADER", "RECORDWRITER", "RECOVER", - "REDUCE", "REFERENCES", "REFRESH", "RENAME", "REPAIR", "REPLACE", "RESET", - "RESTRICT", "REVOKE", "RIGHT", "RLIKE", "ROLE", "ROLES", "ROLLBACK", "ROLLUP", - "ROW", "ROWS", "SCHEMA", "SELECT", "SEMI", "SEPARATED", "SERDE", "SERDEPROPERTIES", - "SESSION_USER", "SET", "SETMINUS", "SETS", "SHOW", "SKEWED", "SOME", "SORT", - "SORTED", "START", "STATISTICS", "STORED", "STRATIFY", "STRUCT", "SUBSTR", - "SUBSTRING", "TABLE", "TABLES", "TABLESAMPLE", "TBLPROPERTIES", "TEMPORARY", - "TERMINATED", "THEN", "TIME", "TO", "TOUCH", "TRAILING", "TRANSACTION", - "TRANSACTIONS", "TRANSFORM", "TRIM", "TRUE", "TRUNCATE", "TYPE", "UNARCHIVE", - "UNBOUNDED", "UNCACHE", "UNION", "UNIQUE", "UNKNOWN", "UNLOCK", "UNSET", - "UPDATE", "USE", "USER", "USING", "VALUES", "VIEW", "VIEWS", "WHEN", "WHERE", - "WINDOW", "WITH", "ZONE", "EQ", "NSEQ", "NEQ", "NEQJ", "LT", "LTE", "GT", - "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", "TILDE", "AMPERSAND", - "PIPE", "CONCAT_PIPE", "HAT", "SEMICOLON", "STRING", "BIGINT_LITERAL", - "SMALLINT_LITERAL", "TINYINT_LITERAL", "INTEGER_VALUE", "EXPONENT_VALUE", - "DECIMAL_VALUE", "FLOAT_LITERAL", "DOUBLE_LITERAL", "BIGDECIMAL_LITERAL", - "IDENTIFIER", "BACKQUOTED_IDENTIFIER", "CUSTOM_VARS", "DECIMAL_DIGITS", + "SEMICOLON", "LEFT_PAREN", "RIGHT_PAREN", "COMMA", "DOT", "LEFT_BRACKET", + "RIGHT_BRACKET", "KW_ADD", "KW_AFTER", "KW_ALL", "KW_ALTER", "KW_ALWAYS", + "KW_ANALYZE", "KW_AND", "KW_ANTI", "KW_ANY", "KW_ANY_VALUE", "KW_ARCHIVE", + "KW_ARRAY", "KW_AS", "KW_ASC", "KW_AT", "KW_AUTHORIZATION", "KW_BETWEEN", + "KW_BIGINT", "KW_BINARY", "KW_BOOLEAN", "KW_BOTH", "KW_BUCKET", "KW_BUCKETS", + "KW_BY", "KW_BYTE", "KW_CACHE", "KW_CASCADE", "KW_CASE", "KW_CAST", "KW_CATALOG", + "KW_CATALOGS", "KW_CHANGE", "KW_CHAR", "KW_CHARACTER", "KW_CHECK", "KW_CLEAR", + "KW_CLUSTER", "KW_CLUSTERED", "KW_CODEGEN", "KW_COLLATE", "KW_COLLECTION", + "KW_COLUMN", "KW_COLUMNS", "KW_COMMENT", "KW_COMMIT", "KW_COMPACT", "KW_COMPACTIONS", + "KW_COMPUTE", "KW_CONCATENATE", "KW_CONSTRAINT", "KW_COST", "KW_CREATE", + "KW_CROSS", "KW_CUBE", "KW_CURRENT", "KW_CURRENT_DATE", "KW_CURRENT_TIME", + "KW_CURRENT_TIMESTAMP", "KW_CURRENT_USER", "KW_DAY", "KW_DAYS", "KW_DAYOFYEAR", + "KW_DATA", "KW_DATE", "KW_DATABASE", "KW_DATABASES", "KW_DATEADD", "KW_DATE_ADD", + "KW_DATEDIFF", "KW_DATE_DIFF", "KW_DBPROPERTIES", "KW_DEC", "KW_DECIMAL", + "KW_DECLARE", "KW_DEFAULT", "KW_DEFINED", "KW_DELETE", "KW_DELIMITED", + "KW_DESC", "KW_DESCRIBE", "KW_DFS", "KW_DIRECTORIES", "KW_DIRECTORY", + "KW_DISTINCT", "KW_DISTRIBUTE", "KW_DIV", "KW_DOUBLE", "KW_DROP", "KW_ELSE", + "KW_END", "KW_ESCAPE", "KW_ESCAPED", "KW_EXCEPT", "KW_EXCHANGE", "KW_EXCLUDE", + "KW_EXISTS", "KW_EXPLAIN", "KW_EXPORT", "KW_EXTENDED", "KW_EXTERNAL", + "KW_EXTRACT", "KW_FALSE", "KW_FETCH", "KW_FIELDS", "KW_FILTER", "KW_FILEFORMAT", + "KW_FIRST", "KW_FLOAT", "KW_FOLLOWING", "KW_FOR", "KW_FOREIGN", "KW_FORMAT", + "KW_FORMATTED", "KW_FROM", "KW_FULL", "KW_FUNCTION", "KW_FUNCTIONS", "KW_GENERATED", + "KW_GLOBAL", "KW_GRANT", "KW_GROUP", "KW_GROUPING", "KW_HAVING", "KW_BINARY_HEX", + "KW_HOUR", "KW_HOURS", "KW_IDENTIFIER_KW", "KW_IF", "KW_IGNORE", "KW_IMPORT", + "KW_IN", "KW_INCLUDE", "KW_INDEX", "KW_INDEXES", "KW_INNER", "KW_INPATH", + "KW_INPUTFORMAT", "KW_INSERT", "KW_INTERSECT", "KW_INTERVAL", "KW_INT", + "KW_INTEGER", "KW_INTO", "KW_IS", "KW_ITEMS", "KW_JOIN", "KW_KEYS", "KW_LAST", + "KW_LATERAL", "KW_LAZY", "KW_LEADING", "KW_LEFT", "KW_LIKE", "KW_ILIKE", + "KW_LIMIT", "KW_LINES", "KW_LIST", "KW_LOAD", "KW_LOCAL", "KW_LOCATION", + "KW_LOCK", "KW_LOCKS", "KW_LOGICAL", "KW_LONG", "KW_MACRO", "KW_MAP", + "KW_MATCHED", "KW_MERGE", "KW_MICROSECOND", "KW_MICROSECONDS", "KW_MILLISECOND", + "KW_MILLISECONDS", "KW_MINUTE", "KW_MINUTES", "KW_MONTH", "KW_MONTHS", + "KW_MSCK", "KW_NAME", "KW_NAMESPACE", "KW_NAMESPACES", "KW_NANOSECOND", + "KW_NANOSECONDS", "KW_NATURAL", "KW_NO", "KW_NOT", "KW_NULL", "KW_NULLS", + "KW_NUMERIC", "KW_OF", "KW_OFFSET", "KW_ON", "KW_ONLY", "KW_OPTION", "KW_OPTIONS", + "KW_OR", "KW_ORDER", "KW_OUT", "KW_OUTER", "KW_OUTPUTFORMAT", "KW_OVER", + "KW_OVERLAPS", "KW_OVERLAY", "KW_OVERWRITE", "KW_PARTITION", "KW_PARTITIONED", + "KW_PARTITIONS", "KW_PERCENTILE_CONT", "KW_PERCENTILE_DISC", "KW_PERCENTLIT", + "KW_PIVOT", "KW_PLACING", "KW_POSITION", "KW_PRECEDING", "KW_PRIMARY", + "KW_PRINCIPALS", "KW_PROPERTIES", "KW_PURGE", "KW_QUARTER", "KW_QUERY", + "KW_RANGE", "KW_REAL", "KW_RECORDREADER", "KW_RECORDWRITER", "KW_RECOVER", + "KW_REDUCE", "KW_REFERENCES", "KW_REFRESH", "KW_RENAME", "KW_REPAIR", + "KW_REPEATABLE", "KW_REPLACE", "KW_RESET", "KW_RESPECT", "KW_RESTRICT", + "KW_REVOKE", "KW_RIGHT", "KW_RLIKE", "KW_ROLE", "KW_ROLES", "KW_ROLLBACK", + "KW_ROLLUP", "KW_ROW", "KW_ROWS", "KW_SECOND", "KW_SECONDS", "KW_SCHEMA", + "KW_SCHEMAS", "KW_SELECT", "KW_SEMI", "KW_SEPARATED", "KW_SERDE", "KW_SERDEPROPERTIES", + "KW_SESSION_USER", "KW_SET", "KW_SETMINUS", "KW_SETS", "KW_SHORT", "KW_SHOW", + "KW_SINGLE", "KW_SKEWED", "KW_SMALLINT", "KW_SOME", "KW_SORT", "KW_SORTED", + "KW_SOURCE", "KW_START", "KW_STATISTICS", "KW_STORED", "KW_STRATIFY", + "KW_STRING", "KW_STRUCT", "KW_SUBSTR", "KW_SUBSTRING", "KW_SYNC", "KW_SYSTEM_TIME", + "KW_SYSTEM_VERSION", "KW_TABLE", "KW_TABLES", "KW_TABLESAMPLE", "KW_TARGET", + "KW_TBLPROPERTIES", "KW_TEMPORARY", "KW_TERMINATED", "KW_THEN", "KW_TIME", + "KW_TIMEDIFF", "KW_TIMESTAMP", "KW_TIMESTAMP_LTZ", "KW_TIMESTAMP_NTZ", + "KW_TIMESTAMPADD", "KW_TIMESTAMPDIFF", "KW_TINYINT", "KW_TO", "KW_TOUCH", + "KW_TRAILING", "KW_TRANSACTION", "KW_TRANSACTIONS", "KW_TRANSFORM", "KW_TRIM", + "KW_TRUE", "KW_TRUNCATE", "KW_TRY_CAST", "KW_TYPE", "KW_UNARCHIVE", "KW_UNBOUNDED", + "KW_UNCACHE", "KW_UNION", "KW_UNIQUE", "KW_UNKNOWN", "KW_UNLOCK", "KW_UNPIVOT", + "KW_UNSET", "KW_UPDATE", "KW_USE", "KW_USER", "KW_USING", "KW_VALUES", + "KW_VARCHAR", "KW_VAR", "KW_VARIABLE", "KW_VERSION", "KW_VIEW", "KW_VIEWS", + "KW_VOID", "KW_WEEK", "KW_WEEKS", "KW_WHEN", "KW_WHERE", "KW_WINDOW", + "KW_WITH", "KW_WITHIN", "KW_YEAR", "KW_YEARS", "KW_ZONE", "EQ", "NSEQ", + "NEQ", "NEQJ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", "TILDE", "AMPERSAND", "PIPE", "CONCAT_PIPE", "HAT", + "COLON", "ARROW", "FAT_ARROW", "HENT_START", "HENT_END", "QUESTION", "STRING_LITERAL", + "DOUBLEQUOTED_STRING", "BIGINT_LITERAL", "SMALLINT_LITERAL", "TINYINT_LITERAL", + "INTEGER_VALUE", "EXPONENT_VALUE", "DECIMAL_VALUE", "FLOAT_LITERAL", "DOUBLE_LITERAL", + "BIGDECIMAL_LITERAL", "IDENTIFIER", "BACKQUOTED_IDENTIFIER", "DECIMAL_DIGITS", "EXPONENT", "DIGIT", "LETTER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", "UNRECOGNIZED", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, "'('", "')'", "','", "'.'", "'/*+'", "'*/'", "'->'", "'['", - "']'", "':'", "'ADD'", "'AFTER'", "'ALL'", "'ALTER'", "'ANALYZE'", "'AND'", - "'ANTI'", "'ANY'", "'ARCHIVE'", "'ARRAY'", "'AS'", "'ASC'", "'AT'", "'AUTHORIZATION'", - "'BETWEEN'", "'BOTH'", "'BUCKET'", "'BUCKETS'", "'BY'", "'CACHE'", "'CASCADE'", - "'CASE'", "'CAST'", "'CHANGE'", "'CHECK'", "'CLEAR'", "'CLUSTER'", "'CLUSTERED'", - "'CODEGEN'", "'COLLATE'", "'COLLECTION'", "'COLUMN'", "'COLUMNS'", "'COMMENT'", - "'COMMIT'", "'COMPACT'", "'COMPACTIONS'", "'COMPUTE'", "'CONCATENATE'", - "'CONSTRAINT'", "'COST'", "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", - "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", - "'DATA'", "'DATABASE'", undefined, "'DBPROPERTIES'", "'DEFINED'", "'DELETE'", - "'DELIMITED'", "'DESC'", "'DESCRIBE'", "'DFS'", "'DIRECTORIES'", "'DIRECTORY'", - "'DISTINCT'", "'DISTRIBUTE'", "'DIV'", "'DROP'", "'ELSE'", "'END'", "'ESCAPE'", - "'ESCAPED'", "'EXCEPT'", "'EXCHANGE'", "'EXISTS'", "'EXPLAIN'", "'EXPORT'", - "'EXTENDED'", "'EXTERNAL'", "'EXTRACT'", "'FALSE'", "'FETCH'", "'FIELDS'", - "'FILTER'", "'FILEFORMAT'", "'FIRST'", "'FOLLOWING'", "'FOR'", "'FOREIGN'", + undefined, "';'", "'('", "')'", "','", "'.'", "'['", "']'", "'ADD'", "'AFTER'", + "'ALL'", "'ALTER'", "'ALWAYS'", "'ANALYZE'", "'AND'", "'ANTI'", "'ANY'", + "'ANY_VALUE'", "'ARCHIVE'", "'ARRAY'", "'AS'", "'ASC'", "'AT'", "'AUTHORIZATION'", + "'BETWEEN'", "'BIGINT'", "'BINARY'", "'BOOLEAN'", "'BOTH'", "'BUCKET'", + "'BUCKETS'", "'BY'", "'BYTE'", "'CACHE'", "'CASCADE'", "'CASE'", "'CAST'", + "'CATALOG'", "'CATALOGS'", "'CHANGE'", "'CHAR'", "'CHARACTER'", "'CHECK'", + "'CLEAR'", "'CLUSTER'", "'CLUSTERED'", "'CODEGEN'", "'COLLATE'", "'COLLECTION'", + "'COLUMN'", "'COLUMNS'", "'COMMENT'", "'COMMIT'", "'COMPACT'", "'COMPACTIONS'", + "'COMPUTE'", "'CONCATENATE'", "'CONSTRAINT'", "'COST'", "'CREATE'", "'CROSS'", + "'CUBE'", "'CURRENT'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'CURRENT_USER'", "'DAY'", "'DAYS'", "'DAYOFYEAR'", "'DATA'", "'DATE'", + "'DATABASE'", "'DATABASES'", "'DATEADD'", "'DATE_ADD'", "'DATEDIFF'", + "'DATE_DIFF'", "'DBPROPERTIES'", "'DEC'", "'DECIMAL'", "'DECLARE'", "'DEFAULT'", + "'DEFINED'", "'DELETE'", "'DELIMITED'", "'DESC'", "'DESCRIBE'", "'DFS'", + "'DIRECTORIES'", "'DIRECTORY'", "'DISTINCT'", "'DISTRIBUTE'", "'DIV'", + "'DOUBLE'", "'DROP'", "'ELSE'", "'END'", "'ESCAPE'", "'ESCAPED'", "'EXCEPT'", + "'EXCHANGE'", "'EXCLUDE'", "'EXISTS'", "'EXPLAIN'", "'EXPORT'", "'EXTENDED'", + "'EXTERNAL'", "'EXTRACT'", "'FALSE'", "'FETCH'", "'FIELDS'", "'FILTER'", + "'FILEFORMAT'", "'FIRST'", "'FLOAT'", "'FOLLOWING'", "'FOR'", "'FOREIGN'", "'FORMAT'", "'FORMATTED'", "'FROM'", "'FULL'", "'FUNCTION'", "'FUNCTIONS'", - "'GLOBAL'", "'GRANT'", "'GROUP'", "'GROUPING'", "'HAVING'", "'IF'", "'IGNORE'", - "'IMPORT'", "'IN'", "'INDEX'", "'INDEXES'", "'INNER'", "'INPATH'", "'INPUTFORMAT'", - "'INSERT'", "'INTERSECT'", "'INTERVAL'", "'INTO'", "'IS'", "'ITEMS'", - "'JOIN'", "'KEYS'", "'LAST'", "'LATERAL'", "'LAZY'", "'LEADING'", "'LEFT'", - "'LIKE'", "'LIMIT'", "'LINES'", "'LIST'", "'LOAD'", "'LOCAL'", "'LOCATION'", - "'LOCK'", "'LOCKS'", "'LOGICAL'", "'MACRO'", "'MAP'", "'MATCHED'", "'MERGE'", - "'MSCK'", "'NAMESPACE'", "'NAMESPACES'", "'NATURAL'", "'NO'", undefined, - "'NULL'", "'NULLS'", "'OF'", "'ON'", "'ONLY'", "'OPTION'", "'OPTIONS'", + "'GENERATED'", "'GLOBAL'", "'GRANT'", "'GROUP'", "'GROUPING'", "'HAVING'", + "'X'", "'HOUR'", "'HOURS'", "'IDENTIFIER'", "'IF'", "'IGNORE'", "'IMPORT'", + "'IN'", "'INCLUDE'", "'INDEX'", "'INDEXES'", "'INNER'", "'INPATH'", "'INPUTFORMAT'", + "'INSERT'", "'INTERSECT'", "'INTERVAL'", "'INT'", "'INTEGER'", "'INTO'", + "'IS'", "'ITEMS'", "'JOIN'", "'KEYS'", "'LAST'", "'LATERAL'", "'LAZY'", + "'LEADING'", "'LEFT'", "'LIKE'", "'ILIKE'", "'LIMIT'", "'LINES'", "'LIST'", + "'LOAD'", "'LOCAL'", "'LOCATION'", "'LOCK'", "'LOCKS'", "'LOGICAL'", "'LONG'", + "'MACRO'", "'MAP'", "'MATCHED'", "'MERGE'", "'MICROSECOND'", "'MICROSECONDS'", + "'MILLISECOND'", "'MILLISECONDS'", "'MINUTE'", "'MINUTES'", "'MONTH'", + "'MONTHS'", "'MSCK'", "'NAME'", "'NAMESPACE'", "'NAMESPACES'", "'NANOSECOND'", + "'NANOSECONDS'", "'NATURAL'", "'NO'", undefined, "'NULL'", "'NULLS'", + "'NUMERIC'", "'OF'", "'OFFSET'", "'ON'", "'ONLY'", "'OPTION'", "'OPTIONS'", "'OR'", "'ORDER'", "'OUT'", "'OUTER'", "'OUTPUTFORMAT'", "'OVER'", "'OVERLAPS'", "'OVERLAY'", "'OVERWRITE'", "'PARTITION'", "'PARTITIONED'", "'PARTITIONS'", - "'PERCENT'", "'PIVOT'", "'PLACING'", "'POSITION'", "'PRECEDING'", "'PRIMARY'", - "'PRINCIPALS'", "'PROPERTIES'", "'PURGE'", "'QUERY'", "'RANGE'", "'RECORDREADER'", + "'PERCENTILE_CONT'", "'PERCENTILE_DISC'", "'PERCENT'", "'PIVOT'", "'PLACING'", + "'POSITION'", "'PRECEDING'", "'PRIMARY'", "'PRINCIPALS'", "'PROPERTIES'", + "'PURGE'", "'QUARTER'", "'QUERY'", "'RANGE'", "'REAL'", "'RECORDREADER'", "'RECORDWRITER'", "'RECOVER'", "'REDUCE'", "'REFERENCES'", "'REFRESH'", - "'RENAME'", "'REPAIR'", "'REPLACE'", "'RESET'", "'RESTRICT'", "'REVOKE'", - "'RIGHT'", undefined, "'ROLE'", "'ROLES'", "'ROLLBACK'", "'ROLLUP'", "'ROW'", - "'ROWS'", "'SCHEMA'", "'SELECT'", "'SEMI'", "'SEPARATED'", "'SERDE'", - "'SERDEPROPERTIES'", "'SESSION_USER'", "'SET'", "'MINUS'", "'SETS'", "'SHOW'", - "'SKEWED'", "'SOME'", "'SORT'", "'SORTED'", "'START'", "'STATISTICS'", - "'STORED'", "'STRATIFY'", "'STRUCT'", "'SUBSTR'", "'SUBSTRING'", "'TABLE'", - "'TABLES'", "'TABLESAMPLE'", "'TBLPROPERTIES'", undefined, "'TERMINATED'", - "'THEN'", "'TIME'", "'TO'", "'TOUCH'", "'TRAILING'", "'TRANSACTION'", - "'TRANSACTIONS'", "'TRANSFORM'", "'TRIM'", "'TRUE'", "'TRUNCATE'", "'TYPE'", - "'UNARCHIVE'", "'UNBOUNDED'", "'UNCACHE'", "'UNION'", "'UNIQUE'", "'UNKNOWN'", - "'UNLOCK'", "'UNSET'", "'UPDATE'", "'USE'", "'USER'", "'USING'", "'VALUES'", - "'VIEW'", "'VIEWS'", "'WHEN'", "'WHERE'", "'WINDOW'", "'WITH'", "'ZONE'", - undefined, "'<=>'", "'<>'", "'!='", "'<'", undefined, "'>'", undefined, - "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "'&'", "'|'", "'||'", "'^'", - "';'", + "'RENAME'", "'REPAIR'", "'REPEATABLE'", "'REPLACE'", "'RESET'", "'RESPECT'", + "'RESTRICT'", "'REVOKE'", "'RIGHT'", undefined, "'ROLE'", "'ROLES'", "'ROLLBACK'", + "'ROLLUP'", "'ROW'", "'ROWS'", "'SECOND'", "'SECONDS'", "'SCHEMA'", "'SCHEMAS'", + "'SELECT'", "'SEMI'", "'SEPARATED'", "'SERDE'", "'SERDEPROPERTIES'", "'SESSION_USER'", + "'SET'", "'MINUS'", "'SETS'", "'SHORT'", "'SHOW'", "'SINGLE'", "'SKEWED'", + "'SMALLINT'", "'SOME'", "'SORT'", "'SORTED'", "'SOURCE'", "'START'", "'STATISTICS'", + "'STORED'", "'STRATIFY'", "'STRING'", "'STRUCT'", "'SUBSTR'", "'SUBSTRING'", + "'SYNC'", "'SYSTEM_TIME'", "'SYSTEM_VERSION'", "'TABLE'", "'TABLES'", + "'TABLESAMPLE'", "'TARGET'", "'TBLPROPERTIES'", undefined, "'TERMINATED'", + "'THEN'", "'TIME'", "'TIMEDIFF'", "'TIMESTAMP'", "'TIMESTAMP_LTZ'", "'TIMESTAMP_NTZ'", + "'TIMESTAMPADD'", "'TIMESTAMPDIFF'", "'TINYINT'", "'TO'", "'TOUCH'", "'TRAILING'", + "'TRANSACTION'", "'TRANSACTIONS'", "'TRANSFORM'", "'TRIM'", "'TRUE'", + "'TRUNCATE'", "'TRY_CAST'", "'TYPE'", "'UNARCHIVE'", "'UNBOUNDED'", "'UNCACHE'", + "'UNION'", "'UNIQUE'", "'UNKNOWN'", "'UNLOCK'", "'UNPIVOT'", "'UNSET'", + "'UPDATE'", "'USE'", "'USER'", "'USING'", "'VALUES'", "'VARCHAR'", "'VAR'", + "'VARIABLE'", "'VERSION'", "'VIEW'", "'VIEWS'", "'VOID'", "'WEEK'", "'WEEKS'", + "'WHEN'", "'WHERE'", "'WINDOW'", "'WITH'", "'WITHIN'", "'YEAR'", "'YEARS'", + "'ZONE'", undefined, "'<=>'", "'<>'", "'!='", "'<'", undefined, "'>'", + undefined, "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "'&'", "'|'", "'||'", + "'^'", "':'", "'->'", "'=>'", "'/*+'", "'*/'", "'?'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, "ADD", "AFTER", "ALL", "ALTER", - "ANALYZE", "AND", "ANTI", "ANY", "ARCHIVE", "ARRAY", "AS", "ASC", "AT", - "AUTHORIZATION", "BETWEEN", "BOTH", "BUCKET", "BUCKETS", "BY", "CACHE", - "CASCADE", "CASE", "CAST", "CHANGE", "CHECK", "CLEAR", "CLUSTER", "CLUSTERED", - "CODEGEN", "COLLATE", "COLLECTION", "COLUMN", "COLUMNS", "COMMENT", "COMMIT", - "COMPACT", "COMPACTIONS", "COMPUTE", "CONCATENATE", "CONSTRAINT", "COST", - "CREATE", "CROSS", "CUBE", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", - "CURRENT_TIMESTAMP", "CURRENT_USER", "DATA", "DATABASE", "DATABASES", - "DBPROPERTIES", "DEFINED", "DELETE", "DELIMITED", "DESC", "DESCRIBE", - "DFS", "DIRECTORIES", "DIRECTORY", "DISTINCT", "DISTRIBUTE", "DIV", "DROP", - "ELSE", "END", "ESCAPE", "ESCAPED", "EXCEPT", "EXCHANGE", "EXISTS", "EXPLAIN", - "EXPORT", "EXTENDED", "EXTERNAL", "EXTRACT", "FALSE", "FETCH", "FIELDS", - "FILTER", "FILEFORMAT", "FIRST", "FOLLOWING", "FOR", "FOREIGN", "FORMAT", - "FORMATTED", "FROM", "FULL", "FUNCTION", "FUNCTIONS", "GLOBAL", "GRANT", - "GROUP", "GROUPING", "HAVING", "IF", "IGNORE", "IMPORT", "IN", "INDEX", - "INDEXES", "INNER", "INPATH", "INPUTFORMAT", "INSERT", "INTERSECT", "INTERVAL", - "INTO", "IS", "ITEMS", "JOIN", "KEYS", "LAST", "LATERAL", "LAZY", "LEADING", - "LEFT", "LIKE", "LIMIT", "LINES", "LIST", "LOAD", "LOCAL", "LOCATION", - "LOCK", "LOCKS", "LOGICAL", "MACRO", "MAP", "MATCHED", "MERGE", "MSCK", - "NAMESPACE", "NAMESPACES", "NATURAL", "NO", "NOT", "NULL", "NULLS", "OF", - "ON", "ONLY", "OPTION", "OPTIONS", "OR", "ORDER", "OUT", "OUTER", "OUTPUTFORMAT", - "OVER", "OVERLAPS", "OVERLAY", "OVERWRITE", "PARTITION", "PARTITIONED", - "PARTITIONS", "PERCENTLIT", "PIVOT", "PLACING", "POSITION", "PRECEDING", - "PRIMARY", "PRINCIPALS", "PROPERTIES", "PURGE", "QUERY", "RANGE", "RECORDREADER", - "RECORDWRITER", "RECOVER", "REDUCE", "REFERENCES", "REFRESH", "RENAME", - "REPAIR", "REPLACE", "RESET", "RESTRICT", "REVOKE", "RIGHT", "RLIKE", - "ROLE", "ROLES", "ROLLBACK", "ROLLUP", "ROW", "ROWS", "SCHEMA", "SELECT", - "SEMI", "SEPARATED", "SERDE", "SERDEPROPERTIES", "SESSION_USER", "SET", - "SETMINUS", "SETS", "SHOW", "SKEWED", "SOME", "SORT", "SORTED", "START", - "STATISTICS", "STORED", "STRATIFY", "STRUCT", "SUBSTR", "SUBSTRING", "TABLE", - "TABLES", "TABLESAMPLE", "TBLPROPERTIES", "TEMPORARY", "TERMINATED", "THEN", - "TIME", "TO", "TOUCH", "TRAILING", "TRANSACTION", "TRANSACTIONS", "TRANSFORM", - "TRIM", "TRUE", "TRUNCATE", "TYPE", "UNARCHIVE", "UNBOUNDED", "UNCACHE", - "UNION", "UNIQUE", "UNKNOWN", "UNLOCK", "UNSET", "UPDATE", "USE", "USER", - "USING", "VALUES", "VIEW", "VIEWS", "WHEN", "WHERE", "WINDOW", "WITH", - "ZONE", "EQ", "NSEQ", "NEQ", "NEQJ", "LT", "LTE", "GT", "GTE", "PLUS", - "MINUS", "ASTERISK", "SLASH", "PERCENT", "TILDE", "AMPERSAND", "PIPE", - "CONCAT_PIPE", "HAT", "SEMICOLON", "STRING", "BIGINT_LITERAL", "SMALLINT_LITERAL", - "TINYINT_LITERAL", "INTEGER_VALUE", "EXPONENT_VALUE", "DECIMAL_VALUE", - "FLOAT_LITERAL", "DOUBLE_LITERAL", "BIGDECIMAL_LITERAL", "IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "CUSTOM_VARS", "SIMPLE_COMMENT", "BRACKETED_COMMENT", - "WS", "UNRECOGNIZED", + undefined, "SEMICOLON", "LEFT_PAREN", "RIGHT_PAREN", "COMMA", "DOT", "LEFT_BRACKET", + "RIGHT_BRACKET", "KW_ADD", "KW_AFTER", "KW_ALL", "KW_ALTER", "KW_ALWAYS", + "KW_ANALYZE", "KW_AND", "KW_ANTI", "KW_ANY", "KW_ANY_VALUE", "KW_ARCHIVE", + "KW_ARRAY", "KW_AS", "KW_ASC", "KW_AT", "KW_AUTHORIZATION", "KW_BETWEEN", + "KW_BIGINT", "KW_BINARY", "KW_BOOLEAN", "KW_BOTH", "KW_BUCKET", "KW_BUCKETS", + "KW_BY", "KW_BYTE", "KW_CACHE", "KW_CASCADE", "KW_CASE", "KW_CAST", "KW_CATALOG", + "KW_CATALOGS", "KW_CHANGE", "KW_CHAR", "KW_CHARACTER", "KW_CHECK", "KW_CLEAR", + "KW_CLUSTER", "KW_CLUSTERED", "KW_CODEGEN", "KW_COLLATE", "KW_COLLECTION", + "KW_COLUMN", "KW_COLUMNS", "KW_COMMENT", "KW_COMMIT", "KW_COMPACT", "KW_COMPACTIONS", + "KW_COMPUTE", "KW_CONCATENATE", "KW_CONSTRAINT", "KW_COST", "KW_CREATE", + "KW_CROSS", "KW_CUBE", "KW_CURRENT", "KW_CURRENT_DATE", "KW_CURRENT_TIME", + "KW_CURRENT_TIMESTAMP", "KW_CURRENT_USER", "KW_DAY", "KW_DAYS", "KW_DAYOFYEAR", + "KW_DATA", "KW_DATE", "KW_DATABASE", "KW_DATABASES", "KW_DATEADD", "KW_DATE_ADD", + "KW_DATEDIFF", "KW_DATE_DIFF", "KW_DBPROPERTIES", "KW_DEC", "KW_DECIMAL", + "KW_DECLARE", "KW_DEFAULT", "KW_DEFINED", "KW_DELETE", "KW_DELIMITED", + "KW_DESC", "KW_DESCRIBE", "KW_DFS", "KW_DIRECTORIES", "KW_DIRECTORY", + "KW_DISTINCT", "KW_DISTRIBUTE", "KW_DIV", "KW_DOUBLE", "KW_DROP", "KW_ELSE", + "KW_END", "KW_ESCAPE", "KW_ESCAPED", "KW_EXCEPT", "KW_EXCHANGE", "KW_EXCLUDE", + "KW_EXISTS", "KW_EXPLAIN", "KW_EXPORT", "KW_EXTENDED", "KW_EXTERNAL", + "KW_EXTRACT", "KW_FALSE", "KW_FETCH", "KW_FIELDS", "KW_FILTER", "KW_FILEFORMAT", + "KW_FIRST", "KW_FLOAT", "KW_FOLLOWING", "KW_FOR", "KW_FOREIGN", "KW_FORMAT", + "KW_FORMATTED", "KW_FROM", "KW_FULL", "KW_FUNCTION", "KW_FUNCTIONS", "KW_GENERATED", + "KW_GLOBAL", "KW_GRANT", "KW_GROUP", "KW_GROUPING", "KW_HAVING", "KW_BINARY_HEX", + "KW_HOUR", "KW_HOURS", "KW_IDENTIFIER_KW", "KW_IF", "KW_IGNORE", "KW_IMPORT", + "KW_IN", "KW_INCLUDE", "KW_INDEX", "KW_INDEXES", "KW_INNER", "KW_INPATH", + "KW_INPUTFORMAT", "KW_INSERT", "KW_INTERSECT", "KW_INTERVAL", "KW_INT", + "KW_INTEGER", "KW_INTO", "KW_IS", "KW_ITEMS", "KW_JOIN", "KW_KEYS", "KW_LAST", + "KW_LATERAL", "KW_LAZY", "KW_LEADING", "KW_LEFT", "KW_LIKE", "KW_ILIKE", + "KW_LIMIT", "KW_LINES", "KW_LIST", "KW_LOAD", "KW_LOCAL", "KW_LOCATION", + "KW_LOCK", "KW_LOCKS", "KW_LOGICAL", "KW_LONG", "KW_MACRO", "KW_MAP", + "KW_MATCHED", "KW_MERGE", "KW_MICROSECOND", "KW_MICROSECONDS", "KW_MILLISECOND", + "KW_MILLISECONDS", "KW_MINUTE", "KW_MINUTES", "KW_MONTH", "KW_MONTHS", + "KW_MSCK", "KW_NAME", "KW_NAMESPACE", "KW_NAMESPACES", "KW_NANOSECOND", + "KW_NANOSECONDS", "KW_NATURAL", "KW_NO", "KW_NOT", "KW_NULL", "KW_NULLS", + "KW_NUMERIC", "KW_OF", "KW_OFFSET", "KW_ON", "KW_ONLY", "KW_OPTION", "KW_OPTIONS", + "KW_OR", "KW_ORDER", "KW_OUT", "KW_OUTER", "KW_OUTPUTFORMAT", "KW_OVER", + "KW_OVERLAPS", "KW_OVERLAY", "KW_OVERWRITE", "KW_PARTITION", "KW_PARTITIONED", + "KW_PARTITIONS", "KW_PERCENTILE_CONT", "KW_PERCENTILE_DISC", "KW_PERCENTLIT", + "KW_PIVOT", "KW_PLACING", "KW_POSITION", "KW_PRECEDING", "KW_PRIMARY", + "KW_PRINCIPALS", "KW_PROPERTIES", "KW_PURGE", "KW_QUARTER", "KW_QUERY", + "KW_RANGE", "KW_REAL", "KW_RECORDREADER", "KW_RECORDWRITER", "KW_RECOVER", + "KW_REDUCE", "KW_REFERENCES", "KW_REFRESH", "KW_RENAME", "KW_REPAIR", + "KW_REPEATABLE", "KW_REPLACE", "KW_RESET", "KW_RESPECT", "KW_RESTRICT", + "KW_REVOKE", "KW_RIGHT", "KW_RLIKE", "KW_ROLE", "KW_ROLES", "KW_ROLLBACK", + "KW_ROLLUP", "KW_ROW", "KW_ROWS", "KW_SECOND", "KW_SECONDS", "KW_SCHEMA", + "KW_SCHEMAS", "KW_SELECT", "KW_SEMI", "KW_SEPARATED", "KW_SERDE", "KW_SERDEPROPERTIES", + "KW_SESSION_USER", "KW_SET", "KW_SETMINUS", "KW_SETS", "KW_SHORT", "KW_SHOW", + "KW_SINGLE", "KW_SKEWED", "KW_SMALLINT", "KW_SOME", "KW_SORT", "KW_SORTED", + "KW_SOURCE", "KW_START", "KW_STATISTICS", "KW_STORED", "KW_STRATIFY", + "KW_STRING", "KW_STRUCT", "KW_SUBSTR", "KW_SUBSTRING", "KW_SYNC", "KW_SYSTEM_TIME", + "KW_SYSTEM_VERSION", "KW_TABLE", "KW_TABLES", "KW_TABLESAMPLE", "KW_TARGET", + "KW_TBLPROPERTIES", "KW_TEMPORARY", "KW_TERMINATED", "KW_THEN", "KW_TIME", + "KW_TIMEDIFF", "KW_TIMESTAMP", "KW_TIMESTAMP_LTZ", "KW_TIMESTAMP_NTZ", + "KW_TIMESTAMPADD", "KW_TIMESTAMPDIFF", "KW_TINYINT", "KW_TO", "KW_TOUCH", + "KW_TRAILING", "KW_TRANSACTION", "KW_TRANSACTIONS", "KW_TRANSFORM", "KW_TRIM", + "KW_TRUE", "KW_TRUNCATE", "KW_TRY_CAST", "KW_TYPE", "KW_UNARCHIVE", "KW_UNBOUNDED", + "KW_UNCACHE", "KW_UNION", "KW_UNIQUE", "KW_UNKNOWN", "KW_UNLOCK", "KW_UNPIVOT", + "KW_UNSET", "KW_UPDATE", "KW_USE", "KW_USER", "KW_USING", "KW_VALUES", + "KW_VARCHAR", "KW_VAR", "KW_VARIABLE", "KW_VERSION", "KW_VIEW", "KW_VIEWS", + "KW_VOID", "KW_WEEK", "KW_WEEKS", "KW_WHEN", "KW_WHERE", "KW_WINDOW", + "KW_WITH", "KW_WITHIN", "KW_YEAR", "KW_YEARS", "KW_ZONE", "EQ", "NSEQ", + "NEQ", "NEQJ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", "TILDE", "AMPERSAND", "PIPE", "CONCAT_PIPE", "HAT", + "COLON", "ARROW", "FAT_ARROW", "HENT_START", "HENT_END", "QUESTION", "STRING_LITERAL", + "DOUBLEQUOTED_STRING", "BIGINT_LITERAL", "SMALLINT_LITERAL", "TINYINT_LITERAL", + "INTEGER_VALUE", "EXPONENT_VALUE", "DECIMAL_VALUE", "FLOAT_LITERAL", "DOUBLE_LITERAL", + "BIGDECIMAL_LITERAL", "IDENTIFIER", "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", + "BRACKETED_COMMENT", "WS", "UNRECOGNIZED", ]; public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(SparkSqlLexer._LITERAL_NAMES, SparkSqlLexer._SYMBOLIC_NAMES, []); @@ -469,38 +621,20 @@ export class SparkSqlLexer extends Lexer { // tslint:enable:no-trailing-whitespace - /** - * Verify whether current token is a valid decimal token (which contains dot). - * Returns true if the character that follows the token is not a digit or letter or underscore. - * - * For example: - * For char stream "2.3", "2." is not a valid decimal token, because it is followed by digit '3'. - * For char stream "2.3_", "2.3" is not a valid decimal token, because it is followed by '_'. - * For char stream "2.3W", "2.3" is not a valid decimal token, because it is followed by 'W'. - * For char stream "12.0D 34.E2+0.12 " 12.0D is a valid decimal token because it is followed - * by a space. 34.E2 is a valid decimal token because it is followed by symbol '+' - * which is not a digit or letter or underscore. - */ - isValidDecimal() { - let nextChar = this.fromCodePoint(this._input.LA(1)); - return !(nextChar >= 'A' && nextChar <= 'Z' || nextChar >= '0' && nextChar <= '9' || nextChar == '_') - } + /** + * When true, parser should throw ParseException for unclosed bracketed comment. + */ + public has_unclosed_bracketed_comment = false; - /** - * This method will be called when we see '/*' and try to match it as a bracketed comment. - * If the next character is '+', it should be parsed as hint later, and we cannot match - * it as a bracketed comment. - * - * Returns true if the next character is '+'. - */ - isHint() { - let nextChar = this.fromCodePoint(this._input.LA(1)); - return nextChar == '+' - } - - fromCodePoint(codePoint) { - return String.fromCodePoint(codePoint); - } + /** + * This method will be called when the character stream ends and try to find out the + * unclosed bracketed comment. + * If the method be called, it means the end of the entire character stream match, + * and we set the flag and fail later. + */ + public markUnclosedComment() { + this.has_unclosed_bracketed_comment = true; + } constructor(input: CharStream) { @@ -509,7 +643,7 @@ export class SparkSqlLexer extends Lexer { } // @Override - public get grammarFileName(): string { return "SparkSql.g4"; } + public get grammarFileName(): string { return "SparkSqlLexer.g4"; } // @Override public get ruleNames(): string[] { return SparkSqlLexer.ruleNames; } @@ -524,74 +658,24 @@ export class SparkSqlLexer extends Lexer { public get modeNames(): string[] { return SparkSqlLexer.modeNames; } // @Override - public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { + public action(_localctx: RuleContext, ruleIndex: number, actionIndex: number): void { switch (ruleIndex) { - case 283: - return this.EXPONENT_VALUE_sempred(_localctx, predIndex); - - case 284: - return this.DECIMAL_VALUE_sempred(_localctx, predIndex); - - case 285: - return this.FLOAT_LITERAL_sempred(_localctx, predIndex); - - case 286: - return this.DOUBLE_LITERAL_sempred(_localctx, predIndex); - - case 287: - return this.BIGDECIMAL_LITERAL_sempred(_localctx, predIndex); - - case 296: - return this.BRACKETED_COMMENT_sempred(_localctx, predIndex); + case 383: + this.BRACKETED_COMMENT_action(_localctx, actionIndex); + break; } - return true; } - private EXPONENT_VALUE_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { + private BRACKETED_COMMENT_action(_localctx: RuleContext, actionIndex: number): void { + switch (actionIndex) { case 0: - return this.isValidDecimal(); - } - return true; - } - private DECIMAL_VALUE_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 1: - return this.isValidDecimal(); - } - return true; - } - private FLOAT_LITERAL_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 2: - return this.isValidDecimal(); - } - return true; - } - private DOUBLE_LITERAL_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 3: - return this.isValidDecimal(); - } - return true; - } - private BIGDECIMAL_LITERAL_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 4: - return this.isValidDecimal(); - } - return true; - } - private BRACKETED_COMMENT_sempred(_localctx: RuleContext, predIndex: number): boolean { - switch (predIndex) { - case 5: - return !this.isHint(); + this.markUnclosedComment(); + break; } - return true; } - private static readonly _serializedATNSegments: number = 5; + private static readonly _serializedATNSegments: number = 7; private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\u0129\u0AB6\b" + + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02\u0180\u0E22\b" + "\x01\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t" + "\x06\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04" + "\r\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12" + @@ -645,1300 +729,1764 @@ export class SparkSqlLexer extends Lexer { "\x04\u011F\t\u011F\x04\u0120\t\u0120\x04\u0121\t\u0121\x04\u0122\t\u0122" + "\x04\u0123\t\u0123\x04\u0124\t\u0124\x04\u0125\t\u0125\x04\u0126\t\u0126" + "\x04\u0127\t\u0127\x04\u0128\t\u0128\x04\u0129\t\u0129\x04\u012A\t\u012A" + - "\x04\u012B\t\u012B\x04\u012C\t\u012C\x03\x02\x03\x02\x03\x03\x03\x03\x03" + - "\x04\x03\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x06\x03\x06\x03\x07\x03" + - "\x07\x03\x07\x03\b\x03\b\x03\b\x03\t\x03\t\x03\n\x03\n\x03\v\x03\v\x03" + - "\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03\x0E\x03\x0E" + - "\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10" + - "\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x11\x03\x11" + - "\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13" + - "\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14" + - "\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16" + - "\x03\x16\x03\x17\x03\x17\x03\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x19" + - "\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" + - "\x03\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1C" + - "\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" + - "\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03\x1F" + - "\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03 \x03 \x03" + - " \x03 \x03 \x03!\x03!\x03!\x03!\x03!\x03\"\x03\"\x03\"\x03\"\x03\"\x03" + - "#\x03#\x03#\x03#\x03#\x03#\x03#\x03$\x03$\x03$\x03$\x03$\x03$\x03%\x03" + - "%\x03%\x03%\x03%\x03%\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03&\x03\'\x03" + - "\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03" + - "(\x03(\x03(\x03(\x03(\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03)\x03*\x03" + - "*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03+\x03+\x03+\x03+\x03" + - "+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x03-\x03-\x03" + - "-\x03-\x03-\x03-\x03-\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03/\x03/\x03" + - "/\x03/\x03/\x03/\x03/\x03/\x030\x030\x030\x030\x030\x030\x030\x030\x03" + - "0\x030\x030\x030\x031\x031\x031\x031\x031\x031\x031\x031\x032\x032\x03" + - "2\x032\x032\x032\x032\x032\x032\x032\x032\x032\x033\x033\x033\x033\x03" + - "3\x033\x033\x033\x033\x033\x033\x034\x034\x034\x034\x034\x035\x035\x03" + - "5\x035\x035\x035\x035\x036\x036\x036\x036\x036\x036\x037\x037\x037\x03" + - "7\x037\x038\x038\x038\x038\x038\x038\x038\x038\x039\x039\x039\x039\x03" + - "9\x039\x039\x039\x039\x039\x039\x039\x039\x03:\x03:\x03:\x03:\x03:\x03" + - ":\x03:\x03:\x03:\x03:\x03:\x03:\x03:\x03;\x03;\x03;\x03;\x03;\x03;\x03" + - ";\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03;\x03<\x03<\x03" + - "<\x03<\x03<\x03<\x03<\x03<\x03<\x03<\x03<\x03<\x03<\x03=\x03=\x03=\x03" + - "=\x03=\x03>\x03>\x03>\x03>\x03>\x03>\x03>\x03>\x03>\x03?\x03?\x03?\x03" + - "?\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x05?\u03FF" + - "\n?\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03" + + "\x04\u012B\t\u012B\x04\u012C\t\u012C\x04\u012D\t\u012D\x04\u012E\t\u012E" + + "\x04\u012F\t\u012F\x04\u0130\t\u0130\x04\u0131\t\u0131\x04\u0132\t\u0132" + + "\x04\u0133\t\u0133\x04\u0134\t\u0134\x04\u0135\t\u0135\x04\u0136\t\u0136" + + "\x04\u0137\t\u0137\x04\u0138\t\u0138\x04\u0139\t\u0139\x04\u013A\t\u013A" + + "\x04\u013B\t\u013B\x04\u013C\t\u013C\x04\u013D\t\u013D\x04\u013E\t\u013E" + + "\x04\u013F\t\u013F\x04\u0140\t\u0140\x04\u0141\t\u0141\x04\u0142\t\u0142" + + "\x04\u0143\t\u0143\x04\u0144\t\u0144\x04\u0145\t\u0145\x04\u0146\t\u0146" + + "\x04\u0147\t\u0147\x04\u0148\t\u0148\x04\u0149\t\u0149\x04\u014A\t\u014A" + + "\x04\u014B\t\u014B\x04\u014C\t\u014C\x04\u014D\t\u014D\x04\u014E\t\u014E" + + "\x04\u014F\t\u014F\x04\u0150\t\u0150\x04\u0151\t\u0151\x04\u0152\t\u0152" + + "\x04\u0153\t\u0153\x04\u0154\t\u0154\x04\u0155\t\u0155\x04\u0156\t\u0156" + + "\x04\u0157\t\u0157\x04\u0158\t\u0158\x04\u0159\t\u0159\x04\u015A\t\u015A" + + "\x04\u015B\t\u015B\x04\u015C\t\u015C\x04\u015D\t\u015D\x04\u015E\t\u015E" + + "\x04\u015F\t\u015F\x04\u0160\t\u0160\x04\u0161\t\u0161\x04\u0162\t\u0162" + + "\x04\u0163\t\u0163\x04\u0164\t\u0164\x04\u0165\t\u0165\x04\u0166\t\u0166" + + "\x04\u0167\t\u0167\x04\u0168\t\u0168\x04\u0169\t\u0169\x04\u016A\t\u016A" + + "\x04\u016B\t\u016B\x04\u016C\t\u016C\x04\u016D\t\u016D\x04\u016E\t\u016E" + + "\x04\u016F\t\u016F\x04\u0170\t\u0170\x04\u0171\t\u0171\x04\u0172\t\u0172" + + "\x04\u0173\t\u0173\x04\u0174\t\u0174\x04\u0175\t\u0175\x04\u0176\t\u0176" + + "\x04\u0177\t\u0177\x04\u0178\t\u0178\x04\u0179\t\u0179\x04\u017A\t\u017A" + + "\x04\u017B\t\u017B\x04\u017C\t\u017C\x04\u017D\t\u017D\x04\u017E\t\u017E" + + "\x04\u017F\t\u017F\x04\u0180\t\u0180\x04\u0181\t\u0181\x04\u0182\t\u0182" + + "\x04\u0183\t\u0183\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03\x04\x03" + + "\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\b\x03\b\x03\t\x03\t\x03" + + "\t\x03\t\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\v\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\r\x03\r\x03\r\x03\r\x03" + + "\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03" + + "\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03" + + "\x11\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03" + + "\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03" + + "\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03" + + "\x14\x03\x15\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03" + + "\x17\x03\x17\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03" + + "\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x18\x03\x19\x03\x19\x03" + + "\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03" + + "\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x03" + + "\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03" + + "\x1C\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1E\x03" + + "\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03" + + "\x1F\x03\x1F\x03\x1F\x03 \x03 \x03 \x03!\x03!\x03!\x03!\x03!\x03\"\x03" + + "\"\x03\"\x03\"\x03\"\x03\"\x03#\x03#\x03#\x03#\x03#\x03#\x03#\x03#\x03" + + "$\x03$\x03$\x03$\x03$\x03%\x03%\x03%\x03%\x03%\x03&\x03&\x03&\x03&\x03" + + "&\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'\x03\'" + + "\x03(\x03(\x03(\x03(\x03(\x03(\x03(\x03)\x03)\x03)\x03)\x03)\x03*\x03" + + "*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03+\x03+\x03+\x03+\x03+\x03" + + "+\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x03-\x03-\x03-\x03-\x03-\x03-\x03" + + "-\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03/\x03/\x03/\x03" + + "/\x03/\x03/\x03/\x03/\x030\x030\x030\x030\x030\x030\x030\x030\x031\x03" + + "1\x031\x031\x031\x031\x031\x031\x031\x031\x031\x032\x032\x032\x032\x03" + + "2\x032\x032\x033\x033\x033\x033\x033\x033\x033\x033\x034\x034\x034\x03" + + "4\x034\x034\x034\x034\x035\x035\x035\x035\x035\x035\x035\x036\x036\x03" + + "6\x036\x036\x036\x036\x036\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x038\x038\x038\x038\x038\x038\x038\x038\x039\x039\x03" + + "9\x039\x039\x039\x039\x039\x039\x039\x039\x039\x03:\x03:\x03:\x03:\x03" + + ":\x03:\x03:\x03:\x03:\x03:\x03:\x03;\x03;\x03;\x03;\x03;\x03<\x03<\x03" + + "<\x03<\x03<\x03<\x03<\x03=\x03=\x03=\x03=\x03=\x03=\x03>\x03>\x03>\x03" + + ">\x03>\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x03?\x03@\x03@\x03@\x03@\x03" + + "@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03A\x03A\x03A\x03A\x03A\x03" + "A\x03A\x03A\x03A\x03A\x03A\x03A\x03A\x03B\x03B\x03B\x03B\x03B\x03B\x03" + - "B\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03D\x03D\x03D\x03" + - "D\x03D\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03E\x03F\x03F\x03F\x03" + - "F\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03G\x03H\x03" + - "H\x03H\x03H\x03H\x03H\x03H\x03H\x03H\x03H\x03I\x03I\x03I\x03I\x03I\x03" + - "I\x03I\x03I\x03I\x03J\x03J\x03J\x03J\x03J\x03J\x03J\x03J\x03J\x03J\x03" + - "J\x03K\x03K\x03K\x03K\x03L\x03L\x03L\x03L\x03L\x03M\x03M\x03M\x03M\x03" + - "M\x03N\x03N\x03N\x03N\x03O\x03O\x03O\x03O\x03O\x03O\x03O\x03P\x03P\x03" + - "P\x03P\x03P\x03P\x03P\x03P\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03R\x03" + - "R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03S\x03S\x03S\x03S\x03S\x03S\x03" + - "S\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x03" + - "U\x03U\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x03" + - "W\x03W\x03W\x03W\x03W\x03W\x03X\x03X\x03X\x03X\x03X\x03X\x03X\x03X\x03" + - "Y\x03Y\x03Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03[\x03[\x03" + - "[\x03[\x03[\x03[\x03[\x03\\\x03\\\x03\\\x03\\\x03\\\x03\\\x03\\\x03]\x03" + - "]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03^\x03^\x03^\x03^\x03" + - "^\x03^\x03_\x03_\x03_\x03_\x03_\x03_\x03_\x03_\x03_\x03_\x03`\x03`\x03" + - "`\x03`\x03a\x03a\x03a\x03a\x03a\x03a\x03a\x03a\x03b\x03b\x03b\x03b\x03" + - "b\x03b\x03b\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03d\x03" + - "d\x03d\x03d\x03d\x03e\x03e\x03e\x03e\x03e\x03f\x03f\x03f\x03f\x03f\x03" + - "f\x03f\x03f\x03f\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03g\x03" + - "h\x03h\x03h\x03h\x03h\x03h\x03h\x03i\x03i\x03i\x03i\x03i\x03i\x03j\x03" + - "j\x03j\x03j\x03j\x03j\x03k\x03k\x03k\x03k\x03k\x03k\x03k\x03k\x03k\x03" + - "l\x03l\x03l\x03l\x03l\x03l\x03l\x03m\x03m\x03m\x03n\x03n\x03n\x03n\x03" + - "n\x03n\x03n\x03o\x03o\x03o\x03o\x03o\x03o\x03o\x03p\x03p\x03p\x03q\x03" + - "q\x03q\x03q\x03q\x03q\x03r\x03r\x03r\x03r\x03r\x03r\x03r\x03r\x03s\x03" + - "s\x03s\x03s\x03s\x03s\x03t\x03t\x03t\x03t\x03t\x03t\x03t\x03u\x03u\x03" + - "u\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03v\x03v\x03v\x03v\x03" + - "v\x03v\x03v\x03w\x03w\x03w\x03w\x03w\x03w\x03w\x03w\x03w\x03w\x03x\x03" + - "x\x03x\x03x\x03x\x03x\x03x\x03x\x03x\x03y\x03y\x03y\x03y\x03y\x03z\x03" + - "z\x03z\x03{\x03{\x03{\x03{\x03{\x03{\x03|\x03|\x03|\x03|\x03|\x03}\x03" + - "}\x03}\x03}\x03}\x03~\x03~\x03~\x03~\x03~\x03\x7F\x03\x7F\x03\x7F\x03" + - "\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x80\x03\x80\x03\x80\x03\x80\x03" + - "\x80\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03" + - "\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x83\x03\x83\x03\x83\x03\x83\x03" + - "\x83\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x85\x03\x85\x03" + - "\x85\x03\x85\x03\x85\x03\x85\x03\x86\x03\x86\x03\x86\x03\x86\x03\x86\x03" + - "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x88\x03\x88\x03\x88\x03\x88\x03" + - "\x88\x03\x88\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03" + - "\x89\x03\x89\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8B\x03\x8B\x03" + - "\x8B\x03\x8B\x03\x8B\x03\x8B\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x03" + - "\x8C\x03\x8C\x03\x8C\x03\x8D\x03\x8D\x03\x8D\x03\x8D\x03\x8D\x03\x8D\x03" + - "\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03" + - "\x8F\x03\x8F\x03\x8F\x03\x90\x03\x90\x03\x90\x03\x90\x03\x90\x03\x90\x03" + - "\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x92\x03\x92\x03\x92\x03\x92\x03" + - "\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x93\x03\x93\x03\x93\x03" + + "B\x03B\x03B\x03B\x03B\x03B\x03B\x03B\x03B\x03B\x03B\x03B\x03C\x03C\x03" + + "C\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03C\x03D\x03D\x03D\x03" + + "D\x03E\x03E\x03E\x03E\x03E\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03F\x03" + + "F\x03F\x03G\x03G\x03G\x03G\x03G\x03H\x03H\x03H\x03H\x03H\x03I\x03I\x03" + + "I\x03I\x03I\x03I\x03I\x03I\x03I\x03J\x03J\x03J\x03J\x03J\x03J\x03J\x03" + + "J\x03J\x03J\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03K\x03L\x03L\x03L\x03" + + "L\x03L\x03L\x03L\x03L\x03L\x03M\x03M\x03M\x03M\x03M\x03M\x03M\x03M\x03" + + "M\x03N\x03N\x03N\x03N\x03N\x03N\x03N\x03N\x03N\x03N\x03O\x03O\x03O\x03" + + "O\x03O\x03O\x03O\x03O\x03O\x03O\x03O\x03O\x03O\x03P\x03P\x03P\x03P\x03" + + "Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03Q\x03R\x03R\x03R\x03R\x03R\x03R\x03" + + "R\x03R\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03T\x03T\x03T\x03T\x03" + + "T\x03T\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x03U\x03U\x03V\x03V\x03V\x03" + + "V\x03V\x03V\x03V\x03V\x03V\x03V\x03W\x03W\x03W\x03W\x03W\x03X\x03X\x03" + + "X\x03X\x03X\x03X\x03X\x03X\x03X\x03Y\x03Y\x03Y\x03Y\x03Z\x03Z\x03Z\x03" + + "Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03Z\x03[\x03[\x03[\x03[\x03[\x03" + + "[\x03[\x03[\x03[\x03[\x03\\\x03\\\x03\\\x03\\\x03\\\x03\\\x03\\\x03\\" + + "\x03\\\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03]\x03^\x03" + + "^\x03^\x03^\x03_\x03_\x03_\x03_\x03_\x03_\x03_\x03`\x03`\x03`\x03`\x03" + + "`\x03a\x03a\x03a\x03a\x03a\x03b\x03b\x03b\x03b\x03c\x03c\x03c\x03c\x03" + + "c\x03c\x03c\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03e\x03e\x03e\x03" + + "e\x03e\x03e\x03e\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x03f\x03g\x03" + + "g\x03g\x03g\x03g\x03g\x03g\x03g\x03h\x03h\x03h\x03h\x03h\x03h\x03h\x03" + + "i\x03i\x03i\x03i\x03i\x03i\x03i\x03i\x03j\x03j\x03j\x03j\x03j\x03j\x03" + + "j\x03k\x03k\x03k\x03k\x03k\x03k\x03k\x03k\x03k\x03l\x03l\x03l\x03l\x03" + + "l\x03l\x03l\x03l\x03l\x03m\x03m\x03m\x03m\x03m\x03m\x03m\x03m\x03n\x03" + + "n\x03n\x03n\x03n\x03n\x03o\x03o\x03o\x03o\x03o\x03o\x03p\x03p\x03p\x03" + + "p\x03p\x03p\x03p\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03r\x03r\x03r\x03" + + "r\x03r\x03r\x03r\x03r\x03r\x03r\x03r\x03s\x03s\x03s\x03s\x03s\x03s\x03" + + "t\x03t\x03t\x03t\x03t\x03t\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03u\x03" + + "u\x03u\x03v\x03v\x03v\x03v\x03w\x03w\x03w\x03w\x03w\x03w\x03w\x03w\x03" + + "x\x03x\x03x\x03x\x03x\x03x\x03x\x03y\x03y\x03y\x03y\x03y\x03y\x03y\x03" + + "y\x03y\x03y\x03z\x03z\x03z\x03z\x03z\x03{\x03{\x03{\x03{\x03{\x03|\x03" + + "|\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03}\x03}\x03}\x03}\x03}\x03}\x03" + + "}\x03}\x03}\x03}\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03~\x03" + + "\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x7F\x03\x80\x03\x80\x03" + + "\x80\x03\x80\x03\x80\x03\x80\x03\x81\x03\x81\x03\x81\x03\x81\x03\x81\x03" + + "\x81\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03\x82\x03" + + "\x82\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x84\x03" + + "\x84\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x86\x03\x86\x03\x86\x03" + + "\x86\x03\x86\x03\x86\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x88\x03\x88\x03\x88\x03\x89\x03" + + "\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x8A\x03\x8A\x03\x8A\x03" + + "\x8A\x03\x8A\x03\x8A\x03\x8A\x03\x8B\x03\x8B\x03\x8B\x03\x8C\x03\x8C\x03" + + "\x8C\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x03\x8C\x03\x8D\x03\x8D\x03\x8D\x03" + + "\x8D\x03\x8D\x03\x8D\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03" + + "\x8E\x03\x8E\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x8F\x03\x90\x03" + + "\x90\x03\x90\x03\x90\x03\x90\x03\x90\x03\x90\x03\x91\x03\x91\x03\x91\x03" + + "\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03\x91\x03" + + "\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x92\x03\x93\x03\x93\x03" + "\x93\x03\x93\x03\x93\x03\x93\x03\x93\x03\x93\x03\x93\x03\x93\x03\x94\x03" + - "\x94\x03\x94\x03\x94\x03\x94\x03\x94\x03\x94\x03\x94\x03\x95\x03\x95\x03" + - "\x95\x03\x96\x03\x96\x03\x96\x03\x96\x05\x96\u0660\n\x96\x03\x97\x03\x97" + - "\x03\x97\x03\x97\x03\x97\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98" + - "\x03\x99\x03\x99\x03\x99\x03\x9A\x03\x9A\x03\x9A\x03\x9B\x03\x9B\x03\x9B" + - "\x03\x9B\x03\x9B\x03\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9C" + - "\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9E" + - "\x03\x9E\x03\x9E\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\xA0" + - "\x03\xA0\x03\xA0\x03\xA0\x03\xA1\x03\xA1\x03\xA1\x03\xA1\x03\xA1\x03\xA1" + - "\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2" + - "\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA3\x03\xA3\x03\xA3\x03\xA3\x03\xA3" + - "\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x03\xA4" + - "\x03\xA5\x03\xA5\x03\xA5\x03\xA5\x03\xA5\x03\xA5\x03\xA5\x03\xA5\x03\xA6" + - "\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA6" + - "\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7" + - "\x03\xA7\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA8" + - "\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9" + - "\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xAA\x03\xAA\x03\xAA" + - "\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAB\x03\xAB\x03\xAB\x03\xAB" + - "\x03\xAB\x03\xAB\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC\x03\xAC" + - "\x03\xAC\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03\xAD" + - "\x03\xAD\x03\xAE\x03\xAE\x03\xAE\x03\xAE\x03\xAE\x03\xAE\x03\xAE\x03\xAE" + - "\x03\xAE\x03\xAE\x03\xAF\x03\xAF\x03\xAF\x03\xAF\x03\xAF\x03\xAF\x03\xAF" + - "\x03\xAF\x03\xB0\x03\xB0\x03\xB0\x03\xB0\x03\xB0\x03\xB0\x03\xB0\x03\xB0" + - "\x03\xB0\x03\xB0\x03\xB0\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB1" + - "\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB2\x03\xB2\x03\xB2\x03\xB2" + - "\x03\xB2\x03\xB2\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB4" + - "\x03\xB4\x03\xB4\x03\xB4\x03\xB4\x03\xB4\x03\xB5\x03\xB5\x03\xB5\x03\xB5" + - "\x03\xB5\x03\xB5\x03\xB5\x03\xB5\x03\xB5\x03\xB5\x03\xB5\x03\xB5\x03\xB5" + - "\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6" + - "\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB7\x03\xB7\x03\xB7\x03\xB7\x03\xB7" + - "\x03\xB7\x03\xB7\x03\xB7\x03\xB8\x03\xB8\x03\xB8\x03\xB8\x03\xB8\x03\xB8" + - "\x03\xB8\x03\xB9\x03\xB9\x03\xB9\x03\xB9\x03\xB9\x03\xB9\x03\xB9\x03\xB9" + - "\x03\xB9\x03\xB9\x03\xB9\x03\xBA\x03\xBA\x03\xBA\x03\xBA\x03\xBA\x03\xBA" + - "\x03\xBA\x03\xBA\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBB" + - "\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBD\x03\xBD" + - "\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBE\x03\xBE\x03\xBE" + - "\x03\xBE\x03\xBE\x03\xBE\x03\xBF\x03\xBF\x03\xBF\x03\xBF\x03\xBF\x03\xBF" + - "\x03\xBF\x03\xBF\x03\xBF\x03\xC0\x03\xC0\x03\xC0\x03\xC0\x03\xC0\x03\xC0" + - "\x03\xC0\x03\xC1\x03\xC1\x03\xC1\x03\xC1\x03\xC1\x03\xC1\x03\xC2\x03\xC2" + - "\x03\xC2\x03\xC2\x03\xC2\x03\xC2\x03\xC2\x03\xC2\x03\xC2\x03\xC2\x03\xC2" + - "\x05\xC2\u07BA\n\xC2\x03\xC3\x03\xC3\x03\xC3\x03\xC3\x03\xC3\x03\xC4\x03" + - "\xC4\x03\xC4\x03\xC4\x03\xC4\x03\xC4\x03\xC5\x03\xC5\x03\xC5\x03\xC5\x03" + - "\xC5\x03\xC5\x03\xC5\x03\xC5\x03\xC5\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03" + - "\xC6\x03\xC6\x03\xC6\x03\xC7\x03\xC7\x03\xC7\x03\xC7\x03\xC8\x03\xC8\x03" + - "\xC8\x03\xC8\x03\xC8\x03\xC9\x03\xC9\x03\xC9\x03\xC9\x03\xC9\x03\xC9\x03" + - "\xC9\x03\xCA\x03\xCA\x03\xCA\x03\xCA\x03\xCA\x03\xCA\x03\xCA\x03\xCB\x03" + - "\xCB\x03\xCB\x03\xCB\x03\xCB\x03\xCC\x03\xCC\x03\xCC\x03\xCC\x03\xCC\x03" + - "\xCC\x03\xCC\x03\xCC\x03\xCC\x03\xCC\x03\xCD\x03\xCD\x03\xCD\x03\xCD\x03" + - "\xCD\x03\xCD\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03" + - "\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03" + - "\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03" + - "\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xD0\x03\xD0\x03\xD0\x03\xD0\x03\xD1\x03" + - "\xD1\x03\xD1\x03\xD1\x03\xD1\x03\xD1\x03\xD2\x03\xD2\x03\xD2\x03\xD2\x03" + - "\xD2\x03\xD3\x03\xD3\x03\xD3\x03\xD3\x03\xD3\x03\xD4\x03\xD4\x03\xD4\x03" + - "\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03" + - "\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03" + - "\xD7\x03\xD7\x03\xD7\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03" + - "\xD9\x03\xD9\x03\xD9\x03\xD9\x03\xD9\x03\xD9\x03\xD9\x03\xD9\x03\xD9\x03" + - "\xD9\x03\xD9\x03\xDA\x03\xDA\x03\xDA\x03\xDA\x03\xDA\x03\xDA\x03\xDA\x03" + - "\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03" + - "\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDD\x03\xDD\x03" + - "\xDD\x03\xDD\x03\xDD\x03\xDD\x03\xDD\x03\xDE\x03\xDE\x03\xDE\x03\xDE\x03" + - "\xDE\x03\xDE\x03\xDE\x03\xDE\x03\xDE\x03\xDE\x03\xDF\x03\xDF\x03\xDF\x03" + - "\xDF\x03\xDF\x03\xDF\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03" + - "\xE0\x03\xE1\x03\xE1\x03\xE1\x03\xE1\x03\xE1\x03\xE1\x03\xE1\x03\xE1\x03" + - "\xE1\x03\xE1\x03\xE1\x03\xE1\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03" + - "\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03" + - "\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03" + - "\xE3\x03\xE3\x03\xE3\x03\xE3\x05\xE3\u08B9\n\xE3\x03\xE4\x03\xE4\x03\xE4" + - "\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE5" + - "\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE6\x03\xE6\x03\xE6\x03\xE6\x03\xE6" + - "\x03\xE7\x03\xE7\x03\xE7\x03\xE8\x03\xE8\x03\xE8\x03\xE8\x03\xE8\x03\xE8" + - "\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xE9" + - "\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEA" + - "\x03\xEA\x03\xEA\x03\xEA\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEB" + - "\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEC\x03\xEC" + - "\x03\xEC\x03\xEC\x03\xEC\x03\xEC\x03\xEC\x03\xEC\x03\xEC\x03\xEC\x03\xED" + - "\x03\xED\x03\xED\x03\xED\x03\xED\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE" + - "\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF" + - "\x03\xF0\x03\xF0\x03\xF0\x03\xF0\x03\xF0\x03\xF1\x03\xF1\x03\xF1\x03\xF1" + - "\x03\xF1\x03\xF1\x03\xF1\x03\xF1\x03\xF1\x03\xF1\x03\xF2\x03\xF2\x03\xF2" + - "\x03\xF2\x03\xF2\x03\xF2\x03\xF2\x03\xF2\x03\xF2\x03\xF2\x03\xF3\x03\xF3" + - "\x03\xF3\x03\xF3\x03\xF3\x03\xF3\x03\xF3\x03\xF3\x03\xF4\x03\xF4\x03\xF4" + - "\x03\xF4\x03\xF4\x03\xF4\x03\xF5\x03\xF5\x03\xF5\x03\xF5\x03\xF5\x03\xF5" + - "\x03\xF5\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF6" + - "\x03\xF7\x03\xF7\x03\xF7\x03\xF7\x03\xF7\x03\xF7\x03\xF7\x03\xF8\x03\xF8" + - "\x03\xF8\x03\xF8\x03\xF8\x03\xF8\x03\xF9\x03\xF9\x03\xF9\x03\xF9\x03\xF9" + - "\x03\xF9\x03\xF9\x03\xFA\x03\xFA\x03\xFA\x03\xFA\x03\xFB\x03\xFB\x03\xFB" + - "\x03\xFB\x03\xFB\x03\xFC\x03\xFC\x03\xFC\x03\xFC\x03\xFC\x03\xFC\x03\xFD" + - "\x03\xFD\x03\xFD\x03\xFD\x03\xFD\x03\xFD\x03\xFD\x03\xFE\x03\xFE\x03\xFE" + - "\x03\xFE\x03\xFE\x03\xFF\x03\xFF\x03\xFF\x03\xFF\x03\xFF\x03\xFF\x03\u0100" + - "\x03\u0100\x03\u0100\x03\u0100\x03\u0100\x03\u0101\x03\u0101\x03\u0101" + - "\x03\u0101\x03\u0101\x03\u0101\x03\u0102\x03\u0102\x03\u0102\x03\u0102" + - "\x03\u0102\x03\u0102\x03\u0102\x03\u0103\x03\u0103\x03\u0103\x03\u0103" + - "\x03\u0103\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0105" + - "\x03\u0105\x03\u0105\x05\u0105\u09A2\n\u0105\x03\u0106\x03\u0106\x03\u0106" + - "\x03\u0106\x03\u0107\x03\u0107\x03\u0107\x03\u0108\x03\u0108\x03\u0108" + - "\x03\u0109\x03\u0109\x03\u010A\x03\u010A\x03\u010A\x03\u010A\x05\u010A" + - "\u09B4\n\u010A\x03\u010B\x03\u010B\x03\u010C\x03\u010C\x03\u010C\x03\u010C" + - "\x05\u010C\u09BC\n"; + "\x94\x03\x94\x03\x94\x03\x94\x03\x94\x03\x94\x03\x94\x03\x94\x03\x95\x03" + + "\x95\x03\x95\x03\x95\x03\x96\x03\x96\x03\x96\x03\x96\x03\x96\x03\x96\x03" + + "\x96\x03\x96\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x98\x03\x98\x03" + + "\x98\x03\x99\x03\x99\x03\x99\x03\x99\x03\x99\x03\x99\x03\x9A\x03\x9A\x03" + + "\x9A\x03\x9A\x03\x9A\x03\x9B\x03\x9B\x03\x9B\x03\x9B\x03\x9B\x03\x9C\x03" + + "\x9C\x03\x9C\x03\x9C\x03\x9C\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03\x9D\x03" + + "\x9D\x03\x9D\x03\x9D\x03\x9E\x03\x9E\x03\x9E\x03\x9E\x03\x9E\x03\x9F\x03" + + "\x9F\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x03\xA0\x03\xA0\x03" + + "\xA0\x03\xA0\x03\xA0\x03\xA1\x03\xA1\x03\xA1\x03\xA1\x03\xA1\x03\xA2\x03" + + "\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA3\x03\xA3\x03\xA3\x03\xA3\x03" + + "\xA3\x03\xA3\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x03\xA4\x03\xA5\x03" + + "\xA5\x03\xA5\x03\xA5\x03\xA5\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03" + + "\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA7\x03\xA8\x03\xA8\x03\xA8\x03" + + "\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA9\x03\xA9\x03\xA9\x03" + + "\xA9\x03\xA9\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAB\x03" + + "\xAB\x03\xAB\x03\xAB\x03\xAB\x03\xAB\x03\xAB\x03\xAB\x03\xAC\x03\xAC\x03" + + "\xAC\x03\xAC\x03\xAC\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03" + + "\xAE\x03\xAE\x03\xAE\x03\xAE\x03\xAF\x03\xAF\x03\xAF\x03\xAF\x03\xAF\x03" + + "\xAF\x03\xAF\x03\xAF\x03\xB0\x03\xB0\x03\xB0\x03\xB0\x03\xB0\x03\xB0\x03" + + "\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03\xB1\x03" + + "\xB1\x03\xB1\x03\xB1\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03" + + "\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB3\x03\xB3\x03" + + "\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03\xB3\x03" + + "\xB3\x03\xB4\x03\xB4\x03\xB4\x03\xB4\x03\xB4\x03\xB4\x03\xB4\x03\xB4\x03" + + "\xB4\x03\xB4\x03\xB4\x03\xB4\x03\xB4\x03\xB5\x03\xB5\x03\xB5\x03\xB5\x03" + + "\xB5\x03\xB5\x03\xB5\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03" + + "\xB6\x03\xB6\x03\xB7\x03\xB7\x03\xB7\x03\xB7\x03\xB7\x03\xB7\x03\xB8\x03" + + "\xB8\x03\xB8\x03\xB8\x03\xB8\x03\xB8\x03\xB8\x03\xB9\x03\xB9\x03\xB9\x03" + + "\xB9\x03\xB9\x03\xBA\x03\xBA\x03\xBA\x03\xBA\x03\xBA\x03\xBB\x03\xBB\x03" + + "\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBB\x03\xBC\x03" + + "\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03\xBC\x03" + + "\xBC\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03\xBD\x03" + + "\xBD\x03\xBD\x03\xBD\x03\xBE\x03\xBE\x03\xBE\x03\xBE\x03\xBE\x03\xBE\x03" + + "\xBE\x03\xBE\x03\xBE\x03\xBE\x03\xBE\x03\xBE\x03\xBF\x03\xBF\x03\xBF\x03" + + "\xBF\x03\xBF\x03\xBF\x03\xBF\x03\xBF\x03\xC0\x03\xC0\x03\xC0\x03\xC1\x03" + + "\xC1\x03\xC1\x03\xC1\x05\xC1\u0860\n\xC1\x03\xC2\x03\xC2\x03\xC2\x03\xC2" + + "\x03\xC2\x03\xC3\x03\xC3\x03\xC3\x03\xC3\x03\xC3\x03\xC3\x03\xC4\x03\xC4" + + "\x03\xC4\x03\xC4\x03\xC4\x03\xC4\x03\xC4\x03\xC4\x03\xC5\x03\xC5\x03\xC5" + + "\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC6\x03\xC7\x03\xC7" + + "\x03\xC7\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC8\x03\xC9\x03\xC9\x03\xC9" + + "\x03\xC9\x03\xC9\x03\xC9\x03\xC9\x03\xCA\x03\xCA\x03\xCA\x03\xCA\x03\xCA" + + "\x03\xCA\x03\xCA\x03\xCA\x03\xCB\x03\xCB\x03\xCB\x03\xCC\x03\xCC\x03\xCC" + + "\x03\xCC\x03\xCC\x03\xCC\x03\xCD\x03\xCD\x03\xCD\x03\xCD\x03\xCE\x03\xCE" + + "\x03\xCE\x03\xCE\x03\xCE\x03\xCE\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF" + + "\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xCF\x03\xD0" + + "\x03\xD0\x03\xD0\x03\xD0\x03\xD0\x03\xD1\x03\xD1\x03\xD1\x03\xD1\x03\xD1" + + "\x03\xD1\x03\xD1\x03\xD1\x03\xD1\x03\xD2\x03\xD2\x03\xD2\x03\xD2\x03\xD2" + + "\x03\xD2\x03\xD2\x03\xD2\x03\xD3\x03\xD3\x03\xD3\x03\xD3\x03\xD3\x03\xD3" + + "\x03\xD3\x03\xD3\x03\xD3\x03\xD3\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD4" + + "\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD4\x03\xD5\x03\xD5\x03\xD5\x03\xD5" + + "\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD5\x03\xD6" + + "\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD6\x03\xD6" + + "\x03\xD6\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7" + + "\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD7\x03\xD8" + + "\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8" + + "\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD8\x03\xD9\x03\xD9\x03\xD9" + + "\x03\xD9\x03\xD9\x03\xD9\x03\xD9\x03\xD9\x03\xDA\x03\xDA\x03\xDA\x03\xDA" + + "\x03\xDA\x03\xDA\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB\x03\xDB" + + "\x03\xDB\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC\x03\xDC" + + "\x03\xDC\x03\xDD\x03\xDD\x03\xDD\x03\xDD\x03\xDD\x03\xDD\x03\xDD\x03\xDD" + + "\x03\xDD\x03\xDD\x03\xDE\x03\xDE\x03\xDE\x03\xDE\x03\xDE\x03\xDE\x03\xDE" + + "\x03\xDE\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xDF\x03\xDF" + + "\x03\xDF\x03\xDF\x03\xDF\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE0" + + "\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE0\x03\xE1\x03\xE1\x03\xE1\x03\xE1" + + "\x03\xE1\x03\xE1\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2\x03\xE2" + + "\x03\xE2\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE3\x03\xE4\x03\xE4" + + "\x03\xE4\x03\xE4\x03\xE4\x03\xE4\x03\xE5\x03\xE5\x03\xE5\x03\xE5\x03\xE5" + + "\x03\xE6\x03\xE6\x03\xE6\x03\xE6\x03\xE6\x03\xE6\x03\xE6\x03\xE6\x03\xE6" + + "\x03\xE6\x03\xE6\x03\xE6\x03\xE6\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE7" + + "\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE7\x03\xE8" + + "\x03\xE8\x03\xE8\x03\xE8\x03\xE8\x03\xE8\x03\xE8\x03\xE8\x03\xE9\x03\xE9" + + "\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xE9\x03\xEA\x03\xEA\x03\xEA\x03\xEA" + + "\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEA\x03\xEB\x03\xEB" + + "\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEB\x03\xEC\x03\xEC\x03\xEC" + + "\x03\xEC\x03\xEC\x03\xEC\x03\xEC\x03"; private static readonly _serializedATNSegment1: string = - "\u010C\x03\u010D\x03\u010D\x03\u010E\x03\u010E\x03\u010F\x03\u010F\x03" + - "\u0110\x03\u0110\x03\u0111\x03\u0111\x03\u0112\x03\u0112\x03\u0113\x03" + - "\u0113\x03\u0114\x03\u0114\x03\u0115\x03\u0115\x03\u0115\x03\u0116\x03" + - "\u0116\x03\u0117\x03\u0117\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x07" + - "\u0118\u09D9\n\u0118\f\u0118\x0E\u0118\u09DC\v\u0118\x03\u0118\x03\u0118" + - "\x03\u0118\x03\u0118\x03\u0118\x07\u0118\u09E3\n\u0118\f\u0118\x0E\u0118" + - "\u09E6\v\u0118\x03\u0118\x05\u0118\u09E9\n\u0118\x03\u0119\x06\u0119\u09EC" + - "\n\u0119\r\u0119\x0E\u0119\u09ED\x03\u0119\x03\u0119\x03\u011A\x06\u011A" + - "\u09F3\n\u011A\r\u011A\x0E\u011A\u09F4\x03\u011A\x03\u011A\x03\u011B\x06" + - "\u011B\u09FA\n\u011B\r\u011B\x0E\u011B\u09FB\x03\u011B\x03\u011B\x03\u011C" + - "\x06\u011C\u0A01\n\u011C\r\u011C\x0E\u011C\u0A02\x03\u011D\x06\u011D\u0A06" + - "\n\u011D\r\u011D\x0E\u011D\u0A07\x03\u011D\x03\u011D\x03\u011D\x03\u011D" + - "\x03\u011D\x03\u011D\x05\u011D\u0A10\n\u011D\x03\u011E\x03\u011E\x03\u011E" + - "\x03\u011F\x06\u011F\u0A16\n\u011F\r\u011F\x0E\u011F\u0A17\x03\u011F\x05" + - "\u011F\u0A1B\n\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x05\u011F" + - "\u0A21\n\u011F\x03\u011F\x03\u011F\x03\u011F\x05\u011F\u0A26\n\u011F\x03" + - "\u0120\x06\u0120\u0A29\n\u0120\r\u0120\x0E\u0120\u0A2A\x03\u0120\x05\u0120" + - "\u0A2E\n\u0120\x03\u0120\x03\u0120\x03\u0120\x03\u0120\x05\u0120\u0A34" + - "\n\u0120\x03\u0120\x03\u0120\x03\u0120\x05\u0120\u0A39\n\u0120\x03\u0121" + - "\x06\u0121\u0A3C\n\u0121\r\u0121\x0E\u0121\u0A3D\x03\u0121\x05\u0121\u0A41" + - "\n\u0121\x03\u0121\x03\u0121\x03\u0121\x03\u0121\x03\u0121\x05\u0121\u0A48" + - "\n\u0121\x03\u0121\x03\u0121\x03\u0121\x03\u0121\x03\u0121\x05\u0121\u0A4F" + - "\n\u0121\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x06\u0122\u0A55\n\u0122" + - "\r\u0122\x0E\u0122\u0A56\x03\u0123\x03\u0123\x03\u0123\x03\u0123\x07\u0123" + - "\u0A5D\n\u0123\f\u0123\x0E\u0123\u0A60\v\u0123\x03\u0123\x03\u0123\x03" + - "\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0125\x06" + - "\u0125\u0A6B\n\u0125\r\u0125\x0E\u0125\u0A6C\x03\u0125\x03\u0125\x07\u0125" + - "\u0A71\n\u0125\f\u0125\x0E\u0125\u0A74\v\u0125\x03\u0125\x03\u0125\x06" + - "\u0125\u0A78\n\u0125\r\u0125\x0E\u0125\u0A79\x05\u0125\u0A7C\n\u0125\x03" + - "\u0126\x03\u0126\x05\u0126\u0A80\n\u0126\x03\u0126\x06\u0126\u0A83\n\u0126" + - "\r\u0126\x0E\u0126\u0A84\x03\u0127\x03\u0127\x03\u0128\x03\u0128\x03\u0129" + - "\x03\u0129\x03\u0129\x03\u0129\x03\u0129\x03\u0129\x07\u0129\u0A91\n\u0129" + - "\f\u0129\x0E\u0129\u0A94\v\u0129\x03\u0129\x05\u0129\u0A97\n\u0129\x03" + - "\u0129\x05\u0129\u0A9A\n\u0129\x03\u0129\x03\u0129\x03\u012A\x03\u012A" + - "\x03\u012A\x03\u012A\x03\u012A\x03\u012A\x07\u012A\u0AA4\n\u012A\f\u012A" + - "\x0E\u012A\u0AA7\v\u012A\x03\u012A\x03\u012A\x03\u012A\x03\u012A\x03\u012A" + - "\x03\u012B\x06\u012B\u0AAF\n\u012B\r\u012B\x0E\u012B\u0AB0\x03\u012B\x03" + - "\u012B\x03\u012C\x03\u012C\x03\u0AA5\x02\x02\u012D\x03\x02\x03\x05\x02" + - "\x04\x07\x02\x05\t\x02\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02" + - "\v\x15\x02\f\x17\x02\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11" + - "!\x02\x12#\x02\x13%\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02" + - "\x191\x02\x1A3\x02\x1B5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02" + - "!A\x02\"C\x02#E\x02$G\x02%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02," + - "W\x02-Y\x02.[\x02/]\x020_\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x02" + - "8o\x029q\x02:s\x02;u\x02{\x02?}\x02@\x7F\x02A\x81\x02B\x83" + - "\x02C\x85\x02D\x87\x02E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93" + - "\x02K\x95\x02L\x97\x02M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02R\xA3" + - "\x02S\xA5\x02T\xA7\x02U\xA9\x02V\xAB\x02W\xAD\x02X\xAF\x02Y\xB1\x02Z\xB3" + - "\x02[\xB5\x02\\\xB7\x02]\xB9\x02^\xBB\x02_\xBD\x02`\xBF\x02a\xC1\x02b" + - "\xC3\x02c\xC5\x02d\xC7\x02e\xC9\x02f\xCB\x02g\xCD\x02h\xCF\x02i\xD1\x02" + - "j\xD3\x02k\xD5\x02l\xD7\x02m\xD9\x02n\xDB\x02o\xDD\x02p\xDF\x02q\xE1\x02" + - "r\xE3\x02s\xE5\x02t\xE7\x02u\xE9\x02v\xEB\x02w\xED\x02x\xEF\x02y\xF1\x02" + - "z\xF3\x02{\xF5\x02|\xF7\x02}\xF9\x02~\xFB\x02\x7F\xFD\x02\x80\xFF\x02" + - "\x81\u0101\x02\x82\u0103\x02\x83\u0105\x02\x84\u0107\x02\x85\u0109\x02" + - "\x86\u010B\x02\x87\u010D\x02\x88\u010F\x02\x89\u0111\x02\x8A\u0113\x02" + - "\x8B\u0115\x02\x8C\u0117\x02\x8D\u0119\x02\x8E\u011B\x02\x8F\u011D\x02" + - "\x90\u011F\x02\x91\u0121\x02\x92\u0123\x02\x93\u0125\x02\x94\u0127\x02" + - "\x95\u0129\x02\x96\u012B\x02\x97\u012D\x02\x98\u012F\x02\x99\u0131\x02" + - "\x9A\u0133\x02\x9B\u0135\x02\x9C\u0137\x02\x9D\u0139\x02\x9E\u013B\x02" + - "\x9F\u013D\x02\xA0\u013F\x02\xA1\u0141\x02\xA2\u0143\x02\xA3\u0145\x02" + - "\xA4\u0147\x02\xA5\u0149\x02\xA6\u014B\x02\xA7\u014D\x02\xA8\u014F\x02" + - "\xA9\u0151\x02\xAA\u0153\x02\xAB\u0155\x02\xAC\u0157\x02\xAD\u0159\x02" + - "\xAE\u015B\x02\xAF\u015D\x02\xB0\u015F\x02\xB1\u0161\x02\xB2\u0163\x02" + - "\xB3\u0165\x02\xB4\u0167\x02\xB5\u0169\x02\xB6\u016B\x02\xB7\u016D\x02" + - "\xB8\u016F\x02\xB9\u0171\x02\xBA\u0173\x02\xBB\u0175\x02\xBC\u0177\x02" + - "\xBD\u0179\x02\xBE\u017B\x02\xBF\u017D\x02\xC0\u017F\x02\xC1\u0181\x02" + - "\xC2\u0183\x02\xC3\u0185\x02\xC4\u0187\x02\xC5\u0189\x02\xC6\u018B\x02" + - "\xC7\u018D\x02\xC8\u018F\x02\xC9\u0191\x02\xCA\u0193\x02\xCB\u0195\x02" + - "\xCC\u0197\x02\xCD\u0199\x02\xCE\u019B\x02\xCF\u019D\x02\xD0\u019F\x02" + - "\xD1\u01A1\x02\xD2\u01A3\x02\xD3\u01A5\x02\xD4\u01A7\x02\xD5\u01A9\x02" + - "\xD6\u01AB\x02\xD7\u01AD\x02\xD8\u01AF\x02\xD9\u01B1\x02\xDA\u01B3\x02" + - "\xDB\u01B5\x02\xDC\u01B7\x02\xDD\u01B9\x02\xDE\u01BB\x02\xDF\u01BD\x02" + - "\xE0\u01BF\x02\xE1\u01C1\x02\xE2\u01C3\x02\xE3\u01C5\x02\xE4\u01C7\x02" + - "\xE5\u01C9\x02\xE6\u01CB\x02\xE7\u01CD\x02\xE8\u01CF\x02\xE9\u01D1\x02" + - "\xEA\u01D3\x02\xEB\u01D5\x02\xEC\u01D7\x02\xED\u01D9\x02\xEE\u01DB\x02" + - "\xEF\u01DD\x02\xF0\u01DF\x02\xF1\u01E1\x02\xF2\u01E3\x02\xF3\u01E5\x02" + - "\xF4\u01E7\x02\xF5\u01E9\x02\xF6\u01EB\x02\xF7\u01ED\x02\xF8\u01EF\x02" + - "\xF9\u01F1\x02\xFA\u01F3\x02\xFB\u01F5\x02\xFC\u01F7\x02\xFD\u01F9\x02" + - "\xFE\u01FB\x02\xFF\u01FD\x02\u0100\u01FF\x02\u0101\u0201\x02\u0102\u0203" + - "\x02\u0103\u0205\x02\u0104\u0207\x02\u0105\u0209\x02\u0106\u020B\x02\u0107" + - "\u020D\x02\u0108\u020F\x02\u0109\u0211\x02\u010A\u0213\x02\u010B\u0215" + - "\x02\u010C\u0217\x02\u010D\u0219\x02\u010E\u021B\x02\u010F\u021D\x02\u0110" + - "\u021F\x02\u0111\u0221\x02\u0112\u0223\x02\u0113\u0225\x02\u0114\u0227" + - "\x02\u0115\u0229\x02\u0116\u022B\x02\u0117\u022D\x02\u0118\u022F\x02\u0119" + - "\u0231\x02\u011A\u0233\x02\u011B\u0235\x02\u011C\u0237\x02\u011D\u0239" + - "\x02\u011E\u023B\x02\u011F\u023D\x02\u0120\u023F\x02\u0121\u0241\x02\u0122" + - "\u0243\x02\u0123\u0245\x02\u0124\u0247\x02\u0125\u0249\x02\x02\u024B\x02" + - "\x02\u024D\x02\x02\u024F\x02\x02\u0251\x02\u0126\u0253\x02\u0127\u0255" + - "\x02\u0128\u0257\x02\u0129\x03\x02\n\x04\x02))^^\x04\x02$$^^\x03\x02b" + - "b\x04\x02--//\x03\x022;\x03\x02C\\\x04\x02\f\f\x0F\x0F\x05\x02\v\f\x0F" + - "\x0F\"\"\x02\u0AE2\x02\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02" + - "\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r" + - "\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13" + - "\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19" + - "\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F" + - "\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02" + - "\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02" + - "\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03" + - "\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02" + - "\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02" + - "A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02" + - "\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02" + - "\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03" + - "\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02" + - "\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02" + - "c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02" + - "\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02" + - "\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x02w\x03" + - "\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02\x02\x02}\x03\x02\x02" + - "\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02\x02\x02\x83\x03\x02\x02" + - "\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02\x02\x02\x89\x03\x02\x02" + - "\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02\x02\x02\x8F\x03\x02\x02" + - "\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02\x02\x02\x95\x03\x02\x02" + - "\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02\x02\x02\x9B\x03\x02\x02" + - "\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02\x02\x02\xA1\x03\x02\x02" + - "\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02\x02\x02\xA7\x03\x02\x02" + - "\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02\x02\x02\xAD\x03\x02\x02" + - "\x02\x02\xAF\x03\x02\x02\x02\x02\xB1\x03\x02\x02\x02\x02\xB3\x03\x02\x02" + - "\x02\x02\xB5\x03\x02\x02\x02\x02\xB7\x03\x02\x02\x02\x02\xB9\x03\x02\x02" + - "\x02\x02\xBB\x03\x02\x02\x02\x02\xBD\x03\x02\x02\x02\x02\xBF\x03\x02\x02" + - "\x02\x02\xC1\x03\x02\x02\x02\x02\xC3\x03\x02\x02\x02\x02\xC5\x03\x02\x02" + - "\x02\x02\xC7\x03\x02\x02\x02\x02\xC9\x03\x02\x02\x02\x02\xCB\x03\x02\x02" + - "\x02\x02\xCD\x03\x02\x02\x02\x02\xCF\x03\x02\x02\x02\x02\xD1\x03\x02\x02" + - "\x02\x02\xD3\x03\x02\x02\x02\x02\xD5\x03\x02\x02\x02\x02\xD7\x03\x02\x02" + - "\x02\x02\xD9\x03\x02\x02\x02\x02\xDB\x03\x02\x02\x02\x02\xDD\x03\x02\x02" + - "\x02\x02\xDF\x03\x02\x02\x02\x02\xE1\x03\x02\x02\x02\x02\xE3\x03\x02\x02" + - "\x02\x02\xE5\x03\x02\x02\x02\x02\xE7\x03\x02\x02\x02\x02\xE9\x03\x02\x02" + - "\x02\x02\xEB\x03\x02\x02\x02\x02\xED\x03\x02\x02\x02\x02\xEF\x03\x02\x02" + - "\x02\x02\xF1\x03\x02\x02\x02\x02\xF3\x03\x02\x02\x02\x02\xF5\x03\x02\x02" + - "\x02\x02\xF7\x03\x02\x02\x02\x02\xF9\x03\x02\x02\x02\x02\xFB\x03\x02\x02" + - "\x02\x02\xFD\x03\x02\x02\x02\x02\xFF\x03\x02\x02\x02\x02\u0101\x03\x02" + - "\x02\x02\x02\u0103\x03\x02\x02\x02\x02\u0105\x03\x02\x02\x02\x02\u0107" + - "\x03\x02\x02\x02\x02\u0109\x03\x02\x02\x02\x02\u010B\x03\x02\x02\x02\x02" + - "\u010D\x03\x02\x02\x02\x02\u010F\x03\x02\x02\x02\x02\u0111\x03\x02\x02" + - "\x02\x02\u0113\x03\x02\x02\x02\x02\u0115\x03\x02\x02\x02\x02\u0117\x03" + - "\x02\x02\x02\x02\u0119\x03\x02\x02\x02\x02\u011B\x03\x02\x02\x02\x02\u011D" + - "\x03\x02\x02\x02\x02\u011F\x03\x02\x02\x02\x02\u0121\x03\x02\x02\x02\x02" + - "\u0123\x03\x02\x02\x02\x02\u0125\x03\x02\x02\x02\x02\u0127\x03\x02\x02" + - "\x02\x02\u0129\x03\x02\x02\x02\x02\u012B\x03\x02\x02\x02\x02\u012D\x03" + - "\x02\x02\x02\x02\u012F\x03\x02\x02\x02\x02\u0131\x03\x02\x02\x02\x02\u0133" + - "\x03\x02\x02\x02\x02\u0135\x03\x02\x02\x02\x02\u0137\x03\x02\x02\x02\x02" + - "\u0139\x03\x02\x02\x02\x02\u013B\x03\x02\x02\x02\x02\u013D\x03\x02\x02" + - "\x02\x02\u013F\x03\x02\x02\x02\x02\u0141\x03\x02\x02\x02\x02\u0143\x03" + - "\x02\x02\x02\x02\u0145\x03\x02\x02\x02\x02\u0147\x03\x02\x02\x02\x02\u0149" + - "\x03\x02\x02\x02\x02\u014B\x03\x02\x02\x02\x02\u014D\x03\x02\x02\x02\x02" + - "\u014F\x03\x02\x02\x02\x02\u0151\x03\x02\x02\x02\x02\u0153\x03\x02\x02" + - "\x02\x02\u0155\x03\x02\x02\x02\x02\u0157\x03\x02\x02\x02\x02\u0159\x03" + - "\x02\x02\x02\x02\u015B\x03\x02\x02\x02\x02\u015D\x03\x02\x02\x02\x02\u015F" + - "\x03\x02\x02\x02\x02\u0161\x03\x02\x02\x02\x02\u0163\x03\x02\x02\x02\x02" + - "\u0165\x03\x02\x02\x02\x02\u0167\x03\x02\x02\x02\x02\u0169\x03\x02\x02" + - "\x02\x02\u016B\x03\x02\x02\x02\x02\u016D\x03\x02\x02\x02\x02\u016F\x03" + - "\x02\x02\x02\x02\u0171\x03\x02\x02\x02\x02\u0173\x03\x02\x02\x02\x02\u0175" + - "\x03\x02\x02\x02\x02\u0177\x03\x02\x02\x02\x02\u0179\x03\x02\x02\x02\x02" + - "\u017B\x03\x02\x02\x02\x02\u017D\x03\x02\x02\x02\x02\u017F\x03\x02\x02" + - "\x02\x02\u0181\x03\x02\x02\x02\x02\u0183\x03\x02\x02\x02\x02\u0185\x03" + - "\x02\x02\x02\x02\u0187\x03\x02\x02\x02\x02\u0189\x03\x02\x02\x02\x02\u018B" + - "\x03\x02\x02\x02\x02\u018D\x03\x02\x02\x02\x02\u018F\x03\x02\x02\x02\x02" + - "\u0191\x03\x02\x02\x02\x02\u0193\x03\x02\x02\x02\x02\u0195\x03\x02\x02" + - "\x02\x02\u0197\x03\x02\x02\x02\x02\u0199\x03\x02\x02\x02\x02\u019B\x03" + - "\x02\x02\x02\x02\u019D\x03\x02\x02\x02\x02\u019F\x03\x02\x02\x02\x02\u01A1" + - "\x03\x02\x02\x02\x02\u01A3\x03\x02\x02\x02\x02\u01A5\x03\x02\x02\x02\x02" + - "\u01A7\x03\x02\x02\x02\x02\u01A9\x03\x02\x02\x02\x02\u01AB\x03\x02\x02" + - "\x02\x02\u01AD\x03\x02\x02\x02\x02\u01AF\x03\x02\x02\x02\x02\u01B1\x03" + - "\x02\x02\x02\x02\u01B3\x03\x02\x02\x02\x02\u01B5\x03\x02\x02\x02\x02\u01B7" + - "\x03\x02\x02\x02\x02\u01B9\x03\x02\x02\x02\x02\u01BB\x03\x02\x02\x02\x02" + - "\u01BD\x03\x02\x02\x02\x02\u01BF\x03\x02\x02\x02\x02\u01C1\x03\x02\x02" + - "\x02\x02\u01C3\x03\x02\x02\x02\x02\u01C5\x03\x02\x02\x02\x02\u01C7\x03" + - "\x02\x02\x02\x02\u01C9\x03\x02\x02\x02\x02\u01CB\x03\x02\x02\x02\x02\u01CD" + - "\x03\x02\x02\x02\x02\u01CF\x03\x02\x02\x02\x02\u01D1\x03\x02\x02\x02\x02" + - "\u01D3\x03\x02\x02\x02\x02\u01D5\x03\x02\x02\x02\x02\u01D7\x03\x02\x02" + - "\x02\x02\u01D9\x03\x02\x02\x02\x02\u01DB\x03\x02\x02\x02\x02\u01DD\x03" + - "\x02\x02\x02\x02\u01DF\x03\x02\x02\x02\x02\u01E1\x03\x02\x02\x02\x02\u01E3" + - "\x03\x02\x02\x02\x02\u01E5\x03\x02\x02\x02\x02\u01E7\x03\x02\x02\x02\x02" + - "\u01E9\x03\x02\x02\x02\x02\u01EB\x03\x02\x02\x02\x02\u01ED\x03\x02\x02" + - "\x02\x02\u01EF\x03\x02\x02\x02\x02\u01F1\x03\x02\x02\x02\x02\u01F3\x03" + - "\x02\x02\x02\x02\u01F5\x03\x02\x02\x02\x02\u01F7\x03\x02\x02\x02\x02\u01F9" + - "\x03\x02\x02\x02\x02\u01FB\x03\x02\x02\x02\x02\u01FD\x03\x02\x02\x02\x02" + - "\u01FF\x03\x02\x02\x02\x02\u0201\x03\x02\x02\x02\x02\u0203\x03\x02\x02" + - "\x02\x02\u0205\x03\x02\x02\x02\x02\u0207\x03\x02\x02\x02\x02\u0209\x03" + - "\x02\x02\x02\x02\u020B\x03\x02\x02\x02\x02\u020D\x03\x02\x02\x02\x02\u020F" + - "\x03\x02\x02\x02\x02\u0211\x03\x02\x02\x02\x02\u0213\x03\x02\x02\x02\x02" + - "\u0215\x03\x02\x02\x02\x02\u0217\x03\x02\x02\x02\x02\u0219\x03\x02\x02" + - "\x02\x02\u021B\x03\x02\x02\x02\x02\u021D\x03\x02\x02\x02\x02\u021F\x03" + - "\x02\x02\x02\x02\u0221\x03\x02\x02\x02\x02\u0223\x03\x02\x02\x02\x02\u0225" + - "\x03\x02\x02\x02\x02\u0227\x03\x02\x02\x02\x02\u0229\x03\x02\x02\x02\x02" + - "\u022B\x03\x02\x02\x02\x02\u022D\x03\x02\x02\x02\x02\u022F\x03\x02\x02" + - "\x02\x02\u0231\x03\x02\x02\x02\x02\u0233\x03\x02\x02\x02\x02\u0235\x03" + - "\x02\x02\x02\x02\u0237\x03\x02\x02\x02\x02\u0239\x03\x02\x02\x02\x02\u023B" + - "\x03\x02\x02\x02\x02\u023D\x03\x02\x02\x02\x02\u023F\x03\x02\x02\x02\x02" + - "\u0241\x03\x02\x02\x02\x02\u0243\x03\x02\x02\x02\x02\u0245\x03\x02\x02" + - "\x02\x02\u0247\x03\x02\x02\x02\x02\u0251\x03\x02\x02\x02\x02\u0253\x03" + - "\x02\x02\x02\x02\u0255\x03\x02\x02\x02\x02\u0257\x03\x02\x02\x02\x03\u0259" + - "\x03\x02\x02\x02\x05\u025B\x03\x02\x02\x02\x07\u025D\x03\x02\x02\x02\t" + - "\u025F\x03\x02\x02\x02\v\u0261\x03\x02\x02\x02\r\u0265\x03\x02\x02\x02" + - "\x0F\u0268\x03\x02\x02\x02\x11\u026B\x03\x02\x02\x02\x13\u026D\x03\x02" + - "\x02\x02\x15\u026F\x03\x02\x02\x02\x17\u0271\x03\x02\x02\x02\x19\u0275" + - "\x03\x02\x02\x02\x1B\u027B\x03\x02\x02\x02\x1D\u027F\x03\x02\x02\x02\x1F" + - "\u0285\x03\x02\x02\x02!\u028D\x03\x02\x02\x02#\u0291\x03\x02\x02\x02%" + - "\u0296\x03\x02\x02\x02\'\u029A\x03\x02\x02\x02)\u02A2\x03\x02\x02\x02" + - "+\u02A8\x03\x02\x02\x02-\u02AB\x03\x02\x02\x02/\u02AF\x03\x02\x02\x02" + - "1\u02B2\x03\x02\x02\x023\u02C0\x03\x02\x02\x025\u02C8\x03\x02\x02\x02" + - "7\u02CD\x03\x02\x02\x029\u02D4\x03\x02\x02\x02;\u02DC\x03\x02\x02\x02" + - "=\u02DF\x03\x02\x02\x02?\u02E5\x03\x02\x02\x02A\u02ED\x03\x02\x02\x02" + - "C\u02F2\x03\x02\x02\x02E\u02F7\x03\x02\x02\x02G\u02FE\x03\x02\x02\x02" + - "I\u0304\x03\x02\x02\x02K\u030A\x03\x02\x02\x02M\u0312\x03\x02\x02\x02" + - "O\u031C\x03\x02\x02\x02Q\u0324\x03\x02\x02\x02S\u032C\x03\x02\x02\x02" + - "U\u0337\x03\x02\x02\x02W\u033E\x03\x02\x02\x02Y\u0346\x03\x02\x02\x02" + - "[\u034E\x03\x02\x02\x02]\u0355\x03\x02\x02\x02_\u035D\x03\x02\x02\x02" + - "a\u0369\x03\x02\x02\x02c\u0371\x03\x02\x02\x02e\u037D\x03\x02\x02\x02" + - "g\u0388\x03\x02\x02\x02i\u038D\x03\x02\x02\x02k\u0394\x03\x02\x02\x02" + - "m\u039A\x03\x02\x02\x02o\u039F\x03\x02\x02\x02q\u03A7\x03\x02\x02\x02" + - "s\u03B4\x03\x02\x02\x02u\u03C1\x03\x02\x02\x02w\u03D3\x03\x02\x02\x02" + - "y\u03E0\x03\x02\x02\x02{\u03E5\x03\x02\x02\x02}\u03FE\x03\x02\x02\x02" + - "\x7F\u0400\x03\x02\x02\x02\x81\u040D\x03\x02\x02\x02\x83\u0415\x03\x02" + - "\x02\x02\x85\u041C\x03\x02\x02\x02\x87\u0426\x03\x02\x02\x02\x89\u042B" + - "\x03\x02\x02\x02\x8B\u0434\x03\x02\x02\x02\x8D\u0438\x03\x02\x02\x02\x8F" + - "\u0444\x03\x02\x02\x02\x91\u044E\x03\x02\x02\x02\x93\u0457\x03\x02\x02" + - "\x02\x95\u0462\x03\x02\x02\x02\x97\u0466\x03\x02\x02\x02\x99\u046B\x03" + - "\x02\x02\x02\x9B\u0470\x03\x02\x02\x02\x9D\u0474\x03\x02\x02\x02\x9F\u047B" + - "\x03\x02\x02\x02\xA1\u0483\x03\x02\x02\x02\xA3\u048A\x03\x02\x02\x02\xA5" + - "\u0493\x03\x02\x02\x02\xA7\u049A\x03\x02\x02\x02\xA9\u04A2\x03\x02\x02" + - "\x02\xAB\u04A9\x03\x02\x02\x02\xAD\u04B2\x03\x02\x02\x02\xAF\u04BB\x03" + - "\x02\x02\x02\xB1\u04C3\x03\x02\x02\x02\xB3\u04C9\x03\x02\x02\x02\xB5\u04CF" + - "\x03\x02\x02\x02\xB7\u04D6\x03\x02\x02\x02\xB9\u04DD\x03\x02\x02\x02\xBB" + - "\u04E8\x03\x02\x02\x02\xBD\u04EE\x03\x02\x02\x02\xBF\u04F8\x03\x02\x02" + - "\x02\xC1\u04FC\x03\x02\x02\x02\xC3\u0504\x03\x02\x02\x02\xC5\u050B\x03" + - "\x02\x02\x02\xC7\u0515\x03\x02\x02\x02\xC9\u051A\x03\x02\x02\x02\xCB\u051F" + - "\x03\x02\x02\x02\xCD\u0528\x03\x02\x02\x02\xCF\u0532\x03\x02\x02\x02\xD1" + - "\u0539\x03\x02\x02\x02\xD3\u053F\x03\x02\x02\x02\xD5\u0545\x03\x02\x02" + - "\x02\xD7\u054E\x03\x02\x02\x02\xD9\u0555\x03\x02\x02\x02\xDB\u0558\x03" + - "\x02\x02\x02\xDD\u055F\x03\x02\x02\x02\xDF\u0566\x03\x02\x02\x02\xE1\u0569" + - "\x03\x02\x02\x02\xE3\u056F\x03\x02\x02\x02\xE5\u0577\x03\x02\x02\x02\xE7" + - "\u057D\x03\x02\x02\x02\xE9\u0584\x03\x02\x02\x02\xEB\u0590\x03\x02\x02" + - "\x02\xED\u0597\x03\x02\x02\x02\xEF\u05A1\x03\x02\x02\x02\xF1\u05AA\x03" + - "\x02\x02\x02\xF3\u05AF\x03\x02\x02\x02\xF5\u05B2\x03\x02\x02\x02\xF7\u05B8" + - "\x03\x02\x02\x02\xF9\u05BD\x03\x02\x02\x02\xFB\u05C2\x03\x02\x02\x02\xFD" + - "\u05C7\x03\x02\x02\x02\xFF\u05CF\x03\x02\x02\x02\u0101\u05D4\x03\x02\x02" + - "\x02\u0103\u05DC\x03\x02\x02\x02\u0105\u05E1\x03\x02\x02\x02\u0107\u05E6" + - "\x03\x02\x02\x02\u0109\u05EC\x03\x02\x02\x02\u010B\u05F2\x03\x02\x02\x02" + - "\u010D\u05F7\x03\x02\x02\x02\u010F\u05FC\x03\x02\x02\x02\u0111\u0602\x03" + - "\x02\x02\x02\u0113\u060B\x03\x02\x02\x02\u0115\u0610\x03\x02\x02\x02\u0117" + - "\u0616\x03\x02\x02\x02\u0119\u061E\x03\x02\x02\x02\u011B\u0624\x03\x02" + - "\x02\x02\u011D\u0628\x03\x02\x02\x02\u011F\u0630\x03\x02\x02\x02\u0121" + - "\u0636\x03\x02\x02\x02\u0123\u063B\x03\x02\x02\x02\u0125\u0645\x03\x02" + - "\x02\x02\u0127\u0650\x03\x02\x02\x02\u0129\u0658\x03\x02\x02\x02\u012B" + - "\u065F\x03\x02\x02\x02\u012D\u0661\x03\x02\x02\x02\u012F\u0666\x03\x02" + - "\x02\x02\u0131\u066C\x03\x02\x02\x02\u0133\u066F\x03\x02\x02\x02\u0135" + - "\u0672\x03\x02\x02\x02\u0137\u0677\x03\x02\x02\x02\u0139\u067E\x03\x02" + - "\x02\x02\u013B\u0686\x03\x02\x02\x02\u013D\u0689\x03\x02\x02\x02\u013F" + - "\u068F\x03\x02\x02\x02\u0141\u0693\x03\x02\x02\x02\u0143\u0699\x03\x02" + - "\x02\x02\u0145\u06A6\x03\x02\x02\x02\u0147\u06AB\x03\x02\x02\x02\u0149" + - "\u06B4\x03\x02\x02\x02\u014B\u06BC\x03\x02\x02\x02\u014D\u06C6\x03\x02" + - "\x02\x02\u014F\u06D0\x03\x02\x02\x02\u0151\u06DC\x03\x02\x02\x02\u0153" + - "\u06E7\x03\x02\x02\x02\u0155\u06EF\x03\x02\x02\x02\u0157\u06F5\x03\x02" + - "\x02\x02\u0159\u06FD\x03\x02\x02\x02\u015B\u0706\x03\x02\x02\x02\u015D" + - "\u0710\x03\x02\x02\x02\u015F\u0718\x03\x02\x02\x02\u0161\u0723\x03\x02" + - "\x02\x02\u0163\u072E\x03\x02\x02\x02\u0165\u0734\x03\x02\x02\x02\u0167" + - "\u073A\x03\x02\x02\x02\u0169\u0740\x03\x02\x02\x02\u016B\u074D\x03\x02" + - "\x02\x02\u016D\u075A\x03\x02\x02\x02\u016F\u0762\x03\x02\x02\x02\u0171" + - "\u0769\x03\x02\x02\x02\u0173\u0774\x03\x02\x02\x02\u0175\u077C\x03\x02" + - "\x02\x02\u0177\u0783\x03\x02\x02\x02\u0179\u078A\x03\x02\x02\x02\u017B" + - "\u0792\x03\x02\x02\x02\u017D\u0798\x03\x02\x02\x02\u017F\u07A1\x03\x02" + - "\x02\x02\u0181\u07A8\x03\x02\x02\x02\u0183\u07B9\x03\x02\x02\x02\u0185" + - "\u07BB\x03\x02\x02\x02\u0187\u07C0\x03\x02\x02\x02\u0189\u07C6\x03\x02" + - "\x02\x02\u018B\u07CF\x03\x02\x02\x02\u018D\u07D6\x03\x02\x02\x02\u018F" + - "\u07DA\x03\x02\x02\x02\u0191\u07DF\x03\x02\x02\x02\u0193\u07E6\x03\x02" + - "\x02\x02\u0195\u07ED\x03\x02\x02\x02\u0197\u07F2\x03\x02\x02\x02\u0199" + - "\u07FC\x03\x02\x02\x02\u019B\u0802\x03\x02\x02\x02\u019D\u0812\x03\x02" + - "\x02\x02\u019F\u081F\x03\x02\x02\x02\u01A1\u0823\x03\x02\x02\x02\u01A3" + - "\u0829\x03\x02\x02\x02\u01A5\u082E\x03\x02\x02\x02\u01A7\u0833\x03\x02" + - "\x02\x02\u01A9\u083A\x03\x02\x02\x02\u01AB\u083F\x03\x02\x02\x02\u01AD" + - "\u0844\x03\x02\x02\x02\u01AF\u084B\x03\x02\x02\x02\u01B1\u0851\x03\x02" + - "\x02\x02\u01B3\u085C\x03\x02\x02\x02\u01B5\u0863\x03\x02\x02\x02\u01B7" + - "\u086C\x03\x02\x02\x02\u01B9\u0873\x03\x02\x02\x02\u01BB\u087A\x03\x02" + - "\x02\x02\u01BD\u0884\x03\x02\x02\x02\u01BF\u088A\x03\x02\x02\x02\u01C1" + - "\u0891\x03\x02\x02\x02\u01C3\u089D\x03\x02\x02\x02\u01C5\u08B8\x03\x02" + - "\x02\x02\u01C7\u08BA\x03\x02\x02\x02\u01C9\u08C5\x03\x02\x02\x02\u01CB" + - "\u08CA\x03\x02\x02\x02\u01CD\u08CF\x03\x02\x02\x02\u01CF\u08D2\x03\x02" + - "\x02\x02\u01D1\u08D8\x03\x02\x02\x02\u01D3\u08E1\x03\x02\x02\x02\u01D5" + - "\u08ED\x03\x02\x02\x02\u01D7\u08FA\x03\x02\x02\x02\u01D9\u0904\x03\x02" + - "\x02\x02\u01DB\u0909\x03\x02\x02\x02\u01DD\u090E\x03\x02\x02\x02\u01DF" + - "\u0917\x03\x02\x02\x02\u01E1\u091C\x03\x02\x02\x02\u01E3\u0926\x03\x02" + - "\x02\x02\u01E5\u0930\x03\x02\x02\x02\u01E7\u0938\x03\x02\x02\x02\u01E9" + - "\u093E\x03\x02\x02\x02\u01EB\u0945\x03\x02\x02\x02\u01ED\u094D\x03\x02" + - "\x02\x02\u01EF\u0954\x03\x02\x02\x02\u01F1\u095A\x03\x02\x02\x02\u01F3" + - "\u0961\x03\x02\x02\x02\u01F5\u0965\x03\x02\x02\x02\u01F7\u096A\x03\x02" + - "\x02\x02\u01F9\u0970\x03\x02\x02\x02\u01FB\u0977\x03\x02\x02\x02\u01FD" + - "\u097C\x03\x02\x02\x02\u01FF\u0982\x03\x02\x02\x02\u0201\u0987\x03\x02" + - "\x02\x02\u0203\u098D\x03\x02\x02\x02\u0205\u0994\x03\x02\x02\x02\u0207" + - "\u0999\x03\x02\x02\x02\u0209\u09A1\x03\x02\x02\x02\u020B\u09A3\x03\x02" + - "\x02\x02\u020D\u09A7\x03\x02\x02\x02\u020F\u09AA\x03\x02\x02\x02\u0211" + - "\u09AD\x03\x02\x02\x02\u0213\u09B3\x03\x02\x02\x02\u0215\u09B5\x03\x02" + - "\x02\x02\u0217\u09BB\x03\x02\x02\x02\u0219\u09BD\x03\x02\x02\x02\u021B" + - "\u09BF\x03\x02\x02\x02\u021D\u09C1\x03\x02\x02\x02\u021F\u09C3\x03\x02" + - "\x02\x02\u0221\u09C5\x03\x02\x02\x02\u0223\u09C7\x03\x02\x02\x02\u0225" + - "\u09C9\x03\x02\x02\x02\u0227\u09CB\x03\x02\x02\x02\u0229\u09CD\x03\x02" + - "\x02\x02\u022B\u09D0\x03\x02\x02\x02\u022D\u09D2\x03\x02\x02\x02\u022F" + - "\u09E8\x03\x02\x02\x02\u0231\u09EB\x03\x02\x02\x02\u0233\u09F2\x03\x02" + - "\x02\x02\u0235\u09F9\x03\x02\x02\x02\u0237\u0A00\x03\x02\x02\x02\u0239" + - "\u0A0F\x03\x02\x02\x02\u023B\u0A11\x03\x02\x02\x02\u023D\u0A25\x03\x02" + - "\x02\x02\u023F\u0A38\x03\x02\x02\x02\u0241\u0A4E\x03\x02\x02"; + "\xED\x03\xED\x03\xED\x03\xED\x03\xED\x03\xED\x03\xED\x03\xEE\x03\xEE\x03" + + "\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03\xEE\x03" + + "\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xEF\x03\xF0\x03" + + "\xF0\x03\xF0\x03\xF0\x03\xF0\x03\xF0\x03\xF1\x03\xF1\x03\xF1\x03\xF1\x03" + + "\xF1\x03\xF1\x03\xF1\x03\xF1\x03\xF2\x03\xF2\x03\xF2\x03\xF2\x03\xF2\x03" + + "\xF2\x03\xF2\x03\xF2\x03\xF2\x03\xF3\x03\xF3\x03\xF3\x03\xF3\x03\xF3\x03" + + "\xF3\x03\xF3\x03\xF4\x03\xF4\x03\xF4\x03\xF4\x03\xF4\x03\xF4\x03\xF5\x03" + + "\xF5\x03\xF5\x03\xF5\x03\xF5\x03\xF5\x03\xF5\x03\xF5\x03\xF5\x03\xF5\x03" + + "\xF5\x05\xF5\u0A09\n\xF5\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF6\x03\xF7" + + "\x03\xF7\x03\xF7\x03\xF7\x03\xF7\x03\xF7\x03\xF8\x03\xF8\x03\xF8\x03\xF8" + + "\x03\xF8\x03\xF8\x03\xF8\x03\xF8\x03\xF8\x03\xF9\x03\xF9\x03\xF9\x03\xF9" + + "\x03\xF9\x03\xF9\x03\xF9\x03\xFA\x03\xFA\x03\xFA\x03\xFA\x03\xFB\x03\xFB" + + "\x03\xFB\x03\xFB\x03\xFB\x03\xFC\x03\xFC\x03\xFC\x03\xFC\x03\xFC\x03\xFC" + + "\x03\xFC\x03\xFD\x03\xFD\x03\xFD\x03\xFD\x03\xFD\x03\xFD\x03\xFD\x03\xFD" + + "\x03\xFE\x03\xFE\x03\xFE\x03\xFE\x03\xFE\x03\xFE\x03\xFE\x03\xFF\x03\xFF" + + "\x03\xFF\x03\xFF\x03\xFF\x03\xFF\x03\xFF\x03\xFF\x03\u0100\x03\u0100\x03" + + "\u0100\x03\u0100\x03\u0100\x03\u0100\x03\u0100\x03\u0101\x03\u0101\x03" + + "\u0101\x03\u0101\x03\u0101\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03" + + "\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0102\x03\u0103\x03" + + "\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0103\x03\u0104\x03\u0104\x03" + + "\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03" + + "\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03\u0104\x03" + + "\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0105\x03" + + "\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0105\x03\u0106\x03" + + "\u0106\x03\u0106\x03\u0106\x03\u0107\x03\u0107\x03\u0107\x03\u0107\x03" + + "\u0107\x03\u0107\x03\u0108\x03\u0108\x03\u0108\x03\u0108\x03\u0108\x03" + + "\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u0109\x03\u010A\x03" + + "\u010A\x03\u010A\x03\u010A\x03\u010A\x03\u010B\x03\u010B\x03\u010B\x03" + + "\u010B\x03\u010B\x03\u010B\x03\u010B\x03\u010C\x03\u010C\x03\u010C\x03" + + "\u010C\x03\u010C\x03\u010C\x03\u010C\x03\u010D\x03\u010D\x03\u010D\x03" + + "\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010D\x03\u010E\x03" + + "\u010E\x03\u010E\x03\u010E\x03\u010E\x03\u010F\x03\u010F\x03\u010F\x03" + + "\u010F\x03\u010F\x03\u0110\x03\u0110\x03\u0110\x03\u0110\x03\u0110\x03" + + "\u0110\x03\u0110\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03\u0111\x03" + + "\u0111\x03\u0111\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03\u0112\x03" + + "\u0112\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03" + + "\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0113\x03\u0114\x03\u0114\x03" + + "\u0114\x03\u0114\x03\u0114\x03\u0114\x03\u0114\x03\u0115\x03\u0115\x03" + + "\u0115\x03\u0115\x03\u0115\x03\u0115\x03\u0115\x03\u0115\x03\u0115\x03" + + "\u0116\x03\u0116\x03\u0116\x03\u0116\x03\u0116\x03\u0116\x03\u0116\x03" + + "\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03\u0117\x03" + + "\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03\u0118\x03" + + "\u0119\x03\u0119\x03\u0119\x03\u0119\x03\u0119\x03\u0119\x03\u0119\x03" + + "\u0119\x03\u0119\x03\u0119\x03\u011A\x03\u011A\x03\u011A\x03\u011A\x03" + + "\u011A\x03\u011B\x03\u011B\x03\u011B\x03\u011B\x03\u011B\x03\u011B\x03" + + "\u011B\x03\u011B\x03\u011B\x03\u011B\x03\u011B\x03\u011B\x03\u011C\x03" + + "\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03" + + "\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03\u011C\x03" + + "\u011D\x03\u011D\x03\u011D\x03\u011D\x03\u011D\x03\u011D\x03\u011E\x03" + + "\u011E\x03\u011E\x03\u011E\x03\u011E\x03\u011E\x03\u011E\x03\u011F\x03" + + "\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u011F\x03" + + "\u011F\x03\u011F\x03\u011F\x03\u011F\x03\u0120\x03\u0120\x03\u0120\x03" + + "\u0120\x03\u0120\x03\u0120\x03\u0120\x03\u0121\x03\u0121\x03\u0121\x03" + + "\u0121\x03\u0121\x03\u0121\x03\u0121\x03\u0121\x03\u0121\x03\u0121\x03" + + "\u0121\x03\u0121\x03\u0121\x03\u0121\x03\u0122\x03\u0122\x03\u0122\x03" + + "\u0122\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x03\u0122\x03" + + "\u0122\x03\u0122\x03\u0122\x05\u0122\u0B6A\n\u0122\x03\u0123\x03\u0123" + + "\x03\u0123\x03\u0123\x03\u0123\x03\u0123\x03\u0123\x03\u0123\x03\u0123" + + "\x03\u0123\x03\u0123\x03\u0124\x03\u0124\x03\u0124\x03\u0124\x03\u0124" + + "\x03\u0125\x03\u0125\x03\u0125\x03\u0125\x03\u0125\x03\u0126\x03\u0126" + + "\x03\u0126\x03\u0126\x03\u0126\x03\u0126\x03\u0126\x03\u0126\x03\u0126" + + "\x03\u0127\x03\u0127\x03\u0127\x03\u0127\x03\u0127\x03\u0127\x03\u0127" + + "\x03\u0127\x03\u0127\x03\u0127\x03\u0128\x03\u0128\x03\u0128\x03\u0128" + + "\x03\u0128\x03\u0128\x03\u0128\x03\u0128\x03\u0128\x03\u0128\x03\u0128" + + "\x03\u0128\x03\u0128\x03\u0128\x03\u0129\x03\u0129\x03\u0129\x03\u0129" + + "\x03\u0129\x03\u0129\x03\u0129\x03\u0129\x03\u0129\x03\u0129\x03\u0129" + + "\x03\u0129\x03\u0129\x03\u0129\x03\u012A\x03\u012A\x03\u012A\x03\u012A" + + "\x03\u012A\x03\u012A\x03\u012A\x03\u012A\x03\u012A\x03\u012A\x03\u012A" + + "\x03\u012A\x03\u012A\x03\u012B\x03\u012B\x03\u012B\x03\u012B\x03\u012B" + + "\x03\u012B\x03\u012B\x03\u012B\x03\u012B\x03\u012B\x03\u012B\x03\u012B" + + "\x03\u012B\x03\u012B\x03\u012C\x03\u012C\x03\u012C\x03\u012C\x03\u012C" + + "\x03\u012C\x03\u012C\x03\u012C\x03\u012D\x03\u012D\x03\u012D\x03\u012E" + + "\x03\u012E\x03\u012E\x03\u012E\x03\u012E\x03\u012E\x03\u012F\x03\u012F" + + "\x03\u012F\x03\u012F\x03\u012F\x03\u012F\x03\u012F\x03\u012F\x03\u012F" + + "\x03\u0130\x03\u0130\x03\u0130\x03\u0130\x03\u0130\x03\u0130\x03\u0130" + + "\x03\u0130\x03\u0130\x03\u0130\x03\u0130\x03\u0130\x03\u0131\x03\u0131" + + "\x03\u0131\x03\u0131\x03\u0131\x03\u0131\x03\u0131\x03\u0131\x03\u0131" + + "\x03\u0131\x03\u0131\x03\u0131\x03\u0131\x03\u0132\x03\u0132\x03\u0132" + + "\x03\u0132\x03\u0132\x03\u0132\x03\u0132\x03\u0132\x03\u0132\x03\u0132" + + "\x03\u0133\x03\u0133\x03\u0133\x03\u0133\x03\u0133\x03\u0134\x03\u0134" + + "\x03\u0134\x03\u0134\x03\u0134\x03\u0135\x03\u0135\x03\u0135\x03\u0135" + + "\x03\u0135\x03\u0135\x03\u0135\x03\u0135\x03\u0135\x03\u0136\x03\u0136" + + "\x03\u0136\x03\u0136\x03\u0136\x03\u0136\x03\u0136\x03\u0136\x03\u0136" + + "\x03\u0137\x03\u0137\x03\u0137\x03\u0137\x03\u0137\x03\u0138\x03\u0138" + + "\x03\u0138\x03\u0138\x03\u0138\x03\u0138\x03\u0138\x03\u0138\x03\u0138" + + "\x03\u0138\x03\u0139\x03\u0139\x03\u0139\x03\u0139\x03\u0139\x03\u0139" + + "\x03\u0139\x03\u0139\x03\u0139\x03\u0139\x03\u013A\x03\u013A\x03\u013A" + + "\x03\u013A\x03\u013A\x03\u013A\x03\u013A\x03\u013A\x03\u013B\x03\u013B" + + "\x03\u013B\x03\u013B\x03\u013B\x03\u013B\x03\u013C\x03\u013C\x03\u013C" + + "\x03\u013C\x03\u013C\x03\u013C\x03\u013C\x03\u013D\x03\u013D\x03\u013D" + + "\x03\u013D\x03\u013D\x03\u013D\x03\u013D\x03\u013D\x03\u013E\x03\u013E" + + "\x03\u013E\x03\u013E\x03\u013E\x03\u013E\x03\u013E\x03\u013F\x03\u013F" + + "\x03\u013F\x03\u013F\x03\u013F\x03\u013F\x03\u013F\x03\u013F\x03\u0140" + + "\x03\u0140\x03\u0140\x03\u0140\x03\u0140\x03\u0140\x03\u0141\x03\u0141" + + "\x03\u0141\x03\u0141\x03\u0141\x03\u0141\x03\u0141\x03\u0142\x03\u0142" + + "\x03\u0142\x03\u0142\x03\u0143\x03\u0143\x03\u0143\x03\u0143\x03\u0143" + + "\x03\u0144\x03\u0144\x03\u0144\x03\u0144\x03\u0144\x03\u0144\x03\u0145" + + "\x03\u0145\x03\u0145\x03\u0145\x03\u0145\x03\u0145\x03\u0145\x03\u0146" + + "\x03\u0146\x03\u0146\x03\u0146\x03\u0146\x03\u0146\x03\u0146\x03\u0146" + + "\x03\u0147\x03\u0147\x03\u0147\x03\u0147\x03\u0148\x03\u0148\x03\u0148" + + "\x03\u0148\x03\u0148\x03\u0148\x03\u0148\x03\u0148\x03\u0148\x03\u0149" + + "\x03\u0149\x03\u0149\x03\u0149\x03\u0149\x03\u0149\x03\u0149\x03\u0149" + + "\x03\u014A\x03\u014A\x03\u014A\x03\u014A\x03\u014A\x03\u014B\x03\u014B" + + "\x03\u014B\x03\u014B\x03\u014B\x03\u014B\x03\u014C\x03\u014C\x03\u014C" + + "\x03\u014C\x03\u014C\x03\u014D\x03\u014D\x03\u014D\x03\u014D\x03\u014D" + + "\x03\u014E\x03\u014E\x03\u014E\x03\u014E\x03\u014E\x03\u014E\x03\u014F" + + "\x03\u014F\x03\u014F\x03\u014F\x03\u014F\x03\u0150\x03\u0150\x03\u0150" + + "\x03\u0150\x03\u0150\x03\u0150\x03\u0151\x03\u0151\x03\u0151\x03\u0151" + + "\x03\u0151\x03\u0151\x03\u0151\x03\u0152\x03\u0152\x03\u0152\x03\u0152" + + "\x03\u0152\x03\u0153\x03\u0153\x03\u0153\x03\u0153\x03\u0153\x03\u0153" + + "\x03\u0153\x03\u0154\x03\u0154\x03\u0154\x03\u0154\x03\u0154\x03\u0155" + + "\x03\u0155\x03\u0155\x03\u0155\x03\u0155\x03\u0155\x03\u0156\x03\u0156" + + "\x03\u0156\x03\u0156\x03\u0156\x03\u0157\x03\u0157\x03\u0157\x05\u0157" + + "\u0CF5\n\u0157\x03\u0158\x03\u0158\x03\u0158\x03\u0158\x03\u0159\x03\u0159" + + "\x03\u0159\x03\u015A\x03\u015A\x03\u015A\x03\u015B\x03\u015B\x03\u015C" + + "\x03\u015C\x03\u015C\x03\u015C\x05\u015C\u0D07\n\u015C\x03\u015D\x03\u015D" + + "\x03\u015E\x03\u015E\x03\u015E\x03\u015E\x05\u015E\u0D0F\n\u015E\x03\u015F" + + "\x03\u015F\x03\u0160\x03\u0160\x03\u0161\x03\u0161\x03\u0162\x03\u0162" + + "\x03\u0163\x03\u0163\x03\u0164\x03\u0164\x03\u0165\x03\u0165\x03\u0166" + + "\x03\u0166\x03\u0167\x03\u0167\x03\u0167\x03\u0168\x03\u0168\x03\u0169" + + "\x03\u0169\x03\u016A\x03\u016A\x03\u016A\x03\u016B\x03\u016B\x03\u016B" + + "\x03\u016C\x03\u016C\x03\u016C\x03\u016C\x03\u016D\x03\u016D\x03\u016D" + + "\x03\u016E\x03\u016E\x03\u016F\x03\u016F\x03\u016F\x03\u016F\x07\u016F" + + "\u0D3B\n\u016F\f\u016F\x0E\u016F\u0D3E\v\u016F\x03\u016F\x03\u016F\x03" + + "\u016F\x03\u016F\x03\u016F\x07\u016F\u0D45\n\u016F\f\u016F\x0E\u016F\u0D48" + + "\v\u016F\x03\u016F\x03\u016F\x03\u016F\x03\u016F\x03\u016F\x07\u016F\u0D4F" + + "\n\u016F\f\u016F\x0E\u016F\u0D52\v\u016F\x03\u016F\x05\u016F\u0D55\n\u016F" + + "\x03\u0170\x03\u0170\x03\u0170\x03\u0170\x07\u0170\u0D5B\n\u0170\f\u0170" + + "\x0E\u0170\u0D5E\v\u0170\x03\u0170\x03\u0170\x03\u0171\x06\u0171\u0D63" + + "\n\u0171\r\u0171\x0E\u0171\u0D64\x03\u0171\x03\u0171\x03\u0172\x06\u0172" + + "\u0D6A\n\u0172\r\u0172\x0E\u0172\u0D6B\x03\u0172\x03\u0172\x03\u0173\x06" + + "\u0173\u0D71\n\u0173\r\u0173\x0E\u0173\u0D72\x03\u0173\x03\u0173\x03\u0174" + + "\x06\u0174\u0D78\n\u0174\r\u0174\x0E\u0174\u0D79\x03\u0175\x06\u0175\u0D7D" + + "\n\u0175\r\u0175\x0E\u0175\u0D7E\x03\u0175\x03\u0175\x03\u0175\x03\u0175" + + "\x03\u0175\x05\u0175\u0D86\n\u0175\x03\u0176\x03\u0176\x03\u0177\x06\u0177" + + "\u0D8B\n\u0177\r\u0177\x0E\u0177\u0D8C\x03\u0177\x05\u0177\u0D90\n\u0177" + + "\x03\u0177\x03\u0177\x03\u0177\x03\u0177\x05\u0177\u0D96\n\u0177\x03\u0177" + + "\x03\u0177\x05\u0177\u0D9A\n\u0177\x03\u0178\x06\u0178\u0D9D\n\u0178\r" + + "\u0178\x0E\u0178\u0D9E\x03\u0178\x05\u0178\u0DA2\n\u0178\x03\u0178\x03" + + "\u0178\x03\u0178\x03\u0178\x05\u0178\u0DA8\n\u0178\x03\u0178\x03\u0178" + + "\x05\u0178\u0DAC\n\u0178\x03\u0179\x06\u0179\u0DAF\n\u0179\r\u0179\x0E" + + "\u0179\u0DB0\x03\u0179\x05\u0179\u0DB4\n\u0179\x03\u0179\x03\u0179\x03" + + "\u0179\x03\u0179\x03\u0179\x05\u0179\u0DBB\n\u0179\x03\u0179\x03\u0179" + + "\x03\u0179\x05\u0179\u0DC0\n\u0179\x03\u017A\x03\u017A\x03\u017A\x06\u017A" + + "\u0DC5\n\u017A\r\u017A\x0E\u017A\u0DC6\x03\u017B\x03\u017B\x03\u017B\x03" + + "\u017B\x07\u017B\u0DCD\n\u017B\f\u017B\x0E\u017B\u0DD0\v\u017B\x03\u017B" + + "\x03\u017B\x03\u017C\x06\u017C\u0DD5\n\u017C\r\u017C\x0E\u017C\u0DD6\x03" + + "\u017C\x03\u017C\x07\u017C\u0DDB\n\u017C\f\u017C\x0E\u017C\u0DDE\v\u017C" + + "\x03\u017C\x03\u017C\x06\u017C\u0DE2\n\u017C\r\u017C\x0E\u017C\u0DE3\x05" + + "\u017C\u0DE6\n\u017C\x03\u017D\x03\u017D\x05\u017D\u0DEA\n\u017D\x03\u017D" + + "\x06\u017D\u0DED\n\u017D\r\u017D\x0E\u017D\u0DEE\x03\u017E\x03\u017E\x03" + + "\u017F\x03\u017F\x03\u0180\x03\u0180\x03\u0180\x03\u0180\x03\u0180\x03" + + "\u0180\x07\u0180\u0DFB\n\u0180\f\u0180\x0E\u0180\u0DFE\v\u0180\x03\u0180" + + "\x05\u0180\u0E01\n\u0180\x03\u0180\x05\u0180\u0E04\n\u0180\x03\u0180\x03" + + "\u0180\x03\u0181\x03\u0181\x03\u0181\x03\u0181\x03\u0181\x07\u0181\u0E0D" + + "\n\u0181\f\u0181\x0E\u0181\u0E10\v\u0181\x03\u0181\x03\u0181\x03\u0181" + + "\x03\u0181\x05\u0181\u0E16\n\u0181\x03\u0181\x03\u0181\x03\u0182\x06\u0182" + + "\u0E1B\n\u0182\r\u0182\x0E\u0182\u0E1C\x03\u0182\x03\u0182\x03\u0183\x03" + + "\u0183\x03\u0E0E\x02\x02\u0184\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02" + + "\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02" + + "\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%" + + "\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B" + + "5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02" + + "%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_" + + "\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02" + + "{\x02?}\x02@\x7F\x02A\x81\x02B\x83\x02C\x85\x02D\x87\x02" + + "E\x89\x02F\x8B\x02G\x8D\x02H\x8F\x02I\x91\x02J\x93\x02K\x95\x02L\x97\x02" + + "M\x99\x02N\x9B\x02O\x9D\x02P\x9F\x02Q\xA1\x02R\xA3\x02S\xA5\x02T\xA7\x02" + + "U\xA9\x02V\xAB\x02W\xAD\x02X\xAF\x02Y\xB1\x02Z\xB3\x02[\xB5\x02\\\xB7" + + "\x02]\xB9\x02^\xBB\x02_\xBD\x02`\xBF\x02a\xC1\x02b\xC3\x02c\xC5\x02d\xC7" + + "\x02e\xC9\x02f\xCB\x02g\xCD\x02h\xCF\x02i\xD1\x02j\xD3\x02k\xD5\x02l\xD7" + + "\x02m\xD9\x02n\xDB\x02o\xDD\x02p\xDF\x02q\xE1\x02r\xE3\x02s\xE5\x02t\xE7" + + "\x02u\xE9\x02v\xEB\x02w\xED\x02x\xEF\x02y\xF1\x02z\xF3\x02{\xF5\x02|\xF7" + + "\x02}\xF9\x02~\xFB\x02\x7F\xFD\x02\x80\xFF\x02\x81\u0101\x02\x82\u0103" + + "\x02\x83\u0105\x02\x84\u0107\x02\x85\u0109\x02\x86\u010B\x02\x87\u010D" + + "\x02\x88\u010F\x02\x89\u0111\x02\x8A\u0113\x02\x8B\u0115\x02\x8C\u0117" + + "\x02\x8D\u0119\x02\x8E\u011B\x02\x8F\u011D\x02\x90\u011F\x02\x91\u0121" + + "\x02\x92\u0123\x02\x93\u0125\x02\x94\u0127\x02\x95\u0129\x02\x96\u012B" + + "\x02\x97\u012D\x02\x98\u012F\x02\x99\u0131\x02\x9A\u0133\x02\x9B\u0135" + + "\x02\x9C\u0137\x02\x9D\u0139\x02\x9E\u013B\x02\x9F\u013D\x02\xA0\u013F" + + "\x02\xA1\u0141\x02\xA2\u0143\x02\xA3\u0145\x02\xA4\u0147\x02\xA5\u0149" + + "\x02\xA6\u014B\x02\xA7\u014D\x02\xA8\u014F\x02\xA9\u0151\x02\xAA\u0153" + + "\x02\xAB\u0155\x02\xAC\u0157\x02\xAD\u0159\x02\xAE\u015B\x02\xAF\u015D" + + "\x02\xB0\u015F\x02\xB1\u0161\x02\xB2\u0163\x02\xB3\u0165\x02\xB4\u0167" + + "\x02\xB5\u0169\x02\xB6\u016B\x02\xB7\u016D\x02\xB8\u016F\x02\xB9\u0171" + + "\x02\xBA\u0173\x02\xBB\u0175\x02\xBC\u0177\x02\xBD\u0179\x02\xBE\u017B" + + "\x02\xBF\u017D\x02\xC0\u017F\x02\xC1\u0181\x02\xC2\u0183\x02\xC3\u0185" + + "\x02\xC4\u0187\x02\xC5\u0189\x02\xC6\u018B\x02\xC7\u018D\x02\xC8\u018F" + + "\x02\xC9\u0191\x02\xCA\u0193\x02\xCB\u0195\x02\xCC\u0197\x02\xCD\u0199" + + "\x02\xCE\u019B\x02\xCF\u019D\x02\xD0\u019F\x02\xD1\u01A1\x02\xD2\u01A3" + + "\x02\xD3\u01A5\x02\xD4\u01A7\x02\xD5\u01A9\x02\xD6\u01AB\x02\xD7\u01AD" + + "\x02\xD8\u01AF\x02\xD9\u01B1\x02\xDA\u01B3\x02\xDB\u01B5\x02\xDC\u01B7" + + "\x02\xDD\u01B9\x02\xDE\u01BB\x02\xDF\u01BD\x02\xE0\u01BF\x02\xE1\u01C1" + + "\x02\xE2\u01C3\x02\xE3\u01C5\x02\xE4\u01C7\x02\xE5\u01C9\x02\xE6\u01CB" + + "\x02\xE7\u01CD\x02\xE8\u01CF\x02\xE9\u01D1\x02\xEA\u01D3\x02\xEB\u01D5" + + "\x02\xEC\u01D7\x02\xED\u01D9\x02\xEE\u01DB\x02\xEF\u01DD\x02\xF0\u01DF" + + "\x02\xF1\u01E1\x02\xF2\u01E3\x02\xF3\u01E5\x02\xF4\u01E7\x02\xF5\u01E9" + + "\x02\xF6\u01EB\x02\xF7\u01ED\x02\xF8\u01EF\x02\xF9\u01F1\x02\xFA\u01F3" + + "\x02\xFB\u01F5\x02\xFC\u01F7\x02\xFD\u01F9\x02\xFE\u01FB\x02\xFF\u01FD" + + "\x02\u0100\u01FF\x02\u0101\u0201\x02\u0102\u0203\x02\u0103\u0205\x02\u0104" + + "\u0207\x02\u0105\u0209\x02\u0106\u020B\x02\u0107\u020D\x02\u0108\u020F" + + "\x02\u0109\u0211\x02\u010A\u0213\x02\u010B\u0215\x02\u010C\u0217\x02\u010D" + + "\u0219\x02\u010E\u021B\x02\u010F\u021D\x02\u0110\u021F\x02\u0111\u0221" + + "\x02\u0112\u0223\x02\u0113\u0225\x02\u0114\u0227\x02\u0115\u0229\x02\u0116" + + "\u022B\x02\u0117\u022D\x02\u0118\u022F\x02\u0119\u0231\x02\u011A\u0233" + + "\x02\u011B\u0235\x02\u011C\u0237\x02\u011D\u0239\x02\u011E\u023B\x02\u011F" + + "\u023D\x02\u0120\u023F\x02\u0121\u0241\x02\u0122\u0243\x02\u0123\u0245" + + "\x02\u0124\u0247\x02\u0125\u0249\x02\u0126\u024B\x02\u0127\u024D\x02\u0128" + + "\u024F\x02\u0129\u0251\x02\u012A\u0253\x02\u012B\u0255\x02\u012C\u0257" + + "\x02\u012D\u0259\x02\u012E\u025B\x02\u012F\u025D\x02\u0130\u025F\x02\u0131" + + "\u0261\x02\u0132\u0263\x02\u0133\u0265\x02\u0134\u0267\x02\u0135\u0269" + + "\x02\u0136\u026B\x02\u0137\u026D\x02\u0138\u026F\x02\u0139\u0271\x02\u013A" + + "\u0273\x02\u013B\u0275\x02\u013C\u0277\x02\u013D\u0279\x02\u013E\u027B" + + "\x02\u013F\u027D\x02\u0140\u027F\x02\u0141\u0281\x02\u0142\u0283\x02\u0143" + + "\u0285\x02\u0144\u0287\x02\u0145\u0289\x02\u0146\u028B\x02\u0147\u028D" + + "\x02\u0148\u028F\x02\u0149\u0291\x02\u014A\u0293\x02\u014B\u0295\x02\u014C" + + "\u0297\x02\u014D\u0299\x02\u014E\u029B\x02\u014F\u029D\x02\u0150\u029F" + + "\x02\u0151\u02A1\x02\u0152\u02A3\x02\u0153\u02A5\x02\u0154\u02A7\x02\u0155" + + "\u02A9\x02\u0156\u02AB\x02\u0157\u02AD\x02\u0158\u02AF\x02\u0159\u02B1" + + "\x02\u015A\u02B3\x02\u015B\u02B5\x02\u015C\u02B7\x02\u015D\u02B9\x02\u015E" + + "\u02BB\x02\u015F\u02BD\x02\u0160\u02BF\x02\u0161\u02C1\x02\u0162\u02C3" + + "\x02\u0163\u02C5\x02\u0164\u02C7\x02\u0165\u02C9\x02\u0166\u02CB\x02\u0167" + + "\u02CD\x02\u0168\u02CF\x02\u0169\u02D1\x02\u016A\u02D3\x02\u016B\u02D5" + + "\x02\u016C\u02D7\x02\u016D\u02D9\x02\u016E\u02DB\x02\u016F\u02DD\x02\u0170" + + "\u02DF\x02\u0171\u02E1\x02\u0172\u02E3\x02\u0173\u02E5\x02\u0174\u02E7" + + "\x02\u0175\u02E9\x02\u0176\u02EB\x02\u0177\u02ED\x02\u0178\u02EF\x02\u0179" + + "\u02F1\x02\u017A\u02F3\x02\u017B\u02F5\x02\u017C\u02F7\x02\x02\u02F9\x02" + + "\x02\u02FB\x02\x02\u02FD\x02\x02\u02FF\x02\u017D\u0301\x02\u017E\u0303" + + "\x02\u017F\u0305\x02\u0180\x03\x02\f\x04\x02))^^\x03\x02))\x03\x02$$\x04" + + "\x02$$^^\x03\x02bb\x04\x02--//\x03\x022;\x04\x02C\\c|\x04\x02\f\f\x0F" + + "\x0F\x05\x02\v\f\x0F\x0F\"\"\x02\u0E50\x02\x03\x03\x02\x02\x02\x02\x05" + + "\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02\t\x03\x02\x02\x02\x02\v\x03" + + "\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F\x03\x02\x02\x02\x02\x11\x03" + + "\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15\x03\x02\x02\x02\x02\x17\x03" + + "\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B\x03\x02\x02\x02\x02\x1D\x03" + + "\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!\x03\x02\x02\x02\x02#\x03\x02" + + "\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02\x02\x02\x02)\x03\x02\x02\x02" + + "\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02\x02/\x03\x02\x02\x02\x021\x03" + + "\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03\x02\x02\x02\x027\x03\x02\x02" + + "\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02\x02\x02=\x03\x02\x02\x02\x02" + + "?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02C\x03\x02\x02\x02\x02E\x03\x02" + + "\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02\x02\x02\x02K\x03\x02\x02\x02" + + "\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02\x02Q\x03\x02\x02\x02\x02S\x03" + + "\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03\x02\x02\x02\x02Y\x03\x02\x02" + + "\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02\x02\x02_\x03\x02\x02\x02\x02" + + "a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02e\x03\x02\x02\x02\x02g\x03\x02" + + "\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02\x02\x02\x02m\x03\x02\x02\x02" + + "\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02\x02s\x03\x02\x02\x02\x02u\x03" + + "\x02\x02\x02\x02w\x03\x02\x02\x02\x02y\x03\x02\x02\x02\x02{\x03\x02\x02" + + "\x02\x02}\x03\x02\x02\x02\x02\x7F\x03\x02\x02\x02\x02\x81\x03\x02\x02" + + "\x02\x02\x83\x03\x02\x02\x02\x02\x85\x03\x02\x02\x02\x02\x87\x03\x02\x02" + + "\x02\x02\x89\x03\x02\x02\x02\x02\x8B\x03\x02\x02\x02\x02\x8D\x03\x02\x02" + + "\x02\x02\x8F\x03\x02\x02\x02\x02\x91\x03\x02\x02\x02\x02\x93\x03\x02\x02" + + "\x02\x02\x95\x03\x02\x02\x02\x02\x97\x03\x02\x02\x02\x02\x99\x03\x02\x02" + + "\x02\x02\x9B\x03\x02\x02\x02\x02\x9D\x03\x02\x02\x02\x02\x9F\x03\x02\x02" + + "\x02\x02\xA1\x03\x02\x02\x02\x02\xA3\x03\x02\x02\x02\x02\xA5\x03\x02\x02" + + "\x02\x02\xA7\x03\x02\x02\x02\x02\xA9\x03\x02\x02\x02\x02\xAB\x03\x02\x02" + + "\x02\x02\xAD\x03\x02\x02\x02\x02\xAF\x03\x02\x02\x02\x02\xB1\x03\x02\x02" + + "\x02\x02\xB3\x03\x02\x02\x02\x02\xB5\x03\x02\x02\x02\x02\xB7\x03\x02\x02" + + "\x02\x02\xB9\x03\x02\x02\x02\x02\xBB\x03\x02\x02\x02\x02\xBD\x03\x02\x02" + + "\x02\x02\xBF\x03\x02\x02\x02\x02\xC1\x03\x02\x02\x02\x02\xC3\x03\x02\x02" + + "\x02\x02\xC5\x03\x02\x02\x02\x02\xC7\x03\x02\x02\x02\x02\xC9\x03\x02\x02" + + "\x02\x02\xCB\x03\x02\x02\x02\x02\xCD\x03\x02\x02\x02\x02\xCF\x03\x02\x02" + + "\x02\x02\xD1\x03\x02\x02\x02\x02\xD3\x03\x02\x02\x02\x02\xD5\x03\x02\x02" + + "\x02\x02\xD7\x03\x02\x02\x02\x02\xD9\x03\x02\x02\x02\x02\xDB\x03\x02\x02" + + "\x02\x02\xDD\x03\x02\x02\x02\x02\xDF\x03\x02\x02\x02\x02\xE1\x03\x02\x02" + + "\x02\x02\xE3\x03\x02\x02\x02\x02\xE5\x03\x02\x02\x02\x02\xE7\x03\x02\x02" + + "\x02\x02\xE9\x03\x02\x02\x02\x02\xEB\x03\x02\x02\x02\x02\xED\x03\x02\x02" + + "\x02\x02\xEF\x03\x02\x02\x02\x02\xF1\x03\x02\x02\x02\x02\xF3\x03\x02\x02" + + "\x02\x02\xF5\x03\x02\x02\x02\x02\xF7\x03\x02\x02\x02\x02\xF9\x03\x02\x02" + + "\x02\x02\xFB\x03\x02\x02\x02\x02\xFD\x03\x02\x02\x02\x02\xFF\x03\x02\x02" + + "\x02\x02\u0101\x03\x02\x02\x02\x02\u0103\x03\x02\x02\x02\x02\u0105\x03" + + "\x02\x02\x02\x02\u0107\x03\x02\x02\x02\x02\u0109\x03\x02\x02\x02\x02\u010B" + + "\x03\x02\x02\x02\x02\u010D\x03\x02\x02\x02\x02\u010F\x03\x02\x02\x02\x02" + + "\u0111\x03\x02\x02\x02\x02\u0113\x03\x02\x02\x02\x02\u0115\x03\x02\x02" + + "\x02\x02\u0117\x03\x02\x02\x02\x02\u0119\x03\x02\x02\x02\x02\u011B\x03" + + "\x02\x02\x02\x02\u011D\x03\x02\x02\x02\x02\u011F\x03\x02\x02\x02\x02\u0121" + + "\x03\x02\x02\x02\x02\u0123\x03\x02\x02\x02\x02\u0125\x03\x02\x02\x02\x02" + + "\u0127\x03\x02\x02\x02\x02\u0129\x03\x02\x02\x02\x02\u012B\x03\x02\x02" + + "\x02\x02\u012D\x03\x02\x02\x02\x02\u012F\x03\x02\x02\x02\x02\u0131\x03" + + "\x02\x02\x02\x02\u0133\x03\x02\x02\x02\x02\u0135\x03\x02\x02\x02\x02\u0137" + + "\x03\x02\x02\x02\x02\u0139\x03\x02\x02\x02\x02\u013B\x03\x02\x02\x02\x02" + + "\u013D\x03\x02\x02\x02\x02\u013F\x03\x02\x02\x02\x02\u0141\x03\x02\x02" + + "\x02\x02\u0143\x03\x02\x02\x02\x02\u0145\x03\x02\x02\x02\x02\u0147\x03" + + "\x02\x02\x02\x02\u0149\x03\x02\x02\x02\x02\u014B\x03\x02\x02\x02\x02\u014D" + + "\x03\x02\x02\x02\x02\u014F\x03\x02\x02\x02\x02\u0151\x03\x02\x02\x02\x02" + + "\u0153\x03\x02\x02\x02\x02\u0155\x03\x02\x02\x02\x02\u0157\x03\x02\x02" + + "\x02\x02\u0159\x03\x02\x02\x02\x02\u015B\x03\x02\x02\x02\x02\u015D\x03" + + "\x02\x02\x02\x02\u015F\x03\x02\x02\x02\x02\u0161\x03\x02\x02\x02\x02\u0163" + + "\x03\x02\x02\x02\x02\u0165\x03\x02\x02\x02\x02\u0167\x03\x02\x02\x02\x02" + + "\u0169\x03\x02\x02\x02\x02\u016B\x03\x02\x02\x02\x02\u016D\x03\x02\x02" + + "\x02\x02\u016F\x03\x02\x02\x02\x02\u0171\x03\x02\x02\x02\x02\u0173\x03" + + "\x02\x02\x02\x02\u0175\x03\x02\x02\x02\x02\u0177\x03\x02\x02\x02\x02\u0179" + + "\x03\x02\x02\x02\x02\u017B\x03\x02\x02\x02\x02\u017D\x03\x02\x02\x02\x02" + + "\u017F\x03\x02\x02\x02\x02\u0181\x03\x02\x02\x02\x02\u0183\x03\x02\x02" + + "\x02\x02\u0185\x03\x02\x02\x02\x02\u0187\x03\x02\x02\x02\x02\u0189\x03" + + "\x02\x02\x02\x02\u018B\x03\x02\x02\x02\x02\u018D\x03\x02\x02\x02\x02\u018F" + + "\x03\x02\x02\x02\x02\u0191\x03\x02\x02\x02\x02\u0193\x03\x02\x02\x02\x02" + + "\u0195\x03\x02\x02\x02\x02\u0197\x03\x02\x02\x02\x02\u0199\x03\x02\x02" + + "\x02\x02\u019B\x03\x02\x02\x02\x02\u019D\x03\x02\x02\x02\x02\u019F\x03" + + "\x02\x02\x02\x02\u01A1\x03\x02\x02\x02\x02\u01A3\x03\x02\x02\x02\x02\u01A5" + + "\x03\x02\x02\x02\x02\u01A7\x03\x02\x02\x02\x02\u01A9\x03\x02\x02\x02\x02" + + "\u01AB\x03\x02\x02\x02\x02\u01AD\x03\x02\x02\x02\x02\u01AF\x03\x02\x02" + + "\x02\x02\u01B1\x03\x02\x02\x02\x02\u01B3\x03\x02\x02\x02\x02\u01B5\x03" + + "\x02\x02\x02\x02\u01B7\x03\x02\x02\x02\x02\u01B9\x03\x02\x02\x02\x02\u01BB" + + "\x03\x02\x02\x02\x02\u01BD\x03\x02\x02\x02\x02\u01BF\x03\x02\x02\x02\x02" + + "\u01C1\x03\x02\x02\x02\x02\u01C3\x03\x02\x02\x02\x02\u01C5\x03\x02\x02" + + "\x02\x02\u01C7\x03\x02\x02\x02\x02\u01C9\x03\x02\x02\x02\x02\u01CB\x03" + + "\x02\x02\x02\x02\u01CD\x03\x02\x02\x02\x02\u01CF\x03\x02\x02\x02\x02\u01D1" + + "\x03\x02\x02\x02\x02\u01D3\x03\x02\x02\x02\x02\u01D5\x03\x02\x02\x02\x02" + + "\u01D7\x03\x02\x02\x02\x02\u01D9\x03\x02\x02\x02\x02\u01DB\x03\x02\x02" + + "\x02\x02\u01DD\x03\x02\x02\x02\x02\u01DF\x03\x02\x02\x02\x02\u01E1\x03" + + "\x02\x02\x02\x02\u01E3\x03\x02\x02\x02\x02\u01E5\x03\x02\x02\x02\x02\u01E7" + + "\x03\x02\x02\x02\x02\u01E9\x03\x02\x02\x02\x02\u01EB\x03\x02\x02\x02"; private static readonly _serializedATNSegment2: string = - "\x02\u0243\u0A54\x03\x02\x02\x02\u0245\u0A58\x03\x02\x02\x02\u0247\u0A63" + - "\x03\x02\x02\x02\u0249\u0A7B\x03\x02\x02\x02\u024B\u0A7D\x03\x02\x02\x02" + - "\u024D\u0A86\x03\x02\x02\x02\u024F\u0A88\x03\x02\x02\x02\u0251\u0A8A\x03" + - "\x02\x02\x02\u0253\u0A9D\x03\x02\x02\x02\u0255\u0AAE\x03\x02\x02\x02\u0257" + - "\u0AB4\x03\x02\x02\x02\u0259\u025A\x07*\x02\x02\u025A\x04\x03\x02\x02" + - "\x02\u025B\u025C\x07+\x02\x02\u025C\x06\x03\x02\x02\x02\u025D\u025E\x07" + - ".\x02\x02\u025E\b\x03\x02\x02\x02\u025F\u0260\x070\x02\x02\u0260\n\x03" + - "\x02\x02\x02\u0261\u0262\x071\x02\x02\u0262\u0263\x07,\x02\x02\u0263\u0264" + - "\x07-\x02\x02\u0264\f\x03\x02\x02\x02\u0265\u0266\x07,\x02\x02\u0266\u0267" + - "\x071\x02\x02\u0267\x0E\x03\x02\x02\x02\u0268\u0269\x07/\x02\x02\u0269" + - "\u026A\x07@\x02\x02\u026A\x10\x03\x02\x02\x02\u026B\u026C\x07]\x02\x02" + - "\u026C\x12\x03\x02\x02\x02\u026D\u026E\x07_\x02\x02\u026E\x14\x03\x02" + - "\x02\x02\u026F\u0270\x07<\x02\x02\u0270\x16\x03\x02\x02\x02\u0271\u0272" + - "\x07C\x02\x02\u0272\u0273\x07F\x02\x02\u0273\u0274\x07F\x02\x02\u0274" + - "\x18\x03\x02\x02\x02\u0275\u0276\x07C\x02\x02\u0276\u0277\x07H\x02\x02" + - "\u0277\u0278\x07V\x02\x02\u0278\u0279\x07G\x02\x02\u0279\u027A\x07T\x02" + - "\x02\u027A\x1A\x03\x02\x02\x02\u027B\u027C\x07C\x02\x02\u027C\u027D\x07" + - "N\x02\x02\u027D\u027E\x07N\x02\x02\u027E\x1C\x03\x02\x02\x02\u027F\u0280" + - "\x07C\x02\x02\u0280\u0281\x07N\x02\x02\u0281\u0282\x07V\x02\x02\u0282" + - "\u0283\x07G\x02\x02\u0283\u0284\x07T\x02\x02\u0284\x1E\x03\x02\x02\x02" + - "\u0285\u0286\x07C\x02\x02\u0286\u0287\x07P\x02\x02\u0287\u0288\x07C\x02" + - "\x02\u0288\u0289\x07N\x02\x02\u0289\u028A\x07[\x02\x02\u028A\u028B\x07" + - "\\\x02\x02\u028B\u028C\x07G\x02\x02\u028C \x03\x02\x02\x02\u028D\u028E" + - "\x07C\x02\x02\u028E\u028F\x07P\x02\x02\u028F\u0290\x07F\x02\x02\u0290" + - "\"\x03\x02\x02\x02\u0291\u0292\x07C\x02\x02\u0292\u0293\x07P\x02\x02\u0293" + - "\u0294\x07V\x02\x02\u0294\u0295\x07K\x02\x02\u0295$\x03\x02\x02\x02\u0296" + - "\u0297\x07C\x02\x02\u0297\u0298\x07P\x02\x02\u0298\u0299\x07[\x02\x02" + - "\u0299&\x03\x02\x02\x02\u029A\u029B\x07C\x02\x02\u029B\u029C\x07T\x02" + - "\x02\u029C\u029D\x07E\x02\x02\u029D\u029E\x07J\x02\x02\u029E\u029F\x07" + - "K\x02\x02\u029F\u02A0\x07X\x02\x02\u02A0\u02A1\x07G\x02\x02\u02A1(\x03" + - "\x02\x02\x02\u02A2\u02A3\x07C\x02\x02\u02A3\u02A4\x07T\x02\x02\u02A4\u02A5" + - "\x07T\x02\x02\u02A5\u02A6\x07C\x02\x02\u02A6\u02A7\x07[\x02\x02\u02A7" + - "*\x03\x02\x02\x02\u02A8\u02A9\x07C\x02\x02\u02A9\u02AA\x07U\x02\x02\u02AA" + - ",\x03\x02\x02\x02\u02AB\u02AC\x07C\x02\x02\u02AC\u02AD\x07U\x02\x02\u02AD" + - "\u02AE\x07E\x02\x02\u02AE.\x03\x02\x02\x02\u02AF\u02B0\x07C\x02\x02\u02B0" + - "\u02B1\x07V\x02\x02\u02B10\x03\x02\x02\x02\u02B2\u02B3\x07C\x02\x02\u02B3" + - "\u02B4\x07W\x02\x02\u02B4\u02B5\x07V\x02\x02\u02B5\u02B6\x07J\x02\x02" + - "\u02B6\u02B7\x07Q\x02\x02\u02B7\u02B8\x07T\x02\x02\u02B8\u02B9\x07K\x02" + - "\x02\u02B9\u02BA\x07\\\x02\x02\u02BA\u02BB\x07C\x02\x02\u02BB\u02BC\x07" + - "V\x02\x02\u02BC\u02BD\x07K\x02\x02\u02BD\u02BE\x07Q\x02\x02\u02BE\u02BF" + - "\x07P\x02\x02\u02BF2\x03\x02\x02\x02\u02C0\u02C1\x07D\x02\x02\u02C1\u02C2" + - "\x07G\x02\x02\u02C2\u02C3\x07V\x02\x02\u02C3\u02C4\x07Y\x02\x02\u02C4" + - "\u02C5\x07G\x02\x02\u02C5\u02C6\x07G\x02\x02\u02C6\u02C7\x07P\x02\x02" + - "\u02C74\x03\x02\x02\x02\u02C8\u02C9\x07D\x02\x02\u02C9\u02CA\x07Q\x02" + - "\x02\u02CA\u02CB\x07V\x02\x02\u02CB\u02CC\x07J\x02\x02\u02CC6\x03\x02" + - "\x02\x02\u02CD\u02CE\x07D\x02\x02\u02CE\u02CF\x07W\x02\x02\u02CF\u02D0" + - "\x07E\x02\x02\u02D0\u02D1\x07M\x02\x02\u02D1\u02D2\x07G\x02\x02\u02D2" + - "\u02D3\x07V\x02\x02\u02D38\x03\x02\x02\x02\u02D4\u02D5\x07D\x02\x02\u02D5" + - "\u02D6\x07W\x02\x02\u02D6\u02D7\x07E\x02\x02\u02D7\u02D8\x07M\x02\x02" + - "\u02D8\u02D9\x07G\x02\x02\u02D9\u02DA\x07V\x02\x02\u02DA\u02DB\x07U\x02" + - "\x02\u02DB:\x03\x02\x02\x02\u02DC\u02DD\x07D\x02\x02\u02DD\u02DE\x07[" + - "\x02\x02\u02DE<\x03\x02\x02\x02\u02DF\u02E0\x07E\x02\x02\u02E0\u02E1\x07" + - "C\x02\x02\u02E1\u02E2\x07E\x02\x02\u02E2\u02E3\x07J\x02\x02\u02E3\u02E4" + - "\x07G\x02\x02\u02E4>\x03\x02\x02\x02\u02E5\u02E6\x07E\x02\x02\u02E6\u02E7" + - "\x07C\x02\x02\u02E7\u02E8\x07U\x02\x02\u02E8\u02E9\x07E\x02\x02\u02E9" + - "\u02EA\x07C\x02\x02\u02EA\u02EB\x07F\x02\x02\u02EB\u02EC\x07G\x02\x02" + - "\u02EC@\x03\x02\x02\x02\u02ED\u02EE\x07E\x02\x02\u02EE\u02EF\x07C\x02" + - "\x02\u02EF\u02F0\x07U\x02\x02\u02F0\u02F1\x07G\x02\x02\u02F1B\x03\x02" + - "\x02\x02\u02F2\u02F3\x07E\x02\x02\u02F3\u02F4\x07C\x02\x02\u02F4\u02F5" + - "\x07U\x02\x02\u02F5\u02F6\x07V\x02\x02\u02F6D\x03\x02\x02\x02\u02F7\u02F8" + - "\x07E\x02\x02\u02F8\u02F9\x07J\x02\x02\u02F9\u02FA\x07C\x02\x02\u02FA" + - "\u02FB\x07P\x02\x02\u02FB\u02FC\x07I\x02\x02\u02FC\u02FD\x07G\x02\x02" + - "\u02FDF\x03\x02\x02\x02\u02FE\u02FF\x07E\x02\x02\u02FF\u0300\x07J\x02" + - "\x02\u0300\u0301\x07G\x02\x02\u0301\u0302\x07E\x02\x02\u0302\u0303\x07" + - "M\x02\x02\u0303H\x03\x02\x02\x02\u0304\u0305\x07E\x02\x02\u0305\u0306" + - "\x07N\x02\x02\u0306\u0307\x07G\x02\x02\u0307\u0308\x07C\x02\x02\u0308" + - "\u0309\x07T\x02\x02\u0309J\x03\x02\x02\x02\u030A\u030B\x07E\x02\x02\u030B" + - "\u030C\x07N\x02\x02\u030C\u030D\x07W\x02\x02\u030D\u030E\x07U\x02\x02" + - "\u030E\u030F\x07V\x02\x02\u030F\u0310\x07G\x02\x02\u0310\u0311\x07T\x02" + - "\x02\u0311L\x03\x02\x02\x02\u0312\u0313\x07E\x02\x02\u0313\u0314\x07N" + - "\x02\x02\u0314\u0315\x07W\x02\x02\u0315\u0316\x07U\x02\x02\u0316\u0317" + - "\x07V\x02\x02\u0317\u0318\x07G\x02\x02\u0318\u0319\x07T\x02\x02\u0319" + - "\u031A\x07G\x02\x02\u031A\u031B\x07F\x02\x02\u031BN\x03\x02\x02\x02\u031C" + - "\u031D\x07E\x02\x02\u031D\u031E\x07Q\x02\x02\u031E\u031F\x07F\x02\x02" + - "\u031F\u0320\x07G\x02\x02\u0320\u0321\x07I\x02\x02\u0321\u0322\x07G\x02" + - "\x02\u0322\u0323\x07P\x02\x02\u0323P\x03\x02\x02\x02\u0324\u0325\x07E" + - "\x02\x02\u0325\u0326\x07Q\x02\x02\u0326\u0327\x07N\x02\x02\u0327\u0328" + - "\x07N\x02\x02\u0328\u0329\x07C\x02\x02\u0329\u032A\x07V\x02\x02\u032A" + - "\u032B\x07G\x02\x02\u032BR\x03\x02\x02\x02\u032C\u032D\x07E\x02\x02\u032D" + - "\u032E\x07Q\x02\x02\u032E\u032F\x07N\x02\x02\u032F\u0330\x07N\x02\x02" + - "\u0330\u0331\x07G\x02\x02\u0331\u0332\x07E\x02\x02\u0332\u0333\x07V\x02" + - "\x02\u0333\u0334\x07K\x02\x02\u0334\u0335\x07Q\x02\x02\u0335\u0336\x07" + - "P\x02\x02\u0336T\x03\x02\x02\x02\u0337\u0338\x07E\x02\x02\u0338\u0339" + - "\x07Q\x02\x02\u0339\u033A\x07N\x02\x02\u033A\u033B\x07W\x02\x02\u033B" + - "\u033C\x07O\x02\x02\u033C\u033D\x07P\x02\x02\u033DV\x03\x02\x02\x02\u033E" + - "\u033F\x07E\x02\x02\u033F\u0340\x07Q\x02\x02\u0340\u0341\x07N\x02\x02" + - "\u0341\u0342\x07W\x02\x02\u0342\u0343\x07O\x02\x02\u0343\u0344\x07P\x02" + - "\x02\u0344\u0345\x07U\x02\x02\u0345X\x03\x02\x02\x02\u0346\u0347\x07E" + - "\x02\x02\u0347\u0348\x07Q\x02\x02\u0348\u0349\x07O\x02\x02\u0349\u034A" + - "\x07O\x02\x02\u034A\u034B\x07G\x02\x02\u034B\u034C\x07P\x02\x02\u034C" + - "\u034D\x07V\x02\x02\u034DZ\x03\x02\x02\x02\u034E\u034F\x07E\x02\x02\u034F" + - "\u0350\x07Q\x02\x02\u0350\u0351\x07O\x02\x02\u0351\u0352\x07O\x02\x02" + - "\u0352\u0353\x07K\x02\x02\u0353\u0354\x07V\x02\x02\u0354\\\x03\x02\x02" + - "\x02\u0355\u0356\x07E\x02\x02\u0356\u0357\x07Q\x02\x02\u0357\u0358\x07" + - "O\x02\x02\u0358\u0359\x07R\x02\x02\u0359\u035A\x07C\x02\x02\u035A\u035B" + - "\x07E\x02\x02\u035B\u035C\x07V\x02\x02\u035C^\x03\x02\x02\x02\u035D\u035E" + - "\x07E\x02\x02\u035E\u035F\x07Q\x02\x02\u035F\u0360\x07O\x02\x02\u0360" + - "\u0361\x07R\x02\x02\u0361\u0362\x07C\x02\x02\u0362\u0363\x07E\x02\x02" + - "\u0363\u0364\x07V\x02\x02\u0364\u0365\x07K\x02\x02\u0365\u0366\x07Q\x02" + - "\x02\u0366\u0367\x07P\x02\x02\u0367\u0368\x07U\x02\x02\u0368`\x03\x02" + - "\x02\x02\u0369\u036A\x07E\x02\x02\u036A\u036B\x07Q\x02\x02\u036B\u036C" + - "\x07O\x02\x02\u036C\u036D\x07R\x02\x02\u036D\u036E\x07W\x02\x02\u036E" + - "\u036F\x07V\x02\x02\u036F\u0370\x07G\x02\x02\u0370b\x03\x02\x02\x02\u0371" + - "\u0372\x07E\x02\x02\u0372\u0373\x07Q\x02\x02\u0373\u0374\x07P\x02\x02" + - "\u0374\u0375\x07E\x02\x02\u0375\u0376\x07C\x02\x02\u0376\u0377\x07V\x02" + - "\x02\u0377\u0378\x07G\x02\x02\u0378\u0379\x07P\x02\x02\u0379\u037A\x07" + - "C\x02\x02\u037A\u037B\x07V\x02\x02\u037B\u037C\x07G\x02\x02\u037Cd\x03" + - "\x02\x02\x02\u037D\u037E\x07E\x02\x02\u037E\u037F\x07Q\x02\x02\u037F\u0380" + - "\x07P\x02\x02\u0380\u0381\x07U\x02\x02\u0381\u0382\x07V\x02\x02\u0382" + - "\u0383\x07T\x02\x02\u0383\u0384\x07C\x02\x02\u0384\u0385\x07K\x02\x02" + - "\u0385\u0386\x07P\x02\x02\u0386\u0387\x07V\x02\x02\u0387f\x03\x02\x02" + - "\x02\u0388\u0389\x07E\x02\x02\u0389\u038A\x07Q\x02\x02\u038A\u038B\x07" + - "U\x02\x02\u038B\u038C\x07V\x02\x02\u038Ch\x03\x02\x02\x02\u038D\u038E" + - "\x07E\x02\x02\u038E\u038F\x07T\x02\x02\u038F\u0390\x07G\x02\x02\u0390" + - "\u0391\x07C\x02\x02\u0391\u0392\x07V\x02\x02\u0392\u0393\x07G\x02\x02" + - "\u0393j\x03\x02\x02\x02\u0394\u0395\x07E\x02\x02\u0395\u0396\x07T\x02" + - "\x02\u0396\u0397\x07Q\x02\x02\u0397\u0398\x07U\x02\x02\u0398\u0399\x07" + - "U\x02\x02\u0399l\x03\x02\x02\x02\u039A\u039B\x07E\x02\x02\u039B\u039C" + - "\x07W\x02\x02\u039C\u039D\x07D\x02\x02\u039D\u039E\x07G\x02\x02\u039E" + - "n\x03\x02\x02\x02\u039F\u03A0\x07E\x02\x02\u03A0\u03A1\x07W\x02\x02\u03A1" + - "\u03A2\x07T\x02\x02\u03A2\u03A3\x07T\x02\x02\u03A3\u03A4\x07G\x02\x02" + - "\u03A4\u03A5\x07P\x02\x02\u03A5\u03A6\x07V\x02\x02\u03A6p\x03\x02\x02" + - "\x02\u03A7\u03A8\x07E\x02\x02\u03A8\u03A9\x07W\x02\x02\u03A9\u03AA\x07" + - "T\x02\x02\u03AA\u03AB\x07T\x02\x02\u03AB\u03AC\x07G\x02\x02\u03AC\u03AD" + - "\x07P\x02\x02\u03AD\u03AE\x07V\x02\x02\u03AE\u03AF\x07a\x02\x02\u03AF" + - "\u03B0\x07F\x02\x02\u03B0\u03B1\x07C\x02\x02\u03B1\u03B2\x07V\x02\x02" + - "\u03B2\u03B3\x07G\x02\x02\u03B3r\x03\x02\x02\x02\u03B4\u03B5\x07E\x02" + - "\x02\u03B5\u03B6\x07W\x02\x02\u03B6\u03B7\x07T\x02\x02\u03B7\u03B8\x07" + - "T\x02\x02\u03B8\u03B9\x07G\x02\x02\u03B9\u03BA\x07P\x02\x02\u03BA\u03BB" + - "\x07V\x02\x02\u03BB\u03BC\x07a\x02\x02\u03BC\u03BD\x07V\x02\x02\u03BD" + - "\u03BE\x07K\x02\x02\u03BE\u03BF\x07O\x02\x02\u03BF\u03C0\x07G\x02\x02" + - "\u03C0t\x03\x02\x02\x02\u03C1\u03C2\x07E\x02\x02\u03C2\u03C3\x07W\x02" + - "\x02\u03C3\u03C4\x07T\x02\x02\u03C4\u03C5\x07T\x02\x02\u03C5\u03C6\x07" + - "G\x02\x02\u03C6\u03C7\x07P\x02\x02\u03C7\u03C8\x07V\x02\x02\u03C8\u03C9" + - "\x07a\x02\x02\u03C9\u03CA\x07V\x02\x02\u03CA\u03CB\x07K\x02\x02\u03CB" + - "\u03CC\x07O\x02\x02\u03CC\u03CD\x07G\x02\x02\u03CD\u03CE\x07U\x02\x02" + - "\u03CE\u03CF\x07V\x02\x02\u03CF\u03D0\x07C\x02\x02\u03D0\u03D1\x07O\x02" + - "\x02\u03D1\u03D2\x07R\x02\x02\u03D2v\x03\x02\x02\x02\u03D3\u03D4\x07E" + - "\x02\x02\u03D4\u03D5\x07W\x02\x02\u03D5\u03D6\x07T\x02\x02\u03D6\u03D7" + - "\x07T\x02\x02\u03D7\u03D8\x07G\x02\x02\u03D8\u03D9\x07P\x02\x02\u03D9" + - "\u03DA\x07V\x02\x02\u03DA\u03DB\x07a\x02\x02\u03DB\u03DC\x07W\x02\x02" + - "\u03DC\u03DD\x07U\x02\x02\u03DD\u03DE\x07G\x02\x02\u03DE\u03DF\x07T\x02" + - "\x02\u03DFx\x03\x02\x02\x02\u03E0\u03E1\x07F\x02\x02\u03E1\u03E2\x07C" + - "\x02\x02\u03E2\u03E3\x07V\x02\x02\u03E3\u03E4\x07C\x02\x02\u03E4z\x03" + - "\x02\x02\x02\u03E5\u03E6\x07F\x02\x02\u03E6\u03E7\x07C\x02\x02\u03E7\u03E8" + - "\x07V\x02\x02\u03E8\u03E9\x07C\x02\x02\u03E9\u03EA\x07D\x02\x02\u03EA" + - "\u03EB\x07C\x02\x02\u03EB\u03EC\x07U\x02\x02\u03EC\u03ED\x07G\x02\x02" + - "\u03ED|\x03\x02\x02\x02\u03EE\u03EF\x07F\x02\x02\u03EF\u03F0\x07C\x02" + - "\x02\u03F0\u03F1\x07V\x02\x02\u03F1\u03F2\x07C\x02\x02\u03F2\u03F3\x07" + - "D\x02\x02\u03F3\u03F4\x07C\x02\x02\u03F4\u03F5\x07U\x02\x02\u03F5\u03F6" + - "\x07G\x02\x02\u03F6\u03FF\x07U\x02\x02\u03F7\u03F8\x07U\x02\x02\u03F8" + - "\u03F9\x07E\x02\x02\u03F9\u03FA\x07J\x02\x02\u03FA\u03FB\x07G\x02\x02" + - "\u03FB\u03FC\x07O\x02\x02\u03FC\u03FD\x07C\x02\x02\u03FD\u03FF\x07U\x02" + - "\x02\u03FE\u03EE\x03\x02\x02\x02\u03FE\u03F7\x03\x02\x02\x02\u03FF~\x03" + - "\x02\x02\x02\u0400\u0401\x07F\x02\x02\u0401\u0402\x07D\x02\x02\u0402\u0403" + - "\x07R\x02\x02\u0403\u0404\x07T\x02\x02\u0404\u0405\x07Q\x02\x02\u0405" + - "\u0406\x07R\x02\x02\u0406\u0407\x07G\x02\x02\u0407\u0408\x07T\x02\x02" + - "\u0408\u0409\x07V\x02\x02\u0409\u040A\x07K\x02\x02\u040A\u040B\x07G\x02" + - "\x02\u040B\u040C\x07U\x02\x02\u040C\x80\x03\x02\x02\x02\u040D\u040E\x07" + - "F\x02\x02\u040E\u040F\x07G\x02\x02\u040F\u0410\x07H\x02\x02\u0410\u0411" + - "\x07K\x02\x02\u0411\u0412\x07P\x02\x02\u0412\u0413\x07G\x02\x02\u0413" + - "\u0414\x07F\x02\x02\u0414\x82\x03\x02\x02\x02\u0415\u0416\x07F\x02\x02" + - "\u0416\u0417\x07G\x02\x02\u0417\u0418\x07N\x02\x02\u0418\u0419\x07G\x02" + - "\x02\u0419\u041A\x07V\x02\x02\u041A\u041B\x07G\x02\x02\u041B\x84\x03\x02" + - "\x02\x02\u041C\u041D\x07F\x02\x02\u041D\u041E\x07G\x02\x02\u041E\u041F" + - "\x07N\x02\x02\u041F\u0420\x07K\x02\x02\u0420\u0421\x07O\x02\x02\u0421" + - "\u0422\x07K\x02\x02\u0422\u0423\x07V\x02\x02\u0423\u0424\x07G\x02\x02" + - "\u0424\u0425\x07F\x02\x02\u0425\x86\x03\x02\x02\x02\u0426\u0427\x07F\x02" + - "\x02\u0427\u0428\x07G\x02\x02\u0428\u0429\x07U\x02\x02\u0429\u042A\x07" + - "E\x02\x02\u042A\x88\x03\x02\x02\x02\u042B\u042C\x07F\x02\x02\u042C\u042D" + - "\x07G\x02\x02\u042D\u042E\x07U\x02\x02\u042E\u042F\x07E\x02\x02\u042F" + - "\u0430\x07T\x02\x02\u0430\u0431\x07K\x02\x02\u0431\u0432\x07D\x02\x02" + - "\u0432\u0433\x07G\x02\x02\u0433\x8A\x03\x02\x02\x02\u0434\u0435\x07F\x02" + - "\x02\u0435\u0436\x07H\x02\x02\u0436\u0437\x07U\x02\x02\u0437\x8C\x03\x02" + - "\x02\x02\u0438\u0439\x07F\x02\x02\u0439\u043A\x07K\x02\x02\u043A\u043B" + - "\x07T\x02\x02\u043B\u043C\x07G\x02\x02\u043C\u043D\x07E\x02\x02\u043D" + - "\u043E\x07V\x02\x02\u043E\u043F\x07Q\x02\x02\u043F\u0440\x07T\x02\x02" + - "\u0440\u0441\x07K\x02\x02\u0441\u0442\x07G\x02\x02\u0442\u0443\x07U\x02" + - "\x02\u0443\x8E\x03\x02\x02\x02\u0444\u0445\x07F\x02\x02\u0445\u0446\x07" + - "K\x02\x02\u0446\u0447\x07T\x02\x02\u0447\u0448\x07G\x02\x02\u0448\u0449" + - "\x07E\x02\x02\u0449\u044A\x07V\x02\x02\u044A\u044B\x07Q\x02\x02\u044B" + - "\u044C\x07T\x02\x02\u044C\u044D\x07[\x02\x02\u044D\x90\x03\x02\x02\x02" + - "\u044E\u044F\x07F\x02\x02\u044F\u0450\x07K\x02\x02\u0450\u0451\x07U\x02" + - "\x02\u0451\u0452\x07V\x02\x02\u0452\u0453\x07K\x02\x02\u0453\u0454\x07" + - "P\x02\x02\u0454\u0455\x07E\x02\x02\u0455\u0456\x07V\x02\x02\u0456\x92" + - "\x03\x02\x02\x02\u0457\u0458\x07F\x02\x02\u0458\u0459\x07K\x02\x02\u0459" + - "\u045A\x07U\x02\x02\u045A\u045B\x07V\x02\x02\u045B\u045C\x07T\x02\x02" + - "\u045C\u045D\x07K\x02\x02\u045D\u045E\x07D\x02\x02\u045E\u045F\x07W\x02" + - "\x02\u045F\u0460\x07V\x02\x02\u0460\u0461\x07G\x02\x02\u0461\x94\x03\x02" + - "\x02\x02\u0462\u0463\x07F\x02\x02\u0463\u0464\x07K\x02\x02\u0464\u0465" + - "\x07X\x02\x02\u0465\x96\x03\x02\x02\x02\u0466\u0467\x07F\x02\x02\u0467" + - "\u0468\x07T\x02\x02\u0468\u0469\x07Q\x02\x02\u0469\u046A\x07R\x02\x02" + - "\u046A\x98\x03\x02\x02\x02\u046B\u046C\x07G\x02\x02\u046C\u046D\x07N\x02" + - "\x02\u046D\u046E\x07U\x02\x02\u046E\u046F\x07G\x02\x02\u046F\x9A\x03\x02" + - "\x02\x02\u0470\u0471\x07G\x02\x02\u0471\u0472\x07P\x02\x02\u0472\u0473" + - "\x07F\x02\x02\u0473\x9C\x03\x02\x02\x02\u0474\u0475\x07G\x02\x02\u0475" + - "\u0476\x07U\x02\x02\u0476\u0477\x07E\x02\x02\u0477\u0478\x07C\x02\x02" + - "\u0478\u0479\x07R\x02\x02\u0479\u047A\x07G\x02\x02\u047A\x9E\x03\x02\x02" + - "\x02\u047B\u047C\x07G\x02\x02\u047C\u047D\x07U\x02\x02\u047D\u047E\x07" + - "E\x02\x02\u047E\u047F\x07C\x02\x02\u047F\u0480\x07R\x02\x02\u0480\u0481" + - "\x07G\x02\x02\u0481\u0482\x07F\x02\x02\u0482\xA0\x03\x02\x02\x02\u0483" + - "\u0484\x07G\x02\x02\u0484\u0485\x07Z\x02\x02\u0485\u0486\x07E\x02\x02" + - "\u0486\u0487\x07G\x02\x02\u0487\u0488\x07R\x02\x02\u0488\u0489\x07V\x02" + - "\x02\u0489\xA2\x03\x02\x02\x02\u048A\u048B\x07G\x02\x02\u048B\u048C\x07" + - "Z\x02\x02\u048C\u048D\x07E\x02\x02\u048D\u048E\x07J\x02\x02\u048E\u048F" + - "\x07C\x02\x02\u048F\u0490\x07P\x02\x02\u0490\u0491\x07I\x02\x02\u0491" + - "\u0492\x07G\x02\x02\u0492\xA4\x03\x02\x02\x02\u0493\u0494\x07G\x02\x02" + - "\u0494\u0495\x07Z\x02\x02\u0495\u0496\x07K\x02\x02\u0496\u0497\x07U\x02" + - "\x02\u0497\u0498\x07V\x02\x02\u0498\u0499\x07U\x02\x02\u0499\xA6\x03\x02" + - "\x02\x02\u049A\u049B\x07G\x02\x02\u049B\u049C\x07Z\x02\x02\u049C\u049D" + - "\x07R\x02\x02\u049D\u049E\x07N\x02\x02\u049E\u049F\x07C\x02\x02\u049F" + - "\u04A0\x07K\x02\x02\u04A0\u04A1\x07P\x02\x02\u04A1\xA8\x03\x02\x02\x02" + - "\u04A2\u04A3\x07G\x02\x02\u04A3\u04A4\x07Z\x02\x02\u04A4\u04A5\x07R\x02" + - "\x02\u04A5\u04A6\x07Q\x02\x02\u04A6\u04A7\x07T\x02\x02\u04A7\u04A8\x07" + - "V\x02\x02\u04A8\xAA\x03\x02\x02\x02\u04A9\u04AA\x07G\x02\x02\u04AA\u04AB" + - "\x07Z\x02\x02\u04AB\u04AC\x07V\x02\x02\u04AC\u04AD\x07G\x02\x02\u04AD" + - "\u04AE\x07P\x02\x02\u04AE\u04AF\x07F\x02\x02\u04AF\u04B0\x07G\x02\x02" + - "\u04B0\u04B1\x07F\x02\x02\u04B1\xAC\x03\x02\x02\x02\u04B2\u04B3\x07G\x02" + - "\x02\u04B3\u04B4\x07Z\x02\x02\u04B4\u04B5\x07V\x02\x02\u04B5\u04B6\x07" + - "G\x02\x02\u04B6\u04B7\x07T\x02\x02\u04B7\u04B8\x07P\x02\x02\u04B8\u04B9" + - "\x07C\x02\x02\u04B9\u04BA\x07N\x02\x02\u04BA\xAE\x03\x02\x02\x02\u04BB" + - "\u04BC\x07G\x02\x02\u04BC\u04BD\x07Z\x02\x02\u04BD\u04BE\x07V\x02\x02" + - "\u04BE\u04BF\x07T\x02\x02\u04BF\u04C0\x07C\x02\x02\u04C0\u04C1\x07E\x02" + - "\x02\u04C1\u04C2\x07V\x02\x02\u04C2\xB0\x03\x02\x02\x02\u04C3\u04C4\x07" + - "H\x02\x02\u04C4\u04C5\x07C\x02\x02\u04C5\u04C6\x07N\x02\x02\u04C6\u04C7" + - "\x07U\x02\x02\u04C7\u04C8\x07G\x02\x02\u04C8\xB2\x03\x02\x02\x02\u04C9" + - "\u04CA\x07H\x02\x02\u04CA\u04CB\x07G\x02\x02\u04CB\u04CC\x07V\x02\x02" + - "\u04CC\u04CD\x07E\x02\x02\u04CD\u04CE\x07J\x02\x02\u04CE\xB4\x03\x02\x02" + - "\x02\u04CF\u04D0\x07H\x02\x02\u04D0\u04D1\x07K\x02\x02\u04D1\u04D2\x07" + - "G\x02\x02\u04D2\u04D3\x07N\x02\x02\u04D3\u04D4\x07F\x02\x02\u04D4\u04D5" + - "\x07U\x02\x02\u04D5\xB6\x03\x02\x02\x02\u04D6\u04D7\x07H\x02\x02\u04D7" + - "\u04D8\x07K\x02\x02\u04D8\u04D9\x07N\x02\x02\u04D9\u04DA\x07V\x02\x02" + - "\u04DA\u04DB\x07G\x02\x02\u04DB\u04DC\x07T\x02\x02\u04DC\xB8\x03\x02\x02" + - "\x02\u04DD\u04DE\x07H\x02\x02\u04DE\u04DF\x07K\x02\x02\u04DF\u04E0\x07" + - "N\x02\x02\u04E0\u04E1\x07G\x02\x02\u04E1\u04E2\x07H\x02\x02\u04E2\u04E3" + - "\x07Q\x02\x02\u04E3\u04E4\x07T\x02\x02\u04E4\u04E5\x07O\x02\x02\u04E5" + - "\u04E6\x07C\x02\x02\u04E6\u04E7\x07V\x02\x02\u04E7\xBA\x03\x02\x02\x02" + - "\u04E8\u04E9\x07H\x02\x02\u04E9\u04EA\x07K\x02\x02\u04EA\u04EB\x07T\x02" + - "\x02\u04EB\u04EC\x07U\x02\x02\u04EC\u04ED\x07V\x02\x02\u04ED\xBC\x03\x02" + - "\x02\x02\u04EE\u04EF\x07H\x02\x02\u04EF\u04F0\x07Q\x02\x02\u04F0\u04F1" + - "\x07N\x02\x02\u04F1\u04F2\x07N\x02\x02\u04F2\u04F3\x07Q\x02\x02\u04F3" + - "\u04F4\x07Y\x02\x02\u04F4\u04F5\x07K\x02\x02\u04F5\u04F6\x07P\x02\x02" + - "\u04F6\u04F7\x07I\x02\x02\u04F7\xBE\x03\x02\x02\x02\u04F8\u04F9\x07H\x02" + - "\x02\u04F9\u04FA\x07Q\x02\x02\u04FA\u04FB\x07T\x02\x02\u04FB\xC0\x03\x02" + - "\x02\x02\u04FC\u04FD\x07H\x02\x02\u04FD\u04FE\x07Q\x02\x02\u04FE\u04FF" + - "\x07T\x02\x02\u04FF\u0500\x07G\x02\x02\u0500\u0501\x07K\x02\x02\u0501" + - "\u0502\x07I\x02\x02\u0502\u0503\x07P\x02\x02\u0503\xC2\x03\x02\x02\x02" + - "\u0504\u0505\x07H\x02\x02\u0505\u0506\x07Q\x02\x02\u0506\u0507\x07T\x02" + - "\x02\u0507\u0508\x07O\x02\x02\u0508\u0509\x07C\x02\x02\u0509\u050A\x07" + - "V\x02\x02\u050A\xC4\x03\x02\x02\x02\u050B\u050C\x07H\x02\x02\u050C\u050D" + - "\x07Q\x02\x02\u050D\u050E\x07T\x02\x02\u050E\u050F\x07O\x02\x02\u050F" + - "\u0510\x07C\x02\x02\u0510\u0511\x07V\x02\x02\u0511\u0512\x07V\x02\x02" + - "\u0512\u0513\x07G\x02\x02\u0513\u0514\x07F\x02\x02\u0514\xC6\x03\x02\x02" + - "\x02\u0515\u0516\x07H\x02\x02\u0516\u0517\x07T\x02\x02\u0517\u0518\x07" + - "Q\x02\x02\u0518\u0519\x07O\x02\x02\u0519\xC8\x03\x02\x02\x02\u051A\u051B" + - "\x07H\x02\x02\u051B\u051C\x07W\x02\x02\u051C\u051D\x07N\x02\x02\u051D" + - "\u051E\x07N\x02\x02\u051E\xCA\x03\x02\x02\x02\u051F\u0520\x07H\x02\x02" + - "\u0520\u0521\x07W\x02\x02\u0521\u0522\x07P\x02\x02\u0522\u0523\x07E\x02" + - "\x02\u0523\u0524\x07V\x02\x02\u0524\u0525\x07K\x02\x02\u0525\u0526\x07" + - "Q\x02\x02\u0526\u0527\x07P\x02\x02\u0527\xCC\x03\x02\x02\x02\u0528\u0529" + - "\x07H\x02\x02\u0529\u052A\x07W\x02\x02\u052A\u052B\x07P\x02\x02\u052B" + - "\u052C\x07E\x02\x02\u052C\u052D\x07V\x02\x02\u052D\u052E\x07K\x02\x02" + - "\u052E\u052F\x07Q\x02\x02\u052F\u0530\x07P\x02\x02\u0530\u0531\x07U\x02" + - "\x02\u0531\xCE\x03\x02\x02\x02\u0532\u0533\x07I\x02\x02\u0533\u0534\x07" + - "N\x02\x02\u0534\u0535\x07Q\x02\x02\u0535\u0536\x07D\x02\x02\u0536\u0537" + - "\x07C\x02\x02\u0537\u0538\x07N\x02\x02\u0538\xD0\x03\x02\x02\x02\u0539" + - "\u053A\x07I\x02\x02\u053A\u053B\x07T\x02\x02\u053B\u053C\x07C\x02\x02" + - "\u053C\u053D\x07P\x02\x02\u053D\u053E\x07V\x02\x02\u053E\xD2\x03\x02\x02" + - "\x02\u053F\u0540\x07I\x02\x02\u0540\u0541\x07T\x02\x02\u0541\u0542\x07" + - "Q\x02\x02\u0542\u0543\x07W\x02\x02\u0543\u0544\x07R\x02\x02\u0544\xD4" + - "\x03\x02\x02\x02\u0545\u0546\x07I\x02\x02\u0546\u0547\x07T\x02\x02\u0547" + - "\u0548\x07Q\x02\x02\u0548\u0549\x07W\x02\x02\u0549\u054A\x07R\x02\x02" + - "\u054A\u054B\x07K\x02\x02\u054B\u054C\x07P\x02\x02\u054C\u054D\x07I\x02" + - "\x02\u054D\xD6\x03\x02\x02\x02\u054E\u054F\x07J\x02\x02\u054F\u0550\x07" + - "C\x02\x02\u0550\u0551\x07X\x02\x02\u0551\u0552\x07K\x02\x02\u0552\u0553" + - "\x07P\x02\x02\u0553\u0554\x07I\x02\x02\u0554\xD8\x03\x02\x02\x02\u0555" + - "\u0556\x07K\x02\x02\u0556\u0557\x07H\x02\x02\u0557\xDA\x03\x02\x02\x02" + - "\u0558\u0559\x07K\x02\x02\u0559\u055A\x07I\x02\x02\u055A\u055B\x07P\x02" + - "\x02\u055B\u055C\x07Q\x02\x02\u055C\u055D\x07T\x02\x02\u055D\u055E\x07" + - "G\x02\x02\u055E\xDC\x03\x02\x02\x02\u055F\u0560\x07K\x02\x02\u0560\u0561" + - "\x07O\x02\x02\u0561\u0562\x07R\x02\x02\u0562\u0563\x07Q\x02\x02\u0563" + - "\u0564\x07T\x02\x02\u0564\u0565\x07V\x02\x02\u0565\xDE\x03\x02\x02\x02" + - "\u0566\u0567\x07K\x02\x02\u0567\u0568\x07P\x02\x02\u0568\xE0\x03\x02\x02" + - "\x02\u0569\u056A\x07K\x02\x02\u056A\u056B\x07P\x02\x02\u056B\u056C\x07" + - "F\x02\x02\u056C\u056D\x07G\x02\x02\u056D\u056E\x07Z\x02\x02\u056E\xE2" + - "\x03\x02\x02\x02\u056F\u0570\x07K\x02\x02\u0570\u0571\x07P\x02\x02\u0571" + - "\u0572\x07F\x02\x02\u0572\u0573\x07G\x02\x02\u0573\u0574\x07Z\x02\x02" + - "\u0574\u0575\x07G\x02\x02\u0575\u0576\x07U\x02\x02\u0576\xE4\x03\x02\x02" + - "\x02\u0577\u0578\x07K\x02\x02\u0578\u0579\x07P\x02\x02\u0579\u057A\x07" + - "P\x02\x02\u057A\u057B\x07G\x02\x02\u057B\u057C\x07T\x02\x02\u057C\xE6" + - "\x03\x02\x02\x02\u057D\u057E\x07K\x02\x02\u057E\u057F\x07P\x02\x02\u057F" + - "\u0580\x07R\x02\x02\u0580\u0581\x07C\x02\x02\u0581\u0582\x07V\x02\x02" + - "\u0582\u0583\x07J\x02\x02\u0583\xE8\x03\x02\x02\x02\u0584\u0585\x07K\x02" + - "\x02\u0585\u0586\x07P\x02\x02\u0586\u0587\x07R\x02\x02\u0587\u0588\x07" + - "W\x02\x02\u0588\u0589\x07V\x02\x02\u0589\u058A\x07H\x02\x02\u058A\u058B" + - "\x07Q\x02\x02\u058B\u058C\x07T\x02\x02\u058C\u058D\x07O\x02\x02\u058D" + - "\u058E\x07C\x02\x02\u058E"; + "\x02\u01ED\x03\x02\x02\x02\x02\u01EF\x03\x02\x02\x02\x02\u01F1\x03\x02" + + "\x02\x02\x02\u01F3\x03\x02\x02\x02\x02\u01F5\x03\x02\x02\x02\x02\u01F7" + + "\x03\x02\x02\x02\x02\u01F9\x03\x02\x02\x02\x02\u01FB\x03\x02\x02\x02\x02" + + "\u01FD\x03\x02\x02\x02\x02\u01FF\x03\x02\x02\x02\x02\u0201\x03\x02\x02" + + "\x02\x02\u0203\x03\x02\x02\x02\x02\u0205\x03\x02\x02\x02\x02\u0207\x03" + + "\x02\x02\x02\x02\u0209\x03\x02\x02\x02\x02\u020B\x03\x02\x02\x02\x02\u020D" + + "\x03\x02\x02\x02\x02\u020F\x03\x02\x02\x02\x02\u0211\x03\x02\x02\x02\x02" + + "\u0213\x03\x02\x02\x02\x02\u0215\x03\x02\x02\x02\x02\u0217\x03\x02\x02" + + "\x02\x02\u0219\x03\x02\x02\x02\x02\u021B\x03\x02\x02\x02\x02\u021D\x03" + + "\x02\x02\x02\x02\u021F\x03\x02\x02\x02\x02\u0221\x03\x02\x02\x02\x02\u0223" + + "\x03\x02\x02\x02\x02\u0225\x03\x02\x02\x02\x02\u0227\x03\x02\x02\x02\x02" + + "\u0229\x03\x02\x02\x02\x02\u022B\x03\x02\x02\x02\x02\u022D\x03\x02\x02" + + "\x02\x02\u022F\x03\x02\x02\x02\x02\u0231\x03\x02\x02\x02\x02\u0233\x03" + + "\x02\x02\x02\x02\u0235\x03\x02\x02\x02\x02\u0237\x03\x02\x02\x02\x02\u0239" + + "\x03\x02\x02\x02\x02\u023B\x03\x02\x02\x02\x02\u023D\x03\x02\x02\x02\x02" + + "\u023F\x03\x02\x02\x02\x02\u0241\x03\x02\x02\x02\x02\u0243\x03\x02\x02" + + "\x02\x02\u0245\x03\x02\x02\x02\x02\u0247\x03\x02\x02\x02\x02\u0249\x03" + + "\x02\x02\x02\x02\u024B\x03\x02\x02\x02\x02\u024D\x03\x02\x02\x02\x02\u024F" + + "\x03\x02\x02\x02\x02\u0251\x03\x02\x02\x02\x02\u0253\x03\x02\x02\x02\x02" + + "\u0255\x03\x02\x02\x02\x02\u0257\x03\x02\x02\x02\x02\u0259\x03\x02\x02" + + "\x02\x02\u025B\x03\x02\x02\x02\x02\u025D\x03\x02\x02\x02\x02\u025F\x03" + + "\x02\x02\x02\x02\u0261\x03\x02\x02\x02\x02\u0263\x03\x02\x02\x02\x02\u0265" + + "\x03\x02\x02\x02\x02\u0267\x03\x02\x02\x02\x02\u0269\x03\x02\x02\x02\x02" + + "\u026B\x03\x02\x02\x02\x02\u026D\x03\x02\x02\x02\x02\u026F\x03\x02\x02" + + "\x02\x02\u0271\x03\x02\x02\x02\x02\u0273\x03\x02\x02\x02\x02\u0275\x03" + + "\x02\x02\x02\x02\u0277\x03\x02\x02\x02\x02\u0279\x03\x02\x02\x02\x02\u027B" + + "\x03\x02\x02\x02\x02\u027D\x03\x02\x02\x02\x02\u027F\x03\x02\x02\x02\x02" + + "\u0281\x03\x02\x02\x02\x02\u0283\x03\x02\x02\x02\x02\u0285\x03\x02\x02" + + "\x02\x02\u0287\x03\x02\x02\x02\x02\u0289\x03\x02\x02\x02\x02\u028B\x03" + + "\x02\x02\x02\x02\u028D\x03\x02\x02\x02\x02\u028F\x03\x02\x02\x02\x02\u0291" + + "\x03\x02\x02\x02\x02\u0293\x03\x02\x02\x02\x02\u0295\x03\x02\x02\x02\x02" + + "\u0297\x03\x02\x02\x02\x02\u0299\x03\x02\x02\x02\x02\u029B\x03\x02\x02" + + "\x02\x02\u029D\x03\x02\x02\x02\x02\u029F\x03\x02\x02\x02\x02\u02A1\x03" + + "\x02\x02\x02\x02\u02A3\x03\x02\x02\x02\x02\u02A5\x03\x02\x02\x02\x02\u02A7" + + "\x03\x02\x02\x02\x02\u02A9\x03\x02\x02\x02\x02\u02AB\x03\x02\x02\x02\x02" + + "\u02AD\x03\x02\x02\x02\x02\u02AF\x03\x02\x02\x02\x02\u02B1\x03\x02\x02" + + "\x02\x02\u02B3\x03\x02\x02\x02\x02\u02B5\x03\x02\x02\x02\x02\u02B7\x03" + + "\x02\x02\x02\x02\u02B9\x03\x02\x02\x02\x02\u02BB\x03\x02\x02\x02\x02\u02BD" + + "\x03\x02\x02\x02\x02\u02BF\x03\x02\x02\x02\x02\u02C1\x03\x02\x02\x02\x02" + + "\u02C3\x03\x02\x02\x02\x02\u02C5\x03\x02\x02\x02\x02\u02C7\x03\x02\x02" + + "\x02\x02\u02C9\x03\x02\x02\x02\x02\u02CB\x03\x02\x02\x02\x02\u02CD\x03" + + "\x02\x02\x02\x02\u02CF\x03\x02\x02\x02\x02\u02D1\x03\x02\x02\x02\x02\u02D3" + + "\x03\x02\x02\x02\x02\u02D5\x03\x02\x02\x02\x02\u02D7\x03\x02\x02\x02\x02" + + "\u02D9\x03\x02\x02\x02\x02\u02DB\x03\x02\x02\x02\x02\u02DD\x03\x02\x02" + + "\x02\x02\u02DF\x03\x02\x02\x02\x02\u02E1\x03\x02\x02\x02\x02\u02E3\x03" + + "\x02\x02\x02\x02\u02E5\x03\x02\x02\x02\x02\u02E7\x03\x02\x02\x02\x02\u02E9" + + "\x03\x02\x02\x02\x02\u02EB\x03\x02\x02\x02\x02\u02ED\x03\x02\x02\x02\x02" + + "\u02EF\x03\x02\x02\x02\x02\u02F1\x03\x02\x02\x02\x02\u02F3\x03\x02\x02" + + "\x02\x02\u02F5\x03\x02\x02\x02\x02\u02FF\x03\x02\x02\x02\x02\u0301\x03" + + "\x02\x02\x02\x02\u0303\x03\x02\x02\x02\x02\u0305\x03\x02\x02\x02\x03\u0307" + + "\x03\x02\x02\x02\x05\u0309\x03\x02\x02\x02\x07\u030B\x03\x02\x02\x02\t" + + "\u030D\x03\x02\x02\x02\v\u030F\x03\x02\x02\x02\r\u0311\x03\x02\x02\x02" + + "\x0F\u0313\x03\x02\x02\x02\x11\u0315\x03\x02\x02\x02\x13\u0319\x03\x02" + + "\x02\x02\x15\u031F\x03\x02\x02\x02\x17\u0323\x03\x02\x02\x02\x19\u0329" + + "\x03\x02\x02\x02\x1B\u0330\x03\x02\x02\x02\x1D\u0338\x03\x02\x02\x02\x1F" + + "\u033C\x03\x02\x02\x02!\u0341\x03\x02\x02\x02#\u0345\x03\x02\x02\x02%" + + "\u034F\x03\x02\x02\x02\'\u0357\x03\x02\x02\x02)\u035D\x03\x02\x02\x02" + + "+\u0360\x03\x02\x02\x02-\u0364\x03\x02\x02\x02/\u0367\x03\x02\x02\x02" + + "1\u0375\x03\x02\x02\x023\u037D\x03\x02\x02\x025\u0384\x03\x02\x02\x02" + + "7\u038B\x03\x02\x02\x029\u0393\x03\x02\x02\x02;\u0398\x03\x02\x02\x02" + + "=\u039F\x03\x02\x02\x02?\u03A7\x03\x02\x02\x02A\u03AA\x03\x02\x02\x02" + + "C\u03AF\x03\x02\x02\x02E\u03B5\x03\x02\x02\x02G\u03BD\x03\x02\x02\x02" + + "I\u03C2\x03\x02\x02\x02K\u03C7\x03\x02\x02\x02M\u03CF\x03\x02\x02\x02" + + "O\u03D8\x03\x02\x02\x02Q\u03DF\x03\x02\x02\x02S\u03E4\x03\x02\x02\x02" + + "U\u03EE\x03\x02\x02\x02W\u03F4\x03\x02\x02\x02Y\u03FA\x03\x02\x02\x02" + + "[\u0402\x03\x02\x02\x02]\u040C\x03\x02\x02\x02_\u0414\x03\x02\x02\x02" + + "a\u041C\x03\x02\x02\x02c\u0427\x03\x02\x02\x02e\u042E\x03\x02\x02\x02" + + "g\u0436\x03\x02\x02\x02i\u043E\x03\x02\x02\x02k\u0445\x03\x02\x02\x02" + + "m\u044D\x03\x02\x02\x02o\u0459\x03\x02\x02\x02q\u0461\x03\x02\x02\x02" + + "s\u046D\x03\x02\x02\x02u\u0478\x03\x02\x02\x02w\u047D\x03\x02\x02\x02" + + "y\u0484\x03\x02\x02\x02{\u048A\x03\x02\x02\x02}\u048F\x03\x02\x02\x02" + + "\x7F\u0497\x03\x02\x02\x02\x81\u04A4\x03\x02\x02\x02\x83\u04B1\x03\x02" + + "\x02\x02\x85\u04C3\x03\x02\x02\x02\x87\u04D0\x03\x02\x02\x02\x89\u04D4" + + "\x03\x02\x02\x02\x8B\u04D9\x03\x02\x02\x02\x8D\u04E3\x03\x02\x02\x02\x8F" + + "\u04E8\x03\x02\x02\x02\x91\u04ED\x03\x02\x02\x02\x93\u04F6\x03\x02\x02" + + "\x02\x95\u0500\x03\x02\x02\x02\x97\u0508\x03\x02\x02\x02\x99\u0511\x03" + + "\x02\x02\x02\x9B\u051A\x03\x02\x02\x02\x9D\u0524\x03\x02\x02\x02\x9F\u0531" + + "\x03\x02\x02\x02\xA1\u0535\x03\x02\x02\x02\xA3\u053D\x03\x02\x02\x02\xA5" + + "\u0545\x03\x02\x02\x02\xA7\u054D\x03\x02\x02\x02\xA9\u0555\x03\x02\x02" + + "\x02\xAB\u055C\x03\x02\x02\x02\xAD\u0566\x03\x02\x02\x02\xAF\u056B\x03" + + "\x02\x02\x02\xB1\u0574\x03\x02\x02\x02\xB3\u0578\x03\x02\x02\x02\xB5\u0584" + + "\x03\x02\x02\x02\xB7\u058E\x03\x02\x02\x02\xB9\u0597\x03\x02\x02\x02\xBB" + + "\u05A2\x03\x02\x02\x02\xBD\u05A6\x03\x02\x02\x02\xBF\u05AD\x03\x02\x02" + + "\x02\xC1\u05B2\x03\x02\x02\x02\xC3\u05B7\x03\x02\x02\x02\xC5\u05BB\x03" + + "\x02\x02\x02\xC7\u05C2\x03\x02\x02\x02\xC9\u05CA\x03\x02\x02\x02\xCB\u05D1" + + "\x03\x02\x02\x02\xCD\u05DA\x03\x02\x02\x02\xCF\u05E2\x03\x02\x02\x02\xD1" + + "\u05E9\x03\x02\x02\x02\xD3\u05F1\x03\x02\x02\x02\xD5\u05F8\x03\x02\x02" + + "\x02\xD7\u0601\x03\x02\x02\x02\xD9\u060A\x03\x02\x02\x02\xDB\u0612\x03" + + "\x02\x02\x02\xDD\u0618\x03\x02\x02\x02\xDF\u061E\x03\x02\x02\x02\xE1\u0625" + + "\x03\x02\x02\x02\xE3\u062C\x03\x02\x02\x02\xE5\u0637\x03\x02\x02\x02\xE7" + + "\u063D\x03\x02\x02\x02\xE9\u0643\x03\x02\x02\x02\xEB\u064D\x03\x02\x02" + + "\x02\xED\u0651\x03\x02\x02\x02\xEF\u0659\x03\x02\x02\x02\xF1\u0660\x03" + + "\x02\x02\x02\xF3\u066A\x03\x02\x02\x02\xF5\u066F\x03\x02\x02\x02\xF7\u0674" + + "\x03\x02\x02\x02\xF9\u067D\x03\x02\x02\x02\xFB\u0687\x03\x02\x02\x02\xFD" + + "\u0691\x03\x02\x02\x02\xFF\u0698\x03\x02\x02\x02\u0101\u069E\x03\x02\x02" + + "\x02\u0103\u06A4\x03\x02\x02\x02\u0105\u06AD\x03\x02\x02\x02\u0107\u06B4" + + "\x03\x02\x02\x02\u0109\u06B6\x03\x02\x02\x02\u010B\u06BB\x03\x02\x02\x02" + + "\u010D\u06C1\x03\x02\x02\x02\u010F\u06CC\x03\x02\x02\x02\u0111\u06CF\x03" + + "\x02\x02\x02\u0113\u06D6\x03\x02\x02\x02\u0115\u06DD\x03\x02\x02\x02\u0117" + + "\u06E0\x03\x02\x02\x02\u0119\u06E8\x03\x02\x02\x02\u011B\u06EE\x03\x02" + + "\x02\x02\u011D\u06F6\x03\x02\x02\x02\u011F\u06FC\x03\x02\x02\x02\u0121" + + "\u0703\x03\x02\x02\x02\u0123\u070F\x03\x02\x02\x02\u0125\u0716\x03\x02" + + "\x02\x02\u0127\u0720\x03\x02\x02\x02\u0129\u0729\x03\x02\x02\x02\u012B" + + "\u072D\x03\x02\x02\x02\u012D\u0735\x03\x02\x02\x02\u012F\u073A\x03\x02" + + "\x02\x02\u0131\u073D\x03\x02\x02\x02\u0133\u0743\x03\x02\x02\x02\u0135" + + "\u0748\x03\x02\x02\x02\u0137\u074D\x03\x02\x02\x02\u0139\u0752\x03\x02" + + "\x02\x02\u013B\u075A\x03\x02\x02\x02\u013D\u075F\x03\x02\x02\x02\u013F" + + "\u0767\x03\x02\x02\x02\u0141\u076C\x03\x02\x02\x02\u0143\u0771\x03\x02" + + "\x02\x02\u0145\u0777\x03\x02\x02\x02\u0147\u077D\x03\x02\x02\x02\u0149" + + "\u0783\x03\x02\x02\x02\u014B\u0788\x03\x02\x02\x02\u014D\u078D\x03\x02" + + "\x02\x02\u014F\u0793\x03\x02\x02\x02\u0151\u079C\x03\x02\x02\x02\u0153" + + "\u07A1\x03\x02\x02\x02\u0155\u07A7\x03\x02\x02\x02\u0157\u07AF\x03\x02" + + "\x02\x02\u0159\u07B4\x03\x02\x02\x02\u015B\u07BA\x03\x02\x02\x02\u015D" + + "\u07BE\x03\x02\x02\x02\u015F\u07C6\x03\x02\x02\x02\u0161\u07CC\x03\x02" + + "\x02\x02\u0163\u07D8\x03\x02\x02\x02\u0165\u07E5\x03\x02\x02\x02\u0167" + + "\u07F1\x03\x02\x02\x02\u0169\u07FE\x03\x02\x02\x02\u016B\u0805\x03\x02" + + "\x02\x02\u016D\u080D\x03\x02\x02\x02\u016F\u0813\x03\x02\x02\x02\u0171" + + "\u081A\x03\x02\x02\x02\u0173\u081F\x03\x02\x02\x02\u0175\u0824\x03\x02" + + "\x02\x02\u0177\u082E\x03\x02\x02\x02\u0179\u0839\x03\x02\x02\x02\u017B" + + "\u0844\x03\x02\x02\x02\u017D\u0850\x03\x02\x02\x02\u017F\u0858\x03\x02" + + "\x02\x02\u0181\u085F\x03\x02\x02\x02\u0183\u0861\x03\x02\x02\x02\u0185" + + "\u0866\x03\x02\x02\x02\u0187\u086C\x03\x02\x02\x02\u0189\u0874\x03\x02" + + "\x02\x02\u018B\u0877\x03\x02\x02\x02\u018D\u087E\x03\x02\x02\x02\u018F" + + "\u0881\x03\x02\x02\x02\u0191\u0886\x03\x02\x02\x02\u0193\u088D\x03\x02" + + "\x02\x02\u0195\u0895\x03\x02\x02\x02\u0197\u0898\x03\x02\x02\x02\u0199" + + "\u089E\x03\x02\x02\x02\u019B\u08A2\x03\x02\x02\x02\u019D\u08A8\x03\x02" + + "\x02\x02\u019F\u08B5\x03\x02\x02\x02\u01A1\u08BA\x03\x02\x02\x02\u01A3" + + "\u08C3\x03\x02\x02\x02\u01A5\u08CB\x03\x02\x02\x02\u01A7\u08D5\x03\x02" + + "\x02\x02\u01A9\u08DF\x03\x02\x02\x02\u01AB\u08EB\x03\x02\x02\x02\u01AD" + + "\u08F6\x03\x02\x02\x02\u01AF\u0906\x03\x02\x02\x02\u01B1\u0916\x03\x02" + + "\x02\x02\u01B3\u091E\x03\x02\x02\x02\u01B5\u0924\x03\x02\x02\x02\u01B7" + + "\u092C\x03\x02\x02\x02\u01B9\u0935\x03\x02\x02\x02\u01BB\u093F\x03\x02" + + "\x02\x02\u01BD\u0947\x03\x02\x02\x02\u01BF\u0952\x03\x02\x02\x02\u01C1" + + "\u095D\x03\x02\x02\x02\u01C3\u0963\x03\x02\x02\x02\u01C5\u096B\x03\x02" + + "\x02\x02\u01C7\u0971\x03\x02\x02\x02\u01C9\u0977\x03\x02\x02\x02\u01CB" + + "\u097C\x03\x02\x02\x02\u01CD\u0989\x03\x02\x02\x02\u01CF\u0996\x03\x02" + + "\x02\x02\u01D1\u099E\x03\x02\x02\x02\u01D3\u09A5\x03\x02\x02\x02\u01D5" + + "\u09B0\x03\x02\x02\x02\u01D7\u09B8\x03\x02\x02\x02\u01D9\u09BF\x03\x02" + + "\x02\x02\u01DB\u09C6\x03\x02\x02\x02\u01DD\u09D1\x03\x02\x02\x02\u01DF" + + "\u09D9\x03\x02\x02\x02\u01E1\u09DF\x03\x02\x02\x02\u01E3\u09E7\x03\x02" + + "\x02\x02\u01E5\u09F0\x03\x02\x02\x02\u01E7\u09F7\x03\x02\x02\x02\u01E9" + + "\u0A08\x03\x02\x02\x02\u01EB\u0A0A\x03\x02\x02\x02\u01ED\u0A0F\x03\x02" + + "\x02\x02\u01EF\u0A15\x03\x02\x02\x02\u01F1\u0A1E\x03\x02\x02\x02\u01F3" + + "\u0A25\x03\x02\x02\x02\u01F5\u0A29\x03\x02\x02\x02\u01F7\u0A2E\x03\x02" + + "\x02\x02\u01F9\u0A35\x03\x02\x02\x02\u01FB\u0A3D\x03\x02\x02\x02\u01FD" + + "\u0A44\x03\x02\x02\x02\u01FF\u0A4C\x03\x02\x02\x02\u0201\u0A53\x03\x02" + + "\x02\x02\u0203\u0A58\x03\x02\x02\x02\u0205\u0A62\x03\x02\x02\x02\u0207" + + "\u0A68\x03\x02\x02\x02\u0209\u0A78\x03\x02\x02\x02\u020B\u0A85\x03\x02" + + "\x02\x02\u020D\u0A89\x03\x02\x02\x02\u020F\u0A8F\x03\x02\x02\x02\u0211" + + "\u0A94\x03\x02\x02\x02\u0213\u0A9A\x03\x02\x02\x02\u0215\u0A9F\x03\x02" + + "\x02\x02\u0217\u0AA6\x03\x02\x02\x02\u0219\u0AAD\x03\x02\x02\x02\u021B" + + "\u0AB6\x03\x02\x02\x02\u021D\u0ABB\x03\x02\x02\x02\u021F\u0AC0\x03\x02" + + "\x02\x02\u0221\u0AC7\x03\x02\x02\x02\u0223\u0ACE\x03\x02\x02\x02\u0225" + + "\u0AD4\x03\x02\x02\x02\u0227\u0ADF\x03\x02\x02\x02\u0229\u0AE6\x03\x02" + + "\x02\x02\u022B\u0AEF\x03\x02\x02\x02\u022D\u0AF6\x03\x02\x02\x02\u022F" + + "\u0AFD\x03\x02\x02\x02\u0231\u0B04\x03\x02\x02\x02\u0233\u0B0E\x03\x02" + + "\x02\x02\u0235\u0B13\x03\x02\x02\x02\u0237\u0B1F\x03\x02\x02\x02\u0239" + + "\u0B2E\x03\x02\x02\x02\u023B\u0B34\x03\x02\x02\x02\u023D\u0B3B\x03\x02" + + "\x02\x02\u023F\u0B47\x03\x02\x02\x02\u0241\u0B4E\x03\x02\x02\x02\u0243" + + "\u0B69\x03\x02\x02\x02\u0245\u0B6B\x03\x02\x02\x02\u0247\u0B76\x03\x02" + + "\x02\x02\u0249\u0B7B\x03\x02\x02\x02\u024B\u0B80\x03\x02\x02\x02\u024D" + + "\u0B89\x03\x02\x02\x02\u024F\u0B93\x03\x02\x02\x02\u0251\u0BA1\x03\x02" + + "\x02\x02\u0253\u0BAF\x03\x02\x02\x02\u0255\u0BBC\x03\x02\x02\x02\u0257" + + "\u0BCA\x03\x02\x02\x02\u0259\u0BD2\x03\x02\x02\x02\u025B\u0BD5\x03\x02" + + "\x02\x02\u025D\u0BDB\x03\x02\x02\x02\u025F\u0BE4\x03\x02\x02\x02\u0261" + + "\u0BF0\x03\x02\x02\x02\u0263\u0BFD\x03\x02\x02\x02\u0265\u0C07\x03\x02" + + "\x02\x02\u0267\u0C0C\x03\x02\x02\x02\u0269\u0C11\x03\x02\x02\x02\u026B" + + "\u0C1A\x03\x02\x02\x02\u026D\u0C23\x03\x02\x02\x02\u026F\u0C28\x03\x02" + + "\x02\x02\u0271\u0C32\x03\x02\x02\x02\u0273\u0C3C\x03\x02\x02\x02\u0275" + + "\u0C44\x03\x02\x02\x02\u0277\u0C4A\x03\x02\x02\x02\u0279\u0C51\x03\x02" + + "\x02\x02\u027B\u0C59\x03\x02\x02\x02\u027D\u0C60\x03\x02\x02\x02\u027F" + + "\u0C68\x03\x02\x02\x02\u0281\u0C6E\x03\x02\x02\x02\u0283\u0C75\x03\x02" + + "\x02\x02\u0285\u0C79\x03\x02\x02\x02\u0287\u0C7E\x03\x02\x02\x02\u0289" + + "\u0C84\x03\x02\x02\x02\u028B\u0C8B\x03\x02\x02\x02\u028D\u0C93\x03\x02" + + "\x02\x02\u028F\u0C97\x03\x02\x02\x02\u0291\u0CA0\x03\x02\x02\x02\u0293" + + "\u0CA8\x03\x02\x02\x02\u0295\u0CAD\x03\x02\x02\x02\u0297\u0CB3\x03\x02" + + "\x02\x02\u0299\u0CB8\x03\x02\x02\x02\u029B\u0CBD\x03\x02\x02\x02\u029D" + + "\u0CC3\x03\x02\x02\x02\u029F\u0CC8\x03\x02\x02\x02\u02A1\u0CCE\x03\x02" + + "\x02\x02\u02A3\u0CD5\x03\x02\x02\x02\u02A5\u0CDA\x03\x02\x02\x02\u02A7" + + "\u0CE1\x03\x02\x02\x02\u02A9\u0CE6\x03\x02\x02\x02\u02AB\u0CEC\x03\x02" + + "\x02\x02\u02AD\u0CF4\x03\x02\x02\x02\u02AF\u0CF6\x03\x02\x02\x02\u02B1" + + "\u0CFA\x03\x02\x02\x02\u02B3\u0CFD\x03\x02\x02\x02\u02B5\u0D00\x03\x02" + + "\x02\x02\u02B7\u0D06\x03\x02\x02\x02\u02B9\u0D08\x03\x02\x02\x02\u02BB" + + "\u0D0E\x03\x02\x02\x02\u02BD\u0D10\x03\x02\x02\x02\u02BF\u0D12\x03\x02" + + "\x02\x02\u02C1\u0D14\x03\x02\x02\x02\u02C3\u0D16\x03\x02\x02\x02\u02C5" + + "\u0D18\x03\x02\x02\x02\u02C7\u0D1A\x03\x02\x02\x02\u02C9\u0D1C\x03\x02" + + "\x02\x02\u02CB\u0D1E\x03\x02\x02\x02\u02CD\u0D20\x03\x02\x02\x02\u02CF" + + "\u0D23\x03\x02\x02\x02\u02D1\u0D25\x03\x02\x02\x02\u02D3\u0D27\x03\x02" + + "\x02\x02\u02D5\u0D2A\x03\x02\x02\x02\u02D7\u0D2D\x03\x02\x02\x02\u02D9" + + "\u0D31\x03\x02\x02\x02\u02DB\u0D34\x03\x02\x02\x02\u02DD\u0D54\x03\x02" + + "\x02\x02\u02DF\u0D56\x03\x02\x02\x02\u02E1\u0D62\x03\x02\x02\x02\u02E3" + + "\u0D69\x03\x02\x02\x02\u02E5\u0D70\x03\x02\x02\x02\u02E7\u0D77\x03\x02" + + "\x02\x02\u02E9\u0D85\x03\x02\x02\x02\u02EB\u0D87\x03\x02\x02\x02\u02ED" + + "\u0D99\x03\x02\x02\x02\u02EF\u0DAB\x03\x02\x02\x02\u02F1\u0DBF\x03\x02" + + "\x02\x02\u02F3\u0DC4\x03\x02\x02\x02\u02F5\u0DC8\x03\x02\x02\x02\u02F7" + + "\u0DE5\x03\x02\x02\x02\u02F9\u0DE7\x03\x02\x02\x02\u02FB\u0DF0\x03\x02" + + "\x02\x02\u02FD\u0DF2\x03\x02\x02\x02\u02FF\u0DF4\x03\x02\x02\x02\u0301" + + "\u0E07\x03\x02\x02\x02\u0303\u0E1A\x03\x02\x02\x02\u0305\u0E20\x03\x02" + + "\x02\x02\u0307\u0308\x07=\x02\x02\u0308\x04\x03\x02\x02\x02\u0309\u030A" + + "\x07*\x02\x02\u030A\x06\x03\x02\x02\x02\u030B\u030C\x07+\x02\x02\u030C" + + "\b\x03\x02\x02\x02\u030D\u030E\x07.\x02\x02\u030E\n\x03\x02\x02\x02\u030F" + + "\u0310\x070\x02\x02\u0310\f\x03\x02\x02\x02\u0311\u0312\x07]\x02\x02\u0312" + + "\x0E\x03\x02\x02\x02\u0313\u0314\x07_\x02\x02\u0314\x10\x03\x02\x02\x02" + + "\u0315\u0316\x07C\x02\x02\u0316\u0317\x07F\x02\x02\u0317\u0318\x07F\x02" + + "\x02\u0318\x12\x03\x02\x02\x02\u0319\u031A\x07C\x02\x02\u031A\u031B\x07" + + "H\x02\x02\u031B\u031C\x07V\x02\x02\u031C\u031D\x07G\x02\x02\u031D\u031E" + + "\x07T\x02\x02\u031E\x14\x03\x02\x02\x02\u031F\u0320\x07C\x02\x02\u0320" + + "\u0321\x07N\x02\x02\u0321\u0322\x07N\x02\x02\u0322\x16\x03\x02\x02\x02" + + "\u0323\u0324\x07C\x02\x02\u0324\u0325\x07N\x02\x02\u0325\u0326\x07V\x02" + + "\x02\u0326\u0327\x07G\x02\x02\u0327\u0328\x07T\x02\x02\u0328\x18\x03\x02" + + "\x02\x02\u0329\u032A\x07C\x02\x02\u032A\u032B\x07N\x02\x02\u032B\u032C" + + "\x07Y\x02\x02\u032C\u032D\x07C\x02\x02\u032D\u032E\x07[\x02\x02\u032E" + + "\u032F\x07U\x02\x02\u032F\x1A\x03\x02\x02\x02\u0330\u0331\x07C\x02\x02" + + "\u0331\u0332\x07P\x02\x02\u0332\u0333\x07C\x02\x02\u0333\u0334\x07N\x02" + + "\x02\u0334\u0335\x07[\x02\x02\u0335\u0336\x07\\\x02\x02\u0336\u0337\x07" + + "G\x02\x02\u0337\x1C\x03\x02\x02\x02\u0338\u0339\x07C\x02\x02\u0339\u033A" + + "\x07P\x02\x02\u033A\u033B\x07F\x02\x02\u033B\x1E\x03\x02\x02\x02\u033C" + + "\u033D\x07C\x02\x02\u033D\u033E\x07P\x02\x02\u033E\u033F\x07V\x02\x02" + + "\u033F\u0340\x07K\x02\x02\u0340 \x03\x02\x02\x02\u0341\u0342\x07C\x02" + + "\x02\u0342\u0343\x07P\x02\x02\u0343\u0344\x07[\x02\x02\u0344\"\x03\x02" + + "\x02\x02\u0345\u0346\x07C\x02\x02\u0346\u0347\x07P\x02\x02\u0347\u0348" + + "\x07[\x02\x02\u0348\u0349\x07a\x02\x02\u0349\u034A\x07X\x02\x02\u034A" + + "\u034B\x07C\x02\x02\u034B\u034C\x07N\x02\x02\u034C\u034D\x07W\x02\x02" + + "\u034D\u034E\x07G\x02\x02\u034E$\x03\x02\x02\x02\u034F\u0350\x07C\x02" + + "\x02\u0350\u0351\x07T\x02\x02\u0351\u0352\x07E\x02\x02\u0352\u0353\x07" + + "J\x02\x02\u0353\u0354\x07K\x02\x02\u0354\u0355\x07X\x02\x02\u0355\u0356" + + "\x07G\x02\x02\u0356&\x03\x02\x02\x02\u0357\u0358\x07C\x02\x02\u0358\u0359" + + "\x07T\x02\x02\u0359\u035A\x07T\x02\x02\u035A\u035B\x07C\x02\x02\u035B" + + "\u035C\x07[\x02\x02\u035C(\x03\x02\x02\x02\u035D\u035E\x07C\x02\x02\u035E" + + "\u035F\x07U\x02\x02\u035F*\x03\x02\x02\x02\u0360\u0361\x07C\x02\x02\u0361" + + "\u0362\x07U\x02\x02\u0362\u0363\x07E\x02\x02\u0363,\x03\x02\x02\x02\u0364" + + "\u0365\x07C\x02\x02\u0365\u0366\x07V\x02\x02\u0366.\x03\x02\x02\x02\u0367" + + "\u0368\x07C\x02\x02\u0368\u0369\x07W\x02\x02\u0369\u036A\x07V\x02\x02" + + "\u036A\u036B\x07J\x02\x02\u036B\u036C\x07Q\x02\x02\u036C\u036D\x07T\x02" + + "\x02\u036D\u036E\x07K\x02\x02\u036E\u036F\x07\\\x02\x02\u036F\u0370\x07" + + "C\x02\x02\u0370\u0371\x07V\x02\x02\u0371\u0372\x07K\x02\x02\u0372\u0373" + + "\x07Q\x02\x02\u0373\u0374\x07P\x02\x02\u03740\x03\x02\x02\x02\u0375\u0376" + + "\x07D\x02\x02\u0376\u0377\x07G\x02\x02\u0377\u0378\x07V\x02\x02\u0378" + + "\u0379\x07Y\x02\x02\u0379\u037A\x07G\x02\x02\u037A\u037B\x07G\x02\x02" + + "\u037B\u037C\x07P\x02\x02\u037C2\x03\x02\x02\x02\u037D\u037E\x07D\x02" + + "\x02\u037E\u037F\x07K\x02\x02\u037F\u0380\x07I\x02\x02\u0380\u0381\x07" + + "K\x02\x02\u0381\u0382\x07P\x02\x02\u0382\u0383\x07V\x02\x02\u03834\x03" + + "\x02\x02\x02\u0384\u0385\x07D\x02\x02\u0385\u0386\x07K\x02\x02\u0386\u0387" + + "\x07P\x02\x02\u0387\u0388\x07C\x02\x02\u0388\u0389\x07T\x02\x02\u0389" + + "\u038A\x07[\x02\x02\u038A6\x03\x02\x02\x02\u038B\u038C\x07D\x02\x02\u038C" + + "\u038D\x07Q\x02\x02\u038D\u038E\x07Q\x02\x02\u038E\u038F\x07N\x02\x02" + + "\u038F\u0390\x07G\x02\x02\u0390\u0391\x07C\x02\x02\u0391\u0392\x07P\x02" + + "\x02\u03928\x03\x02\x02\x02\u0393\u0394\x07D\x02\x02\u0394\u0395\x07Q" + + "\x02\x02\u0395\u0396\x07V\x02\x02\u0396\u0397\x07J\x02\x02\u0397:\x03" + + "\x02\x02\x02\u0398\u0399\x07D\x02\x02\u0399\u039A\x07W\x02\x02\u039A\u039B" + + "\x07E\x02\x02\u039B\u039C\x07M\x02\x02\u039C\u039D\x07G\x02\x02\u039D" + + "\u039E\x07V\x02\x02\u039E<\x03\x02\x02\x02\u039F\u03A0\x07D\x02\x02\u03A0" + + "\u03A1\x07W\x02\x02\u03A1\u03A2\x07E\x02\x02\u03A2\u03A3\x07M\x02\x02" + + "\u03A3\u03A4\x07G\x02\x02\u03A4\u03A5\x07V\x02\x02\u03A5\u03A6\x07U\x02" + + "\x02\u03A6>\x03\x02\x02\x02\u03A7\u03A8\x07D\x02\x02\u03A8\u03A9\x07[" + + "\x02\x02\u03A9@\x03\x02\x02\x02\u03AA\u03AB\x07D\x02\x02\u03AB\u03AC\x07" + + "[\x02\x02\u03AC\u03AD\x07V\x02\x02\u03AD\u03AE\x07G\x02\x02\u03AEB\x03" + + "\x02\x02\x02\u03AF\u03B0\x07E\x02\x02\u03B0\u03B1\x07C\x02\x02\u03B1\u03B2" + + "\x07E\x02\x02\u03B2\u03B3\x07J\x02\x02\u03B3\u03B4\x07G\x02\x02\u03B4" + + "D\x03\x02\x02\x02\u03B5\u03B6\x07E\x02\x02\u03B6\u03B7\x07C\x02\x02\u03B7" + + "\u03B8\x07U\x02\x02\u03B8\u03B9\x07E\x02\x02\u03B9\u03BA\x07C\x02\x02" + + "\u03BA\u03BB\x07F\x02\x02\u03BB\u03BC\x07G\x02\x02\u03BCF\x03\x02\x02" + + "\x02\u03BD\u03BE\x07E\x02\x02\u03BE\u03BF\x07C\x02\x02\u03BF\u03C0\x07" + + "U\x02\x02\u03C0\u03C1\x07G\x02\x02\u03C1H\x03\x02\x02\x02\u03C2\u03C3" + + "\x07E\x02\x02\u03C3\u03C4\x07C\x02\x02\u03C4\u03C5\x07U\x02\x02\u03C5" + + "\u03C6\x07V\x02\x02\u03C6J\x03\x02\x02\x02\u03C7\u03C8\x07E\x02\x02\u03C8" + + "\u03C9\x07C\x02\x02\u03C9\u03CA\x07V\x02\x02\u03CA\u03CB\x07C\x02\x02" + + "\u03CB\u03CC\x07N\x02\x02\u03CC\u03CD\x07Q\x02\x02\u03CD\u03CE\x07I\x02" + + "\x02\u03CEL\x03\x02\x02\x02\u03CF\u03D0\x07E\x02\x02\u03D0\u03D1\x07C" + + "\x02\x02\u03D1\u03D2\x07V\x02\x02\u03D2\u03D3\x07C\x02\x02\u03D3\u03D4" + + "\x07N\x02\x02\u03D4\u03D5\x07Q\x02\x02\u03D5\u03D6\x07I\x02\x02\u03D6" + + "\u03D7\x07U\x02\x02\u03D7N\x03\x02\x02\x02\u03D8\u03D9\x07E\x02\x02\u03D9" + + "\u03DA\x07J\x02\x02\u03DA\u03DB\x07C\x02\x02\u03DB\u03DC\x07P\x02\x02" + + "\u03DC\u03DD\x07I\x02\x02\u03DD\u03DE\x07G\x02\x02\u03DEP\x03\x02\x02" + + "\x02\u03DF\u03E0\x07E\x02\x02\u03E0\u03E1\x07J\x02\x02\u03E1\u03E2\x07" + + "C\x02\x02\u03E2\u03E3\x07T\x02\x02\u03E3R\x03\x02\x02\x02\u03E4\u03E5" + + "\x07E\x02\x02\u03E5\u03E6\x07J\x02\x02\u03E6\u03E7\x07C\x02\x02\u03E7" + + "\u03E8\x07T\x02\x02\u03E8\u03E9\x07C\x02\x02\u03E9\u03EA\x07E\x02\x02" + + "\u03EA\u03EB\x07V\x02\x02\u03EB\u03EC\x07G\x02\x02\u03EC\u03ED\x07T\x02" + + "\x02\u03EDT\x03\x02\x02\x02\u03EE\u03EF\x07E\x02\x02\u03EF\u03F0\x07J" + + "\x02\x02\u03F0\u03F1\x07G\x02\x02\u03F1\u03F2\x07E\x02\x02\u03F2\u03F3" + + "\x07M\x02\x02\u03F3V\x03\x02\x02\x02\u03F4\u03F5\x07E\x02\x02\u03F5\u03F6" + + "\x07N\x02\x02\u03F6\u03F7\x07G\x02\x02\u03F7\u03F8\x07C\x02\x02\u03F8" + + "\u03F9\x07T\x02\x02\u03F9X\x03\x02\x02\x02\u03FA\u03FB\x07E\x02\x02\u03FB" + + "\u03FC\x07N\x02\x02\u03FC\u03FD\x07W\x02\x02\u03FD\u03FE\x07U\x02\x02" + + "\u03FE\u03FF\x07V\x02\x02\u03FF\u0400\x07G\x02\x02\u0400\u0401\x07T\x02" + + "\x02\u0401Z\x03\x02\x02\x02\u0402\u0403\x07E\x02\x02\u0403\u0404\x07N" + + "\x02\x02\u0404\u0405\x07W\x02\x02\u0405\u0406\x07U\x02\x02\u0406\u0407" + + "\x07V\x02\x02\u0407\u0408\x07G\x02\x02\u0408\u0409\x07T\x02\x02\u0409" + + "\u040A\x07G\x02\x02\u040A\u040B\x07F\x02\x02\u040B\\\x03\x02\x02\x02\u040C" + + "\u040D\x07E\x02\x02\u040D\u040E\x07Q\x02\x02\u040E\u040F\x07F\x02\x02" + + "\u040F\u0410\x07G\x02\x02\u0410\u0411\x07I\x02\x02\u0411\u0412\x07G\x02" + + "\x02\u0412\u0413\x07P\x02\x02\u0413^\x03\x02\x02\x02\u0414\u0415\x07E" + + "\x02\x02\u0415\u0416\x07Q\x02\x02\u0416\u0417\x07N\x02\x02\u0417\u0418" + + "\x07N\x02\x02\u0418\u0419\x07C\x02\x02\u0419\u041A\x07V\x02\x02\u041A" + + "\u041B\x07G\x02\x02\u041B`\x03\x02\x02\x02\u041C\u041D\x07E\x02\x02\u041D" + + "\u041E\x07Q\x02\x02\u041E\u041F\x07N\x02\x02\u041F\u0420\x07N\x02\x02" + + "\u0420\u0421\x07G\x02\x02\u0421\u0422\x07E\x02\x02\u0422\u0423\x07V\x02" + + "\x02\u0423\u0424\x07K\x02\x02\u0424\u0425\x07Q\x02\x02\u0425\u0426\x07" + + "P\x02\x02\u0426b\x03\x02\x02\x02\u0427\u0428\x07E\x02\x02\u0428\u0429" + + "\x07Q\x02\x02\u0429\u042A\x07N\x02\x02\u042A\u042B\x07W\x02\x02\u042B" + + "\u042C\x07O\x02\x02\u042C\u042D\x07P\x02\x02\u042Dd\x03\x02\x02\x02\u042E" + + "\u042F\x07E\x02\x02\u042F\u0430\x07Q\x02\x02\u0430\u0431\x07N\x02\x02" + + "\u0431\u0432\x07W\x02\x02\u0432\u0433\x07O\x02\x02\u0433\u0434\x07P\x02" + + "\x02\u0434\u0435\x07U\x02\x02\u0435f\x03\x02\x02\x02\u0436\u0437\x07E" + + "\x02\x02\u0437\u0438\x07Q\x02\x02\u0438\u0439\x07O\x02\x02\u0439\u043A" + + "\x07O\x02\x02\u043A\u043B\x07G\x02\x02\u043B\u043C\x07P\x02\x02\u043C" + + "\u043D\x07V\x02\x02\u043Dh"; private static readonly _serializedATNSegment3: string = - "\u058F\x07V\x02\x02\u058F\xEA\x03\x02\x02\x02\u0590\u0591\x07K\x02\x02" + - "\u0591\u0592\x07P\x02\x02\u0592\u0593\x07U\x02\x02\u0593\u0594\x07G\x02" + - "\x02\u0594\u0595\x07T\x02\x02\u0595\u0596\x07V\x02\x02\u0596\xEC\x03\x02" + - "\x02\x02\u0597\u0598\x07K\x02\x02\u0598\u0599\x07P\x02\x02\u0599\u059A" + - "\x07V\x02\x02\u059A\u059B\x07G\x02\x02\u059B\u059C\x07T\x02\x02\u059C" + - "\u059D\x07U\x02\x02\u059D\u059E\x07G\x02\x02\u059E\u059F\x07E\x02\x02" + - "\u059F\u05A0\x07V\x02\x02\u05A0\xEE\x03\x02\x02\x02\u05A1\u05A2\x07K\x02" + - "\x02\u05A2\u05A3\x07P\x02\x02\u05A3\u05A4\x07V\x02\x02\u05A4\u05A5\x07" + - "G\x02\x02\u05A5\u05A6\x07T\x02\x02\u05A6\u05A7\x07X\x02\x02\u05A7\u05A8" + - "\x07C\x02\x02\u05A8\u05A9\x07N\x02\x02\u05A9\xF0\x03\x02\x02\x02\u05AA" + - "\u05AB\x07K\x02\x02\u05AB\u05AC\x07P\x02\x02\u05AC\u05AD\x07V\x02\x02" + - "\u05AD\u05AE\x07Q\x02\x02\u05AE\xF2\x03\x02\x02\x02\u05AF\u05B0\x07K\x02" + - "\x02\u05B0\u05B1\x07U\x02\x02\u05B1\xF4\x03\x02\x02\x02\u05B2\u05B3\x07" + - "K\x02\x02\u05B3\u05B4\x07V\x02\x02\u05B4\u05B5\x07G\x02\x02\u05B5\u05B6" + - "\x07O\x02\x02\u05B6\u05B7\x07U\x02\x02\u05B7\xF6\x03\x02\x02\x02\u05B8" + - "\u05B9\x07L\x02\x02\u05B9\u05BA\x07Q\x02\x02\u05BA\u05BB\x07K\x02\x02" + - "\u05BB\u05BC\x07P\x02\x02\u05BC\xF8\x03\x02\x02\x02\u05BD\u05BE\x07M\x02" + - "\x02\u05BE\u05BF\x07G\x02\x02\u05BF\u05C0\x07[\x02\x02\u05C0\u05C1\x07" + - "U\x02\x02\u05C1\xFA\x03\x02\x02\x02\u05C2\u05C3\x07N\x02\x02\u05C3\u05C4" + - "\x07C\x02\x02\u05C4\u05C5\x07U\x02\x02\u05C5\u05C6\x07V\x02\x02\u05C6" + - "\xFC\x03\x02\x02\x02\u05C7\u05C8\x07N\x02\x02\u05C8\u05C9\x07C\x02\x02" + - "\u05C9\u05CA\x07V\x02\x02\u05CA\u05CB\x07G\x02\x02\u05CB\u05CC\x07T\x02" + - "\x02\u05CC\u05CD\x07C\x02\x02\u05CD\u05CE\x07N\x02\x02\u05CE\xFE\x03\x02" + - "\x02\x02\u05CF\u05D0\x07N\x02\x02\u05D0\u05D1\x07C\x02\x02\u05D1\u05D2" + - "\x07\\\x02\x02\u05D2\u05D3\x07[\x02\x02\u05D3\u0100\x03\x02\x02\x02\u05D4" + - "\u05D5\x07N\x02\x02\u05D5\u05D6\x07G\x02\x02\u05D6\u05D7\x07C\x02\x02" + - "\u05D7\u05D8\x07F\x02\x02\u05D8\u05D9\x07K\x02\x02\u05D9\u05DA\x07P\x02" + - "\x02\u05DA\u05DB\x07I\x02\x02\u05DB\u0102\x03\x02\x02\x02\u05DC\u05DD" + - "\x07N\x02\x02\u05DD\u05DE\x07G\x02\x02\u05DE\u05DF\x07H\x02\x02\u05DF" + - "\u05E0\x07V\x02\x02\u05E0\u0104\x03\x02\x02\x02\u05E1\u05E2\x07N\x02\x02" + - "\u05E2\u05E3\x07K\x02\x02\u05E3\u05E4\x07M\x02\x02\u05E4\u05E5\x07G\x02" + - "\x02\u05E5\u0106\x03\x02\x02\x02\u05E6\u05E7\x07N\x02\x02\u05E7\u05E8" + - "\x07K\x02\x02\u05E8\u05E9\x07O\x02\x02\u05E9\u05EA\x07K\x02\x02\u05EA" + - "\u05EB\x07V\x02\x02\u05EB\u0108\x03\x02\x02\x02\u05EC\u05ED\x07N\x02\x02" + - "\u05ED\u05EE\x07K\x02\x02\u05EE\u05EF\x07P\x02\x02\u05EF\u05F0\x07G\x02" + - "\x02\u05F0\u05F1\x07U\x02\x02\u05F1\u010A\x03\x02\x02\x02\u05F2\u05F3" + - "\x07N\x02\x02\u05F3\u05F4\x07K\x02\x02\u05F4\u05F5\x07U\x02\x02\u05F5" + - "\u05F6\x07V\x02\x02\u05F6\u010C\x03\x02\x02\x02\u05F7\u05F8\x07N\x02\x02" + - "\u05F8\u05F9\x07Q\x02\x02\u05F9\u05FA\x07C\x02\x02\u05FA\u05FB\x07F\x02" + - "\x02\u05FB\u010E\x03\x02\x02\x02\u05FC\u05FD\x07N\x02\x02\u05FD\u05FE" + - "\x07Q\x02\x02\u05FE\u05FF\x07E\x02\x02\u05FF\u0600\x07C\x02\x02\u0600" + - "\u0601\x07N\x02\x02\u0601\u0110\x03\x02\x02\x02\u0602\u0603\x07N\x02\x02" + - "\u0603\u0604\x07Q\x02\x02\u0604\u0605\x07E\x02\x02\u0605\u0606\x07C\x02" + - "\x02\u0606\u0607\x07V\x02\x02\u0607\u0608\x07K\x02\x02\u0608\u0609\x07" + - "Q\x02\x02\u0609\u060A\x07P\x02\x02\u060A\u0112\x03\x02\x02\x02\u060B\u060C" + - "\x07N\x02\x02\u060C\u060D\x07Q\x02\x02\u060D\u060E\x07E\x02\x02\u060E" + - "\u060F\x07M\x02\x02\u060F\u0114\x03\x02\x02\x02\u0610\u0611\x07N\x02\x02" + - "\u0611\u0612\x07Q\x02\x02\u0612\u0613\x07E\x02\x02\u0613\u0614\x07M\x02" + - "\x02\u0614\u0615\x07U\x02\x02\u0615\u0116\x03\x02\x02\x02\u0616\u0617" + - "\x07N\x02\x02\u0617\u0618\x07Q\x02\x02\u0618\u0619\x07I\x02\x02\u0619" + - "\u061A\x07K\x02\x02\u061A\u061B\x07E\x02\x02\u061B\u061C\x07C\x02\x02" + - "\u061C\u061D\x07N\x02\x02\u061D\u0118\x03\x02\x02\x02\u061E\u061F\x07" + - "O\x02\x02\u061F\u0620\x07C\x02\x02\u0620\u0621\x07E\x02\x02\u0621\u0622" + - "\x07T\x02\x02\u0622\u0623\x07Q\x02\x02\u0623\u011A\x03\x02\x02\x02\u0624" + - "\u0625\x07O\x02\x02\u0625\u0626\x07C\x02\x02\u0626\u0627\x07R\x02\x02" + - "\u0627\u011C\x03\x02\x02\x02\u0628\u0629\x07O\x02\x02\u0629\u062A\x07" + - "C\x02\x02\u062A\u062B\x07V\x02\x02\u062B\u062C\x07E\x02\x02\u062C\u062D" + - "\x07J\x02\x02\u062D\u062E\x07G\x02\x02\u062E\u062F\x07F\x02\x02\u062F" + - "\u011E\x03\x02\x02\x02\u0630\u0631\x07O\x02\x02\u0631\u0632\x07G\x02\x02" + - "\u0632\u0633\x07T\x02\x02\u0633\u0634\x07I\x02\x02\u0634\u0635\x07G\x02" + - "\x02\u0635\u0120\x03\x02\x02\x02\u0636\u0637\x07O\x02\x02\u0637\u0638" + - "\x07U\x02\x02\u0638\u0639\x07E\x02\x02\u0639\u063A\x07M\x02\x02\u063A" + - "\u0122\x03\x02\x02\x02\u063B\u063C\x07P\x02\x02\u063C\u063D\x07C\x02\x02" + - "\u063D\u063E\x07O\x02\x02\u063E\u063F\x07G\x02\x02\u063F\u0640\x07U\x02" + - "\x02\u0640\u0641\x07R\x02\x02\u0641\u0642\x07C\x02\x02\u0642\u0643\x07" + - "E\x02\x02\u0643\u0644\x07G\x02\x02\u0644\u0124\x03\x02\x02\x02\u0645\u0646" + - "\x07P\x02\x02\u0646\u0647\x07C\x02\x02\u0647\u0648\x07O\x02\x02\u0648" + - "\u0649\x07G\x02\x02\u0649\u064A\x07U\x02\x02\u064A\u064B\x07R\x02\x02" + - "\u064B\u064C\x07C\x02\x02\u064C\u064D\x07E\x02\x02\u064D\u064E\x07G\x02" + - "\x02\u064E\u064F\x07U\x02\x02\u064F\u0126\x03\x02\x02\x02\u0650\u0651" + - "\x07P\x02\x02\u0651\u0652\x07C\x02\x02\u0652\u0653\x07V\x02\x02\u0653" + - "\u0654\x07W\x02\x02\u0654\u0655\x07T\x02\x02\u0655\u0656\x07C\x02\x02" + - "\u0656\u0657\x07N\x02\x02\u0657\u0128\x03\x02\x02\x02\u0658\u0659\x07" + - "P\x02\x02\u0659\u065A\x07Q\x02\x02\u065A\u012A\x03\x02\x02\x02\u065B\u065C" + - "\x07P\x02\x02\u065C\u065D\x07Q\x02\x02\u065D\u0660\x07V\x02\x02\u065E" + - "\u0660\x07#\x02\x02\u065F\u065B\x03\x02\x02\x02\u065F\u065E\x03\x02\x02" + - "\x02\u0660\u012C\x03\x02\x02\x02\u0661\u0662\x07P\x02\x02\u0662\u0663" + - "\x07W\x02\x02\u0663\u0664\x07N\x02\x02\u0664\u0665\x07N\x02\x02\u0665" + - "\u012E\x03\x02\x02\x02\u0666\u0667\x07P\x02\x02\u0667\u0668\x07W\x02\x02" + - "\u0668\u0669\x07N\x02\x02\u0669\u066A\x07N\x02\x02\u066A\u066B\x07U\x02" + - "\x02\u066B\u0130\x03\x02\x02\x02\u066C\u066D\x07Q\x02\x02\u066D\u066E" + - "\x07H\x02\x02\u066E\u0132\x03\x02\x02\x02\u066F\u0670\x07Q\x02\x02\u0670" + - "\u0671\x07P\x02\x02\u0671\u0134\x03\x02\x02\x02\u0672\u0673\x07Q\x02\x02" + - "\u0673\u0674\x07P\x02\x02\u0674\u0675\x07N\x02\x02\u0675\u0676\x07[\x02" + - "\x02\u0676\u0136\x03\x02\x02\x02\u0677\u0678\x07Q\x02\x02\u0678\u0679" + - "\x07R\x02\x02\u0679\u067A\x07V\x02\x02\u067A\u067B\x07K\x02\x02\u067B" + - "\u067C\x07Q\x02\x02\u067C\u067D\x07P\x02\x02\u067D\u0138\x03\x02\x02\x02" + - "\u067E\u067F\x07Q\x02\x02\u067F\u0680\x07R\x02\x02\u0680\u0681\x07V\x02" + - "\x02\u0681\u0682\x07K\x02\x02\u0682\u0683\x07Q\x02\x02\u0683\u0684\x07" + - "P\x02\x02\u0684\u0685\x07U\x02\x02\u0685\u013A\x03\x02\x02\x02\u0686\u0687" + - "\x07Q\x02\x02\u0687\u0688\x07T\x02\x02\u0688\u013C\x03\x02\x02\x02\u0689" + - "\u068A\x07Q\x02\x02\u068A\u068B\x07T\x02\x02\u068B\u068C\x07F\x02\x02" + - "\u068C\u068D\x07G\x02\x02\u068D\u068E\x07T\x02\x02\u068E\u013E\x03\x02" + - "\x02\x02\u068F\u0690\x07Q\x02\x02\u0690\u0691\x07W\x02\x02\u0691\u0692" + - "\x07V\x02\x02\u0692\u0140\x03\x02\x02\x02\u0693\u0694\x07Q\x02\x02\u0694" + - "\u0695\x07W\x02\x02\u0695\u0696\x07V\x02\x02\u0696\u0697\x07G\x02\x02" + - "\u0697\u0698\x07T\x02\x02\u0698\u0142\x03\x02\x02\x02\u0699\u069A\x07" + - "Q\x02\x02\u069A\u069B\x07W\x02\x02\u069B\u069C\x07V\x02\x02\u069C\u069D" + - "\x07R\x02\x02\u069D\u069E\x07W\x02\x02\u069E\u069F\x07V\x02\x02\u069F" + - "\u06A0\x07H\x02\x02\u06A0\u06A1\x07Q\x02\x02\u06A1\u06A2\x07T\x02\x02" + - "\u06A2\u06A3\x07O\x02\x02\u06A3\u06A4\x07C\x02\x02\u06A4\u06A5\x07V\x02" + - "\x02\u06A5\u0144\x03\x02\x02\x02\u06A6\u06A7\x07Q\x02\x02\u06A7\u06A8" + - "\x07X\x02\x02\u06A8\u06A9\x07G\x02\x02\u06A9\u06AA\x07T\x02\x02\u06AA" + - "\u0146\x03\x02\x02\x02\u06AB\u06AC\x07Q\x02\x02\u06AC\u06AD\x07X\x02\x02" + - "\u06AD\u06AE\x07G\x02\x02\u06AE\u06AF\x07T\x02\x02\u06AF\u06B0\x07N\x02" + - "\x02\u06B0\u06B1\x07C\x02\x02\u06B1\u06B2\x07R\x02\x02\u06B2\u06B3\x07" + - "U\x02\x02\u06B3\u0148\x03\x02\x02\x02\u06B4\u06B5\x07Q\x02\x02\u06B5\u06B6" + - "\x07X\x02\x02\u06B6\u06B7\x07G\x02\x02\u06B7\u06B8\x07T\x02\x02\u06B8" + - "\u06B9\x07N\x02\x02\u06B9\u06BA\x07C\x02\x02\u06BA\u06BB\x07[\x02\x02" + - "\u06BB\u014A\x03\x02\x02\x02\u06BC\u06BD\x07Q\x02\x02\u06BD\u06BE\x07" + - "X\x02\x02\u06BE\u06BF\x07G\x02\x02\u06BF\u06C0\x07T\x02\x02\u06C0\u06C1" + - "\x07Y\x02\x02\u06C1\u06C2\x07T\x02\x02\u06C2\u06C3\x07K\x02\x02\u06C3" + - "\u06C4\x07V\x02\x02\u06C4\u06C5\x07G\x02\x02\u06C5\u014C\x03\x02\x02\x02" + - "\u06C6\u06C7\x07R\x02\x02\u06C7\u06C8\x07C\x02\x02\u06C8\u06C9\x07T\x02" + - "\x02\u06C9\u06CA\x07V\x02\x02\u06CA\u06CB\x07K\x02\x02\u06CB\u06CC\x07" + - "V\x02\x02\u06CC\u06CD\x07K\x02\x02\u06CD\u06CE\x07Q\x02\x02\u06CE\u06CF" + - "\x07P\x02\x02\u06CF\u014E\x03\x02\x02\x02\u06D0\u06D1\x07R\x02\x02\u06D1" + - "\u06D2\x07C\x02\x02\u06D2\u06D3\x07T\x02\x02\u06D3\u06D4\x07V\x02\x02" + - "\u06D4\u06D5\x07K\x02\x02\u06D5\u06D6\x07V\x02\x02\u06D6\u06D7\x07K\x02" + - "\x02\u06D7\u06D8\x07Q\x02\x02\u06D8\u06D9\x07P\x02\x02\u06D9\u06DA\x07" + - "G\x02\x02\u06DA\u06DB\x07F\x02\x02\u06DB\u0150\x03\x02\x02\x02\u06DC\u06DD" + - "\x07R\x02\x02\u06DD\u06DE\x07C\x02\x02\u06DE\u06DF\x07T\x02\x02\u06DF" + - "\u06E0\x07V\x02\x02\u06E0\u06E1\x07K\x02\x02\u06E1\u06E2\x07V\x02\x02" + - "\u06E2\u06E3\x07K\x02\x02\u06E3\u06E4\x07Q\x02\x02\u06E4\u06E5\x07P\x02" + - "\x02\u06E5\u06E6\x07U\x02\x02\u06E6\u0152\x03\x02\x02\x02\u06E7\u06E8" + - "\x07R\x02\x02\u06E8\u06E9\x07G\x02\x02\u06E9\u06EA\x07T\x02\x02\u06EA" + - "\u06EB\x07E\x02\x02\u06EB\u06EC\x07G\x02\x02\u06EC\u06ED\x07P\x02\x02" + - "\u06ED\u06EE\x07V\x02\x02\u06EE\u0154\x03\x02\x02\x02\u06EF\u06F0\x07" + - "R\x02\x02\u06F0\u06F1\x07K\x02\x02\u06F1\u06F2\x07X\x02\x02\u06F2\u06F3" + - "\x07Q\x02\x02\u06F3\u06F4\x07V\x02\x02\u06F4\u0156\x03\x02\x02\x02\u06F5" + - "\u06F6\x07R\x02\x02\u06F6\u06F7\x07N\x02\x02\u06F7\u06F8\x07C\x02\x02" + - "\u06F8\u06F9\x07E\x02\x02\u06F9\u06FA\x07K\x02\x02\u06FA\u06FB\x07P\x02" + - "\x02\u06FB\u06FC\x07I\x02\x02\u06FC\u0158\x03\x02\x02\x02\u06FD\u06FE" + - "\x07R\x02\x02\u06FE\u06FF\x07Q\x02\x02\u06FF\u0700\x07U\x02\x02\u0700" + - "\u0701\x07K\x02\x02\u0701\u0702\x07V\x02\x02\u0702\u0703\x07K\x02\x02" + - "\u0703\u0704\x07Q\x02\x02\u0704\u0705\x07P\x02\x02\u0705\u015A\x03\x02" + - "\x02\x02\u0706\u0707\x07R\x02\x02\u0707\u0708\x07T\x02\x02\u0708\u0709" + - "\x07G\x02\x02\u0709\u070A\x07E\x02\x02\u070A\u070B\x07G\x02\x02\u070B" + - "\u070C\x07F\x02\x02\u070C\u070D\x07K\x02\x02\u070D\u070E\x07P\x02\x02" + - "\u070E\u070F\x07I\x02\x02\u070F\u015C\x03\x02\x02\x02\u0710\u0711\x07" + - "R\x02\x02\u0711\u0712\x07T\x02\x02\u0712\u0713\x07K\x02\x02\u0713\u0714" + - "\x07O\x02\x02\u0714\u0715\x07C\x02\x02\u0715\u0716\x07T\x02\x02\u0716" + - "\u0717\x07[\x02\x02\u0717\u015E\x03\x02\x02\x02\u0718\u0719\x07R\x02\x02" + - "\u0719\u071A\x07T\x02\x02\u071A\u071B\x07K\x02\x02\u071B\u071C\x07P\x02" + - "\x02\u071C\u071D\x07E\x02\x02\u071D\u071E\x07K\x02\x02\u071E\u071F\x07" + - "R\x02\x02\u071F\u0720\x07C\x02\x02\u0720\u0721\x07N\x02\x02\u0721\u0722" + - "\x07U\x02\x02\u0722\u0160\x03\x02\x02\x02\u0723\u0724\x07R\x02\x02\u0724" + - "\u0725\x07T\x02\x02\u0725\u0726\x07Q\x02\x02\u0726\u0727\x07R\x02\x02" + - "\u0727\u0728\x07G\x02\x02\u0728\u0729\x07T\x02\x02\u0729\u072A\x07V\x02" + - "\x02\u072A\u072B\x07K\x02\x02\u072B\u072C\x07G\x02\x02\u072C\u072D\x07" + - "U\x02\x02\u072D\u0162\x03\x02\x02\x02\u072E\u072F\x07R\x02\x02\u072F\u0730" + - "\x07W\x02\x02\u0730\u0731\x07T\x02\x02\u0731\u0732\x07I\x02\x02\u0732" + - "\u0733\x07G\x02\x02\u0733\u0164\x03\x02\x02\x02\u0734\u0735\x07S\x02\x02" + - "\u0735\u0736\x07W\x02\x02\u0736\u0737\x07G\x02\x02\u0737\u0738\x07T\x02" + - "\x02\u0738\u0739\x07[\x02\x02\u0739\u0166\x03\x02\x02\x02\u073A\u073B" + - "\x07T\x02\x02\u073B\u073C\x07C\x02\x02\u073C\u073D\x07P\x02\x02\u073D" + - "\u073E\x07I\x02\x02\u073E\u073F\x07G\x02\x02\u073F\u0168\x03\x02\x02\x02" + - "\u0740\u0741\x07T\x02\x02\u0741\u0742\x07G\x02\x02\u0742\u0743\x07E\x02" + - "\x02\u0743\u0744\x07Q\x02\x02\u0744\u0745\x07T\x02\x02\u0745\u0746\x07" + - "F\x02\x02\u0746\u0747\x07T\x02\x02\u0747\u0748\x07G\x02\x02\u0748\u0749" + - "\x07C\x02\x02\u0749\u074A\x07F\x02\x02\u074A\u074B\x07G\x02\x02\u074B" + - "\u074C\x07T\x02\x02\u074C\u016A\x03\x02\x02\x02\u074D\u074E\x07T\x02\x02" + - "\u074E\u074F\x07G\x02\x02\u074F\u0750\x07E\x02\x02\u0750\u0751\x07Q\x02" + - "\x02\u0751\u0752\x07T\x02\x02\u0752\u0753\x07F\x02\x02\u0753\u0754\x07" + - "Y\x02\x02\u0754\u0755\x07T\x02\x02\u0755\u0756\x07K\x02\x02\u0756\u0757" + - "\x07V\x02\x02\u0757\u0758\x07G\x02\x02\u0758\u0759\x07T\x02\x02\u0759" + - "\u016C\x03\x02\x02\x02\u075A\u075B\x07T\x02\x02\u075B\u075C\x07G\x02\x02" + - "\u075C\u075D\x07E\x02\x02\u075D\u075E\x07Q\x02\x02\u075E\u075F\x07X\x02" + - "\x02\u075F\u0760\x07G\x02\x02\u0760\u0761\x07T\x02\x02\u0761\u016E\x03" + - "\x02\x02\x02\u0762\u0763\x07T\x02\x02\u0763\u0764\x07G\x02\x02\u0764\u0765" + - "\x07F\x02\x02\u0765\u0766\x07W\x02\x02\u0766\u0767\x07E\x02\x02\u0767" + - "\u0768\x07G\x02\x02\u0768\u0170\x03\x02\x02\x02\u0769\u076A\x07T\x02\x02" + - "\u076A\u076B\x07G\x02\x02\u076B\u076C\x07H\x02\x02\u076C\u076D\x07G\x02" + - "\x02\u076D\u076E\x07T\x02\x02\u076E\u076F\x07G\x02\x02\u076F\u0770\x07" + - "P\x02\x02\u0770\u0771\x07E\x02\x02\u0771\u0772\x07G\x02\x02\u0772\u0773" + - "\x07U\x02\x02\u0773\u0172\x03\x02\x02\x02\u0774\u0775\x07T\x02\x02\u0775" + - "\u0776\x07G\x02\x02\u0776\u0777\x07H\x02\x02\u0777\u0778\x07T\x02\x02" + - "\u0778\u0779\x07G\x02\x02\u0779\u077A\x07U\x02\x02\u077A\u077B\x07J\x02" + - "\x02\u077B\u0174\x03\x02\x02\x02\u077C\u077D\x07T\x02\x02\u077D\u077E" + - "\x07G\x02\x02\u077E\u077F\x07P\x02\x02\u077F\u0780\x07C\x02\x02\u0780" + - "\u0781\x07O\x02\x02\u0781\u0782\x07G\x02\x02\u0782\u0176\x03\x02\x02\x02" + - "\u0783\u0784\x07T\x02\x02\u0784\u0785\x07G\x02\x02\u0785\u0786\x07R\x02" + - "\x02\u0786\u0787\x07C\x02\x02\u0787\u0788\x07K\x02\x02\u0788\u0789\x07" + - "T\x02\x02\u0789\u0178\x03\x02\x02\x02\u078A\u078B\x07T\x02\x02\u078B\u078C" + - "\x07G\x02\x02\u078C\u078D\x07R\x02\x02\u078D\u078E\x07N\x02\x02\u078E" + - "\u078F\x07C\x02\x02\u078F\u0790\x07E\x02\x02\u0790\u0791\x07G\x02\x02" + - "\u0791\u017A\x03\x02\x02\x02\u0792\u0793\x07T\x02\x02\u0793\u0794\x07" + - "G\x02\x02\u0794\u0795\x07U\x02\x02\u0795\u0796\x07G\x02\x02\u0796\u0797" + - "\x07V\x02\x02\u0797\u017C\x03\x02\x02\x02\u0798\u0799\x07T\x02\x02\u0799" + - "\u079A\x07G\x02\x02\u079A\u079B\x07U\x02\x02\u079B\u079C\x07V\x02\x02" + - "\u079C\u079D\x07T\x02\x02\u079D\u079E\x07K\x02\x02\u079E\u079F\x07E\x02" + - "\x02\u079F\u07A0\x07V\x02\x02\u07A0\u017E\x03\x02\x02\x02\u07A1\u07A2" + - "\x07T\x02\x02\u07A2\u07A3\x07G\x02\x02\u07A3\u07A4\x07X\x02\x02\u07A4" + - "\u07A5\x07Q\x02\x02\u07A5\u07A6\x07M\x02\x02\u07A6\u07A7\x07G\x02\x02" + - "\u07A7\u0180\x03\x02\x02\x02\u07A8\u07A9\x07T\x02\x02\u07A9\u07AA\x07" + - "K\x02\x02\u07AA\u07AB\x07I\x02\x02\u07AB\u07AC\x07J\x02\x02\u07AC\u07AD" + - "\x07V\x02\x02\u07AD\u0182\x03\x02\x02\x02\u07AE\u07AF\x07T\x02\x02\u07AF" + - "\u07B0\x07N\x02\x02\u07B0\u07B1\x07K\x02\x02\u07B1\u07B2\x07M\x02\x02" + - "\u07B2\u07BA\x07G\x02\x02\u07B3\u07B4\x07T\x02\x02\u07B4\u07B5\x07G\x02" + - "\x02\u07B5\u07B6\x07I\x02\x02\u07B6\u07B7\x07G\x02\x02\u07B7\u07B8\x07" + - "Z\x02\x02\u07B8\u07BA\x07R\x02\x02\u07B9\u07AE\x03\x02\x02\x02\u07B9\u07B3" + - "\x03\x02\x02\x02\u07BA\u0184\x03\x02\x02\x02\u07BB\u07BC\x07T\x02\x02" + - "\u07BC\u07BD\x07Q\x02\x02\u07BD\u07BE\x07N\x02\x02\u07BE\u07BF\x07G\x02" + - "\x02\u07BF\u0186\x03\x02\x02\x02\u07C0\u07C1\x07T\x02\x02\u07C1\u07C2" + - "\x07Q\x02\x02\u07C2\u07C3\x07N\x02\x02\u07C3\u07C4\x07G\x02\x02\u07C4" + - "\u07C5\x07U\x02\x02\u07C5\u0188\x03\x02\x02\x02\u07C6\u07C7\x07T\x02\x02" + - "\u07C7\u07C8\x07Q\x02\x02\u07C8\u07C9\x07N\x02\x02\u07C9\u07CA\x07N\x02" + - "\x02\u07CA\u07CB\x07D\x02\x02\u07CB\u07CC\x07C\x02\x02\u07CC\u07CD\x07" + - "E\x02\x02\u07CD\u07CE\x07M\x02\x02\u07CE\u018A\x03\x02\x02\x02\u07CF\u07D0" + - "\x07T\x02\x02\u07D0\u07D1\x07Q\x02\x02\u07D1\u07D2\x07N\x02\x02\u07D2" + - "\u07D3\x07N\x02\x02\u07D3\u07D4\x07W\x02\x02\u07D4\u07D5\x07R\x02\x02" + - "\u07D5\u018C\x03\x02\x02\x02\u07D6\u07D7\x07T\x02\x02\u07D7\u07D8\x07" + - "Q\x02\x02\u07D8\u07D9\x07Y\x02\x02\u07D9\u018E\x03\x02\x02\x02\u07DA\u07DB" + - "\x07T\x02\x02\u07DB\u07DC\x07Q\x02\x02\u07DC\u07DD\x07Y\x02\x02\u07DD" + - "\u07DE\x07U\x02\x02\u07DE\u0190\x03\x02\x02\x02\u07DF\u07E0\x07U\x02\x02" + - "\u07E0\u07E1\x07E\x02\x02\u07E1\u07E2\x07J\x02\x02\u07E2\u07E3\x07G\x02" + - "\x02\u07E3\u07E4\x07O\x02\x02\u07E4\u07E5\x07C\x02\x02\u07E5\u0192\x03" + - "\x02\x02\x02\u07E6\u07E7\x07U\x02\x02\u07E7\u07E8\x07G\x02\x02\u07E8\u07E9" + - "\x07N\x02\x02\u07E9\u07EA\x07G\x02\x02\u07EA\u07EB\x07E\x02\x02\u07EB" + - "\u07EC\x07V\x02\x02\u07EC\u0194\x03\x02\x02\x02\u07ED\u07EE\x07U\x02\x02" + - "\u07EE\u07EF\x07G\x02\x02\u07EF\u07F0\x07O\x02\x02\u07F0\u07F1\x07K\x02" + - "\x02\u07F1\u0196\x03\x02\x02\x02\u07F2\u07F3\x07U\x02\x02\u07F3\u07F4" + - "\x07G\x02\x02\u07F4\u07F5\x07R\x02\x02\u07F5\u07F6\x07C\x02\x02\u07F6" + - "\u07F7\x07T\x02\x02\u07F7\u07F8\x07C\x02\x02\u07F8\u07F9\x07V\x02\x02" + - "\u07F9\u07FA\x07G\x02\x02\u07FA\u07FB\x07F\x02\x02\u07FB\u0198\x03\x02" + - "\x02\x02\u07FC\u07FD\x07U\x02\x02\u07FD\u07FE\x07G\x02\x02\u07FE\u07FF" + - "\x07T\x02\x02\u07FF\u0800\x07F\x02\x02\u0800\u0801\x07G\x02\x02\u0801" + - "\u019A\x03\x02\x02\x02\u0802\u0803\x07U\x02\x02\u0803\u0804\x07G\x02\x02" + - "\u0804\u0805\x07T\x02\x02\u0805\u0806\x07F\x02\x02\u0806\u0807\x07G\x02" + - "\x02\u0807\u0808\x07R\x02\x02\u0808\u0809\x07T\x02\x02\u0809\u080A\x07" + - "Q\x02\x02\u080A\u080B\x07R\x02\x02\u080B\u080C\x07G\x02\x02\u080C\u080D" + - "\x07T\x02\x02\u080D\u080E\x07V\x02\x02\u080E\u080F\x07K\x02\x02\u080F" + - "\u0810\x07G\x02\x02\u0810\u0811\x07U\x02\x02\u0811\u019C\x03\x02\x02\x02" + - "\u0812\u0813\x07U\x02\x02\u0813\u0814\x07G\x02\x02\u0814\u0815\x07U\x02" + - "\x02\u0815\u0816\x07U\x02\x02\u0816\u0817\x07K\x02\x02\u0817\u0818\x07" + - "Q\x02\x02\u0818\u0819\x07P\x02\x02\u0819\u081A\x07a\x02\x02\u081A\u081B" + - "\x07W\x02\x02\u081B\u081C\x07U\x02\x02\u081C\u081D\x07G\x02\x02\u081D" + - "\u081E\x07T\x02\x02\u081E\u019E\x03\x02\x02\x02\u081F\u0820\x07U\x02\x02" + - "\u0820\u0821\x07G\x02\x02\u0821\u0822\x07V\x02\x02\u0822\u01A0\x03\x02" + - "\x02\x02\u0823\u0824\x07O\x02\x02\u0824\u0825\x07K\x02\x02\u0825\u0826" + - "\x07P\x02\x02\u0826\u0827\x07W\x02\x02\u0827\u0828\x07U\x02\x02\u0828" + - "\u01A2\x03\x02\x02\x02\u0829\u082A\x07U\x02\x02\u082A\u082B\x07G\x02\x02" + - "\u082B\u082C\x07V\x02\x02\u082C\u082D\x07U\x02\x02\u082D\u01A4\x03\x02" + - "\x02\x02\u082E\u082F\x07U\x02\x02\u082F\u0830\x07J\x02\x02\u0830\u0831" + - "\x07Q\x02\x02\u0831\u0832\x07Y\x02\x02\u0832\u01A6\x03\x02\x02\x02\u0833" + - "\u0834\x07U\x02\x02\u0834\u0835\x07M\x02\x02\u0835\u0836\x07G\x02\x02" + - "\u0836\u0837\x07Y\x02\x02\u0837\u0838\x07G\x02\x02\u0838\u0839\x07F\x02" + - "\x02\u0839\u01A8\x03\x02\x02\x02\u083A\u083B\x07U\x02\x02\u083B\u083C" + - "\x07Q\x02\x02\u083C\u083D\x07O\x02\x02\u083D\u083E\x07G\x02\x02\u083E" + - "\u01AA\x03\x02\x02\x02\u083F\u0840\x07U\x02\x02\u0840\u0841\x07Q\x02\x02" + - "\u0841\u0842\x07T\x02\x02\u0842\u0843\x07V\x02\x02\u0843\u01AC\x03\x02" + - "\x02\x02\u0844\u0845\x07U\x02\x02\u0845\u0846\x07Q\x02\x02\u0846\u0847" + - "\x07T\x02\x02\u0847\u0848\x07V\x02\x02\u0848\u0849\x07G\x02\x02\u0849" + - "\u084A\x07F\x02\x02\u084A\u01AE\x03\x02\x02\x02\u084B\u084C\x07U\x02\x02" + - "\u084C\u084D\x07V\x02\x02\u084D\u084E\x07C\x02\x02\u084E\u084F\x07T\x02" + - "\x02\u084F\u0850\x07V\x02\x02\u0850\u01B0\x03\x02\x02\x02\u0851\u0852" + - "\x07U\x02\x02\u0852\u0853\x07V\x02\x02\u0853\u0854\x07C\x02\x02\u0854" + - "\u0855\x07V\x02\x02\u0855\u0856\x07K\x02\x02\u0856\u0857\x07U\x02\x02" + - "\u0857\u0858\x07V\x02\x02\u0858\u0859\x07K\x02\x02\u0859\u085A\x07E\x02" + - "\x02\u085A\u085B\x07U\x02\x02\u085B\u01B2\x03\x02\x02\x02\u085C\u085D" + - "\x07U\x02\x02\u085D\u085E\x07V\x02\x02\u085E\u085F\x07Q\x02\x02\u085F" + - "\u0860\x07T\x02\x02\u0860\u0861\x07G\x02\x02\u0861\u0862\x07F\x02\x02" + - "\u0862\u01B4\x03\x02\x02\x02\u0863\u0864\x07U\x02\x02\u0864\u0865\x07" + - "V\x02\x02\u0865\u0866\x07T\x02\x02\u0866\u0867\x07C\x02\x02\u0867\u0868" + - "\x07V\x02\x02\u0868\u0869\x07K\x02\x02\u0869\u086A\x07H\x02\x02\u086A" + - "\u086B\x07[\x02\x02\u086B\u01B6\x03\x02\x02\x02\u086C\u086D\x07U\x02\x02" + - "\u086D\u086E\x07V\x02\x02\u086E\u086F\x07T\x02\x02\u086F\u0870\x07W\x02" + - "\x02\u0870\u0871\x07E\x02\x02\u0871\u0872\x07V\x02\x02\u0872\u01B8\x03" + - "\x02\x02\x02\u0873\u0874\x07U\x02\x02\u0874\u0875\x07W\x02\x02\u0875\u0876" + - "\x07D\x02\x02\u0876\u0877\x07U\x02\x02\u0877\u0878\x07V\x02\x02\u0878" + - "\u0879\x07T\x02\x02\u0879\u01BA\x03\x02\x02\x02\u087A\u087B\x07U\x02\x02" + - "\u087B\u087C\x07W\x02\x02\u087C\u087D\x07D\x02\x02\u087D\u087E\x07U\x02" + - "\x02\u087E\u087F\x07V\x02\x02\u087F\u0880\x07T\x02\x02\u0880\u0881\x07" + - "K\x02\x02\u0881\u0882\x07P\x02\x02\u0882\u0883\x07I\x02\x02\u0883\u01BC" + - "\x03\x02\x02\x02\u0884\u0885\x07V\x02\x02\u0885\u0886\x07C\x02\x02\u0886" + - "\u0887\x07D\x02\x02\u0887\u0888\x07N\x02\x02\u0888\u0889\x07G\x02\x02" + - "\u0889\u01BE\x03\x02\x02\x02\u088A\u088B\x07V\x02\x02\u088B\u088C\x07" + - "C\x02\x02\u088C\u088D\x07D\x02\x02\u088D\u088E\x07N\x02\x02\u088E\u088F" + - "\x07G\x02\x02\u088F\u0890\x07U\x02\x02\u0890\u01C0\x03\x02\x02\x02\u0891" + - "\u0892\x07V\x02\x02\u0892\u0893\x07C\x02\x02\u0893\u0894\x07D\x02\x02" + - "\u0894\u0895\x07N\x02\x02\u0895\u0896\x07G\x02\x02\u0896\u0897\x07U\x02" + - "\x02\u0897\u0898\x07C\x02\x02\u0898\u0899\x07O\x02\x02\u0899\u089A\x07" + - "R\x02\x02\u089A\u089B\x07N\x02\x02\u089B\u089C\x07G\x02\x02\u089C\u01C2" + - "\x03\x02\x02\x02\u089D\u089E\x07V\x02\x02\u089E\u089F\x07D\x02\x02\u089F" + - "\u08A0\x07N\x02\x02\u08A0\u08A1\x07R\x02\x02\u08A1\u08A2\x07T\x02\x02" + - "\u08A2\u08A3\x07Q\x02\x02\u08A3\u08A4\x07R\x02\x02\u08A4\u08A5\x07G\x02" + - "\x02\u08A5\u08A6\x07T\x02\x02\u08A6\u08A7\x07V\x02\x02\u08A7\u08A8\x07" + - "K\x02\x02\u08A8\u08A9\x07G\x02\x02\u08A9\u08AA\x07U\x02\x02\u08AA\u01C4" + - "\x03\x02\x02\x02\u08AB\u08AC\x07V\x02\x02\u08AC\u08AD\x07G\x02\x02\u08AD" + - "\u08AE\x07O\x02\x02\u08AE\u08AF\x07R\x02\x02\u08AF\u08B0\x07Q\x02\x02" + - "\u08B0\u08B1\x07T\x02\x02\u08B1\u08B2\x07C\x02\x02\u08B2\u08B3\x07T\x02" + - "\x02\u08B3\u08B9\x07[\x02\x02\u08B4\u08B5\x07V\x02\x02\u08B5\u08B6\x07" + - "G\x02\x02\u08B6\u08B7\x07O\x02\x02\u08B7\u08B9\x07R\x02\x02\u08B8\u08AB" + - "\x03\x02\x02\x02\u08B8\u08B4\x03\x02\x02\x02\u08B9\u01C6\x03\x02\x02\x02" + - "\u08BA\u08BB\x07V\x02\x02\u08BB\u08BC\x07G\x02\x02\u08BC\u08BD\x07T\x02" + - "\x02\u08BD\u08BE\x07O\x02\x02\u08BE\u08BF\x07K\x02\x02\u08BF\u08C0\x07" + - "P\x02\x02\u08C0\u08C1\x07C\x02\x02\u08C1\u08C2\x07V\x02\x02\u08C2\u08C3" + - "\x07G\x02\x02\u08C3\u08C4\x07F\x02\x02\u08C4\u01C8\x03\x02\x02\x02\u08C5" + - "\u08C6\x07V\x02\x02\u08C6\u08C7\x07J\x02\x02\u08C7\u08C8\x07G\x02\x02" + - "\u08C8\u08C9\x07P\x02\x02\u08C9\u01CA\x03\x02\x02\x02\u08CA\u08CB\x07" + - "V\x02\x02\u08CB\u08CC\x07K\x02\x02\u08CC\u08CD\x07"; + "\x03\x02\x02\x02\u043E\u043F\x07E\x02\x02\u043F\u0440\x07Q\x02\x02\u0440" + + "\u0441\x07O\x02\x02\u0441\u0442\x07O\x02\x02\u0442\u0443\x07K\x02\x02" + + "\u0443\u0444\x07V\x02\x02\u0444j\x03\x02\x02\x02\u0445\u0446\x07E\x02" + + "\x02\u0446\u0447\x07Q\x02\x02\u0447\u0448\x07O\x02\x02\u0448\u0449\x07" + + "R\x02\x02\u0449\u044A\x07C\x02\x02\u044A\u044B\x07E\x02\x02\u044B\u044C" + + "\x07V\x02\x02\u044Cl\x03\x02\x02\x02\u044D\u044E\x07E\x02\x02\u044E\u044F" + + "\x07Q\x02\x02\u044F\u0450\x07O\x02\x02\u0450\u0451\x07R\x02\x02\u0451" + + "\u0452\x07C\x02\x02\u0452\u0453\x07E\x02\x02\u0453\u0454\x07V\x02\x02" + + "\u0454\u0455\x07K\x02\x02\u0455\u0456\x07Q\x02\x02\u0456\u0457\x07P\x02" + + "\x02\u0457\u0458\x07U\x02\x02\u0458n\x03\x02\x02\x02\u0459\u045A\x07E" + + "\x02\x02\u045A\u045B\x07Q\x02\x02\u045B\u045C\x07O\x02\x02\u045C\u045D" + + "\x07R\x02\x02\u045D\u045E\x07W\x02\x02\u045E\u045F\x07V\x02\x02\u045F" + + "\u0460\x07G\x02\x02\u0460p\x03\x02\x02\x02\u0461\u0462\x07E\x02\x02\u0462" + + "\u0463\x07Q\x02\x02\u0463\u0464\x07P\x02\x02\u0464\u0465\x07E\x02\x02" + + "\u0465\u0466\x07C\x02\x02\u0466\u0467\x07V\x02\x02\u0467\u0468\x07G\x02" + + "\x02\u0468\u0469\x07P\x02\x02\u0469\u046A\x07C\x02\x02\u046A\u046B\x07" + + "V\x02\x02\u046B\u046C\x07G\x02\x02\u046Cr\x03\x02\x02\x02\u046D\u046E" + + "\x07E\x02\x02\u046E\u046F\x07Q\x02\x02\u046F\u0470\x07P\x02\x02\u0470" + + "\u0471\x07U\x02\x02\u0471\u0472\x07V\x02\x02\u0472\u0473\x07T\x02\x02" + + "\u0473\u0474\x07C\x02\x02\u0474\u0475\x07K\x02\x02\u0475\u0476\x07P\x02" + + "\x02\u0476\u0477\x07V\x02\x02\u0477t\x03\x02\x02\x02\u0478\u0479\x07E" + + "\x02\x02\u0479\u047A\x07Q\x02\x02\u047A\u047B\x07U\x02\x02\u047B\u047C" + + "\x07V\x02\x02\u047Cv\x03\x02\x02\x02\u047D\u047E\x07E\x02\x02\u047E\u047F" + + "\x07T\x02\x02\u047F\u0480\x07G\x02\x02\u0480\u0481\x07C\x02\x02\u0481" + + "\u0482\x07V\x02\x02\u0482\u0483\x07G\x02\x02\u0483x\x03\x02\x02\x02\u0484" + + "\u0485\x07E\x02\x02\u0485\u0486\x07T\x02\x02\u0486\u0487\x07Q\x02\x02" + + "\u0487\u0488\x07U\x02\x02\u0488\u0489\x07U\x02\x02\u0489z\x03\x02\x02" + + "\x02\u048A\u048B\x07E\x02\x02\u048B\u048C\x07W\x02\x02\u048C\u048D\x07" + + "D\x02\x02\u048D\u048E\x07G\x02\x02\u048E|\x03\x02\x02\x02\u048F\u0490" + + "\x07E\x02\x02\u0490\u0491\x07W\x02\x02\u0491\u0492\x07T\x02\x02\u0492" + + "\u0493\x07T\x02\x02\u0493\u0494\x07G\x02\x02\u0494\u0495\x07P\x02\x02" + + "\u0495\u0496\x07V\x02\x02\u0496~\x03\x02\x02\x02\u0497\u0498\x07E\x02" + + "\x02\u0498\u0499\x07W\x02\x02\u0499\u049A\x07T\x02\x02\u049A\u049B\x07" + + "T\x02\x02\u049B\u049C\x07G\x02\x02\u049C\u049D\x07P\x02\x02\u049D\u049E" + + "\x07V\x02\x02\u049E\u049F\x07a\x02\x02\u049F\u04A0\x07F\x02\x02\u04A0" + + "\u04A1\x07C\x02\x02\u04A1\u04A2\x07V\x02\x02\u04A2\u04A3\x07G\x02\x02" + + "\u04A3\x80\x03\x02\x02\x02\u04A4\u04A5\x07E\x02\x02\u04A5\u04A6\x07W\x02" + + "\x02\u04A6\u04A7\x07T\x02\x02\u04A7\u04A8\x07T\x02\x02\u04A8\u04A9\x07" + + "G\x02\x02\u04A9\u04AA\x07P\x02\x02\u04AA\u04AB\x07V\x02\x02\u04AB\u04AC" + + "\x07a\x02\x02\u04AC\u04AD\x07V\x02\x02\u04AD\u04AE\x07K\x02\x02\u04AE" + + "\u04AF\x07O\x02\x02\u04AF\u04B0\x07G\x02\x02\u04B0\x82\x03\x02\x02\x02" + + "\u04B1\u04B2\x07E\x02\x02\u04B2\u04B3\x07W\x02\x02\u04B3\u04B4\x07T\x02" + + "\x02\u04B4\u04B5\x07T\x02\x02\u04B5\u04B6\x07G\x02\x02\u04B6\u04B7\x07" + + "P\x02\x02\u04B7\u04B8\x07V\x02\x02\u04B8\u04B9\x07a\x02\x02\u04B9\u04BA" + + "\x07V\x02\x02\u04BA\u04BB\x07K\x02\x02\u04BB\u04BC\x07O\x02\x02\u04BC" + + "\u04BD\x07G\x02\x02\u04BD\u04BE\x07U\x02\x02\u04BE\u04BF\x07V\x02\x02" + + "\u04BF\u04C0\x07C\x02\x02\u04C0\u04C1\x07O\x02\x02\u04C1\u04C2\x07R\x02" + + "\x02\u04C2\x84\x03\x02\x02\x02\u04C3\u04C4\x07E\x02\x02\u04C4\u04C5\x07" + + "W\x02\x02\u04C5\u04C6\x07T\x02\x02\u04C6\u04C7\x07T\x02\x02\u04C7\u04C8" + + "\x07G\x02\x02\u04C8\u04C9\x07P\x02\x02\u04C9\u04CA\x07V\x02\x02\u04CA" + + "\u04CB\x07a\x02\x02\u04CB\u04CC\x07W\x02\x02\u04CC\u04CD\x07U\x02\x02" + + "\u04CD\u04CE\x07G\x02\x02\u04CE\u04CF\x07T\x02\x02\u04CF\x86\x03\x02\x02" + + "\x02\u04D0\u04D1\x07F\x02\x02\u04D1\u04D2\x07C\x02\x02\u04D2\u04D3\x07" + + "[\x02\x02\u04D3\x88\x03\x02\x02\x02\u04D4\u04D5\x07F\x02\x02\u04D5\u04D6" + + "\x07C\x02\x02\u04D6\u04D7\x07[\x02\x02\u04D7\u04D8\x07U\x02\x02\u04D8" + + "\x8A\x03\x02\x02\x02\u04D9\u04DA\x07F\x02\x02\u04DA\u04DB\x07C\x02\x02" + + "\u04DB\u04DC\x07[\x02\x02\u04DC\u04DD\x07Q\x02\x02\u04DD\u04DE\x07H\x02" + + "\x02\u04DE\u04DF\x07[\x02\x02\u04DF\u04E0\x07G\x02\x02\u04E0\u04E1\x07" + + "C\x02\x02\u04E1\u04E2\x07T\x02\x02\u04E2\x8C\x03\x02\x02\x02\u04E3\u04E4" + + "\x07F\x02\x02\u04E4\u04E5\x07C\x02\x02\u04E5\u04E6\x07V\x02\x02\u04E6" + + "\u04E7\x07C\x02\x02\u04E7\x8E\x03\x02\x02\x02\u04E8\u04E9\x07F\x02\x02" + + "\u04E9\u04EA\x07C\x02\x02\u04EA\u04EB\x07V\x02\x02\u04EB\u04EC\x07G\x02" + + "\x02\u04EC\x90\x03\x02\x02\x02\u04ED\u04EE\x07F\x02\x02\u04EE\u04EF\x07" + + "C\x02\x02\u04EF\u04F0\x07V\x02\x02\u04F0\u04F1\x07C\x02\x02\u04F1\u04F2" + + "\x07D\x02\x02\u04F2\u04F3\x07C\x02\x02\u04F3\u04F4\x07U\x02\x02\u04F4" + + "\u04F5\x07G\x02\x02\u04F5\x92\x03\x02\x02\x02\u04F6\u04F7\x07F\x02\x02" + + "\u04F7\u04F8\x07C\x02\x02\u04F8\u04F9\x07V\x02\x02\u04F9\u04FA\x07C\x02" + + "\x02\u04FA\u04FB\x07D\x02\x02\u04FB\u04FC\x07C\x02\x02\u04FC\u04FD\x07" + + "U\x02\x02\u04FD\u04FE\x07G\x02\x02\u04FE\u04FF\x07U\x02\x02\u04FF\x94" + + "\x03\x02\x02\x02\u0500\u0501\x07F\x02\x02\u0501\u0502\x07C\x02\x02\u0502" + + "\u0503\x07V\x02\x02\u0503\u0504\x07G\x02\x02\u0504\u0505\x07C\x02\x02" + + "\u0505\u0506\x07F\x02\x02\u0506\u0507\x07F\x02\x02\u0507\x96\x03\x02\x02" + + "\x02\u0508\u0509\x07F\x02\x02\u0509\u050A\x07C\x02\x02\u050A\u050B\x07" + + "V\x02\x02\u050B\u050C\x07G\x02\x02\u050C\u050D\x07a\x02\x02\u050D\u050E" + + "\x07C\x02\x02\u050E\u050F\x07F\x02\x02\u050F\u0510\x07F\x02\x02\u0510" + + "\x98\x03\x02\x02\x02\u0511\u0512\x07F\x02\x02\u0512\u0513\x07C\x02\x02" + + "\u0513\u0514\x07V\x02\x02\u0514\u0515\x07G\x02\x02\u0515\u0516\x07F\x02" + + "\x02\u0516\u0517\x07K\x02\x02\u0517\u0518\x07H\x02\x02\u0518\u0519\x07" + + "H\x02\x02\u0519\x9A\x03\x02\x02\x02\u051A\u051B\x07F\x02\x02\u051B\u051C" + + "\x07C\x02\x02\u051C\u051D\x07V\x02\x02\u051D\u051E\x07G\x02\x02\u051E" + + "\u051F\x07a\x02\x02\u051F\u0520\x07F\x02\x02\u0520\u0521\x07K\x02\x02" + + "\u0521\u0522\x07H\x02\x02\u0522\u0523\x07H\x02\x02\u0523\x9C\x03\x02\x02" + + "\x02\u0524\u0525\x07F\x02\x02\u0525\u0526\x07D\x02\x02\u0526\u0527\x07" + + "R\x02\x02\u0527\u0528\x07T\x02\x02\u0528\u0529\x07Q\x02\x02\u0529\u052A" + + "\x07R\x02\x02\u052A\u052B\x07G\x02\x02\u052B\u052C\x07T\x02\x02\u052C" + + "\u052D\x07V\x02\x02\u052D\u052E\x07K\x02\x02\u052E\u052F\x07G\x02\x02" + + "\u052F\u0530\x07U\x02\x02\u0530\x9E\x03\x02\x02\x02\u0531\u0532\x07F\x02" + + "\x02\u0532\u0533\x07G\x02\x02\u0533\u0534\x07E\x02\x02\u0534\xA0\x03\x02" + + "\x02\x02\u0535\u0536\x07F\x02\x02\u0536\u0537\x07G\x02\x02\u0537\u0538" + + "\x07E\x02\x02\u0538\u0539\x07K\x02\x02\u0539\u053A\x07O\x02\x02\u053A" + + "\u053B\x07C\x02\x02\u053B\u053C\x07N\x02\x02\u053C\xA2\x03\x02\x02\x02" + + "\u053D\u053E\x07F\x02\x02\u053E\u053F\x07G\x02\x02\u053F\u0540\x07E\x02" + + "\x02\u0540\u0541\x07N\x02\x02\u0541\u0542\x07C\x02\x02\u0542\u0543\x07" + + "T\x02\x02\u0543\u0544\x07G\x02\x02\u0544\xA4\x03\x02\x02\x02\u0545\u0546" + + "\x07F\x02\x02\u0546\u0547\x07G\x02\x02\u0547\u0548\x07H\x02\x02\u0548" + + "\u0549\x07C\x02\x02\u0549\u054A\x07W\x02\x02\u054A\u054B\x07N\x02\x02" + + "\u054B\u054C\x07V\x02\x02\u054C\xA6\x03\x02\x02\x02\u054D\u054E\x07F\x02" + + "\x02\u054E\u054F\x07G\x02\x02\u054F\u0550\x07H\x02\x02\u0550\u0551\x07" + + "K\x02\x02\u0551\u0552\x07P\x02\x02\u0552\u0553\x07G\x02\x02\u0553\u0554" + + "\x07F\x02\x02\u0554\xA8\x03\x02\x02\x02\u0555\u0556\x07F\x02\x02\u0556" + + "\u0557\x07G\x02\x02\u0557\u0558\x07N\x02\x02\u0558\u0559\x07G\x02\x02" + + "\u0559\u055A\x07V\x02\x02\u055A\u055B\x07G\x02\x02\u055B\xAA\x03\x02\x02" + + "\x02\u055C\u055D\x07F\x02\x02\u055D\u055E\x07G\x02\x02\u055E\u055F\x07" + + "N\x02\x02\u055F\u0560\x07K\x02\x02\u0560\u0561\x07O\x02\x02\u0561\u0562" + + "\x07K\x02\x02\u0562\u0563\x07V\x02\x02\u0563\u0564\x07G\x02\x02\u0564" + + "\u0565\x07F\x02\x02\u0565\xAC\x03\x02\x02\x02\u0566\u0567\x07F\x02\x02" + + "\u0567\u0568\x07G\x02\x02\u0568\u0569\x07U\x02\x02\u0569\u056A\x07E\x02" + + "\x02\u056A\xAE\x03\x02\x02\x02\u056B\u056C\x07F\x02\x02\u056C\u056D\x07" + + "G\x02\x02\u056D\u056E\x07U\x02\x02\u056E\u056F\x07E\x02\x02\u056F\u0570" + + "\x07T\x02\x02\u0570\u0571\x07K\x02\x02\u0571\u0572\x07D\x02\x02\u0572" + + "\u0573\x07G\x02\x02\u0573\xB0\x03\x02\x02\x02\u0574\u0575\x07F\x02\x02" + + "\u0575\u0576\x07H\x02\x02\u0576\u0577\x07U\x02\x02\u0577\xB2\x03\x02\x02" + + "\x02\u0578\u0579\x07F\x02\x02\u0579\u057A\x07K\x02\x02\u057A\u057B\x07" + + "T\x02\x02\u057B\u057C\x07G\x02\x02\u057C\u057D\x07E\x02\x02\u057D\u057E" + + "\x07V\x02\x02\u057E\u057F\x07Q\x02\x02\u057F\u0580\x07T\x02\x02\u0580" + + "\u0581\x07K\x02\x02\u0581\u0582\x07G\x02\x02\u0582\u0583\x07U\x02\x02" + + "\u0583\xB4\x03\x02\x02\x02\u0584\u0585\x07F\x02\x02\u0585\u0586\x07K\x02" + + "\x02\u0586\u0587\x07T\x02\x02\u0587\u0588\x07G\x02\x02\u0588\u0589\x07" + + "E\x02\x02\u0589\u058A\x07V\x02\x02\u058A\u058B\x07Q\x02\x02\u058B\u058C" + + "\x07T\x02\x02\u058C\u058D\x07[\x02\x02\u058D\xB6\x03\x02\x02\x02\u058E" + + "\u058F\x07F\x02\x02\u058F\u0590\x07K\x02\x02\u0590\u0591\x07U\x02\x02" + + "\u0591\u0592\x07V\x02\x02\u0592\u0593\x07K\x02\x02\u0593\u0594\x07P\x02" + + "\x02\u0594\u0595\x07E\x02\x02\u0595\u0596\x07V\x02\x02\u0596\xB8\x03\x02" + + "\x02\x02\u0597\u0598\x07F\x02\x02\u0598\u0599\x07K\x02\x02\u0599\u059A" + + "\x07U\x02\x02\u059A\u059B\x07V\x02\x02\u059B\u059C\x07T\x02\x02\u059C" + + "\u059D\x07K\x02\x02\u059D\u059E\x07D\x02\x02\u059E\u059F\x07W\x02\x02" + + "\u059F\u05A0\x07V\x02\x02\u05A0\u05A1\x07G\x02\x02\u05A1\xBA\x03\x02\x02" + + "\x02\u05A2\u05A3\x07F\x02\x02\u05A3\u05A4\x07K\x02\x02\u05A4\u05A5\x07" + + "X\x02\x02\u05A5\xBC\x03\x02\x02\x02\u05A6\u05A7\x07F\x02\x02\u05A7\u05A8" + + "\x07Q\x02\x02\u05A8\u05A9\x07W\x02\x02\u05A9\u05AA\x07D\x02\x02\u05AA" + + "\u05AB\x07N\x02\x02\u05AB\u05AC\x07G\x02\x02\u05AC\xBE\x03\x02\x02\x02" + + "\u05AD\u05AE\x07F\x02\x02\u05AE\u05AF\x07T\x02\x02\u05AF\u05B0\x07Q\x02" + + "\x02\u05B0\u05B1\x07R\x02\x02\u05B1\xC0\x03\x02\x02\x02\u05B2\u05B3\x07" + + "G\x02\x02\u05B3\u05B4\x07N\x02\x02\u05B4\u05B5\x07U\x02\x02\u05B5\u05B6" + + "\x07G\x02\x02\u05B6\xC2\x03\x02\x02\x02\u05B7\u05B8\x07G\x02\x02\u05B8" + + "\u05B9\x07P\x02\x02\u05B9\u05BA\x07F\x02\x02\u05BA\xC4\x03\x02\x02\x02" + + "\u05BB\u05BC\x07G\x02\x02\u05BC\u05BD\x07U\x02\x02\u05BD\u05BE\x07E\x02" + + "\x02\u05BE\u05BF\x07C\x02\x02\u05BF\u05C0\x07R\x02\x02\u05C0\u05C1\x07" + + "G\x02\x02\u05C1\xC6\x03\x02\x02\x02\u05C2\u05C3\x07G\x02\x02\u05C3\u05C4" + + "\x07U\x02\x02\u05C4\u05C5\x07E\x02\x02\u05C5\u05C6\x07C\x02\x02\u05C6" + + "\u05C7\x07R\x02\x02\u05C7\u05C8\x07G\x02\x02\u05C8\u05C9\x07F\x02\x02" + + "\u05C9\xC8\x03\x02\x02\x02\u05CA\u05CB\x07G\x02\x02\u05CB\u05CC\x07Z\x02" + + "\x02\u05CC\u05CD\x07E\x02\x02\u05CD\u05CE\x07G\x02\x02\u05CE\u05CF\x07" + + "R\x02\x02\u05CF\u05D0\x07V\x02\x02\u05D0\xCA\x03\x02\x02\x02\u05D1\u05D2" + + "\x07G\x02\x02\u05D2\u05D3\x07Z\x02\x02\u05D3\u05D4\x07E\x02\x02\u05D4" + + "\u05D5\x07J\x02\x02\u05D5\u05D6\x07C\x02\x02\u05D6\u05D7\x07P\x02\x02" + + "\u05D7\u05D8\x07I\x02\x02\u05D8\u05D9\x07G\x02\x02\u05D9\xCC\x03\x02\x02" + + "\x02\u05DA\u05DB\x07G\x02\x02\u05DB\u05DC\x07Z\x02\x02\u05DC\u05DD\x07" + + "E\x02\x02\u05DD\u05DE\x07N\x02\x02\u05DE\u05DF\x07W\x02\x02\u05DF\u05E0" + + "\x07F\x02\x02\u05E0\u05E1\x07G\x02\x02\u05E1\xCE\x03\x02\x02\x02\u05E2" + + "\u05E3\x07G\x02\x02\u05E3\u05E4\x07Z\x02\x02\u05E4\u05E5\x07K\x02\x02" + + "\u05E5\u05E6\x07U\x02\x02\u05E6\u05E7\x07V\x02\x02\u05E7\u05E8\x07U\x02" + + "\x02\u05E8\xD0\x03\x02\x02\x02\u05E9\u05EA\x07G\x02\x02\u05EA\u05EB\x07" + + "Z\x02\x02\u05EB\u05EC\x07R\x02\x02\u05EC\u05ED\x07N\x02\x02\u05ED\u05EE" + + "\x07C\x02\x02\u05EE\u05EF\x07K\x02\x02\u05EF\u05F0\x07P\x02\x02\u05F0" + + "\xD2\x03\x02\x02\x02\u05F1\u05F2\x07G\x02\x02\u05F2\u05F3\x07Z\x02\x02" + + "\u05F3\u05F4\x07R\x02\x02\u05F4\u05F5\x07Q\x02\x02\u05F5\u05F6\x07T\x02" + + "\x02\u05F6\u05F7\x07V\x02\x02\u05F7\xD4\x03\x02\x02\x02\u05F8\u05F9\x07" + + "G\x02\x02\u05F9\u05FA\x07Z\x02\x02\u05FA\u05FB\x07V\x02\x02\u05FB\u05FC" + + "\x07G\x02\x02\u05FC\u05FD\x07P\x02\x02\u05FD\u05FE\x07F\x02\x02\u05FE" + + "\u05FF\x07G\x02\x02\u05FF\u0600\x07F\x02\x02\u0600\xD6\x03\x02\x02\x02" + + "\u0601\u0602\x07G\x02\x02\u0602\u0603\x07Z\x02\x02\u0603\u0604\x07V\x02" + + "\x02\u0604\u0605\x07G\x02\x02\u0605\u0606\x07T\x02\x02\u0606\u0607\x07" + + "P\x02\x02\u0607\u0608\x07C\x02\x02\u0608\u0609\x07N\x02\x02\u0609\xD8" + + "\x03\x02\x02\x02\u060A\u060B\x07G\x02\x02\u060B\u060C\x07Z\x02\x02\u060C" + + "\u060D\x07V\x02\x02\u060D\u060E\x07T\x02\x02\u060E\u060F\x07C\x02\x02" + + "\u060F\u0610\x07E\x02\x02\u0610\u0611\x07V\x02\x02\u0611\xDA\x03\x02\x02" + + "\x02\u0612\u0613\x07H\x02\x02\u0613\u0614\x07C\x02\x02\u0614\u0615\x07" + + "N\x02\x02\u0615\u0616\x07U\x02\x02\u0616\u0617\x07G\x02\x02\u0617\xDC" + + "\x03\x02\x02\x02\u0618\u0619\x07H\x02\x02\u0619\u061A\x07G\x02\x02\u061A" + + "\u061B\x07V\x02\x02\u061B\u061C\x07E\x02\x02\u061C\u061D\x07J\x02\x02" + + "\u061D\xDE\x03\x02\x02\x02\u061E\u061F\x07H\x02\x02\u061F\u0620\x07K\x02" + + "\x02\u0620\u0621\x07G\x02\x02\u0621\u0622\x07N\x02\x02\u0622\u0623\x07" + + "F\x02\x02\u0623\u0624\x07U\x02\x02\u0624\xE0\x03\x02\x02\x02\u0625\u0626" + + "\x07H\x02\x02\u0626\u0627\x07K\x02\x02\u0627\u0628\x07N\x02\x02\u0628" + + "\u0629\x07V\x02\x02\u0629\u062A\x07G\x02\x02\u062A\u062B\x07T\x02\x02" + + "\u062B\xE2\x03\x02\x02\x02\u062C\u062D\x07H\x02\x02\u062D\u062E\x07K\x02" + + "\x02\u062E\u062F\x07N\x02\x02\u062F\u0630\x07G\x02\x02\u0630\u0631\x07" + + "H\x02\x02\u0631\u0632\x07Q\x02\x02\u0632\u0633\x07T\x02\x02\u0633\u0634" + + "\x07O\x02\x02\u0634\u0635\x07C\x02\x02\u0635\u0636\x07V\x02\x02\u0636" + + "\xE4\x03\x02\x02\x02\u0637\u0638\x07H\x02\x02\u0638\u0639\x07K\x02\x02" + + "\u0639\u063A\x07T\x02\x02\u063A\u063B\x07U\x02\x02\u063B\u063C\x07V\x02" + + "\x02\u063C\xE6\x03\x02\x02\x02\u063D\u063E\x07H\x02\x02\u063E\u063F\x07" + + "N\x02\x02\u063F\u0640\x07Q\x02\x02\u0640\u0641\x07C\x02\x02\u0641\u0642" + + "\x07V\x02\x02\u0642\xE8\x03\x02\x02\x02\u0643\u0644\x07H\x02\x02\u0644" + + "\u0645\x07Q\x02\x02\u0645\u0646\x07N\x02\x02\u0646\u0647\x07N\x02\x02" + + "\u0647\u0648\x07Q\x02\x02\u0648\u0649\x07Y\x02\x02\u0649\u064A\x07K\x02" + + "\x02\u064A\u064B\x07P\x02\x02\u064B\u064C\x07I\x02\x02\u064C\xEA\x03\x02" + + "\x02\x02\u064D\u064E\x07H\x02\x02\u064E\u064F\x07Q\x02\x02\u064F\u0650" + + "\x07T\x02\x02\u0650\xEC\x03\x02\x02\x02\u0651\u0652\x07H\x02\x02\u0652" + + "\u0653\x07Q\x02\x02\u0653\u0654\x07T\x02\x02\u0654\u0655\x07G\x02\x02" + + "\u0655\u0656\x07K\x02\x02\u0656\u0657\x07I\x02\x02\u0657\u0658\x07P\x02" + + "\x02\u0658\xEE\x03\x02\x02\x02\u0659\u065A\x07H\x02\x02\u065A\u065B\x07" + + "Q\x02\x02\u065B\u065C\x07T\x02\x02\u065C\u065D\x07O\x02\x02\u065D\u065E" + + "\x07C\x02\x02\u065E\u065F\x07V\x02\x02\u065F\xF0\x03\x02\x02\x02\u0660" + + "\u0661\x07H\x02\x02\u0661\u0662\x07Q\x02\x02\u0662\u0663\x07T\x02\x02" + + "\u0663\u0664\x07O\x02\x02\u0664\u0665\x07C\x02\x02\u0665\u0666\x07V\x02" + + "\x02\u0666\u0667\x07V\x02\x02\u0667\u0668\x07G\x02\x02\u0668\u0669\x07" + + "F\x02\x02\u0669\xF2\x03\x02\x02\x02\u066A\u066B\x07H\x02\x02\u066B\u066C" + + "\x07T\x02\x02\u066C\u066D\x07Q\x02\x02\u066D\u066E\x07O\x02\x02\u066E" + + "\xF4\x03\x02\x02\x02\u066F\u0670\x07H\x02\x02\u0670\u0671\x07W\x02\x02" + + "\u0671\u0672\x07N\x02\x02\u0672\u0673\x07N\x02\x02\u0673\xF6\x03\x02\x02" + + "\x02\u0674\u0675\x07H\x02\x02\u0675\u0676\x07W\x02\x02\u0676\u0677\x07" + + "P\x02\x02\u0677\u0678\x07E\x02\x02\u0678\u0679\x07V\x02\x02\u0679\u067A" + + "\x07K\x02\x02\u067A\u067B\x07Q\x02\x02\u067B\u067C\x07P\x02\x02\u067C" + + "\xF8\x03\x02\x02\x02\u067D\u067E\x07H\x02\x02\u067E\u067F\x07W\x02\x02" + + "\u067F\u0680\x07P\x02\x02\u0680\u0681\x07E\x02\x02\u0681\u0682\x07V\x02" + + "\x02\u0682\u0683\x07K\x02\x02\u0683\u0684\x07Q\x02\x02\u0684\u0685\x07" + + "P\x02\x02\u0685\u0686\x07U\x02\x02\u0686\xFA\x03\x02\x02\x02\u0687\u0688" + + "\x07I\x02\x02\u0688\u0689\x07G\x02\x02\u0689\u068A\x07P\x02\x02\u068A" + + "\u068B\x07G\x02\x02\u068B\u068C\x07T\x02\x02\u068C\u068D\x07C\x02\x02" + + "\u068D\u068E\x07V\x02\x02\u068E\u068F\x07G\x02\x02\u068F\u0690\x07F\x02" + + "\x02\u0690\xFC\x03\x02\x02\x02\u0691\u0692\x07I\x02\x02\u0692\u0693\x07" + + "N\x02\x02\u0693\u0694\x07Q\x02\x02\u0694\u0695\x07D\x02\x02\u0695\u0696" + + "\x07C\x02\x02\u0696\u0697\x07N\x02\x02\u0697\xFE\x03\x02\x02\x02\u0698" + + "\u0699\x07I\x02\x02\u0699\u069A\x07T\x02\x02\u069A\u069B\x07C\x02\x02" + + "\u069B\u069C\x07P\x02\x02\u069C\u069D\x07V\x02\x02\u069D\u0100\x03\x02" + + "\x02\x02\u069E\u069F\x07I\x02\x02\u069F\u06A0\x07T\x02\x02\u06A0\u06A1" + + "\x07Q\x02\x02\u06A1\u06A2\x07W\x02\x02\u06A2\u06A3\x07R\x02\x02\u06A3" + + "\u0102\x03\x02\x02\x02\u06A4\u06A5\x07I\x02\x02\u06A5\u06A6\x07T\x02\x02" + + "\u06A6\u06A7\x07Q\x02\x02\u06A7\u06A8\x07W\x02\x02\u06A8\u06A9\x07R\x02" + + "\x02\u06A9\u06AA\x07K\x02\x02\u06AA\u06AB\x07P\x02\x02\u06AB\u06AC\x07" + + "I\x02\x02\u06AC\u0104\x03\x02\x02\x02\u06AD\u06AE\x07J\x02\x02\u06AE\u06AF" + + "\x07C\x02\x02\u06AF\u06B0\x07X\x02\x02\u06B0\u06B1\x07K\x02\x02\u06B1" + + "\u06B2\x07P\x02\x02\u06B2\u06B3\x07I\x02\x02\u06B3\u0106\x03\x02\x02\x02" + + "\u06B4\u06B5\x07Z\x02\x02\u06B5\u0108\x03\x02\x02\x02\u06B6\u06B7\x07" + + "J\x02\x02\u06B7\u06B8\x07Q\x02\x02\u06B8\u06B9\x07W\x02\x02\u06B9\u06BA" + + "\x07T\x02\x02\u06BA\u010A\x03\x02\x02\x02\u06BB\u06BC\x07J\x02\x02\u06BC" + + "\u06BD\x07Q\x02\x02\u06BD\u06BE\x07W\x02\x02\u06BE\u06BF\x07T\x02\x02" + + "\u06BF\u06C0\x07U\x02\x02\u06C0\u010C\x03\x02\x02\x02\u06C1\u06C2\x07" + + "K\x02\x02\u06C2\u06C3\x07F\x02\x02\u06C3\u06C4\x07G\x02\x02\u06C4\u06C5" + + "\x07P\x02\x02\u06C5\u06C6\x07V\x02\x02\u06C6\u06C7\x07K\x02\x02\u06C7" + + "\u06C8\x07H\x02\x02\u06C8\u06C9\x07K\x02\x02\u06C9\u06CA\x07G\x02\x02" + + "\u06CA\u06CB\x07T\x02\x02\u06CB\u010E\x03\x02\x02\x02\u06CC\u06CD\x07" + + "K\x02\x02\u06CD\u06CE\x07H\x02\x02\u06CE\u0110\x03\x02\x02\x02\u06CF\u06D0" + + "\x07K\x02\x02\u06D0\u06D1\x07I\x02\x02\u06D1\u06D2\x07P\x02\x02\u06D2" + + "\u06D3\x07Q\x02\x02\u06D3\u06D4\x07T\x02\x02\u06D4\u06D5\x07G\x02\x02" + + "\u06D5\u0112\x03\x02\x02\x02\u06D6\u06D7\x07K\x02\x02\u06D7\u06D8\x07" + + "O\x02\x02\u06D8\u06D9\x07R\x02\x02\u06D9\u06DA\x07Q\x02\x02\u06DA\u06DB" + + "\x07T\x02\x02\u06DB\u06DC\x07V\x02\x02\u06DC\u0114\x03\x02\x02\x02\u06DD" + + "\u06DE\x07K\x02\x02\u06DE\u06DF\x07P\x02\x02\u06DF\u0116\x03\x02\x02\x02" + + "\u06E0\u06E1\x07K\x02\x02\u06E1\u06E2\x07P\x02\x02\u06E2\u06E3\x07E\x02" + + "\x02\u06E3\u06E4\x07N\x02\x02\u06E4\u06E5\x07W\x02\x02\u06E5\u06E6\x07" + + "F\x02\x02\u06E6\u06E7\x07G\x02\x02\u06E7\u0118\x03\x02\x02\x02\u06E8\u06E9" + + "\x07K\x02\x02\u06E9\u06EA\x07P\x02\x02\u06EA\u06EB\x07F\x02\x02\u06EB" + + "\u06EC\x07G\x02\x02\u06EC\u06ED\x07Z\x02\x02\u06ED\u011A\x03\x02\x02\x02" + + "\u06EE\u06EF\x07K\x02\x02\u06EF\u06F0\x07P\x02\x02\u06F0\u06F1\x07F\x02" + + "\x02\u06F1\u06F2\x07G\x02\x02\u06F2\u06F3\x07Z\x02\x02\u06F3\u06F4\x07" + + "G\x02\x02\u06F4\u06F5\x07U\x02\x02\u06F5\u011C\x03\x02\x02\x02\u06F6\u06F7" + + "\x07K\x02\x02\u06F7\u06F8\x07P\x02\x02\u06F8\u06F9\x07P\x02\x02\u06F9" + + "\u06FA\x07G\x02\x02\u06FA\u06FB\x07T\x02\x02\u06FB\u011E\x03\x02\x02\x02" + + "\u06FC\u06FD\x07K\x02\x02\u06FD\u06FE\x07P\x02\x02\u06FE\u06FF\x07R\x02" + + "\x02\u06FF\u0700\x07C\x02\x02\u0700\u0701\x07V\x02\x02\u0701\u0702\x07" + + "J\x02\x02\u0702\u0120\x03\x02\x02\x02\u0703\u0704\x07K\x02\x02\u0704\u0705" + + "\x07P\x02\x02\u0705\u0706\x07R\x02\x02\u0706\u0707\x07W\x02\x02\u0707" + + "\u0708\x07V\x02\x02\u0708\u0709\x07H\x02\x02\u0709\u070A\x07Q\x02\x02" + + "\u070A\u070B\x07T\x02\x02\u070B\u070C\x07O\x02\x02\u070C\u070D\x07C\x02" + + "\x02\u070D\u070E\x07V\x02\x02\u070E\u0122\x03\x02\x02\x02\u070F\u0710" + + "\x07K\x02\x02\u0710\u0711\x07P\x02\x02\u0711\u0712\x07U\x02\x02\u0712" + + "\u0713\x07G\x02\x02\u0713\u0714\x07T\x02\x02\u0714\u0715\x07V\x02\x02" + + "\u0715\u0124\x03\x02\x02\x02\u0716\u0717\x07K\x02\x02\u0717\u0718\x07" + + "P\x02\x02\u0718\u0719\x07V\x02\x02\u0719\u071A\x07G\x02\x02\u071A\u071B" + + "\x07T\x02\x02\u071B\u071C\x07U\x02\x02\u071C\u071D\x07G\x02\x02\u071D" + + "\u071E\x07E\x02\x02\u071E\u071F\x07V\x02\x02\u071F\u0126\x03\x02\x02\x02" + + "\u0720\u0721\x07K\x02\x02\u0721\u0722\x07P\x02\x02\u0722\u0723\x07V\x02" + + "\x02\u0723\u0724\x07G\x02\x02\u0724\u0725\x07T\x02\x02\u0725\u0726\x07" + + "X\x02\x02\u0726\u0727\x07C\x02\x02\u0727\u0728\x07N\x02\x02\u0728\u0128" + + "\x03\x02\x02\x02\u0729\u072A\x07K\x02\x02\u072A\u072B\x07P\x02\x02\u072B" + + "\u072C\x07V\x02\x02\u072C\u012A\x03\x02\x02\x02\u072D\u072E\x07K\x02\x02" + + "\u072E\u072F\x07P\x02\x02\u072F\u0730\x07V\x02\x02\u0730\u0731\x07G\x02" + + "\x02\u0731\u0732\x07I\x02\x02\u0732\u0733\x07G\x02\x02\u0733\u0734\x07" + + "T\x02\x02\u0734\u012C\x03\x02\x02\x02\u0735\u0736\x07K\x02\x02\u0736\u0737" + + "\x07P\x02\x02\u0737\u0738\x07V\x02\x02\u0738\u0739\x07Q\x02\x02\u0739" + + "\u012E\x03\x02\x02\x02\u073A\u073B\x07K\x02\x02\u073B\u073C\x07U\x02\x02" + + "\u073C\u0130\x03\x02\x02\x02\u073D\u073E\x07K\x02\x02\u073E\u073F\x07" + + "V\x02\x02\u073F\u0740\x07G\x02\x02\u0740\u0741\x07O\x02\x02\u0741\u0742" + + "\x07U\x02\x02\u0742\u0132\x03\x02\x02\x02\u0743\u0744\x07L\x02\x02\u0744" + + "\u0745\x07Q\x02\x02\u0745\u0746\x07K\x02\x02\u0746\u0747\x07P\x02\x02" + + "\u0747\u0134\x03\x02\x02\x02\u0748\u0749\x07M\x02\x02\u0749\u074A\x07" + + "G\x02\x02\u074A\u074B\x07[\x02\x02\u074B\u074C\x07U\x02\x02\u074C\u0136" + + "\x03\x02\x02\x02\u074D\u074E\x07N\x02\x02\u074E\u074F\x07C\x02\x02\u074F" + + "\u0750\x07U\x02\x02\u0750\u0751\x07V\x02\x02\u0751\u0138\x03\x02\x02\x02" + + "\u0752\u0753\x07N\x02\x02\u0753\u0754\x07C\x02\x02\u0754\u0755\x07V\x02" + + "\x02\u0755\u0756\x07G\x02\x02\u0756\u0757\x07T\x02\x02\u0757\u0758\x07" + + "C\x02\x02\u0758\u0759\x07N\x02\x02\u0759\u013A\x03\x02\x02\x02\u075A\u075B" + + "\x07N\x02\x02\u075B\u075C\x07C\x02\x02\u075C\u075D\x07\\\x02\x02\u075D" + + "\u075E\x07[\x02\x02\u075E\u013C\x03\x02\x02\x02\u075F\u0760\x07N\x02\x02" + + "\u0760\u0761\x07G\x02\x02\u0761\u0762\x07C\x02\x02\u0762\u0763\x07F\x02" + + "\x02\u0763\u0764\x07K\x02\x02\u0764\u0765\x07P\x02\x02\u0765\u0766\x07" + + "I\x02\x02\u0766\u013E\x03\x02\x02\x02\u0767\u0768\x07N\x02\x02\u0768\u0769" + + "\x07G\x02\x02\u0769\u076A\x07H\x02\x02\u076A\u076B\x07V\x02\x02\u076B" + + "\u0140\x03\x02\x02\x02\u076C\u076D\x07N\x02\x02\u076D\u076E\x07K\x02\x02" + + "\u076E\u076F\x07M\x02\x02\u076F\u0770\x07G\x02\x02\u0770\u0142\x03\x02" + + "\x02\x02\u0771\u0772\x07K\x02\x02\u0772\u0773\x07N\x02\x02\u0773\u0774" + + "\x07K\x02\x02\u0774\u0775\x07M\x02\x02\u0775\u0776\x07G\x02\x02\u0776" + + "\u0144\x03\x02\x02\x02\u0777\u0778\x07N\x02\x02\u0778\u0779\x07K\x02\x02" + + "\u0779\u077A\x07O\x02\x02\u077A\u077B\x07K\x02\x02\u077B\u077C\x07V\x02" + + "\x02\u077C\u0146\x03\x02\x02\x02\u077D\u077E\x07N\x02\x02\u077E\u077F" + + "\x07K"; private static readonly _serializedATNSegment4: string = - "O\x02\x02\u08CD\u08CE\x07G\x02\x02\u08CE\u01CC\x03\x02\x02\x02\u08CF\u08D0" + - "\x07V\x02\x02\u08D0\u08D1\x07Q\x02\x02\u08D1\u01CE\x03\x02\x02\x02\u08D2" + - "\u08D3\x07V\x02\x02\u08D3\u08D4\x07Q\x02\x02\u08D4\u08D5\x07W\x02\x02" + - "\u08D5\u08D6\x07E\x02\x02\u08D6\u08D7\x07J\x02\x02\u08D7\u01D0\x03\x02" + - "\x02\x02\u08D8\u08D9\x07V\x02\x02\u08D9\u08DA\x07T\x02\x02\u08DA\u08DB" + - "\x07C\x02\x02\u08DB\u08DC\x07K\x02\x02\u08DC\u08DD\x07N\x02\x02\u08DD" + - "\u08DE\x07K\x02\x02\u08DE\u08DF\x07P\x02\x02\u08DF\u08E0\x07I\x02\x02" + - "\u08E0\u01D2\x03\x02\x02\x02\u08E1\u08E2\x07V\x02\x02\u08E2\u08E3\x07" + - "T\x02\x02\u08E3\u08E4\x07C\x02\x02\u08E4\u08E5\x07P\x02\x02\u08E5\u08E6" + - "\x07U\x02\x02\u08E6\u08E7\x07C\x02\x02\u08E7\u08E8\x07E\x02\x02\u08E8" + - "\u08E9\x07V\x02\x02\u08E9\u08EA\x07K\x02\x02\u08EA\u08EB\x07Q\x02\x02" + - "\u08EB\u08EC\x07P\x02\x02\u08EC\u01D4\x03\x02\x02\x02\u08ED\u08EE\x07" + - "V\x02\x02\u08EE\u08EF\x07T\x02\x02\u08EF\u08F0\x07C\x02\x02\u08F0\u08F1" + - "\x07P\x02\x02\u08F1\u08F2\x07U\x02\x02\u08F2\u08F3\x07C\x02\x02\u08F3" + - "\u08F4\x07E\x02\x02\u08F4\u08F5\x07V\x02\x02\u08F5\u08F6\x07K\x02\x02" + - "\u08F6\u08F7\x07Q\x02\x02\u08F7\u08F8\x07P\x02\x02\u08F8\u08F9\x07U\x02" + - "\x02\u08F9\u01D6\x03\x02\x02\x02\u08FA\u08FB\x07V\x02\x02\u08FB\u08FC" + - "\x07T\x02\x02\u08FC\u08FD\x07C\x02\x02\u08FD\u08FE\x07P\x02\x02\u08FE" + - "\u08FF\x07U\x02\x02\u08FF\u0900\x07H\x02\x02\u0900\u0901\x07Q\x02\x02" + - "\u0901\u0902\x07T\x02\x02\u0902\u0903\x07O\x02\x02\u0903\u01D8\x03\x02" + - "\x02\x02\u0904\u0905\x07V\x02\x02\u0905\u0906\x07T\x02\x02\u0906\u0907" + - "\x07K\x02\x02\u0907\u0908\x07O\x02\x02\u0908\u01DA\x03\x02\x02\x02\u0909" + - "\u090A\x07V\x02\x02\u090A\u090B\x07T\x02\x02\u090B\u090C\x07W\x02\x02" + - "\u090C\u090D\x07G\x02\x02\u090D\u01DC\x03\x02\x02\x02\u090E\u090F\x07" + - "V\x02\x02\u090F\u0910\x07T\x02\x02\u0910\u0911\x07W\x02\x02\u0911\u0912" + - "\x07P\x02\x02\u0912\u0913\x07E\x02\x02\u0913\u0914\x07C\x02\x02\u0914" + - "\u0915\x07V\x02\x02\u0915\u0916\x07G\x02\x02\u0916\u01DE\x03\x02\x02\x02" + - "\u0917\u0918\x07V\x02\x02\u0918\u0919\x07[\x02\x02\u0919\u091A\x07R\x02" + - "\x02\u091A\u091B\x07G\x02\x02\u091B\u01E0\x03\x02\x02\x02\u091C\u091D" + - "\x07W\x02\x02\u091D\u091E\x07P\x02\x02\u091E\u091F\x07C\x02\x02\u091F" + - "\u0920\x07T\x02\x02\u0920\u0921\x07E\x02\x02\u0921\u0922\x07J\x02\x02" + - "\u0922\u0923\x07K\x02\x02\u0923\u0924\x07X\x02\x02\u0924\u0925\x07G\x02" + - "\x02\u0925\u01E2\x03\x02\x02\x02\u0926\u0927\x07W\x02\x02\u0927\u0928" + - "\x07P\x02\x02\u0928\u0929\x07D\x02\x02\u0929\u092A\x07Q\x02\x02\u092A" + - "\u092B\x07W\x02\x02\u092B\u092C\x07P\x02\x02\u092C\u092D\x07F\x02\x02" + - "\u092D\u092E\x07G\x02\x02\u092E\u092F\x07F\x02\x02\u092F\u01E4\x03\x02" + - "\x02\x02\u0930\u0931\x07W\x02\x02\u0931\u0932\x07P\x02\x02\u0932\u0933" + - "\x07E\x02\x02\u0933\u0934\x07C\x02\x02\u0934\u0935\x07E\x02\x02\u0935" + - "\u0936\x07J\x02\x02\u0936\u0937\x07G\x02\x02\u0937\u01E6\x03\x02\x02\x02" + - "\u0938\u0939\x07W\x02\x02\u0939\u093A\x07P\x02\x02\u093A\u093B\x07K\x02" + - "\x02\u093B\u093C\x07Q\x02\x02\u093C\u093D\x07P\x02\x02\u093D\u01E8\x03" + - "\x02\x02\x02\u093E\u093F\x07W\x02\x02\u093F\u0940\x07P\x02\x02\u0940\u0941" + - "\x07K\x02\x02\u0941\u0942\x07S\x02\x02\u0942\u0943\x07W\x02\x02\u0943" + - "\u0944\x07G\x02\x02\u0944\u01EA\x03\x02\x02\x02\u0945\u0946\x07W\x02\x02" + - "\u0946\u0947\x07P\x02\x02\u0947\u0948\x07M\x02\x02\u0948\u0949\x07P\x02" + - "\x02\u0949\u094A\x07Q\x02\x02\u094A\u094B\x07Y\x02\x02\u094B\u094C\x07" + - "P\x02\x02\u094C\u01EC\x03\x02\x02\x02\u094D\u094E\x07W\x02\x02\u094E\u094F" + - "\x07P\x02\x02\u094F\u0950\x07N\x02\x02\u0950\u0951\x07Q\x02\x02\u0951" + - "\u0952\x07E\x02\x02\u0952\u0953\x07M\x02\x02\u0953\u01EE\x03\x02\x02\x02" + - "\u0954\u0955\x07W\x02\x02\u0955\u0956\x07P\x02\x02\u0956\u0957\x07U\x02" + - "\x02\u0957\u0958\x07G\x02\x02\u0958\u0959\x07V\x02\x02\u0959\u01F0\x03" + - "\x02\x02\x02\u095A\u095B\x07W\x02\x02\u095B\u095C\x07R\x02\x02\u095C\u095D" + - "\x07F\x02\x02\u095D\u095E\x07C\x02\x02\u095E\u095F\x07V\x02\x02\u095F" + - "\u0960\x07G\x02\x02\u0960\u01F2\x03\x02\x02\x02\u0961\u0962\x07W\x02\x02" + - "\u0962\u0963\x07U\x02\x02\u0963\u0964\x07G\x02\x02\u0964\u01F4\x03\x02" + - "\x02\x02\u0965\u0966\x07W\x02\x02\u0966\u0967\x07U\x02\x02\u0967\u0968" + - "\x07G\x02\x02\u0968\u0969\x07T\x02\x02\u0969\u01F6\x03\x02\x02\x02\u096A" + - "\u096B\x07W\x02\x02\u096B\u096C\x07U\x02\x02\u096C\u096D\x07K\x02\x02" + - "\u096D\u096E\x07P\x02\x02\u096E\u096F\x07I\x02\x02\u096F\u01F8\x03\x02" + - "\x02\x02\u0970\u0971\x07X\x02\x02\u0971\u0972\x07C\x02\x02\u0972\u0973" + - "\x07N\x02\x02\u0973\u0974\x07W\x02\x02\u0974\u0975\x07G\x02\x02\u0975" + - "\u0976\x07U\x02\x02\u0976\u01FA\x03\x02\x02\x02\u0977\u0978\x07X\x02\x02" + - "\u0978\u0979\x07K\x02\x02\u0979\u097A\x07G\x02\x02\u097A\u097B\x07Y\x02" + - "\x02\u097B\u01FC\x03\x02\x02\x02\u097C\u097D\x07X\x02\x02\u097D\u097E" + - "\x07K\x02\x02\u097E\u097F\x07G\x02\x02\u097F\u0980\x07Y\x02\x02\u0980" + - "\u0981\x07U\x02\x02\u0981\u01FE\x03\x02\x02\x02\u0982\u0983\x07Y\x02\x02" + - "\u0983\u0984\x07J\x02\x02\u0984\u0985\x07G\x02\x02\u0985\u0986\x07P\x02" + - "\x02\u0986\u0200\x03\x02\x02\x02\u0987\u0988\x07Y\x02\x02\u0988\u0989" + - "\x07J\x02\x02\u0989\u098A\x07G\x02\x02\u098A\u098B\x07T\x02\x02\u098B" + - "\u098C\x07G\x02\x02\u098C\u0202\x03\x02\x02\x02\u098D\u098E\x07Y\x02\x02" + - "\u098E\u098F\x07K\x02\x02\u098F\u0990\x07P\x02\x02\u0990\u0991\x07F\x02" + - "\x02\u0991\u0992\x07Q\x02\x02\u0992\u0993\x07Y\x02\x02\u0993\u0204\x03" + - "\x02\x02\x02\u0994\u0995\x07Y\x02\x02\u0995\u0996\x07K\x02\x02\u0996\u0997" + - "\x07V\x02\x02\u0997\u0998\x07J\x02\x02\u0998\u0206\x03\x02\x02\x02\u0999" + - "\u099A\x07\\\x02\x02\u099A\u099B\x07Q\x02\x02\u099B\u099C\x07P\x02\x02" + - "\u099C\u099D\x07G\x02\x02\u099D\u0208\x03\x02\x02\x02\u099E\u09A2\x07" + - "?\x02\x02\u099F\u09A0\x07?\x02\x02\u09A0\u09A2\x07?\x02\x02\u09A1\u099E" + - "\x03\x02\x02\x02\u09A1\u099F\x03\x02\x02\x02\u09A2\u020A\x03\x02\x02\x02" + - "\u09A3\u09A4\x07>\x02\x02\u09A4\u09A5\x07?\x02\x02\u09A5\u09A6\x07@\x02" + - "\x02\u09A6\u020C\x03\x02\x02\x02\u09A7\u09A8\x07>\x02\x02\u09A8\u09A9" + - "\x07@\x02\x02\u09A9\u020E\x03\x02\x02\x02\u09AA\u09AB\x07#\x02\x02\u09AB" + - "\u09AC\x07?\x02\x02\u09AC\u0210\x03\x02\x02\x02\u09AD\u09AE\x07>\x02\x02" + - "\u09AE\u0212\x03\x02\x02\x02\u09AF\u09B0\x07>\x02\x02\u09B0\u09B4\x07" + - "?\x02\x02\u09B1\u09B2\x07#\x02\x02\u09B2\u09B4\x07@\x02\x02\u09B3\u09AF" + - "\x03\x02\x02\x02\u09B3\u09B1\x03\x02\x02\x02\u09B4\u0214\x03\x02\x02\x02" + - "\u09B5\u09B6\x07@\x02\x02\u09B6\u0216\x03\x02\x02\x02\u09B7\u09B8\x07" + - "@\x02\x02\u09B8\u09BC\x07?\x02\x02\u09B9\u09BA\x07#\x02\x02\u09BA\u09BC" + - "\x07>\x02\x02\u09BB\u09B7\x03\x02\x02\x02\u09BB\u09B9\x03\x02\x02\x02" + - "\u09BC\u0218\x03\x02\x02\x02\u09BD\u09BE\x07-\x02\x02\u09BE\u021A\x03" + - "\x02\x02\x02\u09BF\u09C0\x07/\x02\x02\u09C0\u021C\x03\x02\x02\x02\u09C1" + - "\u09C2\x07,\x02\x02\u09C2\u021E\x03\x02\x02\x02\u09C3\u09C4\x071\x02\x02" + - "\u09C4\u0220\x03\x02\x02\x02\u09C5\u09C6\x07\'\x02\x02\u09C6\u0222\x03" + - "\x02\x02\x02\u09C7\u09C8\x07\x80\x02\x02\u09C8\u0224\x03\x02\x02\x02\u09C9" + - "\u09CA\x07(\x02\x02\u09CA\u0226\x03\x02\x02\x02\u09CB\u09CC\x07~\x02\x02" + - "\u09CC\u0228\x03\x02\x02\x02\u09CD\u09CE\x07~\x02\x02\u09CE\u09CF\x07" + - "~\x02\x02\u09CF\u022A\x03\x02\x02\x02\u09D0\u09D1\x07`\x02\x02\u09D1\u022C" + - "\x03\x02\x02\x02\u09D2\u09D3\x07=\x02\x02\u09D3\u022E\x03\x02\x02\x02" + - "\u09D4\u09DA\x07)\x02\x02\u09D5\u09D9\n\x02\x02\x02\u09D6\u09D7\x07^\x02" + - "\x02\u09D7\u09D9\v\x02\x02\x02\u09D8\u09D5\x03\x02\x02\x02\u09D8\u09D6" + - "\x03\x02\x02\x02\u09D9\u09DC\x03\x02\x02\x02\u09DA\u09D8\x03\x02\x02\x02" + - "\u09DA\u09DB\x03\x02\x02\x02\u09DB\u09DD\x03\x02\x02\x02\u09DC\u09DA\x03" + - "\x02\x02\x02\u09DD\u09E9\x07)\x02\x02\u09DE\u09E4\x07$\x02\x02\u09DF\u09E3" + - "\n\x03\x02\x02\u09E0\u09E1\x07^\x02\x02\u09E1\u09E3\v\x02\x02\x02\u09E2" + - "\u09DF\x03\x02\x02\x02\u09E2\u09E0\x03\x02\x02\x02\u09E3\u09E6\x03\x02" + - "\x02\x02\u09E4\u09E2\x03\x02\x02\x02\u09E4\u09E5\x03\x02\x02\x02\u09E5" + - "\u09E7\x03\x02\x02\x02\u09E6\u09E4\x03\x02\x02\x02\u09E7\u09E9\x07$\x02" + - "\x02\u09E8\u09D4\x03\x02\x02\x02\u09E8\u09DE\x03\x02\x02\x02\u09E9\u0230" + - "\x03\x02\x02\x02\u09EA\u09EC\x05\u024D\u0127\x02\u09EB\u09EA\x03\x02\x02" + - "\x02\u09EC\u09ED\x03\x02\x02\x02\u09ED\u09EB\x03\x02\x02\x02\u09ED\u09EE" + - "\x03\x02\x02\x02\u09EE\u09EF\x03\x02\x02\x02\u09EF\u09F0\x07N\x02\x02" + - "\u09F0\u0232\x03\x02\x02\x02\u09F1\u09F3\x05\u024D\u0127\x02\u09F2\u09F1" + - "\x03\x02\x02\x02\u09F3\u09F4\x03\x02\x02\x02\u09F4\u09F2\x03\x02\x02\x02" + - "\u09F4\u09F5\x03\x02\x02\x02\u09F5\u09F6\x03\x02\x02\x02\u09F6\u09F7\x07" + - "U\x02\x02\u09F7\u0234\x03\x02\x02\x02\u09F8\u09FA\x05\u024D\u0127\x02" + - "\u09F9\u09F8\x03\x02\x02\x02\u09FA\u09FB\x03\x02\x02\x02\u09FB\u09F9\x03" + - "\x02\x02\x02\u09FB\u09FC\x03\x02\x02\x02\u09FC\u09FD\x03\x02\x02\x02\u09FD" + - "\u09FE\x07[\x02\x02\u09FE\u0236\x03\x02\x02\x02\u09FF\u0A01\x05\u024D" + - "\u0127\x02\u0A00\u09FF\x03\x02\x02\x02\u0A01\u0A02\x03\x02\x02\x02\u0A02" + - "\u0A00\x03\x02\x02\x02\u0A02\u0A03\x03\x02\x02\x02\u0A03\u0238\x03\x02" + - "\x02\x02\u0A04\u0A06\x05\u024D\u0127\x02\u0A05\u0A04\x03\x02\x02\x02\u0A06" + - "\u0A07\x03\x02\x02\x02\u0A07\u0A05\x03\x02\x02\x02\u0A07\u0A08\x03\x02" + - "\x02\x02\u0A08\u0A09\x03\x02\x02\x02\u0A09\u0A0A\x05\u024B\u0126\x02\u0A0A" + - "\u0A10\x03\x02\x02\x02\u0A0B\u0A0C\x05\u0249\u0125\x02\u0A0C\u0A0D\x05" + - "\u024B\u0126\x02\u0A0D\u0A0E\x06\u011D\x02\x02\u0A0E\u0A10\x03\x02\x02" + - "\x02\u0A0F\u0A05\x03\x02\x02\x02\u0A0F\u0A0B\x03\x02\x02\x02\u0A10\u023A" + - "\x03\x02\x02\x02\u0A11\u0A12\x05\u0249\u0125\x02\u0A12\u0A13\x06\u011E" + - "\x03\x02\u0A13\u023C\x03\x02\x02\x02\u0A14\u0A16\x05\u024D\u0127\x02\u0A15" + - "\u0A14\x03\x02\x02\x02\u0A16\u0A17\x03\x02\x02\x02\u0A17\u0A15\x03\x02" + - "\x02\x02\u0A17\u0A18\x03\x02\x02\x02\u0A18\u0A1A\x03\x02\x02\x02\u0A19" + - "\u0A1B\x05\u024B\u0126\x02\u0A1A\u0A19\x03\x02\x02\x02\u0A1A\u0A1B\x03" + - "\x02\x02\x02\u0A1B\u0A1C\x03\x02\x02\x02\u0A1C\u0A1D\x07H\x02\x02\u0A1D" + - "\u0A26\x03\x02\x02\x02\u0A1E\u0A20\x05\u0249\u0125\x02\u0A1F\u0A21\x05" + - "\u024B\u0126\x02\u0A20\u0A1F\x03\x02\x02\x02\u0A20\u0A21\x03\x02\x02\x02" + - "\u0A21\u0A22\x03\x02\x02\x02\u0A22\u0A23\x07H\x02\x02\u0A23\u0A24\x06" + - "\u011F\x04\x02\u0A24\u0A26\x03\x02\x02\x02\u0A25\u0A15\x03\x02\x02\x02" + - "\u0A25\u0A1E\x03\x02\x02\x02\u0A26\u023E\x03\x02\x02\x02\u0A27\u0A29\x05" + - "\u024D\u0127\x02\u0A28\u0A27\x03\x02\x02\x02\u0A29\u0A2A\x03\x02\x02\x02" + - "\u0A2A\u0A28\x03\x02\x02\x02\u0A2A\u0A2B\x03\x02\x02\x02\u0A2B\u0A2D\x03" + - "\x02\x02\x02\u0A2C\u0A2E\x05\u024B\u0126\x02\u0A2D\u0A2C\x03\x02\x02\x02" + - "\u0A2D\u0A2E\x03\x02\x02\x02\u0A2E\u0A2F\x03\x02\x02\x02\u0A2F\u0A30\x07" + - "F\x02\x02\u0A30\u0A39\x03\x02\x02\x02\u0A31\u0A33\x05\u0249\u0125\x02" + - "\u0A32\u0A34\x05\u024B\u0126\x02\u0A33\u0A32\x03\x02\x02\x02\u0A33\u0A34" + - "\x03\x02\x02\x02\u0A34\u0A35\x03\x02\x02\x02\u0A35\u0A36\x07F\x02\x02" + - "\u0A36\u0A37\x06\u0120\x05\x02\u0A37\u0A39\x03\x02\x02\x02\u0A38\u0A28" + - "\x03\x02\x02\x02\u0A38\u0A31\x03\x02\x02\x02\u0A39\u0240\x03\x02\x02\x02" + - "\u0A3A\u0A3C\x05\u024D\u0127\x02\u0A3B\u0A3A\x03\x02\x02\x02\u0A3C\u0A3D" + - "\x03\x02\x02\x02\u0A3D\u0A3B\x03\x02\x02\x02\u0A3D\u0A3E\x03\x02\x02\x02" + - "\u0A3E\u0A40\x03\x02\x02\x02\u0A3F\u0A41\x05\u024B\u0126\x02\u0A40\u0A3F" + - "\x03\x02\x02\x02\u0A40\u0A41\x03\x02\x02\x02\u0A41\u0A42\x03\x02\x02\x02" + - "\u0A42\u0A43\x07D\x02\x02\u0A43\u0A44\x07F\x02\x02\u0A44\u0A4F\x03\x02" + - "\x02\x02\u0A45\u0A47\x05\u0249\u0125\x02\u0A46\u0A48\x05\u024B\u0126\x02" + - "\u0A47\u0A46\x03\x02\x02\x02\u0A47\u0A48\x03\x02\x02\x02\u0A48\u0A49\x03" + - "\x02\x02\x02\u0A49\u0A4A\x07D\x02\x02\u0A4A\u0A4B\x07F\x02\x02\u0A4B\u0A4C" + - "\x03\x02\x02\x02\u0A4C\u0A4D\x06\u0121\x06\x02\u0A4D\u0A4F\x03\x02\x02" + - "\x02\u0A4E\u0A3B\x03\x02\x02\x02\u0A4E\u0A45\x03\x02\x02\x02\u0A4F\u0242" + - "\x03\x02\x02\x02\u0A50\u0A55\x05\u024F\u0128\x02\u0A51\u0A55\x05\u024D" + - "\u0127\x02\u0A52\u0A55\x07a\x02\x02\u0A53\u0A55\x05\u0247\u0124\x02\u0A54" + - "\u0A50\x03\x02\x02\x02\u0A54\u0A51\x03\x02\x02\x02\u0A54\u0A52\x03\x02" + - "\x02\x02\u0A54\u0A53\x03\x02\x02\x02\u0A55\u0A56\x03\x02\x02\x02\u0A56" + - "\u0A54\x03\x02\x02\x02\u0A56\u0A57\x03\x02\x02\x02\u0A57\u0244\x03\x02" + - "\x02\x02\u0A58\u0A5E\x07b\x02\x02\u0A59\u0A5D\n\x04\x02\x02\u0A5A\u0A5B" + - "\x07b\x02\x02\u0A5B\u0A5D\x07b\x02\x02\u0A5C\u0A59\x03\x02\x02\x02\u0A5C" + - "\u0A5A\x03\x02\x02\x02\u0A5D\u0A60\x03\x02\x02\x02\u0A5E\u0A5C\x03\x02" + - "\x02\x02\u0A5E\u0A5F\x03\x02\x02\x02\u0A5F\u0A61\x03\x02\x02\x02\u0A60" + - "\u0A5E\x03\x02\x02\x02\u0A61\u0A62\x07b\x02\x02\u0A62\u0246\x03\x02\x02" + - "\x02\u0A63\u0A64\x07&\x02\x02\u0A64\u0A65\x07}\x02\x02\u0A65\u0A66\x03" + - "\x02\x02\x02\u0A66\u0A67\x05\u0243\u0122\x02\u0A67\u0A68\x07\x7F\x02\x02" + - "\u0A68\u0248\x03\x02\x02\x02\u0A69\u0A6B\x05\u024D\u0127\x02\u0A6A\u0A69" + - "\x03\x02\x02\x02\u0A6B\u0A6C\x03\x02\x02\x02\u0A6C\u0A6A\x03\x02\x02\x02" + - "\u0A6C\u0A6D\x03\x02\x02\x02\u0A6D\u0A6E\x03\x02\x02\x02\u0A6E\u0A72\x07" + - "0\x02\x02\u0A6F\u0A71\x05\u024D\u0127\x02\u0A70\u0A6F\x03\x02\x02\x02" + - "\u0A71\u0A74\x03\x02\x02\x02\u0A72\u0A70\x03\x02\x02\x02\u0A72\u0A73\x03" + - "\x02\x02\x02\u0A73\u0A7C\x03\x02\x02\x02\u0A74\u0A72\x03\x02\x02\x02\u0A75" + - "\u0A77\x070\x02\x02\u0A76\u0A78\x05\u024D\u0127\x02\u0A77\u0A76\x03\x02" + - "\x02\x02\u0A78\u0A79\x03\x02\x02\x02\u0A79\u0A77\x03\x02\x02\x02\u0A79" + - "\u0A7A\x03\x02\x02\x02\u0A7A\u0A7C\x03\x02\x02\x02\u0A7B\u0A6A\x03\x02" + - "\x02\x02\u0A7B\u0A75\x03\x02\x02\x02\u0A7C\u024A\x03\x02\x02\x02\u0A7D" + - "\u0A7F\x07G\x02\x02\u0A7E\u0A80\t\x05\x02\x02\u0A7F\u0A7E\x03\x02\x02" + - "\x02\u0A7F\u0A80\x03\x02\x02\x02\u0A80\u0A82\x03\x02\x02\x02\u0A81\u0A83" + - "\x05\u024D\u0127\x02\u0A82\u0A81\x03\x02\x02\x02\u0A83\u0A84\x03\x02\x02" + - "\x02\u0A84\u0A82\x03\x02\x02\x02\u0A84\u0A85\x03\x02\x02\x02\u0A85\u024C" + - "\x03\x02\x02\x02\u0A86\u0A87\t\x06\x02\x02\u0A87\u024E\x03\x02\x02\x02" + - "\u0A88\u0A89\t\x07\x02\x02\u0A89\u0250\x03\x02\x02\x02\u0A8A\u0A8B\x07" + - "/\x02\x02\u0A8B\u0A8C\x07/\x02\x02\u0A8C\u0A92\x03\x02\x02\x02\u0A8D\u0A8E" + - "\x07^\x02\x02\u0A8E\u0A91\x07\f\x02\x02\u0A8F\u0A91\n\b\x02\x02\u0A90" + - "\u0A8D\x03\x02\x02\x02\u0A90\u0A8F\x03\x02\x02\x02\u0A91\u0A94\x03\x02" + - "\x02\x02\u0A92\u0A90\x03\x02\x02\x02\u0A92\u0A93\x03\x02\x02\x02\u0A93" + - "\u0A96\x03\x02\x02\x02\u0A94\u0A92\x03\x02\x02\x02\u0A95\u0A97\x07\x0F" + - "\x02\x02\u0A96\u0A95\x03\x02\x02\x02\u0A96\u0A97\x03\x02\x02\x02\u0A97" + - "\u0A99\x03\x02\x02\x02\u0A98\u0A9A\x07\f\x02\x02\u0A99\u0A98\x03\x02\x02" + - "\x02\u0A99\u0A9A\x03\x02\x02\x02\u0A9A\u0A9B\x03\x02\x02\x02\u0A9B\u0A9C" + - "\b\u0129\x02\x02\u0A9C\u0252\x03\x02\x02\x02\u0A9D\u0A9E\x071\x02\x02" + - "\u0A9E\u0A9F\x07,\x02\x02\u0A9F\u0AA0\x03\x02\x02\x02\u0AA0\u0AA5\x06" + - "\u012A\x07\x02\u0AA1\u0AA4\x05\u0253\u012A\x02\u0AA2\u0AA4\v\x02\x02\x02" + - "\u0AA3\u0AA1\x03\x02\x02\x02\u0AA3\u0AA2\x03\x02\x02\x02\u0AA4\u0AA7\x03" + - "\x02\x02\x02\u0AA5\u0AA6\x03\x02\x02\x02\u0AA5\u0AA3\x03\x02\x02\x02\u0AA6" + - "\u0AA8\x03\x02\x02\x02\u0AA7\u0AA5\x03\x02\x02\x02\u0AA8\u0AA9\x07,\x02" + - "\x02\u0AA9\u0AAA\x071\x02\x02\u0AAA\u0AAB\x03\x02\x02\x02\u0AAB\u0AAC" + - "\b\u012A\x02\x02\u0AAC\u0254\x03\x02\x02\x02\u0AAD\u0AAF\t\t\x02\x02\u0AAE" + - "\u0AAD\x03\x02\x02\x02\u0AAF\u0AB0\x03\x02\x02\x02\u0AB0\u0AAE\x03\x02" + - "\x02\x02\u0AB0\u0AB1\x03\x02\x02\x02\u0AB1\u0AB2\x03\x02\x02\x02\u0AB2" + - "\u0AB3\b\u012B\x02\x02\u0AB3\u0256\x03\x02\x02\x02\u0AB4\u0AB5\v\x02\x02" + - "\x02\u0AB5\u0258\x03\x02\x02\x022\x02\u03FE\u065F\u07B9\u08B8\u09A1\u09B3" + - "\u09BB\u09D8\u09DA\u09E2\u09E4\u09E8\u09ED\u09F4\u09FB\u0A02\u0A07\u0A0F" + - "\u0A17\u0A1A\u0A20\u0A25\u0A2A\u0A2D\u0A33\u0A38\u0A3D\u0A40\u0A47\u0A4E" + - "\u0A54\u0A56\u0A5C\u0A5E\u0A6C\u0A72\u0A79\u0A7B\u0A7F\u0A84\u0A90\u0A92" + - "\u0A96\u0A99\u0AA3\u0AA5\u0AB0\x03\x02\x03\x02"; + "\x02\x02\u077F\u0780\x07P\x02\x02\u0780\u0781\x07G\x02\x02\u0781\u0782" + + "\x07U\x02\x02\u0782\u0148\x03\x02\x02\x02\u0783\u0784\x07N\x02\x02\u0784" + + "\u0785\x07K\x02\x02\u0785\u0786\x07U\x02\x02\u0786\u0787\x07V\x02\x02" + + "\u0787\u014A\x03\x02\x02\x02\u0788\u0789\x07N\x02\x02\u0789\u078A\x07" + + "Q\x02\x02\u078A\u078B\x07C\x02\x02\u078B\u078C\x07F\x02\x02\u078C\u014C" + + "\x03\x02\x02\x02\u078D\u078E\x07N\x02\x02\u078E\u078F\x07Q\x02\x02\u078F" + + "\u0790\x07E\x02\x02\u0790\u0791\x07C\x02\x02\u0791\u0792\x07N\x02\x02" + + "\u0792\u014E\x03\x02\x02\x02\u0793\u0794\x07N\x02\x02\u0794\u0795\x07" + + "Q\x02\x02\u0795\u0796\x07E\x02\x02\u0796\u0797\x07C\x02\x02\u0797\u0798" + + "\x07V\x02\x02\u0798\u0799\x07K\x02\x02\u0799\u079A\x07Q\x02\x02\u079A" + + "\u079B\x07P\x02\x02\u079B\u0150\x03\x02\x02\x02\u079C\u079D\x07N\x02\x02" + + "\u079D\u079E\x07Q\x02\x02\u079E\u079F\x07E\x02\x02\u079F\u07A0\x07M\x02" + + "\x02\u07A0\u0152\x03\x02\x02\x02\u07A1\u07A2\x07N\x02\x02\u07A2\u07A3" + + "\x07Q\x02\x02\u07A3\u07A4\x07E\x02\x02\u07A4\u07A5\x07M\x02\x02\u07A5" + + "\u07A6\x07U\x02\x02\u07A6\u0154\x03\x02\x02\x02\u07A7\u07A8\x07N\x02\x02" + + "\u07A8\u07A9\x07Q\x02\x02\u07A9\u07AA\x07I\x02\x02\u07AA\u07AB\x07K\x02" + + "\x02\u07AB\u07AC\x07E\x02\x02\u07AC\u07AD\x07C\x02\x02\u07AD\u07AE\x07" + + "N\x02\x02\u07AE\u0156\x03\x02\x02\x02\u07AF\u07B0\x07N\x02\x02\u07B0\u07B1" + + "\x07Q\x02\x02\u07B1\u07B2\x07P\x02\x02\u07B2\u07B3\x07I\x02\x02\u07B3" + + "\u0158\x03\x02\x02\x02\u07B4\u07B5\x07O\x02\x02\u07B5\u07B6\x07C\x02\x02" + + "\u07B6\u07B7\x07E\x02\x02\u07B7\u07B8\x07T\x02\x02\u07B8\u07B9\x07Q\x02" + + "\x02\u07B9\u015A\x03\x02\x02\x02\u07BA\u07BB\x07O\x02\x02\u07BB\u07BC" + + "\x07C\x02\x02\u07BC\u07BD\x07R\x02\x02\u07BD\u015C\x03\x02\x02\x02\u07BE" + + "\u07BF\x07O\x02\x02\u07BF\u07C0\x07C\x02\x02\u07C0\u07C1\x07V\x02\x02" + + "\u07C1\u07C2\x07E\x02\x02\u07C2\u07C3\x07J\x02\x02\u07C3\u07C4\x07G\x02" + + "\x02\u07C4\u07C5\x07F\x02\x02\u07C5\u015E\x03\x02\x02\x02\u07C6\u07C7" + + "\x07O\x02\x02\u07C7\u07C8\x07G\x02\x02\u07C8\u07C9\x07T\x02\x02\u07C9" + + "\u07CA\x07I\x02\x02\u07CA\u07CB\x07G\x02\x02\u07CB\u0160\x03\x02\x02\x02" + + "\u07CC\u07CD\x07O\x02\x02\u07CD\u07CE\x07K\x02\x02\u07CE\u07CF\x07E\x02" + + "\x02\u07CF\u07D0\x07T\x02\x02\u07D0\u07D1\x07Q\x02\x02\u07D1\u07D2\x07" + + "U\x02\x02\u07D2\u07D3\x07G\x02\x02\u07D3\u07D4\x07E\x02\x02\u07D4\u07D5" + + "\x07Q\x02\x02\u07D5\u07D6\x07P\x02\x02\u07D6\u07D7\x07F\x02\x02\u07D7" + + "\u0162\x03\x02\x02\x02\u07D8\u07D9\x07O\x02\x02\u07D9\u07DA\x07K\x02\x02" + + "\u07DA\u07DB\x07E\x02\x02\u07DB\u07DC\x07T\x02\x02\u07DC\u07DD\x07Q\x02" + + "\x02\u07DD\u07DE\x07U\x02\x02\u07DE\u07DF\x07G\x02\x02\u07DF\u07E0\x07" + + "E\x02\x02\u07E0\u07E1\x07Q\x02\x02\u07E1\u07E2\x07P\x02\x02\u07E2\u07E3" + + "\x07F\x02\x02\u07E3\u07E4\x07U\x02\x02\u07E4\u0164\x03\x02\x02\x02\u07E5" + + "\u07E6\x07O\x02\x02\u07E6\u07E7\x07K\x02\x02\u07E7\u07E8\x07N\x02\x02" + + "\u07E8\u07E9\x07N\x02\x02\u07E9\u07EA\x07K\x02\x02\u07EA\u07EB\x07U\x02" + + "\x02\u07EB\u07EC\x07G\x02\x02\u07EC\u07ED\x07E\x02\x02\u07ED\u07EE\x07" + + "Q\x02\x02\u07EE\u07EF\x07P\x02\x02\u07EF\u07F0\x07F\x02\x02\u07F0\u0166" + + "\x03\x02\x02\x02\u07F1\u07F2\x07O\x02\x02\u07F2\u07F3\x07K\x02\x02\u07F3" + + "\u07F4\x07N\x02\x02\u07F4\u07F5\x07N\x02\x02\u07F5\u07F6\x07K\x02\x02" + + "\u07F6\u07F7\x07U\x02\x02\u07F7\u07F8\x07G\x02\x02\u07F8\u07F9\x07E\x02" + + "\x02\u07F9\u07FA\x07Q\x02\x02\u07FA\u07FB\x07P\x02\x02\u07FB\u07FC\x07" + + "F\x02\x02\u07FC\u07FD\x07U\x02\x02\u07FD\u0168\x03\x02\x02\x02\u07FE\u07FF" + + "\x07O\x02\x02\u07FF\u0800\x07K\x02\x02\u0800\u0801\x07P\x02\x02\u0801" + + "\u0802\x07W\x02\x02\u0802\u0803\x07V\x02\x02\u0803\u0804\x07G\x02\x02" + + "\u0804\u016A\x03\x02\x02\x02\u0805\u0806\x07O\x02\x02\u0806\u0807\x07" + + "K\x02\x02\u0807\u0808\x07P\x02\x02\u0808\u0809\x07W\x02\x02\u0809\u080A" + + "\x07V\x02\x02\u080A\u080B\x07G\x02\x02\u080B\u080C\x07U\x02\x02\u080C" + + "\u016C\x03\x02\x02\x02\u080D\u080E\x07O\x02\x02\u080E\u080F\x07Q\x02\x02" + + "\u080F\u0810\x07P\x02\x02\u0810\u0811\x07V\x02\x02\u0811\u0812\x07J\x02" + + "\x02\u0812\u016E\x03\x02\x02\x02\u0813\u0814\x07O\x02\x02\u0814\u0815" + + "\x07Q\x02\x02\u0815\u0816\x07P\x02\x02\u0816\u0817\x07V\x02\x02\u0817" + + "\u0818\x07J\x02\x02\u0818\u0819\x07U\x02\x02\u0819\u0170\x03\x02\x02\x02" + + "\u081A\u081B\x07O\x02\x02\u081B\u081C\x07U\x02\x02\u081C\u081D\x07E\x02" + + "\x02\u081D\u081E\x07M\x02\x02\u081E\u0172\x03\x02\x02\x02\u081F\u0820" + + "\x07P\x02\x02\u0820\u0821\x07C\x02\x02\u0821\u0822\x07O\x02\x02\u0822" + + "\u0823\x07G\x02\x02\u0823\u0174\x03\x02\x02\x02\u0824\u0825\x07P\x02\x02" + + "\u0825\u0826\x07C\x02\x02\u0826\u0827\x07O\x02\x02\u0827\u0828\x07G\x02" + + "\x02\u0828\u0829\x07U\x02\x02\u0829\u082A\x07R\x02\x02\u082A\u082B\x07" + + "C\x02\x02\u082B\u082C\x07E\x02\x02\u082C\u082D\x07G\x02\x02\u082D\u0176" + + "\x03\x02\x02\x02\u082E\u082F\x07P\x02\x02\u082F\u0830\x07C\x02\x02\u0830" + + "\u0831\x07O\x02\x02\u0831\u0832\x07G\x02\x02\u0832\u0833\x07U\x02\x02" + + "\u0833\u0834\x07R\x02\x02\u0834\u0835\x07C\x02\x02\u0835\u0836\x07E\x02" + + "\x02\u0836\u0837\x07G\x02\x02\u0837\u0838\x07U\x02\x02\u0838\u0178\x03" + + "\x02\x02\x02\u0839\u083A\x07P\x02\x02\u083A\u083B\x07C\x02\x02\u083B\u083C" + + "\x07P\x02\x02\u083C\u083D\x07Q\x02\x02\u083D\u083E\x07U\x02\x02\u083E" + + "\u083F\x07G\x02\x02\u083F\u0840\x07E\x02\x02\u0840\u0841\x07Q\x02\x02" + + "\u0841\u0842\x07P\x02\x02\u0842\u0843\x07F\x02\x02\u0843\u017A\x03\x02" + + "\x02\x02\u0844\u0845\x07P\x02\x02\u0845\u0846\x07C\x02\x02\u0846\u0847" + + "\x07P\x02\x02\u0847\u0848\x07Q\x02\x02\u0848\u0849\x07U\x02\x02\u0849" + + "\u084A\x07G\x02\x02\u084A\u084B\x07E\x02\x02\u084B\u084C\x07Q\x02\x02" + + "\u084C\u084D\x07P\x02\x02\u084D\u084E\x07F\x02\x02\u084E\u084F\x07U\x02" + + "\x02\u084F\u017C\x03\x02\x02\x02\u0850\u0851\x07P\x02\x02\u0851\u0852" + + "\x07C\x02\x02\u0852\u0853\x07V\x02\x02\u0853\u0854\x07W\x02\x02\u0854" + + "\u0855\x07T\x02\x02\u0855\u0856\x07C\x02\x02\u0856\u0857\x07N\x02\x02" + + "\u0857\u017E\x03\x02\x02\x02\u0858\u0859\x07P\x02\x02\u0859\u085A\x07" + + "Q\x02\x02\u085A\u0180\x03\x02\x02\x02\u085B\u085C\x07P\x02\x02\u085C\u085D" + + "\x07Q\x02\x02\u085D\u0860\x07V\x02\x02\u085E\u0860\x07#\x02\x02\u085F" + + "\u085B\x03\x02\x02\x02\u085F\u085E\x03\x02\x02\x02\u0860\u0182\x03\x02" + + "\x02\x02\u0861\u0862\x07P\x02\x02\u0862\u0863\x07W\x02\x02\u0863\u0864" + + "\x07N\x02\x02\u0864\u0865\x07N\x02\x02\u0865\u0184\x03\x02\x02\x02\u0866" + + "\u0867\x07P\x02\x02\u0867\u0868\x07W\x02\x02\u0868\u0869\x07N\x02\x02" + + "\u0869\u086A\x07N\x02\x02\u086A\u086B\x07U\x02\x02\u086B\u0186\x03\x02" + + "\x02\x02\u086C\u086D\x07P\x02\x02\u086D\u086E\x07W\x02\x02\u086E\u086F" + + "\x07O\x02\x02\u086F\u0870\x07G\x02\x02\u0870\u0871\x07T\x02\x02\u0871" + + "\u0872\x07K\x02\x02\u0872\u0873\x07E\x02\x02\u0873\u0188\x03\x02\x02\x02" + + "\u0874\u0875\x07Q\x02\x02\u0875\u0876\x07H\x02\x02\u0876\u018A\x03\x02" + + "\x02\x02\u0877\u0878\x07Q\x02\x02\u0878\u0879\x07H\x02\x02\u0879\u087A" + + "\x07H\x02\x02\u087A\u087B\x07U\x02\x02\u087B\u087C\x07G\x02\x02\u087C" + + "\u087D\x07V\x02\x02\u087D\u018C\x03\x02\x02\x02\u087E\u087F\x07Q\x02\x02" + + "\u087F\u0880\x07P\x02\x02\u0880\u018E\x03\x02\x02\x02\u0881\u0882\x07" + + "Q\x02\x02\u0882\u0883\x07P\x02\x02\u0883\u0884\x07N\x02\x02\u0884\u0885" + + "\x07[\x02\x02\u0885\u0190\x03\x02\x02\x02\u0886\u0887\x07Q\x02\x02\u0887" + + "\u0888\x07R\x02\x02\u0888\u0889\x07V\x02\x02\u0889\u088A\x07K\x02\x02" + + "\u088A\u088B\x07Q\x02\x02\u088B\u088C\x07P\x02\x02\u088C\u0192\x03\x02" + + "\x02\x02\u088D\u088E\x07Q\x02\x02\u088E\u088F\x07R\x02\x02\u088F\u0890" + + "\x07V\x02\x02\u0890\u0891\x07K\x02\x02\u0891\u0892\x07Q\x02\x02\u0892" + + "\u0893\x07P\x02\x02\u0893\u0894\x07U\x02\x02\u0894\u0194\x03\x02\x02\x02" + + "\u0895\u0896\x07Q\x02\x02\u0896\u0897\x07T\x02\x02\u0897\u0196\x03\x02" + + "\x02\x02\u0898\u0899\x07Q\x02\x02\u0899\u089A\x07T\x02\x02\u089A\u089B" + + "\x07F\x02\x02\u089B\u089C\x07G\x02\x02\u089C\u089D\x07T\x02\x02\u089D" + + "\u0198\x03\x02\x02\x02\u089E\u089F\x07Q\x02\x02\u089F\u08A0\x07W\x02\x02" + + "\u08A0\u08A1\x07V\x02\x02\u08A1\u019A\x03\x02\x02\x02\u08A2\u08A3\x07" + + "Q\x02\x02\u08A3\u08A4\x07W\x02\x02\u08A4\u08A5\x07V\x02\x02\u08A5\u08A6" + + "\x07G\x02\x02\u08A6\u08A7\x07T\x02\x02\u08A7\u019C\x03\x02\x02\x02\u08A8" + + "\u08A9\x07Q\x02\x02\u08A9\u08AA\x07W\x02\x02\u08AA\u08AB\x07V\x02\x02" + + "\u08AB\u08AC\x07R\x02\x02\u08AC\u08AD\x07W\x02\x02\u08AD\u08AE\x07V\x02" + + "\x02\u08AE\u08AF\x07H\x02\x02\u08AF\u08B0\x07Q\x02\x02\u08B0\u08B1\x07" + + "T\x02\x02\u08B1\u08B2\x07O\x02\x02\u08B2\u08B3\x07C\x02\x02\u08B3\u08B4" + + "\x07V\x02\x02\u08B4\u019E\x03\x02\x02\x02\u08B5\u08B6\x07Q\x02\x02\u08B6" + + "\u08B7\x07X\x02\x02\u08B7\u08B8\x07G\x02\x02\u08B8\u08B9\x07T\x02\x02" + + "\u08B9\u01A0\x03\x02\x02\x02\u08BA\u08BB\x07Q\x02\x02\u08BB\u08BC\x07" + + "X\x02\x02\u08BC\u08BD\x07G\x02\x02\u08BD\u08BE\x07T\x02\x02\u08BE\u08BF" + + "\x07N\x02\x02\u08BF\u08C0\x07C\x02\x02\u08C0\u08C1\x07R\x02\x02\u08C1" + + "\u08C2\x07U\x02\x02\u08C2\u01A2\x03\x02\x02\x02\u08C3\u08C4\x07Q\x02\x02" + + "\u08C4\u08C5\x07X\x02\x02\u08C5\u08C6\x07G\x02\x02\u08C6\u08C7\x07T\x02" + + "\x02\u08C7\u08C8\x07N\x02\x02\u08C8\u08C9\x07C\x02\x02\u08C9\u08CA\x07" + + "[\x02\x02\u08CA\u01A4\x03\x02\x02\x02\u08CB\u08CC\x07Q\x02\x02\u08CC\u08CD" + + "\x07X\x02\x02\u08CD\u08CE\x07G\x02\x02\u08CE\u08CF\x07T\x02\x02\u08CF" + + "\u08D0\x07Y\x02\x02\u08D0\u08D1\x07T\x02\x02\u08D1\u08D2\x07K\x02\x02" + + "\u08D2\u08D3\x07V\x02\x02\u08D3\u08D4\x07G\x02\x02\u08D4\u01A6\x03\x02" + + "\x02\x02\u08D5\u08D6\x07R\x02\x02\u08D6\u08D7\x07C\x02\x02\u08D7\u08D8" + + "\x07T\x02\x02\u08D8\u08D9\x07V\x02\x02\u08D9\u08DA\x07K\x02\x02\u08DA" + + "\u08DB\x07V\x02\x02\u08DB\u08DC\x07K\x02\x02\u08DC\u08DD\x07Q\x02\x02" + + "\u08DD\u08DE\x07P\x02\x02\u08DE\u01A8\x03\x02\x02\x02\u08DF\u08E0\x07" + + "R\x02\x02\u08E0\u08E1\x07C\x02\x02\u08E1\u08E2\x07T\x02\x02\u08E2\u08E3" + + "\x07V\x02\x02\u08E3\u08E4\x07K\x02\x02\u08E4\u08E5\x07V\x02\x02\u08E5" + + "\u08E6\x07K\x02\x02\u08E6\u08E7\x07Q\x02\x02\u08E7\u08E8\x07P\x02\x02" + + "\u08E8\u08E9\x07G\x02\x02\u08E9\u08EA\x07F\x02\x02\u08EA\u01AA\x03\x02" + + "\x02\x02\u08EB\u08EC\x07R\x02\x02\u08EC\u08ED\x07C\x02\x02\u08ED\u08EE" + + "\x07T\x02\x02\u08EE\u08EF\x07V\x02\x02\u08EF\u08F0\x07K\x02\x02\u08F0" + + "\u08F1\x07V\x02\x02\u08F1\u08F2\x07K\x02\x02\u08F2\u08F3\x07Q\x02\x02" + + "\u08F3\u08F4\x07P\x02\x02\u08F4\u08F5\x07U\x02\x02\u08F5\u01AC\x03\x02" + + "\x02\x02\u08F6\u08F7\x07R\x02\x02\u08F7\u08F8\x07G\x02\x02\u08F8\u08F9" + + "\x07T\x02\x02\u08F9\u08FA\x07E\x02\x02\u08FA\u08FB\x07G\x02\x02\u08FB" + + "\u08FC\x07P\x02\x02\u08FC\u08FD\x07V\x02\x02\u08FD\u08FE\x07K\x02\x02" + + "\u08FE\u08FF\x07N\x02\x02\u08FF\u0900\x07G\x02\x02\u0900\u0901\x07a\x02" + + "\x02\u0901\u0902\x07E\x02\x02\u0902\u0903\x07Q\x02\x02\u0903\u0904\x07" + + "P\x02\x02\u0904\u0905\x07V\x02\x02\u0905\u01AE\x03\x02\x02\x02\u0906\u0907" + + "\x07R\x02\x02\u0907\u0908\x07G\x02\x02\u0908\u0909\x07T\x02\x02\u0909" + + "\u090A\x07E\x02\x02\u090A\u090B\x07G\x02\x02\u090B\u090C\x07P\x02\x02" + + "\u090C\u090D\x07V\x02\x02\u090D\u090E\x07K\x02\x02\u090E\u090F\x07N\x02" + + "\x02\u090F\u0910\x07G\x02\x02\u0910\u0911\x07a\x02\x02\u0911\u0912\x07" + + "F\x02\x02\u0912\u0913\x07K\x02\x02\u0913\u0914\x07U\x02\x02\u0914\u0915" + + "\x07E\x02\x02\u0915\u01B0\x03\x02\x02\x02\u0916\u0917\x07R\x02\x02\u0917" + + "\u0918\x07G\x02\x02\u0918\u0919\x07T\x02\x02\u0919\u091A\x07E\x02\x02" + + "\u091A\u091B\x07G\x02\x02\u091B\u091C\x07P\x02\x02\u091C\u091D\x07V\x02" + + "\x02\u091D\u01B2\x03\x02\x02\x02\u091E\u091F\x07R\x02\x02\u091F\u0920" + + "\x07K\x02\x02\u0920\u0921\x07X\x02\x02\u0921\u0922\x07Q\x02\x02\u0922" + + "\u0923\x07V\x02\x02\u0923\u01B4\x03\x02\x02\x02\u0924\u0925\x07R\x02\x02" + + "\u0925\u0926\x07N\x02\x02\u0926\u0927\x07C\x02\x02\u0927\u0928\x07E\x02" + + "\x02\u0928\u0929\x07K\x02\x02\u0929\u092A\x07P\x02\x02\u092A\u092B\x07" + + "I\x02\x02\u092B\u01B6\x03\x02\x02\x02\u092C\u092D\x07R\x02\x02\u092D\u092E" + + "\x07Q\x02\x02\u092E\u092F\x07U\x02\x02\u092F\u0930\x07K\x02\x02\u0930" + + "\u0931\x07V\x02\x02\u0931\u0932\x07K\x02\x02\u0932\u0933\x07Q\x02\x02" + + "\u0933\u0934\x07P\x02\x02\u0934\u01B8\x03\x02\x02\x02\u0935\u0936\x07" + + "R\x02\x02\u0936\u0937\x07T\x02\x02\u0937\u0938\x07G\x02\x02\u0938\u0939" + + "\x07E\x02\x02\u0939\u093A\x07G\x02\x02\u093A\u093B\x07F\x02\x02\u093B" + + "\u093C\x07K\x02\x02\u093C\u093D\x07P\x02\x02\u093D\u093E\x07I\x02\x02" + + "\u093E\u01BA\x03\x02\x02\x02\u093F\u0940\x07R\x02\x02\u0940\u0941\x07" + + "T\x02\x02\u0941\u0942\x07K\x02\x02\u0942\u0943\x07O\x02\x02\u0943\u0944" + + "\x07C\x02\x02\u0944\u0945\x07T\x02\x02\u0945\u0946\x07[\x02\x02\u0946" + + "\u01BC\x03\x02\x02\x02\u0947\u0948\x07R\x02\x02\u0948\u0949\x07T\x02\x02" + + "\u0949\u094A\x07K\x02\x02\u094A\u094B\x07P\x02\x02\u094B\u094C\x07E\x02" + + "\x02\u094C\u094D\x07K\x02\x02\u094D\u094E\x07R\x02\x02\u094E\u094F\x07" + + "C\x02\x02\u094F\u0950\x07N\x02\x02\u0950\u0951\x07U\x02\x02\u0951\u01BE" + + "\x03\x02\x02\x02\u0952\u0953\x07R\x02\x02\u0953\u0954\x07T\x02\x02\u0954" + + "\u0955\x07Q\x02\x02\u0955\u0956\x07R\x02\x02\u0956\u0957\x07G\x02\x02" + + "\u0957\u0958\x07T\x02\x02\u0958\u0959\x07V\x02\x02\u0959\u095A\x07K\x02" + + "\x02\u095A\u095B\x07G\x02\x02\u095B\u095C\x07U\x02\x02\u095C\u01C0\x03" + + "\x02\x02\x02\u095D\u095E\x07R\x02\x02\u095E\u095F\x07W\x02\x02\u095F\u0960" + + "\x07T\x02\x02\u0960\u0961\x07I\x02\x02\u0961\u0962\x07G\x02\x02\u0962" + + "\u01C2\x03\x02\x02\x02\u0963\u0964\x07S\x02\x02\u0964\u0965\x07W\x02\x02" + + "\u0965\u0966\x07C\x02\x02\u0966\u0967\x07T\x02\x02\u0967\u0968\x07V\x02" + + "\x02\u0968\u0969\x07G\x02\x02\u0969\u096A\x07T\x02\x02\u096A\u01C4\x03" + + "\x02\x02\x02\u096B\u096C\x07S\x02\x02\u096C\u096D\x07W\x02\x02\u096D\u096E" + + "\x07G\x02\x02\u096E\u096F\x07T\x02\x02\u096F\u0970\x07[\x02\x02\u0970" + + "\u01C6\x03\x02\x02\x02\u0971\u0972\x07T\x02\x02\u0972\u0973\x07C\x02\x02" + + "\u0973\u0974\x07P\x02\x02\u0974\u0975\x07I\x02\x02\u0975\u0976\x07G\x02" + + "\x02\u0976\u01C8\x03\x02\x02\x02\u0977\u0978\x07T\x02\x02\u0978\u0979" + + "\x07G\x02\x02\u0979\u097A\x07C\x02\x02\u097A\u097B\x07N\x02\x02\u097B" + + "\u01CA\x03\x02\x02\x02\u097C\u097D\x07T\x02\x02\u097D\u097E\x07G\x02\x02" + + "\u097E\u097F\x07E\x02\x02\u097F\u0980\x07Q\x02\x02\u0980\u0981\x07T\x02" + + "\x02\u0981\u0982\x07F\x02\x02\u0982\u0983\x07T\x02\x02\u0983\u0984\x07" + + "G\x02\x02\u0984\u0985\x07C\x02\x02\u0985\u0986\x07F\x02\x02\u0986\u0987" + + "\x07G\x02\x02\u0987\u0988\x07T\x02\x02\u0988\u01CC\x03\x02\x02\x02\u0989" + + "\u098A\x07T\x02\x02\u098A\u098B\x07G\x02\x02\u098B\u098C\x07E\x02\x02" + + "\u098C\u098D\x07Q\x02\x02\u098D\u098E\x07T\x02\x02\u098E\u098F\x07F\x02" + + "\x02\u098F\u0990\x07Y\x02\x02\u0990\u0991\x07T\x02\x02\u0991\u0992\x07" + + "K\x02\x02\u0992\u0993\x07V\x02\x02\u0993\u0994\x07G\x02\x02\u0994\u0995" + + "\x07T\x02\x02\u0995\u01CE\x03\x02\x02\x02\u0996\u0997\x07T\x02\x02\u0997" + + "\u0998\x07G\x02\x02\u0998\u0999\x07E\x02\x02\u0999\u099A\x07Q\x02\x02" + + "\u099A\u099B\x07X\x02\x02\u099B\u099C\x07G\x02\x02\u099C\u099D\x07T\x02" + + "\x02\u099D\u01D0\x03\x02\x02\x02\u099E\u099F\x07T\x02\x02\u099F\u09A0" + + "\x07G\x02\x02\u09A0\u09A1\x07F\x02\x02\u09A1\u09A2\x07W\x02\x02\u09A2" + + "\u09A3\x07E\x02\x02\u09A3\u09A4\x07G\x02\x02\u09A4\u01D2\x03\x02\x02\x02" + + "\u09A5\u09A6\x07T\x02\x02\u09A6\u09A7\x07G\x02\x02\u09A7\u09A8\x07H\x02" + + "\x02\u09A8\u09A9\x07G\x02\x02\u09A9\u09AA\x07T\x02\x02\u09AA\u09AB\x07" + + "G\x02\x02\u09AB\u09AC\x07P\x02\x02\u09AC\u09AD\x07E\x02\x02\u09AD\u09AE" + + "\x07G\x02\x02\u09AE\u09AF\x07U\x02\x02\u09AF\u01D4\x03\x02\x02\x02\u09B0" + + "\u09B1\x07T\x02\x02\u09B1\u09B2\x07G\x02\x02\u09B2\u09B3\x07H\x02\x02" + + "\u09B3\u09B4\x07T\x02\x02\u09B4\u09B5\x07G\x02\x02\u09B5\u09B6\x07U\x02" + + "\x02\u09B6\u09B7\x07J\x02\x02\u09B7\u01D6\x03\x02\x02\x02\u09B8\u09B9" + + "\x07T\x02\x02\u09B9\u09BA\x07G\x02\x02\u09BA\u09BB\x07P\x02\x02\u09BB" + + "\u09BC\x07C\x02\x02\u09BC\u09BD\x07O\x02\x02\u09BD\u09BE\x07G\x02\x02" + + "\u09BE\u01D8\x03\x02\x02\x02\u09BF\u09C0\x07T\x02\x02\u09C0\u09C1\x07" + + "G\x02\x02\u09C1\u09C2\x07R\x02\x02\u09C2\u09C3\x07C\x02\x02\u09C3\u09C4" + + "\x07K\x02\x02\u09C4\u09C5\x07T\x02\x02\u09C5\u01DA\x03\x02\x02\x02\u09C6" + + "\u09C7\x07T\x02\x02\u09C7\u09C8\x07G\x02\x02\u09C8\u09C9\x07R\x02\x02" + + "\u09C9\u09CA\x07G\x02\x02\u09CA\u09CB\x07C\x02\x02\u09CB\u09CC\x07V\x02" + + "\x02\u09CC\u09CD\x07C\x02\x02\u09CD\u09CE\x07D\x02\x02\u09CE\u09CF\x07" + + "N\x02\x02\u09CF\u09D0\x07G\x02\x02\u09D0\u01DC\x03\x02\x02\x02\u09D1\u09D2" + + "\x07T\x02\x02\u09D2\u09D3\x07G\x02\x02\u09D3\u09D4\x07R\x02\x02\u09D4" + + "\u09D5\x07N\x02\x02\u09D5\u09D6\x07C\x02\x02\u09D6\u09D7\x07E\x02\x02" + + "\u09D7\u09D8\x07G\x02\x02\u09D8\u01DE\x03\x02\x02\x02\u09D9\u09DA\x07" + + "T\x02\x02\u09DA\u09DB\x07G\x02\x02\u09DB\u09DC\x07U\x02\x02\u09DC\u09DD" + + "\x07G\x02\x02\u09DD\u09DE\x07V\x02\x02\u09DE\u01E0\x03\x02\x02\x02\u09DF" + + "\u09E0\x07T\x02\x02\u09E0\u09E1\x07G\x02\x02\u09E1\u09E2\x07U\x02\x02" + + "\u09E2\u09E3\x07R\x02\x02\u09E3\u09E4\x07G\x02\x02\u09E4\u09E5\x07E\x02" + + "\x02\u09E5\u09E6\x07V\x02\x02\u09E6\u01E2\x03\x02\x02\x02\u09E7\u09E8" + + "\x07T\x02\x02\u09E8\u09E9\x07G\x02\x02\u09E9\u09EA\x07U\x02\x02\u09EA" + + "\u09EB\x07V\x02\x02\u09EB\u09EC\x07T\x02\x02\u09EC\u09ED\x07K\x02\x02" + + "\u09ED\u09EE\x07E\x02\x02\u09EE\u09EF\x07V\x02\x02\u09EF\u01E4\x03\x02" + + "\x02\x02\u09F0\u09F1\x07T\x02\x02\u09F1\u09F2\x07G\x02\x02\u09F2\u09F3" + + "\x07X\x02\x02\u09F3\u09F4\x07Q\x02\x02\u09F4\u09F5\x07M\x02\x02\u09F5" + + "\u09F6\x07G\x02\x02\u09F6\u01E6\x03\x02\x02\x02\u09F7\u09F8\x07T\x02\x02" + + "\u09F8\u09F9\x07K\x02\x02\u09F9\u09FA\x07I\x02\x02\u09FA\u09FB\x07J\x02" + + "\x02\u09FB\u09FC\x07V\x02\x02\u09FC\u01E8\x03\x02\x02\x02\u09FD\u09FE" + + "\x07T\x02\x02\u09FE\u09FF\x07N\x02\x02\u09FF\u0A00\x07K\x02\x02\u0A00" + + "\u0A01\x07M\x02\x02\u0A01\u0A09\x07G\x02\x02\u0A02\u0A03\x07T\x02\x02" + + "\u0A03\u0A04\x07G\x02\x02\u0A04\u0A05\x07I\x02\x02\u0A05\u0A06\x07G\x02" + + "\x02\u0A06\u0A07\x07Z\x02\x02\u0A07\u0A09\x07R\x02\x02\u0A08\u09FD\x03" + + "\x02\x02\x02\u0A08\u0A02\x03\x02\x02\x02\u0A09\u01EA\x03\x02\x02\x02\u0A0A" + + "\u0A0B\x07T\x02\x02\u0A0B\u0A0C\x07Q\x02\x02\u0A0C\u0A0D\x07N\x02\x02" + + "\u0A0D\u0A0E\x07G\x02\x02\u0A0E\u01EC\x03\x02\x02\x02\u0A0F\u0A10\x07" + + "T\x02\x02\u0A10\u0A11\x07Q\x02\x02\u0A11\u0A12\x07N\x02\x02\u0A12\u0A13" + + "\x07G\x02\x02\u0A13\u0A14\x07U\x02\x02\u0A14\u01EE\x03\x02\x02\x02\u0A15" + + "\u0A16\x07T\x02\x02\u0A16\u0A17\x07Q\x02\x02\u0A17\u0A18\x07N\x02\x02" + + "\u0A18\u0A19\x07N\x02\x02\u0A19\u0A1A\x07D\x02\x02\u0A1A\u0A1B\x07C\x02" + + "\x02\u0A1B\u0A1C\x07E\x02\x02\u0A1C\u0A1D\x07M\x02\x02\u0A1D\u01F0\x03" + + "\x02\x02\x02\u0A1E\u0A1F\x07T\x02\x02\u0A1F\u0A20\x07Q\x02\x02\u0A20\u0A21" + + "\x07N\x02\x02\u0A21\u0A22\x07N\x02\x02\u0A22\u0A23\x07W\x02\x02\u0A23" + + "\u0A24\x07R\x02\x02\u0A24\u01F2\x03\x02\x02\x02\u0A25\u0A26\x07T\x02\x02" + + "\u0A26\u0A27\x07Q\x02\x02\u0A27\u0A28\x07Y\x02\x02\u0A28\u01F4\x03\x02" + + "\x02\x02\u0A29\u0A2A\x07T\x02\x02\u0A2A\u0A2B\x07Q\x02\x02\u0A2B\u0A2C" + + "\x07Y\x02\x02\u0A2C\u0A2D\x07U\x02\x02\u0A2D\u01F6\x03\x02\x02\x02\u0A2E" + + "\u0A2F\x07U\x02\x02\u0A2F\u0A30\x07G\x02\x02\u0A30\u0A31\x07E\x02\x02" + + "\u0A31\u0A32\x07Q\x02\x02\u0A32\u0A33\x07P\x02\x02\u0A33\u0A34\x07F\x02" + + "\x02\u0A34\u01F8\x03\x02\x02\x02\u0A35\u0A36\x07U\x02\x02\u0A36\u0A37" + + "\x07G\x02\x02\u0A37\u0A38\x07E\x02\x02\u0A38\u0A39\x07Q\x02\x02\u0A39" + + "\u0A3A\x07P\x02\x02\u0A3A\u0A3B\x07F\x02\x02\u0A3B\u0A3C\x07U\x02\x02" + + "\u0A3C\u01FA\x03\x02\x02\x02\u0A3D\u0A3E\x07U\x02\x02\u0A3E\u0A3F\x07" + + "E\x02\x02\u0A3F\u0A40\x07J\x02\x02\u0A40\u0A41\x07G\x02\x02\u0A41\u0A42" + + "\x07O\x02\x02\u0A42\u0A43\x07C\x02\x02\u0A43\u01FC\x03\x02\x02\x02\u0A44" + + "\u0A45\x07U\x02\x02\u0A45\u0A46\x07E\x02\x02\u0A46\u0A47\x07J\x02\x02" + + "\u0A47\u0A48\x07G\x02\x02\u0A48\u0A49\x07O\x02\x02\u0A49\u0A4A\x07C\x02" + + "\x02\u0A4A\u0A4B\x07U\x02\x02\u0A4B\u01FE\x03\x02\x02\x02\u0A4C\u0A4D" + + "\x07U\x02\x02\u0A4D\u0A4E\x07G\x02\x02\u0A4E\u0A4F\x07N\x02\x02\u0A4F" + + "\u0A50\x07G\x02\x02\u0A50\u0A51\x07E\x02\x02\u0A51\u0A52\x07V\x02\x02" + + "\u0A52\u0200\x03\x02\x02\x02\u0A53\u0A54\x07U\x02\x02\u0A54\u0A55\x07" + + "G\x02\x02\u0A55\u0A56\x07O\x02\x02\u0A56\u0A57\x07K\x02\x02\u0A57\u0202" + + "\x03\x02\x02\x02\u0A58\u0A59\x07U\x02\x02\u0A59\u0A5A\x07G\x02\x02\u0A5A" + + "\u0A5B\x07R\x02\x02\u0A5B\u0A5C\x07C\x02\x02\u0A5C\u0A5D\x07T\x02\x02" + + "\u0A5D\u0A5E\x07C\x02\x02\u0A5E\u0A5F\x07V\x02\x02\u0A5F\u0A60\x07G\x02" + + "\x02\u0A60\u0A61\x07F\x02\x02\u0A61\u0204\x03\x02\x02\x02\u0A62\u0A63" + + "\x07U\x02\x02\u0A63\u0A64\x07G\x02\x02\u0A64\u0A65\x07T\x02\x02\u0A65" + + "\u0A66\x07F\x02\x02\u0A66\u0A67\x07G\x02\x02\u0A67\u0206\x03\x02\x02\x02" + + "\u0A68\u0A69\x07U\x02\x02\u0A69\u0A6A\x07G\x02\x02\u0A6A\u0A6B\x07T\x02" + + "\x02\u0A6B\u0A6C\x07F\x02\x02\u0A6C\u0A6D\x07G\x02\x02\u0A6D\u0A6E\x07" + + "R\x02\x02\u0A6E\u0A6F\x07T\x02\x02\u0A6F\u0A70\x07Q\x02\x02\u0A70\u0A71" + + "\x07R\x02\x02\u0A71\u0A72\x07G\x02\x02\u0A72\u0A73\x07T\x02\x02\u0A73" + + "\u0A74\x07V\x02\x02\u0A74\u0A75\x07K\x02\x02\u0A75\u0A76\x07G\x02\x02" + + "\u0A76\u0A77\x07U\x02\x02\u0A77\u0208\x03\x02\x02\x02\u0A78\u0A79\x07" + + "U\x02\x02\u0A79\u0A7A\x07G\x02\x02\u0A7A\u0A7B\x07U\x02\x02\u0A7B\u0A7C" + + "\x07U\x02\x02\u0A7C\u0A7D\x07K\x02\x02\u0A7D\u0A7E\x07Q\x02\x02\u0A7E" + + "\u0A7F\x07P\x02\x02\u0A7F\u0A80\x07a\x02\x02\u0A80\u0A81\x07W\x02\x02" + + "\u0A81\u0A82\x07U\x02\x02\u0A82\u0A83\x07G\x02\x02\u0A83\u0A84\x07T\x02" + + "\x02\u0A84\u020A\x03\x02\x02\x02\u0A85\u0A86\x07U\x02\x02\u0A86\u0A87" + + "\x07G\x02\x02\u0A87\u0A88\x07V\x02\x02\u0A88\u020C\x03\x02\x02\x02\u0A89" + + "\u0A8A\x07O\x02\x02\u0A8A\u0A8B\x07K\x02\x02\u0A8B\u0A8C\x07P\x02\x02" + + "\u0A8C\u0A8D\x07W\x02\x02\u0A8D\u0A8E\x07U\x02\x02\u0A8E\u020E\x03\x02" + + "\x02\x02\u0A8F\u0A90\x07U\x02\x02\u0A90\u0A91\x07G\x02\x02\u0A91\u0A92" + + "\x07V\x02\x02\u0A92\u0A93\x07U\x02\x02\u0A93\u0210\x03\x02\x02\x02\u0A94" + + "\u0A95\x07U\x02\x02\u0A95\u0A96\x07J\x02\x02\u0A96\u0A97\x07Q\x02\x02" + + "\u0A97\u0A98\x07T\x02\x02\u0A98\u0A99\x07V\x02\x02\u0A99\u0212\x03\x02" + + "\x02\x02\u0A9A\u0A9B\x07U\x02\x02\u0A9B\u0A9C\x07J\x02\x02\u0A9C\u0A9D" + + "\x07Q\x02\x02\u0A9D\u0A9E\x07Y\x02\x02\u0A9E\u0214\x03\x02\x02\x02\u0A9F" + + "\u0AA0\x07U\x02\x02\u0AA0\u0AA1\x07K\x02\x02\u0AA1\u0AA2\x07P\x02\x02" + + "\u0AA2\u0AA3\x07I\x02\x02\u0AA3\u0AA4\x07N\x02\x02\u0AA4\u0AA5\x07G\x02" + + "\x02\u0AA5\u0216\x03\x02\x02\x02\u0AA6\u0AA7\x07U\x02\x02\u0AA7\u0AA8" + + "\x07M\x02\x02\u0AA8\u0AA9\x07G\x02\x02\u0AA9\u0AAA\x07Y\x02\x02\u0AAA" + + "\u0AAB\x07G\x02\x02\u0AAB\u0AAC\x07F\x02\x02\u0AAC\u0218\x03\x02\x02\x02" + + "\u0AAD\u0AAE\x07U\x02\x02\u0AAE\u0AAF\x07O\x02\x02\u0AAF\u0AB0\x07C\x02" + + "\x02\u0AB0\u0AB1\x07N\x02\x02\u0AB1\u0AB2\x07N\x02\x02\u0AB2\u0AB3\x07" + + "K\x02\x02\u0AB3\u0AB4\x07P\x02\x02\u0AB4\u0AB5\x07V\x02\x02\u0AB5\u021A" + + "\x03\x02\x02\x02\u0AB6\u0AB7\x07U\x02\x02\u0AB7\u0AB8\x07Q\x02\x02\u0AB8" + + "\u0AB9\x07O\x02\x02\u0AB9\u0ABA\x07G\x02\x02\u0ABA\u021C\x03\x02\x02\x02" + + "\u0ABB\u0ABC\x07U\x02\x02\u0ABC\u0ABD\x07Q\x02\x02\u0ABD\u0ABE\x07T\x02" + + "\x02"; + private static readonly _serializedATNSegment5: string = + "\u0ABE\u0ABF\x07V\x02\x02\u0ABF\u021E\x03\x02\x02\x02\u0AC0\u0AC1\x07" + + "U\x02\x02\u0AC1\u0AC2\x07Q\x02\x02\u0AC2\u0AC3\x07T\x02\x02\u0AC3\u0AC4" + + "\x07V\x02\x02\u0AC4\u0AC5\x07G\x02\x02\u0AC5\u0AC6\x07F\x02\x02\u0AC6" + + "\u0220\x03\x02\x02\x02\u0AC7\u0AC8\x07U\x02\x02\u0AC8\u0AC9\x07Q\x02\x02" + + "\u0AC9\u0ACA\x07W\x02\x02\u0ACA\u0ACB\x07T\x02\x02\u0ACB\u0ACC\x07E\x02" + + "\x02\u0ACC\u0ACD\x07G\x02\x02\u0ACD\u0222\x03\x02\x02\x02\u0ACE\u0ACF" + + "\x07U\x02\x02\u0ACF\u0AD0\x07V\x02\x02\u0AD0\u0AD1\x07C\x02\x02\u0AD1" + + "\u0AD2\x07T\x02\x02\u0AD2\u0AD3\x07V\x02\x02\u0AD3\u0224\x03\x02\x02\x02" + + "\u0AD4\u0AD5\x07U\x02\x02\u0AD5\u0AD6\x07V\x02\x02\u0AD6\u0AD7\x07C\x02" + + "\x02\u0AD7\u0AD8\x07V\x02\x02\u0AD8\u0AD9\x07K\x02\x02\u0AD9\u0ADA\x07" + + "U\x02\x02\u0ADA\u0ADB\x07V\x02\x02\u0ADB\u0ADC\x07K\x02\x02\u0ADC\u0ADD" + + "\x07E\x02\x02\u0ADD\u0ADE\x07U\x02\x02\u0ADE\u0226\x03\x02\x02\x02\u0ADF" + + "\u0AE0\x07U\x02\x02\u0AE0\u0AE1\x07V\x02\x02\u0AE1\u0AE2\x07Q\x02\x02" + + "\u0AE2\u0AE3\x07T\x02\x02\u0AE3\u0AE4\x07G\x02\x02\u0AE4\u0AE5\x07F\x02" + + "\x02\u0AE5\u0228\x03\x02\x02\x02\u0AE6\u0AE7\x07U\x02\x02\u0AE7\u0AE8" + + "\x07V\x02\x02\u0AE8\u0AE9\x07T\x02\x02\u0AE9\u0AEA\x07C\x02\x02\u0AEA" + + "\u0AEB\x07V\x02\x02\u0AEB\u0AEC\x07K\x02\x02\u0AEC\u0AED\x07H\x02\x02" + + "\u0AED\u0AEE\x07[\x02\x02\u0AEE\u022A\x03\x02\x02\x02\u0AEF\u0AF0\x07" + + "U\x02\x02\u0AF0\u0AF1\x07V\x02\x02\u0AF1\u0AF2\x07T\x02\x02\u0AF2\u0AF3" + + "\x07K\x02\x02\u0AF3\u0AF4\x07P\x02\x02\u0AF4\u0AF5\x07I\x02\x02\u0AF5" + + "\u022C\x03\x02\x02\x02\u0AF6\u0AF7\x07U\x02\x02\u0AF7\u0AF8\x07V\x02\x02" + + "\u0AF8\u0AF9\x07T\x02\x02\u0AF9\u0AFA\x07W\x02\x02\u0AFA\u0AFB\x07E\x02" + + "\x02\u0AFB\u0AFC\x07V\x02\x02\u0AFC\u022E\x03\x02\x02\x02\u0AFD\u0AFE" + + "\x07U\x02\x02\u0AFE\u0AFF\x07W\x02\x02\u0AFF\u0B00\x07D\x02\x02\u0B00" + + "\u0B01\x07U\x02\x02\u0B01\u0B02\x07V\x02\x02\u0B02\u0B03\x07T\x02\x02" + + "\u0B03\u0230\x03\x02\x02\x02\u0B04\u0B05\x07U\x02\x02\u0B05\u0B06\x07" + + "W\x02\x02\u0B06\u0B07\x07D\x02\x02\u0B07\u0B08\x07U\x02\x02\u0B08\u0B09" + + "\x07V\x02\x02\u0B09\u0B0A\x07T\x02\x02\u0B0A\u0B0B\x07K\x02\x02\u0B0B" + + "\u0B0C\x07P\x02\x02\u0B0C\u0B0D\x07I\x02\x02\u0B0D\u0232\x03\x02\x02\x02" + + "\u0B0E\u0B0F\x07U\x02\x02\u0B0F\u0B10\x07[\x02\x02\u0B10\u0B11\x07P\x02" + + "\x02\u0B11\u0B12\x07E\x02\x02\u0B12\u0234\x03\x02\x02\x02\u0B13\u0B14" + + "\x07U\x02\x02\u0B14\u0B15\x07[\x02\x02\u0B15\u0B16\x07U\x02\x02\u0B16" + + "\u0B17\x07V\x02\x02\u0B17\u0B18\x07G\x02\x02\u0B18\u0B19\x07O\x02\x02" + + "\u0B19\u0B1A\x07a\x02\x02\u0B1A\u0B1B\x07V\x02\x02\u0B1B\u0B1C\x07K\x02" + + "\x02\u0B1C\u0B1D\x07O\x02\x02\u0B1D\u0B1E\x07G\x02\x02\u0B1E\u0236\x03" + + "\x02\x02\x02\u0B1F\u0B20\x07U\x02\x02\u0B20\u0B21\x07[\x02\x02\u0B21\u0B22" + + "\x07U\x02\x02\u0B22\u0B23\x07V\x02\x02\u0B23\u0B24\x07G\x02\x02\u0B24" + + "\u0B25\x07O\x02\x02\u0B25\u0B26\x07a\x02\x02\u0B26\u0B27\x07X\x02\x02" + + "\u0B27\u0B28\x07G\x02\x02\u0B28\u0B29\x07T\x02\x02\u0B29\u0B2A\x07U\x02" + + "\x02\u0B2A\u0B2B\x07K\x02\x02\u0B2B\u0B2C\x07Q\x02\x02\u0B2C\u0B2D\x07" + + "P\x02\x02\u0B2D\u0238\x03\x02\x02\x02\u0B2E\u0B2F\x07V\x02\x02\u0B2F\u0B30" + + "\x07C\x02\x02\u0B30\u0B31\x07D\x02\x02\u0B31\u0B32\x07N\x02\x02\u0B32" + + "\u0B33\x07G\x02\x02\u0B33\u023A\x03\x02\x02\x02\u0B34\u0B35\x07V\x02\x02" + + "\u0B35\u0B36\x07C\x02\x02\u0B36\u0B37\x07D\x02\x02\u0B37\u0B38\x07N\x02" + + "\x02\u0B38\u0B39\x07G\x02\x02\u0B39\u0B3A\x07U\x02\x02\u0B3A\u023C\x03" + + "\x02\x02\x02\u0B3B\u0B3C\x07V\x02\x02\u0B3C\u0B3D\x07C\x02\x02\u0B3D\u0B3E" + + "\x07D\x02\x02\u0B3E\u0B3F\x07N\x02\x02\u0B3F\u0B40\x07G\x02\x02\u0B40" + + "\u0B41\x07U\x02\x02\u0B41\u0B42\x07C\x02\x02\u0B42\u0B43\x07O\x02\x02" + + "\u0B43\u0B44\x07R\x02\x02\u0B44\u0B45\x07N\x02\x02\u0B45\u0B46\x07G\x02" + + "\x02\u0B46\u023E\x03\x02\x02\x02\u0B47\u0B48\x07V\x02\x02\u0B48\u0B49" + + "\x07C\x02\x02\u0B49\u0B4A\x07T\x02\x02\u0B4A\u0B4B\x07I\x02\x02\u0B4B" + + "\u0B4C\x07G\x02\x02\u0B4C\u0B4D\x07V\x02\x02\u0B4D\u0240\x03\x02\x02\x02" + + "\u0B4E\u0B4F\x07V\x02\x02\u0B4F\u0B50\x07D\x02\x02\u0B50\u0B51\x07N\x02" + + "\x02\u0B51\u0B52\x07R\x02\x02\u0B52\u0B53\x07T\x02\x02\u0B53\u0B54\x07" + + "Q\x02\x02\u0B54\u0B55\x07R\x02\x02\u0B55\u0B56\x07G\x02\x02\u0B56\u0B57" + + "\x07T\x02\x02\u0B57\u0B58\x07V\x02\x02\u0B58\u0B59\x07K\x02\x02\u0B59" + + "\u0B5A\x07G\x02\x02\u0B5A\u0B5B\x07U\x02\x02\u0B5B\u0242\x03\x02\x02\x02" + + "\u0B5C\u0B5D\x07V\x02\x02\u0B5D\u0B5E\x07G\x02\x02\u0B5E\u0B5F\x07O\x02" + + "\x02\u0B5F\u0B60\x07R\x02\x02\u0B60\u0B61\x07Q\x02\x02\u0B61\u0B62\x07" + + "T\x02\x02\u0B62\u0B63\x07C\x02\x02\u0B63\u0B64\x07T\x02\x02\u0B64\u0B6A" + + "\x07[\x02\x02\u0B65\u0B66\x07V\x02\x02\u0B66\u0B67\x07G\x02\x02\u0B67" + + "\u0B68\x07O\x02\x02\u0B68\u0B6A\x07R\x02\x02\u0B69\u0B5C\x03\x02\x02\x02" + + "\u0B69\u0B65\x03\x02\x02\x02\u0B6A\u0244\x03\x02\x02\x02\u0B6B\u0B6C\x07" + + "V\x02\x02\u0B6C\u0B6D\x07G\x02\x02\u0B6D\u0B6E\x07T\x02\x02\u0B6E\u0B6F" + + "\x07O\x02\x02\u0B6F\u0B70\x07K\x02\x02\u0B70\u0B71\x07P\x02\x02\u0B71" + + "\u0B72\x07C\x02\x02\u0B72\u0B73\x07V\x02\x02\u0B73\u0B74\x07G\x02\x02" + + "\u0B74\u0B75\x07F\x02\x02\u0B75\u0246\x03\x02\x02\x02\u0B76\u0B77\x07" + + "V\x02\x02\u0B77\u0B78\x07J\x02\x02\u0B78\u0B79\x07G\x02\x02\u0B79\u0B7A" + + "\x07P\x02\x02\u0B7A\u0248\x03\x02\x02\x02\u0B7B\u0B7C\x07V\x02\x02\u0B7C" + + "\u0B7D\x07K\x02\x02\u0B7D\u0B7E\x07O\x02\x02\u0B7E\u0B7F\x07G\x02\x02" + + "\u0B7F\u024A\x03\x02\x02\x02\u0B80\u0B81\x07V\x02\x02\u0B81\u0B82\x07" + + "K\x02\x02\u0B82\u0B83\x07O\x02\x02\u0B83\u0B84\x07G\x02\x02\u0B84\u0B85" + + "\x07F\x02\x02\u0B85\u0B86\x07K\x02\x02\u0B86\u0B87\x07H\x02\x02\u0B87" + + "\u0B88\x07H\x02\x02\u0B88\u024C\x03\x02\x02\x02\u0B89\u0B8A\x07V\x02\x02" + + "\u0B8A\u0B8B\x07K\x02\x02\u0B8B\u0B8C\x07O\x02\x02\u0B8C\u0B8D\x07G\x02" + + "\x02\u0B8D\u0B8E\x07U\x02\x02\u0B8E\u0B8F\x07V\x02\x02\u0B8F\u0B90\x07" + + "C\x02\x02\u0B90\u0B91\x07O\x02\x02\u0B91\u0B92\x07R\x02\x02\u0B92\u024E" + + "\x03\x02\x02\x02\u0B93\u0B94\x07V\x02\x02\u0B94\u0B95\x07K\x02\x02\u0B95" + + "\u0B96\x07O\x02\x02\u0B96\u0B97\x07G\x02\x02\u0B97\u0B98\x07U\x02\x02" + + "\u0B98\u0B99\x07V\x02\x02\u0B99\u0B9A\x07C\x02\x02\u0B9A\u0B9B\x07O\x02" + + "\x02\u0B9B\u0B9C\x07R\x02\x02\u0B9C\u0B9D\x07a\x02\x02\u0B9D\u0B9E\x07" + + "N\x02\x02\u0B9E\u0B9F\x07V\x02\x02\u0B9F\u0BA0\x07\\\x02\x02\u0BA0\u0250" + + "\x03\x02\x02\x02\u0BA1\u0BA2\x07V\x02\x02\u0BA2\u0BA3\x07K\x02\x02\u0BA3" + + "\u0BA4\x07O\x02\x02\u0BA4\u0BA5\x07G\x02\x02\u0BA5\u0BA6\x07U\x02\x02" + + "\u0BA6\u0BA7\x07V\x02\x02\u0BA7\u0BA8\x07C\x02\x02\u0BA8\u0BA9\x07O\x02" + + "\x02\u0BA9\u0BAA\x07R\x02\x02\u0BAA\u0BAB\x07a\x02\x02\u0BAB\u0BAC\x07" + + "P\x02\x02\u0BAC\u0BAD\x07V\x02\x02\u0BAD\u0BAE\x07\\\x02\x02\u0BAE\u0252" + + "\x03\x02\x02\x02\u0BAF\u0BB0\x07V\x02\x02\u0BB0\u0BB1\x07K\x02\x02\u0BB1" + + "\u0BB2\x07O\x02\x02\u0BB2\u0BB3\x07G\x02\x02\u0BB3\u0BB4\x07U\x02\x02" + + "\u0BB4\u0BB5\x07V\x02\x02\u0BB5\u0BB6\x07C\x02\x02\u0BB6\u0BB7\x07O\x02" + + "\x02\u0BB7\u0BB8\x07R\x02\x02\u0BB8\u0BB9\x07C\x02\x02\u0BB9\u0BBA\x07" + + "F\x02\x02\u0BBA\u0BBB\x07F\x02\x02\u0BBB\u0254\x03\x02\x02\x02\u0BBC\u0BBD" + + "\x07V\x02\x02\u0BBD\u0BBE\x07K\x02\x02\u0BBE\u0BBF\x07O\x02\x02\u0BBF" + + "\u0BC0\x07G\x02\x02\u0BC0\u0BC1\x07U\x02\x02\u0BC1\u0BC2\x07V\x02\x02" + + "\u0BC2\u0BC3\x07C\x02\x02\u0BC3\u0BC4\x07O\x02\x02\u0BC4\u0BC5\x07R\x02" + + "\x02\u0BC5\u0BC6\x07F\x02\x02\u0BC6\u0BC7\x07K\x02\x02\u0BC7\u0BC8\x07" + + "H\x02\x02\u0BC8\u0BC9\x07H\x02\x02\u0BC9\u0256\x03\x02\x02\x02\u0BCA\u0BCB" + + "\x07V\x02\x02\u0BCB\u0BCC\x07K\x02\x02\u0BCC\u0BCD\x07P\x02\x02\u0BCD" + + "\u0BCE\x07[\x02\x02\u0BCE\u0BCF\x07K\x02\x02\u0BCF\u0BD0\x07P\x02\x02" + + "\u0BD0\u0BD1\x07V\x02\x02\u0BD1\u0258\x03\x02\x02\x02\u0BD2\u0BD3\x07" + + "V\x02\x02\u0BD3\u0BD4\x07Q\x02\x02\u0BD4\u025A\x03\x02\x02\x02\u0BD5\u0BD6" + + "\x07V\x02\x02\u0BD6\u0BD7\x07Q\x02\x02\u0BD7\u0BD8\x07W\x02\x02\u0BD8" + + "\u0BD9\x07E\x02\x02\u0BD9\u0BDA\x07J\x02\x02\u0BDA\u025C\x03\x02\x02\x02" + + "\u0BDB\u0BDC\x07V\x02\x02\u0BDC\u0BDD\x07T\x02\x02\u0BDD\u0BDE\x07C\x02" + + "\x02\u0BDE\u0BDF\x07K\x02\x02\u0BDF\u0BE0\x07N\x02\x02\u0BE0\u0BE1\x07" + + "K\x02\x02\u0BE1\u0BE2\x07P\x02\x02\u0BE2\u0BE3\x07I\x02\x02\u0BE3\u025E" + + "\x03\x02\x02\x02\u0BE4\u0BE5\x07V\x02\x02\u0BE5\u0BE6\x07T\x02\x02\u0BE6" + + "\u0BE7\x07C\x02\x02\u0BE7\u0BE8\x07P\x02\x02\u0BE8\u0BE9\x07U\x02\x02" + + "\u0BE9\u0BEA\x07C\x02\x02\u0BEA\u0BEB\x07E\x02\x02\u0BEB\u0BEC\x07V\x02" + + "\x02\u0BEC\u0BED\x07K\x02\x02\u0BED\u0BEE\x07Q\x02\x02\u0BEE\u0BEF\x07" + + "P\x02\x02\u0BEF\u0260\x03\x02\x02\x02\u0BF0\u0BF1\x07V\x02\x02\u0BF1\u0BF2" + + "\x07T\x02\x02\u0BF2\u0BF3\x07C\x02\x02\u0BF3\u0BF4\x07P\x02\x02\u0BF4" + + "\u0BF5\x07U\x02\x02\u0BF5\u0BF6\x07C\x02\x02\u0BF6\u0BF7\x07E\x02\x02" + + "\u0BF7\u0BF8\x07V\x02\x02\u0BF8\u0BF9\x07K\x02\x02\u0BF9\u0BFA\x07Q\x02" + + "\x02\u0BFA\u0BFB\x07P\x02\x02\u0BFB\u0BFC\x07U\x02\x02\u0BFC\u0262\x03" + + "\x02\x02\x02\u0BFD\u0BFE\x07V\x02\x02\u0BFE\u0BFF\x07T\x02\x02\u0BFF\u0C00" + + "\x07C\x02\x02\u0C00\u0C01\x07P\x02\x02\u0C01\u0C02\x07U\x02\x02\u0C02" + + "\u0C03\x07H\x02\x02\u0C03\u0C04\x07Q\x02\x02\u0C04\u0C05\x07T\x02\x02" + + "\u0C05\u0C06\x07O\x02\x02\u0C06\u0264\x03\x02\x02\x02\u0C07\u0C08\x07" + + "V\x02\x02\u0C08\u0C09\x07T\x02\x02\u0C09\u0C0A\x07K\x02\x02\u0C0A\u0C0B" + + "\x07O\x02\x02\u0C0B\u0266\x03\x02\x02\x02\u0C0C\u0C0D\x07V\x02\x02\u0C0D" + + "\u0C0E\x07T\x02\x02\u0C0E\u0C0F\x07W\x02\x02\u0C0F\u0C10\x07G\x02\x02" + + "\u0C10\u0268\x03\x02\x02\x02\u0C11\u0C12\x07V\x02\x02\u0C12\u0C13\x07" + + "T\x02\x02\u0C13\u0C14\x07W\x02\x02\u0C14\u0C15\x07P\x02\x02\u0C15\u0C16" + + "\x07E\x02\x02\u0C16\u0C17\x07C\x02\x02\u0C17\u0C18\x07V\x02\x02\u0C18" + + "\u0C19\x07G\x02\x02\u0C19\u026A\x03\x02\x02\x02\u0C1A\u0C1B\x07V\x02\x02" + + "\u0C1B\u0C1C\x07T\x02\x02\u0C1C\u0C1D\x07[\x02\x02\u0C1D\u0C1E\x07a\x02" + + "\x02\u0C1E\u0C1F\x07E\x02\x02\u0C1F\u0C20\x07C\x02\x02\u0C20\u0C21\x07" + + "U\x02\x02\u0C21\u0C22\x07V\x02\x02\u0C22\u026C\x03\x02\x02\x02\u0C23\u0C24" + + "\x07V\x02\x02\u0C24\u0C25\x07[\x02\x02\u0C25\u0C26\x07R\x02\x02\u0C26" + + "\u0C27\x07G\x02\x02\u0C27\u026E\x03\x02\x02\x02\u0C28\u0C29\x07W\x02\x02" + + "\u0C29\u0C2A\x07P\x02\x02\u0C2A\u0C2B\x07C\x02\x02\u0C2B\u0C2C\x07T\x02" + + "\x02\u0C2C\u0C2D\x07E\x02\x02\u0C2D\u0C2E\x07J\x02\x02\u0C2E\u0C2F\x07" + + "K\x02\x02\u0C2F\u0C30\x07X\x02\x02\u0C30\u0C31\x07G\x02\x02\u0C31\u0270" + + "\x03\x02\x02\x02\u0C32\u0C33\x07W\x02\x02\u0C33\u0C34\x07P\x02\x02\u0C34" + + "\u0C35\x07D\x02\x02\u0C35\u0C36\x07Q\x02\x02\u0C36\u0C37\x07W\x02\x02" + + "\u0C37\u0C38\x07P\x02\x02\u0C38\u0C39\x07F\x02\x02\u0C39\u0C3A\x07G\x02" + + "\x02\u0C3A\u0C3B\x07F\x02\x02\u0C3B\u0272\x03\x02\x02\x02\u0C3C\u0C3D" + + "\x07W\x02\x02\u0C3D\u0C3E\x07P\x02\x02\u0C3E\u0C3F\x07E\x02\x02\u0C3F" + + "\u0C40\x07C\x02\x02\u0C40\u0C41\x07E\x02\x02\u0C41\u0C42\x07J\x02\x02" + + "\u0C42\u0C43\x07G\x02\x02\u0C43\u0274\x03\x02\x02\x02\u0C44\u0C45\x07" + + "W\x02\x02\u0C45\u0C46\x07P\x02\x02\u0C46\u0C47\x07K\x02\x02\u0C47\u0C48" + + "\x07Q\x02\x02\u0C48\u0C49\x07P\x02\x02\u0C49\u0276\x03\x02\x02\x02\u0C4A" + + "\u0C4B\x07W\x02\x02\u0C4B\u0C4C\x07P\x02\x02\u0C4C\u0C4D\x07K\x02\x02" + + "\u0C4D\u0C4E\x07S\x02\x02\u0C4E\u0C4F\x07W\x02\x02\u0C4F\u0C50\x07G\x02" + + "\x02\u0C50\u0278\x03\x02\x02\x02\u0C51\u0C52\x07W\x02\x02\u0C52\u0C53" + + "\x07P\x02\x02\u0C53\u0C54\x07M\x02\x02\u0C54\u0C55\x07P\x02\x02\u0C55" + + "\u0C56\x07Q\x02\x02\u0C56\u0C57\x07Y\x02\x02\u0C57\u0C58\x07P\x02\x02" + + "\u0C58\u027A\x03\x02\x02\x02\u0C59\u0C5A\x07W\x02\x02\u0C5A\u0C5B\x07" + + "P\x02\x02\u0C5B\u0C5C\x07N\x02\x02\u0C5C\u0C5D\x07Q\x02\x02\u0C5D\u0C5E" + + "\x07E\x02\x02\u0C5E\u0C5F\x07M\x02\x02\u0C5F\u027C\x03\x02\x02\x02\u0C60" + + "\u0C61\x07W\x02\x02\u0C61\u0C62\x07P\x02\x02\u0C62\u0C63\x07R\x02\x02" + + "\u0C63\u0C64\x07K\x02\x02\u0C64\u0C65\x07X\x02\x02\u0C65\u0C66\x07Q\x02" + + "\x02\u0C66\u0C67\x07V\x02\x02\u0C67\u027E\x03\x02\x02\x02\u0C68\u0C69" + + "\x07W\x02\x02\u0C69\u0C6A\x07P\x02\x02\u0C6A\u0C6B\x07U\x02\x02\u0C6B" + + "\u0C6C\x07G\x02\x02\u0C6C\u0C6D\x07V\x02\x02\u0C6D\u0280\x03\x02\x02\x02" + + "\u0C6E\u0C6F\x07W\x02\x02\u0C6F\u0C70\x07R\x02\x02\u0C70\u0C71\x07F\x02" + + "\x02\u0C71\u0C72\x07C\x02\x02\u0C72\u0C73\x07V\x02\x02\u0C73\u0C74\x07" + + "G\x02\x02\u0C74\u0282\x03\x02\x02\x02\u0C75\u0C76\x07W\x02\x02\u0C76\u0C77" + + "\x07U\x02\x02\u0C77\u0C78\x07G\x02\x02\u0C78\u0284\x03\x02\x02\x02\u0C79" + + "\u0C7A\x07W\x02\x02\u0C7A\u0C7B\x07U\x02\x02\u0C7B\u0C7C\x07G\x02\x02" + + "\u0C7C\u0C7D\x07T\x02\x02\u0C7D\u0286\x03\x02\x02\x02\u0C7E\u0C7F\x07" + + "W\x02\x02\u0C7F\u0C80\x07U\x02\x02\u0C80\u0C81\x07K\x02\x02\u0C81\u0C82" + + "\x07P\x02\x02\u0C82\u0C83\x07I\x02\x02\u0C83\u0288\x03\x02\x02\x02\u0C84" + + "\u0C85\x07X\x02\x02\u0C85\u0C86\x07C\x02\x02\u0C86\u0C87\x07N\x02\x02" + + "\u0C87\u0C88\x07W\x02\x02\u0C88\u0C89\x07G\x02\x02\u0C89\u0C8A\x07U\x02" + + "\x02\u0C8A\u028A\x03\x02\x02\x02\u0C8B\u0C8C\x07X\x02\x02\u0C8C\u0C8D" + + "\x07C\x02\x02\u0C8D\u0C8E\x07T\x02\x02\u0C8E\u0C8F\x07E\x02\x02\u0C8F" + + "\u0C90\x07J\x02\x02\u0C90\u0C91\x07C\x02\x02\u0C91\u0C92\x07T\x02\x02" + + "\u0C92\u028C\x03\x02\x02\x02\u0C93\u0C94\x07X\x02\x02\u0C94\u0C95\x07" + + "C\x02\x02\u0C95\u0C96\x07T\x02\x02\u0C96\u028E\x03\x02\x02\x02\u0C97\u0C98" + + "\x07X\x02\x02\u0C98\u0C99\x07C\x02\x02\u0C99\u0C9A\x07T\x02\x02\u0C9A" + + "\u0C9B\x07K\x02\x02\u0C9B\u0C9C\x07C\x02\x02\u0C9C\u0C9D\x07D\x02\x02" + + "\u0C9D\u0C9E\x07N\x02\x02\u0C9E\u0C9F\x07G\x02\x02\u0C9F\u0290\x03\x02" + + "\x02\x02\u0CA0\u0CA1\x07X\x02\x02\u0CA1\u0CA2\x07G\x02\x02\u0CA2\u0CA3" + + "\x07T\x02\x02\u0CA3\u0CA4\x07U\x02\x02\u0CA4\u0CA5\x07K\x02\x02\u0CA5" + + "\u0CA6\x07Q\x02\x02\u0CA6\u0CA7\x07P\x02\x02\u0CA7\u0292\x03\x02\x02\x02" + + "\u0CA8\u0CA9\x07X\x02\x02\u0CA9\u0CAA\x07K\x02\x02\u0CAA\u0CAB\x07G\x02" + + "\x02\u0CAB\u0CAC\x07Y\x02\x02\u0CAC\u0294\x03\x02\x02\x02\u0CAD\u0CAE" + + "\x07X\x02\x02\u0CAE\u0CAF\x07K\x02\x02\u0CAF\u0CB0\x07G\x02\x02\u0CB0" + + "\u0CB1\x07Y\x02\x02\u0CB1\u0CB2\x07U\x02\x02\u0CB2\u0296\x03\x02\x02\x02" + + "\u0CB3\u0CB4\x07X\x02\x02\u0CB4\u0CB5\x07Q\x02\x02\u0CB5\u0CB6\x07K\x02" + + "\x02\u0CB6\u0CB7\x07F\x02\x02\u0CB7\u0298\x03\x02\x02\x02\u0CB8\u0CB9" + + "\x07Y\x02\x02\u0CB9\u0CBA\x07G\x02\x02\u0CBA\u0CBB\x07G\x02\x02\u0CBB" + + "\u0CBC\x07M\x02\x02\u0CBC\u029A\x03\x02\x02\x02\u0CBD\u0CBE\x07Y\x02\x02" + + "\u0CBE\u0CBF\x07G\x02\x02\u0CBF\u0CC0\x07G\x02\x02\u0CC0\u0CC1\x07M\x02" + + "\x02\u0CC1\u0CC2\x07U\x02\x02\u0CC2\u029C\x03\x02\x02\x02\u0CC3\u0CC4" + + "\x07Y\x02\x02\u0CC4\u0CC5\x07J\x02\x02\u0CC5\u0CC6\x07G\x02\x02\u0CC6" + + "\u0CC7\x07P\x02\x02\u0CC7\u029E\x03\x02\x02\x02\u0CC8\u0CC9\x07Y\x02\x02" + + "\u0CC9\u0CCA\x07J\x02\x02\u0CCA\u0CCB\x07G\x02\x02\u0CCB\u0CCC\x07T\x02" + + "\x02\u0CCC\u0CCD\x07G\x02\x02\u0CCD\u02A0\x03\x02\x02\x02\u0CCE\u0CCF" + + "\x07Y\x02\x02\u0CCF\u0CD0\x07K\x02\x02\u0CD0\u0CD1\x07P\x02\x02\u0CD1" + + "\u0CD2\x07F\x02\x02\u0CD2\u0CD3\x07Q\x02\x02\u0CD3\u0CD4\x07Y\x02\x02" + + "\u0CD4\u02A2\x03\x02\x02\x02\u0CD5\u0CD6\x07Y\x02\x02\u0CD6\u0CD7\x07" + + "K\x02\x02\u0CD7\u0CD8\x07V\x02\x02\u0CD8\u0CD9\x07J\x02\x02\u0CD9\u02A4" + + "\x03\x02\x02\x02\u0CDA\u0CDB\x07Y\x02\x02\u0CDB\u0CDC\x07K\x02\x02\u0CDC" + + "\u0CDD\x07V\x02\x02\u0CDD\u0CDE\x07J\x02\x02\u0CDE\u0CDF\x07K\x02\x02" + + "\u0CDF\u0CE0\x07P\x02\x02\u0CE0\u02A6\x03\x02\x02\x02\u0CE1\u0CE2\x07" + + "[\x02\x02\u0CE2\u0CE3\x07G\x02\x02\u0CE3\u0CE4\x07C\x02\x02\u0CE4\u0CE5" + + "\x07T\x02\x02\u0CE5\u02A8\x03\x02\x02\x02\u0CE6\u0CE7\x07[\x02\x02\u0CE7" + + "\u0CE8\x07G\x02\x02\u0CE8\u0CE9\x07C\x02\x02\u0CE9\u0CEA\x07T\x02\x02" + + "\u0CEA\u0CEB\x07U\x02\x02\u0CEB\u02AA\x03\x02\x02\x02\u0CEC\u0CED\x07" + + "\\\x02\x02\u0CED\u0CEE\x07Q\x02\x02\u0CEE\u0CEF\x07P\x02\x02\u0CEF\u0CF0" + + "\x07G\x02\x02\u0CF0\u02AC\x03\x02\x02\x02\u0CF1\u0CF5\x07?\x02\x02\u0CF2" + + "\u0CF3\x07?\x02\x02\u0CF3\u0CF5\x07?\x02\x02\u0CF4\u0CF1\x03\x02\x02\x02" + + "\u0CF4\u0CF2\x03\x02\x02\x02\u0CF5\u02AE\x03\x02\x02\x02\u0CF6\u0CF7\x07" + + ">\x02\x02\u0CF7\u0CF8\x07?\x02\x02\u0CF8\u0CF9\x07@\x02\x02\u0CF9\u02B0" + + "\x03\x02\x02\x02\u0CFA\u0CFB\x07>\x02\x02\u0CFB\u0CFC\x07@\x02\x02\u0CFC" + + "\u02B2\x03\x02\x02\x02\u0CFD\u0CFE\x07#\x02\x02\u0CFE\u0CFF\x07?\x02\x02" + + "\u0CFF\u02B4\x03\x02\x02\x02\u0D00\u0D01\x07>\x02\x02\u0D01\u02B6\x03" + + "\x02\x02\x02\u0D02\u0D03\x07>\x02\x02\u0D03\u0D07\x07?\x02\x02\u0D04\u0D05" + + "\x07#\x02\x02\u0D05\u0D07\x07@\x02\x02\u0D06\u0D02\x03\x02\x02\x02\u0D06" + + "\u0D04\x03\x02\x02\x02\u0D07\u02B8\x03\x02\x02\x02\u0D08\u0D09\x07@\x02" + + "\x02\u0D09\u02BA\x03\x02\x02\x02\u0D0A\u0D0B\x07@\x02\x02\u0D0B\u0D0F" + + "\x07?\x02\x02\u0D0C\u0D0D\x07#\x02\x02\u0D0D\u0D0F\x07>\x02\x02\u0D0E" + + "\u0D0A\x03\x02\x02\x02\u0D0E\u0D0C\x03\x02\x02\x02\u0D0F\u02BC\x03\x02" + + "\x02\x02\u0D10\u0D11\x07-\x02\x02\u0D11\u02BE\x03\x02\x02\x02\u0D12\u0D13" + + "\x07/\x02\x02\u0D13\u02C0\x03\x02\x02\x02\u0D14\u0D15\x07,\x02\x02\u0D15" + + "\u02C2\x03\x02\x02\x02\u0D16\u0D17\x071\x02\x02\u0D17\u02C4\x03\x02\x02" + + "\x02\u0D18\u0D19\x07\'\x02\x02\u0D19\u02C6\x03\x02\x02\x02\u0D1A\u0D1B" + + "\x07\x80\x02\x02\u0D1B\u02C8\x03\x02\x02\x02\u0D1C\u0D1D\x07(\x02\x02" + + "\u0D1D\u02CA\x03\x02\x02\x02\u0D1E\u0D1F\x07~\x02\x02\u0D1F\u02CC\x03" + + "\x02\x02\x02\u0D20\u0D21\x07~\x02\x02\u0D21\u0D22\x07~\x02\x02\u0D22\u02CE" + + "\x03\x02\x02\x02\u0D23\u0D24\x07`\x02\x02\u0D24\u02D0\x03\x02\x02\x02" + + "\u0D25\u0D26\x07<\x02\x02\u0D26\u02D2\x03\x02\x02\x02\u0D27\u0D28\x07" + + "/\x02\x02\u0D28\u0D29\x07@\x02\x02\u0D29\u02D4\x03\x02\x02\x02\u0D2A\u0D2B" + + "\x07?\x02\x02\u0D2B\u0D2C\x07@\x02\x02\u0D2C\u02D6\x03\x02\x02\x02\u0D2D" + + "\u0D2E\x071\x02\x02\u0D2E\u0D2F\x07,\x02\x02\u0D2F\u0D30\x07-\x02\x02" + + "\u0D30\u02D8\x03\x02\x02\x02\u0D31\u0D32\x07,\x02\x02\u0D32\u0D33\x07" + + "1\x02\x02\u0D33\u02DA\x03\x02\x02\x02\u0D34\u0D35\x07A\x02\x02\u0D35\u02DC" + + "\x03\x02\x02\x02\u0D36\u0D3C\x07)\x02\x02\u0D37\u0D3B\n\x02\x02\x02\u0D38" + + "\u0D39\x07^\x02\x02\u0D39\u0D3B\v\x02\x02\x02\u0D3A\u0D37\x03\x02\x02" + + "\x02\u0D3A\u0D38\x03\x02\x02\x02\u0D3B\u0D3E\x03\x02\x02\x02\u0D3C\u0D3A" + + "\x03\x02\x02\x02\u0D3C\u0D3D\x03\x02\x02\x02\u0D3D\u0D3F\x03\x02\x02\x02" + + "\u0D3E\u0D3C\x03\x02\x02\x02\u0D3F\u0D55\x07)\x02\x02\u0D40\u0D41\x07" + + "T\x02\x02\u0D41\u0D42\x07)\x02\x02\u0D42\u0D46\x03\x02\x02\x02\u0D43\u0D45" + + "\n\x03\x02\x02\u0D44\u0D43\x03\x02\x02\x02\u0D45\u0D48\x03\x02\x02\x02" + + "\u0D46\u0D44\x03\x02\x02\x02\u0D46\u0D47\x03\x02\x02\x02\u0D47\u0D49\x03" + + "\x02\x02\x02\u0D48\u0D46\x03\x02\x02\x02\u0D49\u0D55\x07)\x02\x02\u0D4A" + + "\u0D4B\x07T\x02\x02\u0D4B\u0D4C\x07$\x02\x02\u0D4C\u0D50\x03\x02\x02\x02" + + "\u0D4D\u0D4F\n\x04\x02\x02\u0D4E\u0D4D\x03\x02\x02\x02\u0D4F\u0D52\x03" + + "\x02\x02\x02\u0D50\u0D4E\x03\x02\x02\x02\u0D50\u0D51\x03\x02\x02\x02\u0D51" + + "\u0D53\x03\x02\x02\x02\u0D52\u0D50\x03\x02\x02\x02\u0D53\u0D55\x07$\x02" + + "\x02\u0D54\u0D36\x03\x02\x02\x02\u0D54\u0D40\x03\x02\x02\x02\u0D54\u0D4A" + + "\x03\x02\x02\x02\u0D55\u02DE\x03\x02\x02\x02\u0D56\u0D5C\x07$\x02\x02" + + "\u0D57\u0D5B\n\x05\x02\x02\u0D58\u0D59\x07^\x02\x02\u0D59\u0D5B\v\x02" + + "\x02\x02\u0D5A\u0D57\x03\x02\x02\x02\u0D5A\u0D58\x03\x02\x02\x02\u0D5B" + + "\u0D5E\x03\x02\x02\x02\u0D5C\u0D5A\x03\x02\x02\x02\u0D5C\u0D5D\x03\x02" + + "\x02\x02\u0D5D\u0D5F\x03\x02\x02\x02\u0D5E\u0D5C\x03\x02\x02\x02\u0D5F" + + "\u0D60\x07$\x02\x02\u0D60\u02E0\x03\x02\x02\x02\u0D61\u0D63\x05\u02FB" + + "\u017E\x02\u0D62\u0D61\x03\x02\x02\x02\u0D63\u0D64\x03\x02\x02\x02\u0D64" + + "\u0D62\x03\x02\x02\x02\u0D64\u0D65\x03\x02\x02\x02\u0D65\u0D66\x03\x02" + + "\x02\x02\u0D66\u0D67\x07N\x02\x02\u0D67\u02E2\x03\x02\x02\x02\u0D68\u0D6A" + + "\x05\u02FB\u017E\x02\u0D69\u0D68\x03\x02\x02\x02\u0D6A\u0D6B\x03\x02\x02" + + "\x02\u0D6B\u0D69\x03\x02\x02\x02\u0D6B\u0D6C\x03\x02\x02\x02\u0D6C\u0D6D" + + "\x03\x02\x02\x02\u0D6D\u0D6E\x07U\x02\x02\u0D6E\u02E4\x03\x02\x02\x02" + + "\u0D6F\u0D71\x05\u02FB\u017E\x02\u0D70\u0D6F\x03\x02\x02\x02\u0D71\u0D72" + + "\x03\x02\x02\x02\u0D72\u0D70\x03\x02\x02\x02\u0D72\u0D73\x03\x02\x02\x02" + + "\u0D73\u0D74\x03\x02\x02\x02\u0D74\u0D75\x07[\x02\x02\u0D75\u02E6\x03" + + "\x02\x02\x02\u0D76\u0D78\x05\u02FB\u017E\x02\u0D77\u0D76\x03\x02\x02\x02" + + "\u0D78\u0D79\x03\x02\x02\x02\u0D79\u0D77\x03\x02\x02\x02\u0D79\u0D7A\x03" + + "\x02\x02\x02\u0D7A\u02E8\x03\x02\x02\x02\u0D7B\u0D7D\x05\u02FB\u017E\x02" + + "\u0D7C\u0D7B\x03\x02\x02\x02\u0D7D\u0D7E\x03\x02\x02\x02\u0D7E\u0D7C\x03" + + "\x02\x02\x02\u0D7E\u0D7F\x03\x02\x02\x02\u0D7F\u0D80\x03\x02\x02\x02\u0D80" + + "\u0D81\x05\u02F9\u017D\x02\u0D81\u0D86\x03\x02\x02\x02\u0D82\u0D83\x05" + + "\u02F7\u017C\x02\u0D83\u0D84\x05\u02F9\u017D\x02\u0D84\u0D86\x03\x02\x02" + + "\x02\u0D85\u0D7C\x03\x02\x02\x02\u0D85\u0D82\x03\x02\x02\x02\u0D86\u02EA" + + "\x03\x02\x02\x02\u0D87\u0D88\x05\u02F7\u017C\x02\u0D88\u02EC\x03\x02\x02" + + "\x02\u0D89\u0D8B\x05\u02FB\u017E\x02\u0D8A\u0D89\x03\x02\x02\x02\u0D8B" + + "\u0D8C\x03\x02\x02\x02\u0D8C\u0D8A\x03\x02\x02\x02\u0D8C\u0D8D\x03\x02" + + "\x02\x02\u0D8D\u0D8F\x03\x02\x02\x02\u0D8E\u0D90\x05\u02F9\u017D\x02\u0D8F" + + "\u0D8E\x03\x02\x02\x02\u0D8F\u0D90\x03\x02\x02\x02\u0D90\u0D91\x03\x02" + + "\x02\x02\u0D91\u0D92\x07H\x02\x02\u0D92\u0D9A\x03\x02\x02\x02\u0D93\u0D95" + + "\x05\u02F7\u017C\x02\u0D94\u0D96\x05\u02F9\u017D\x02\u0D95\u0D94\x03\x02" + + "\x02\x02\u0D95\u0D96\x03\x02\x02\x02\u0D96\u0D97\x03\x02\x02\x02\u0D97" + + "\u0D98\x07H\x02\x02\u0D98\u0D9A\x03\x02\x02\x02\u0D99\u0D8A\x03\x02\x02" + + "\x02\u0D99\u0D93\x03\x02\x02\x02\u0D9A\u02EE\x03\x02\x02\x02\u0D9B\u0D9D" + + "\x05\u02FB\u017E\x02\u0D9C\u0D9B\x03\x02\x02\x02\u0D9D\u0D9E\x03\x02\x02" + + "\x02\u0D9E\u0D9C\x03\x02\x02\x02\u0D9E\u0D9F\x03\x02\x02\x02\u0D9F\u0DA1" + + "\x03\x02\x02\x02\u0DA0\u0DA2\x05\u02F9\u017D\x02\u0DA1\u0DA0\x03\x02\x02" + + "\x02\u0DA1\u0DA2\x03\x02\x02\x02\u0DA2\u0DA3\x03\x02\x02\x02\u0DA3\u0DA4" + + "\x07F\x02\x02\u0DA4\u0DAC\x03\x02\x02\x02\u0DA5\u0DA7\x05\u02F7\u017C" + + "\x02\u0DA6\u0DA8\x05\u02F9\u017D\x02\u0DA7\u0DA6\x03\x02\x02\x02\u0DA7" + + "\u0DA8\x03\x02\x02\x02\u0DA8\u0DA9\x03\x02\x02\x02\u0DA9\u0DAA\x07F\x02" + + "\x02\u0DAA\u0DAC\x03\x02\x02\x02\u0DAB\u0D9C\x03\x02\x02\x02\u0DAB\u0DA5" + + "\x03\x02\x02\x02\u0DAC\u02F0\x03\x02\x02\x02\u0DAD\u0DAF\x05\u02FB\u017E" + + "\x02\u0DAE\u0DAD\x03\x02\x02\x02\u0DAF\u0DB0\x03\x02\x02\x02\u0DB0\u0DAE" + + "\x03\x02\x02\x02\u0DB0\u0DB1\x03\x02\x02\x02\u0DB1\u0DB3\x03\x02\x02\x02" + + "\u0DB2\u0DB4\x05\u02F9\u017D\x02\u0DB3\u0DB2\x03\x02\x02\x02\u0DB3\u0DB4" + + "\x03\x02\x02\x02\u0DB4\u0DB5\x03\x02\x02\x02\u0DB5\u0DB6\x07D\x02\x02" + + "\u0DB6\u0DB7\x07F\x02\x02\u0DB7\u0DC0\x03\x02\x02\x02\u0DB8\u0DBA\x05" + + "\u02F7\u017C\x02\u0DB9\u0DBB\x05\u02F9\u017D\x02\u0DBA\u0DB9\x03\x02\x02" + + "\x02\u0DBA\u0DBB\x03\x02\x02\x02\u0DBB\u0DBC\x03\x02\x02\x02\u0DBC\u0DBD" + + "\x07D\x02\x02\u0DBD\u0DBE\x07F\x02\x02\u0DBE\u0DC0\x03\x02\x02\x02\u0DBF" + + "\u0DAE\x03\x02\x02\x02\u0DBF\u0DB8\x03\x02\x02\x02\u0DC0\u02F2\x03\x02" + + "\x02\x02\u0DC1\u0DC5\x05\u02FD\u017F\x02\u0DC2\u0DC5\x05\u02FB\u017E\x02" + + "\u0DC3\u0DC5\x07a\x02\x02\u0DC4\u0DC1\x03\x02\x02\x02\u0DC4\u0DC2\x03" + + "\x02\x02\x02\u0DC4\u0DC3\x03\x02\x02\x02\u0DC5\u0DC6\x03\x02\x02\x02\u0DC6" + + "\u0DC4\x03\x02\x02\x02\u0DC6\u0DC7\x03\x02\x02\x02\u0DC7\u02F4\x03\x02" + + "\x02\x02\u0DC8\u0DCE\x07b\x02\x02\u0DC9\u0DCD\n\x06\x02\x02\u0DCA\u0DCB" + + "\x07b\x02\x02\u0DCB\u0DCD\x07b\x02\x02\u0DCC\u0DC9\x03\x02\x02\x02\u0DCC" + + "\u0DCA\x03\x02\x02\x02\u0DCD\u0DD0\x03\x02\x02\x02\u0DCE\u0DCC\x03\x02" + + "\x02\x02\u0DCE\u0DCF\x03\x02\x02\x02\u0DCF\u0DD1\x03\x02\x02\x02\u0DD0" + + "\u0DCE\x03\x02\x02\x02\u0DD1\u0DD2\x07b\x02\x02\u0DD2\u02F6\x03\x02\x02" + + "\x02\u0DD3\u0DD5\x05\u02FB\u017E\x02\u0DD4\u0DD3\x03\x02\x02\x02\u0DD5" + + "\u0DD6\x03\x02\x02\x02\u0DD6\u0DD4\x03\x02\x02\x02\u0DD6\u0DD7\x03\x02" + + "\x02\x02\u0DD7\u0DD8\x03\x02\x02\x02\u0DD8\u0DDC\x070\x02\x02\u0DD9\u0DDB" + + "\x05\u02FB\u017E\x02\u0DDA\u0DD9\x03\x02\x02\x02\u0DDB\u0DDE"; + private static readonly _serializedATNSegment6: string = + "\x03\x02\x02\x02\u0DDC\u0DDA\x03\x02\x02\x02\u0DDC\u0DDD\x03\x02\x02\x02" + + "\u0DDD\u0DE6\x03\x02\x02\x02\u0DDE\u0DDC\x03\x02\x02\x02\u0DDF\u0DE1\x07" + + "0\x02\x02\u0DE0\u0DE2\x05\u02FB\u017E\x02\u0DE1\u0DE0\x03\x02\x02\x02" + + "\u0DE2\u0DE3\x03\x02\x02\x02\u0DE3\u0DE1\x03\x02\x02\x02\u0DE3\u0DE4\x03" + + "\x02\x02\x02\u0DE4\u0DE6\x03\x02\x02\x02\u0DE5\u0DD4\x03\x02\x02\x02\u0DE5" + + "\u0DDF\x03\x02\x02\x02\u0DE6\u02F8\x03\x02\x02\x02\u0DE7\u0DE9\x07G\x02" + + "\x02\u0DE8\u0DEA\t\x07\x02\x02\u0DE9\u0DE8\x03\x02\x02\x02\u0DE9\u0DEA" + + "\x03\x02\x02\x02\u0DEA\u0DEC\x03\x02\x02\x02\u0DEB\u0DED\x05\u02FB\u017E" + + "\x02\u0DEC\u0DEB\x03\x02\x02\x02\u0DED\u0DEE\x03\x02\x02\x02\u0DEE\u0DEC" + + "\x03\x02\x02\x02\u0DEE\u0DEF\x03\x02\x02\x02\u0DEF\u02FA\x03\x02\x02\x02" + + "\u0DF0\u0DF1\t\b\x02\x02\u0DF1\u02FC\x03\x02\x02\x02\u0DF2\u0DF3\t\t\x02" + + "\x02\u0DF3\u02FE\x03\x02\x02\x02\u0DF4\u0DF5\x07/\x02\x02\u0DF5\u0DF6" + + "\x07/\x02\x02\u0DF6\u0DFC\x03\x02\x02\x02\u0DF7\u0DF8\x07^\x02\x02\u0DF8" + + "\u0DFB\x07\f\x02\x02\u0DF9\u0DFB\n\n\x02\x02\u0DFA\u0DF7\x03\x02\x02\x02" + + "\u0DFA\u0DF9\x03\x02\x02\x02\u0DFB\u0DFE\x03\x02\x02\x02\u0DFC\u0DFA\x03" + + "\x02\x02\x02\u0DFC\u0DFD\x03\x02\x02\x02\u0DFD\u0E00\x03\x02\x02\x02\u0DFE" + + "\u0DFC\x03\x02\x02\x02\u0DFF\u0E01\x07\x0F\x02\x02\u0E00\u0DFF\x03\x02" + + "\x02\x02\u0E00\u0E01\x03\x02\x02\x02\u0E01\u0E03\x03\x02\x02\x02\u0E02" + + "\u0E04\x07\f\x02\x02\u0E03\u0E02\x03\x02\x02\x02\u0E03\u0E04\x03\x02\x02" + + "\x02\u0E04\u0E05\x03\x02\x02\x02\u0E05\u0E06\b\u0180\x02\x02\u0E06\u0300" + + "\x03\x02\x02\x02\u0E07\u0E08\x071\x02\x02\u0E08\u0E09\x07,\x02\x02\u0E09" + + "\u0E0E\x03\x02\x02\x02\u0E0A\u0E0D\x05\u0301\u0181\x02\u0E0B\u0E0D\v\x02" + + "\x02\x02\u0E0C\u0E0A\x03\x02\x02\x02\u0E0C\u0E0B\x03\x02\x02\x02\u0E0D" + + "\u0E10\x03\x02\x02\x02\u0E0E\u0E0F\x03\x02\x02\x02\u0E0E\u0E0C\x03\x02" + + "\x02\x02\u0E0F\u0E15\x03\x02\x02\x02\u0E10\u0E0E\x03\x02\x02\x02\u0E11" + + "\u0E12\x07,\x02\x02\u0E12\u0E16\x071\x02\x02\u0E13\u0E14\b\u0181\x03\x02" + + "\u0E14\u0E16\x07\x02\x02\x03\u0E15\u0E11\x03\x02\x02\x02\u0E15\u0E13\x03" + + "\x02\x02\x02\u0E16\u0E17\x03\x02\x02\x02\u0E17\u0E18\b\u0181\x02\x02\u0E18" + + "\u0302\x03\x02\x02\x02\u0E19\u0E1B\t\v\x02\x02\u0E1A\u0E19\x03\x02\x02" + + "\x02\u0E1B\u0E1C\x03\x02\x02\x02\u0E1C\u0E1A\x03\x02\x02\x02\u0E1C\u0E1D" + + "\x03\x02\x02\x02\u0E1D\u0E1E\x03\x02\x02\x02\u0E1E\u0E1F\b\u0182\x02\x02" + + "\u0E1F\u0304\x03\x02\x02\x02\u0E20\u0E21\v\x02\x02\x02\u0E21\u0306\x03" + + "\x02\x02\x024\x02\u085F\u0A08\u0B69\u0CF4\u0D06\u0D0E\u0D3A\u0D3C\u0D46" + + "\u0D50\u0D54\u0D5A\u0D5C\u0D64\u0D6B\u0D72\u0D79\u0D7E\u0D85\u0D8C\u0D8F" + + "\u0D95\u0D99\u0D9E\u0DA1\u0DA7\u0DAB\u0DB0\u0DB3\u0DBA\u0DBF\u0DC4\u0DC6" + + "\u0DCC\u0DCE\u0DD6\u0DDC\u0DE3\u0DE5\u0DE9\u0DEE\u0DFA\u0DFC\u0E00\u0E03" + + "\u0E0C\u0E0E\u0E15\u0E1C\x04\x02\x03\x02\x03\u0181\x02"; public static readonly _serializedATN: string = Utils.join( [ SparkSqlLexer._serializedATNSegment0, @@ -1946,6 +2494,8 @@ export class SparkSqlLexer extends Lexer { SparkSqlLexer._serializedATNSegment2, SparkSqlLexer._serializedATNSegment3, SparkSqlLexer._serializedATNSegment4, + SparkSqlLexer._serializedATNSegment5, + SparkSqlLexer._serializedATNSegment6, ], "", ); diff --git a/src/lib/spark/SparkSqlListener.ts b/src/lib/spark/SparkSqlListener.ts deleted file mode 100644 index 0fa4e72e..00000000 --- a/src/lib/spark/SparkSqlListener.ts +++ /dev/null @@ -1,3813 +0,0 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/spark/SparkSql.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; - -import { TableNameContext } from "./SparkSqlParser"; -import { AliasedQueryContext } from "./SparkSqlParser"; -import { AliasedRelationContext } from "./SparkSqlParser"; -import { InlineTableDefault2Context } from "./SparkSqlParser"; -import { TableValuedFunctionContext } from "./SparkSqlParser"; -import { ExponentLiteralContext } from "./SparkSqlParser"; -import { DecimalLiteralContext } from "./SparkSqlParser"; -import { LegacyDecimalLiteralContext } from "./SparkSqlParser"; -import { IntegerLiteralContext } from "./SparkSqlParser"; -import { BigIntLiteralContext } from "./SparkSqlParser"; -import { SmallIntLiteralContext } from "./SparkSqlParser"; -import { TinyIntLiteralContext } from "./SparkSqlParser"; -import { DoubleLiteralContext } from "./SparkSqlParser"; -import { FloatLiteralContext } from "./SparkSqlParser"; -import { BigDecimalLiteralContext } from "./SparkSqlParser"; -import { QueryTermDefaultContext } from "./SparkSqlParser"; -import { SetOperationContext } from "./SparkSqlParser"; -import { InsertOverwriteTableContext } from "./SparkSqlParser"; -import { InsertIntoTableContext } from "./SparkSqlParser"; -import { InsertOverwriteHiveDirContext } from "./SparkSqlParser"; -import { InsertOverwriteDirContext } from "./SparkSqlParser"; -import { ValueExpressionDefaultContext } from "./SparkSqlParser"; -import { ArithmeticUnaryContext } from "./SparkSqlParser"; -import { ArithmeticBinaryContext } from "./SparkSqlParser"; -import { ComparisonContext } from "./SparkSqlParser"; -import { QueryPrimaryDefaultContext } from "./SparkSqlParser"; -import { FromStmtContext } from "./SparkSqlParser"; -import { TableContext } from "./SparkSqlParser"; -import { InlineTableDefault1Context } from "./SparkSqlParser"; -import { SubqueryContext } from "./SparkSqlParser"; -import { SingleInsertQueryContext } from "./SparkSqlParser"; -import { MultiInsertQueryContext } from "./SparkSqlParser"; -import { DeleteFromTableContext } from "./SparkSqlParser"; -import { UpdateTableContext } from "./SparkSqlParser"; -import { MergeIntoTableContext } from "./SparkSqlParser"; -import { CurrentDatetimeContext } from "./SparkSqlParser"; -import { SearchedCaseContext } from "./SparkSqlParser"; -import { SimpleCaseContext } from "./SparkSqlParser"; -import { CastContext } from "./SparkSqlParser"; -import { StructContext } from "./SparkSqlParser"; -import { FirstContext } from "./SparkSqlParser"; -import { LastContext } from "./SparkSqlParser"; -import { PositionContext } from "./SparkSqlParser"; -import { ConstantDefaultContext } from "./SparkSqlParser"; -import { StarContext } from "./SparkSqlParser"; -import { RowConstructorContext } from "./SparkSqlParser"; -import { SubqueryExpressionContext } from "./SparkSqlParser"; -import { FunctionCallContext } from "./SparkSqlParser"; -import { LambdaContext } from "./SparkSqlParser"; -import { SubscriptContext } from "./SparkSqlParser"; -import { ColumnReferenceContext } from "./SparkSqlParser"; -import { DereferenceContext } from "./SparkSqlParser"; -import { ParenthesizedExpressionContext } from "./SparkSqlParser"; -import { ExtractContext } from "./SparkSqlParser"; -import { SubstringContext } from "./SparkSqlParser"; -import { TrimContext } from "./SparkSqlParser"; -import { OverlayContext } from "./SparkSqlParser"; -import { UnquotedIdentifierContext } from "./SparkSqlParser"; -import { QuotedIdentifierAlternativeContext } from "./SparkSqlParser"; -import { TableFileFormatContext } from "./SparkSqlParser"; -import { GenericFileFormatContext } from "./SparkSqlParser"; -import { SampleByPercentileContext } from "./SparkSqlParser"; -import { SampleByRowsContext } from "./SparkSqlParser"; -import { SampleByBucketContext } from "./SparkSqlParser"; -import { SampleByBytesContext } from "./SparkSqlParser"; -import { NullLiteralContext } from "./SparkSqlParser"; -import { IntervalLiteralContext } from "./SparkSqlParser"; -import { TypeConstructorContext } from "./SparkSqlParser"; -import { NumericLiteralContext } from "./SparkSqlParser"; -import { BooleanLiteralContext } from "./SparkSqlParser"; -import { StringLiteralContext } from "./SparkSqlParser"; -import { RowFormatSerdeContext } from "./SparkSqlParser"; -import { RowFormatDelimitedContext } from "./SparkSqlParser"; -import { ComplexDataTypeContext } from "./SparkSqlParser"; -import { PrimitiveDataTypeContext } from "./SparkSqlParser"; -import { TransformQuerySpecificationContext } from "./SparkSqlParser"; -import { RegularQuerySpecificationContext } from "./SparkSqlParser"; -import { ErrorIdentContext } from "./SparkSqlParser"; -import { RealIdentContext } from "./SparkSqlParser"; -import { WindowRefContext } from "./SparkSqlParser"; -import { WindowDefContext } from "./SparkSqlParser"; -import { IdentityTransformContext } from "./SparkSqlParser"; -import { ApplyTransformContext } from "./SparkSqlParser"; -import { StatementDefaultContext } from "./SparkSqlParser"; -import { DmlStatementContext } from "./SparkSqlParser"; -import { UseContext } from "./SparkSqlParser"; -import { CreateNamespaceContext } from "./SparkSqlParser"; -import { SetNamespacePropertiesContext } from "./SparkSqlParser"; -import { SetNamespaceLocationContext } from "./SparkSqlParser"; -import { DropNamespaceContext } from "./SparkSqlParser"; -import { ShowNamespacesContext } from "./SparkSqlParser"; -import { CreateTableContext } from "./SparkSqlParser"; -import { CreateHiveTableContext } from "./SparkSqlParser"; -import { CreateTableLikeContext } from "./SparkSqlParser"; -import { ReplaceTableContext } from "./SparkSqlParser"; -import { AnalyzeContext } from "./SparkSqlParser"; -import { AddTableColumnsContext } from "./SparkSqlParser"; -import { RenameTableColumnContext } from "./SparkSqlParser"; -import { DropTableColumnsContext } from "./SparkSqlParser"; -import { RenameTableContext } from "./SparkSqlParser"; -import { SetTablePropertiesContext } from "./SparkSqlParser"; -import { UnsetTablePropertiesContext } from "./SparkSqlParser"; -import { AlterTableAlterColumnContext } from "./SparkSqlParser"; -import { HiveChangeColumnContext } from "./SparkSqlParser"; -import { HiveReplaceColumnsContext } from "./SparkSqlParser"; -import { SetTableSerDeContext } from "./SparkSqlParser"; -import { AddTablePartitionContext } from "./SparkSqlParser"; -import { RenameTablePartitionContext } from "./SparkSqlParser"; -import { DropTablePartitionsContext } from "./SparkSqlParser"; -import { SetTableLocationContext } from "./SparkSqlParser"; -import { RecoverPartitionsContext } from "./SparkSqlParser"; -import { DropTableContext } from "./SparkSqlParser"; -import { DropViewContext } from "./SparkSqlParser"; -import { CreateViewContext } from "./SparkSqlParser"; -import { CreateTempViewUsingContext } from "./SparkSqlParser"; -import { AlterViewQueryContext } from "./SparkSqlParser"; -import { CreateFunctionContext } from "./SparkSqlParser"; -import { DropFunctionContext } from "./SparkSqlParser"; -import { ExplainContext } from "./SparkSqlParser"; -import { ShowTablesContext } from "./SparkSqlParser"; -import { ShowTableContext } from "./SparkSqlParser"; -import { ShowTblPropertiesContext } from "./SparkSqlParser"; -import { ShowColumnsContext } from "./SparkSqlParser"; -import { ShowViewsContext } from "./SparkSqlParser"; -import { ShowPartitionsContext } from "./SparkSqlParser"; -import { ShowFunctionsContext } from "./SparkSqlParser"; -import { ShowCreateTableContext } from "./SparkSqlParser"; -import { ShowCurrentNamespaceContext } from "./SparkSqlParser"; -import { DescribeFunctionContext } from "./SparkSqlParser"; -import { DescribeNamespaceContext } from "./SparkSqlParser"; -import { DescribeRelationContext } from "./SparkSqlParser"; -import { DescribeQueryContext } from "./SparkSqlParser"; -import { CommentNamespaceContext } from "./SparkSqlParser"; -import { CommentTableContext } from "./SparkSqlParser"; -import { RefreshTableContext } from "./SparkSqlParser"; -import { RefreshFunctionContext } from "./SparkSqlParser"; -import { RefreshResourceContext } from "./SparkSqlParser"; -import { CacheTableContext } from "./SparkSqlParser"; -import { UncacheTableContext } from "./SparkSqlParser"; -import { ClearCacheContext } from "./SparkSqlParser"; -import { LoadDataContext } from "./SparkSqlParser"; -import { TruncateTableContext } from "./SparkSqlParser"; -import { RepairTableContext } from "./SparkSqlParser"; -import { ManageResourceContext } from "./SparkSqlParser"; -import { FailNativeCommandContext } from "./SparkSqlParser"; -import { SetTimeZoneContext } from "./SparkSqlParser"; -import { SetQuotedConfigurationContext } from "./SparkSqlParser"; -import { SetConfigurationContext } from "./SparkSqlParser"; -import { ResetQuotedConfigurationContext } from "./SparkSqlParser"; -import { ResetConfigurationContext } from "./SparkSqlParser"; -import { LogicalNotContext } from "./SparkSqlParser"; -import { ExistsContext } from "./SparkSqlParser"; -import { PredicatedContext } from "./SparkSqlParser"; -import { LogicalBinaryContext } from "./SparkSqlParser"; -import { ProgramContext } from "./SparkSqlParser"; -import { SingleStatementContext } from "./SparkSqlParser"; -import { EmptyStatementContext } from "./SparkSqlParser"; -import { SingleExpressionContext } from "./SparkSqlParser"; -import { SingleTableIdentifierContext } from "./SparkSqlParser"; -import { SingleMultipartIdentifierContext } from "./SparkSqlParser"; -import { SingleDataTypeContext } from "./SparkSqlParser"; -import { SingleTableSchemaContext } from "./SparkSqlParser"; -import { StatementContext } from "./SparkSqlParser"; -import { ConfigKeyContext } from "./SparkSqlParser"; -import { UnsupportedHiveNativeCommandsContext } from "./SparkSqlParser"; -import { CreateTableHeaderContext } from "./SparkSqlParser"; -import { ReplaceTableHeaderContext } from "./SparkSqlParser"; -import { BucketSpecContext } from "./SparkSqlParser"; -import { SkewSpecContext } from "./SparkSqlParser"; -import { LocationSpecContext } from "./SparkSqlParser"; -import { CommentSpecContext } from "./SparkSqlParser"; -import { QueryContext } from "./SparkSqlParser"; -import { InsertIntoContext } from "./SparkSqlParser"; -import { PartitionSpecLocationContext } from "./SparkSqlParser"; -import { PartitionSpecContext } from "./SparkSqlParser"; -import { PartitionValContext } from "./SparkSqlParser"; -import { NamespaceContext } from "./SparkSqlParser"; -import { DescribeFuncNameContext } from "./SparkSqlParser"; -import { DescribeColNameContext } from "./SparkSqlParser"; -import { CtesContext } from "./SparkSqlParser"; -import { NamedQueryContext } from "./SparkSqlParser"; -import { TableProviderContext } from "./SparkSqlParser"; -import { CreateTableClausesContext } from "./SparkSqlParser"; -import { TablePropertyListContext } from "./SparkSqlParser"; -import { TablePropertyContext } from "./SparkSqlParser"; -import { TablePropertyKeyContext } from "./SparkSqlParser"; -import { TablePropertyValueContext } from "./SparkSqlParser"; -import { ConstantListContext } from "./SparkSqlParser"; -import { NestedConstantListContext } from "./SparkSqlParser"; -import { CreateFileFormatContext } from "./SparkSqlParser"; -import { FileFormatContext } from "./SparkSqlParser"; -import { StorageHandlerContext } from "./SparkSqlParser"; -import { ResourceContext } from "./SparkSqlParser"; -import { DmlStatementNoWithContext } from "./SparkSqlParser"; -import { QueryOrganizationContext } from "./SparkSqlParser"; -import { MultiInsertQueryBodyContext } from "./SparkSqlParser"; -import { QueryTermContext } from "./SparkSqlParser"; -import { QueryPrimaryContext } from "./SparkSqlParser"; -import { SortItemContext } from "./SparkSqlParser"; -import { FromStatementContext } from "./SparkSqlParser"; -import { FromStatementBodyContext } from "./SparkSqlParser"; -import { QuerySpecificationContext } from "./SparkSqlParser"; -import { TransformClauseContext } from "./SparkSqlParser"; -import { SelectClauseContext } from "./SparkSqlParser"; -import { SetClauseContext } from "./SparkSqlParser"; -import { MatchedClauseContext } from "./SparkSqlParser"; -import { NotMatchedClauseContext } from "./SparkSqlParser"; -import { MatchedActionContext } from "./SparkSqlParser"; -import { NotMatchedActionContext } from "./SparkSqlParser"; -import { AssignmentListContext } from "./SparkSqlParser"; -import { AssignmentContext } from "./SparkSqlParser"; -import { WhereClauseContext } from "./SparkSqlParser"; -import { HavingClauseContext } from "./SparkSqlParser"; -import { HintContext } from "./SparkSqlParser"; -import { HintStatementContext } from "./SparkSqlParser"; -import { FromClauseContext } from "./SparkSqlParser"; -import { AggregationClauseContext } from "./SparkSqlParser"; -import { GroupingSetContext } from "./SparkSqlParser"; -import { PivotClauseContext } from "./SparkSqlParser"; -import { PivotColumnContext } from "./SparkSqlParser"; -import { PivotValueContext } from "./SparkSqlParser"; -import { LateralViewContext } from "./SparkSqlParser"; -import { SetQuantifierContext } from "./SparkSqlParser"; -import { RelationContext } from "./SparkSqlParser"; -import { JoinRelationContext } from "./SparkSqlParser"; -import { JoinTypeContext } from "./SparkSqlParser"; -import { JoinCriteriaContext } from "./SparkSqlParser"; -import { SampleContext } from "./SparkSqlParser"; -import { SampleMethodContext } from "./SparkSqlParser"; -import { IdentifierListContext } from "./SparkSqlParser"; -import { IdentifierSeqContext } from "./SparkSqlParser"; -import { OrderedIdentifierListContext } from "./SparkSqlParser"; -import { OrderedIdentifierContext } from "./SparkSqlParser"; -import { IdentifierCommentListContext } from "./SparkSqlParser"; -import { IdentifierCommentContext } from "./SparkSqlParser"; -import { RelationPrimaryContext } from "./SparkSqlParser"; -import { InlineTableContext } from "./SparkSqlParser"; -import { FunctionTableContext } from "./SparkSqlParser"; -import { TableAliasContext } from "./SparkSqlParser"; -import { RowFormatContext } from "./SparkSqlParser"; -import { MultipartIdentifierListContext } from "./SparkSqlParser"; -import { MultipartIdentifierContext } from "./SparkSqlParser"; -import { TableIdentifierContext } from "./SparkSqlParser"; -import { NamedExpressionContext } from "./SparkSqlParser"; -import { NamedExpressionSeqContext } from "./SparkSqlParser"; -import { TransformListContext } from "./SparkSqlParser"; -import { TransformContext } from "./SparkSqlParser"; -import { TransformArgumentContext } from "./SparkSqlParser"; -import { ExpressionContext } from "./SparkSqlParser"; -import { BooleanExpressionContext } from "./SparkSqlParser"; -import { PredicateContext } from "./SparkSqlParser"; -import { ValueExpressionContext } from "./SparkSqlParser"; -import { PrimaryExpressionContext } from "./SparkSqlParser"; -import { ConstantContext } from "./SparkSqlParser"; -import { ComparisonOperatorContext } from "./SparkSqlParser"; -import { ArithmeticOperatorContext } from "./SparkSqlParser"; -import { PredicateOperatorContext } from "./SparkSqlParser"; -import { BooleanValueContext } from "./SparkSqlParser"; -import { IntervalContext } from "./SparkSqlParser"; -import { ErrorCapturingMultiUnitsIntervalContext } from "./SparkSqlParser"; -import { MultiUnitsIntervalContext } from "./SparkSqlParser"; -import { ErrorCapturingUnitToUnitIntervalContext } from "./SparkSqlParser"; -import { UnitToUnitIntervalContext } from "./SparkSqlParser"; -import { IntervalValueContext } from "./SparkSqlParser"; -import { ColPositionContext } from "./SparkSqlParser"; -import { DataTypeContext } from "./SparkSqlParser"; -import { QualifiedColTypeWithPositionListContext } from "./SparkSqlParser"; -import { QualifiedColTypeWithPositionContext } from "./SparkSqlParser"; -import { ColTypeListContext } from "./SparkSqlParser"; -import { ColTypeContext } from "./SparkSqlParser"; -import { ComplexColTypeListContext } from "./SparkSqlParser"; -import { ComplexColTypeContext } from "./SparkSqlParser"; -import { WhenClauseContext } from "./SparkSqlParser"; -import { WindowClauseContext } from "./SparkSqlParser"; -import { NamedWindowContext } from "./SparkSqlParser"; -import { WindowSpecContext } from "./SparkSqlParser"; -import { WindowFrameContext } from "./SparkSqlParser"; -import { FrameBoundContext } from "./SparkSqlParser"; -import { QualifiedNameListContext } from "./SparkSqlParser"; -import { FunctionNameContext } from "./SparkSqlParser"; -import { QualifiedNameContext } from "./SparkSqlParser"; -import { ErrorCapturingIdentifierContext } from "./SparkSqlParser"; -import { ErrorCapturingIdentifierExtraContext } from "./SparkSqlParser"; -import { IdentifierContext } from "./SparkSqlParser"; -import { StrictIdentifierContext } from "./SparkSqlParser"; -import { QuotedIdentifierContext } from "./SparkSqlParser"; -import { NumberContext } from "./SparkSqlParser"; -import { AlterColumnActionContext } from "./SparkSqlParser"; -import { AnsiNonReservedContext } from "./SparkSqlParser"; -import { StrictNonReservedContext } from "./SparkSqlParser"; -import { NonReservedContext } from "./SparkSqlParser"; - - -/** - * This interface defines a complete listener for a parse tree produced by - * `SparkSqlParser`. - */ -export interface SparkSqlListener extends ParseTreeListener { - /** - * Enter a parse tree produced by the `tableName` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - enterTableName?: (ctx: TableNameContext) => void; - /** - * Exit a parse tree produced by the `tableName` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - exitTableName?: (ctx: TableNameContext) => void; - - /** - * Enter a parse tree produced by the `aliasedQuery` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - enterAliasedQuery?: (ctx: AliasedQueryContext) => void; - /** - * Exit a parse tree produced by the `aliasedQuery` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - exitAliasedQuery?: (ctx: AliasedQueryContext) => void; - - /** - * Enter a parse tree produced by the `aliasedRelation` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - enterAliasedRelation?: (ctx: AliasedRelationContext) => void; - /** - * Exit a parse tree produced by the `aliasedRelation` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - exitAliasedRelation?: (ctx: AliasedRelationContext) => void; - - /** - * Enter a parse tree produced by the `inlineTableDefault2` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - enterInlineTableDefault2?: (ctx: InlineTableDefault2Context) => void; - /** - * Exit a parse tree produced by the `inlineTableDefault2` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - exitInlineTableDefault2?: (ctx: InlineTableDefault2Context) => void; - - /** - * Enter a parse tree produced by the `tableValuedFunction` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - enterTableValuedFunction?: (ctx: TableValuedFunctionContext) => void; - /** - * Exit a parse tree produced by the `tableValuedFunction` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - exitTableValuedFunction?: (ctx: TableValuedFunctionContext) => void; - - /** - * Enter a parse tree produced by the `exponentLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterExponentLiteral?: (ctx: ExponentLiteralContext) => void; - /** - * Exit a parse tree produced by the `exponentLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitExponentLiteral?: (ctx: ExponentLiteralContext) => void; - - /** - * Enter a parse tree produced by the `decimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterDecimalLiteral?: (ctx: DecimalLiteralContext) => void; - /** - * Exit a parse tree produced by the `decimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitDecimalLiteral?: (ctx: DecimalLiteralContext) => void; - - /** - * Enter a parse tree produced by the `legacyDecimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterLegacyDecimalLiteral?: (ctx: LegacyDecimalLiteralContext) => void; - /** - * Exit a parse tree produced by the `legacyDecimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitLegacyDecimalLiteral?: (ctx: LegacyDecimalLiteralContext) => void; - - /** - * Enter a parse tree produced by the `integerLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterIntegerLiteral?: (ctx: IntegerLiteralContext) => void; - /** - * Exit a parse tree produced by the `integerLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitIntegerLiteral?: (ctx: IntegerLiteralContext) => void; - - /** - * Enter a parse tree produced by the `bigIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterBigIntLiteral?: (ctx: BigIntLiteralContext) => void; - /** - * Exit a parse tree produced by the `bigIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitBigIntLiteral?: (ctx: BigIntLiteralContext) => void; - - /** - * Enter a parse tree produced by the `smallIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterSmallIntLiteral?: (ctx: SmallIntLiteralContext) => void; - /** - * Exit a parse tree produced by the `smallIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitSmallIntLiteral?: (ctx: SmallIntLiteralContext) => void; - - /** - * Enter a parse tree produced by the `tinyIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterTinyIntLiteral?: (ctx: TinyIntLiteralContext) => void; - /** - * Exit a parse tree produced by the `tinyIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitTinyIntLiteral?: (ctx: TinyIntLiteralContext) => void; - - /** - * Enter a parse tree produced by the `doubleLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterDoubleLiteral?: (ctx: DoubleLiteralContext) => void; - /** - * Exit a parse tree produced by the `doubleLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitDoubleLiteral?: (ctx: DoubleLiteralContext) => void; - - /** - * Enter a parse tree produced by the `floatLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterFloatLiteral?: (ctx: FloatLiteralContext) => void; - /** - * Exit a parse tree produced by the `floatLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitFloatLiteral?: (ctx: FloatLiteralContext) => void; - - /** - * Enter a parse tree produced by the `bigDecimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterBigDecimalLiteral?: (ctx: BigDecimalLiteralContext) => void; - /** - * Exit a parse tree produced by the `bigDecimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitBigDecimalLiteral?: (ctx: BigDecimalLiteralContext) => void; - - /** - * Enter a parse tree produced by the `queryTermDefault` - * labeled alternative in `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - */ - enterQueryTermDefault?: (ctx: QueryTermDefaultContext) => void; - /** - * Exit a parse tree produced by the `queryTermDefault` - * labeled alternative in `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - */ - exitQueryTermDefault?: (ctx: QueryTermDefaultContext) => void; - - /** - * Enter a parse tree produced by the `setOperation` - * labeled alternative in `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - */ - enterSetOperation?: (ctx: SetOperationContext) => void; - /** - * Exit a parse tree produced by the `setOperation` - * labeled alternative in `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - */ - exitSetOperation?: (ctx: SetOperationContext) => void; - - /** - * Enter a parse tree produced by the `insertOverwriteTable` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - enterInsertOverwriteTable?: (ctx: InsertOverwriteTableContext) => void; - /** - * Exit a parse tree produced by the `insertOverwriteTable` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - exitInsertOverwriteTable?: (ctx: InsertOverwriteTableContext) => void; - - /** - * Enter a parse tree produced by the `insertIntoTable` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - enterInsertIntoTable?: (ctx: InsertIntoTableContext) => void; - /** - * Exit a parse tree produced by the `insertIntoTable` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - exitInsertIntoTable?: (ctx: InsertIntoTableContext) => void; - - /** - * Enter a parse tree produced by the `insertOverwriteHiveDir` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - enterInsertOverwriteHiveDir?: (ctx: InsertOverwriteHiveDirContext) => void; - /** - * Exit a parse tree produced by the `insertOverwriteHiveDir` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - exitInsertOverwriteHiveDir?: (ctx: InsertOverwriteHiveDirContext) => void; - - /** - * Enter a parse tree produced by the `insertOverwriteDir` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - enterInsertOverwriteDir?: (ctx: InsertOverwriteDirContext) => void; - /** - * Exit a parse tree produced by the `insertOverwriteDir` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - exitInsertOverwriteDir?: (ctx: InsertOverwriteDirContext) => void; - - /** - * Enter a parse tree produced by the `valueExpressionDefault` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - enterValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; - /** - * Exit a parse tree produced by the `valueExpressionDefault` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - exitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => void; - - /** - * Enter a parse tree produced by the `arithmeticUnary` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - enterArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; - /** - * Exit a parse tree produced by the `arithmeticUnary` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - exitArithmeticUnary?: (ctx: ArithmeticUnaryContext) => void; - - /** - * Enter a parse tree produced by the `arithmeticBinary` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - enterArithmeticBinary?: (ctx: ArithmeticBinaryContext) => void; - /** - * Exit a parse tree produced by the `arithmeticBinary` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - exitArithmeticBinary?: (ctx: ArithmeticBinaryContext) => void; - - /** - * Enter a parse tree produced by the `comparison` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - enterComparison?: (ctx: ComparisonContext) => void; - /** - * Exit a parse tree produced by the `comparison` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - exitComparison?: (ctx: ComparisonContext) => void; - - /** - * Enter a parse tree produced by the `queryPrimaryDefault` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - enterQueryPrimaryDefault?: (ctx: QueryPrimaryDefaultContext) => void; - /** - * Exit a parse tree produced by the `queryPrimaryDefault` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - exitQueryPrimaryDefault?: (ctx: QueryPrimaryDefaultContext) => void; - - /** - * Enter a parse tree produced by the `fromStmt` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - enterFromStmt?: (ctx: FromStmtContext) => void; - /** - * Exit a parse tree produced by the `fromStmt` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - exitFromStmt?: (ctx: FromStmtContext) => void; - - /** - * Enter a parse tree produced by the `table` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - enterTable?: (ctx: TableContext) => void; - /** - * Exit a parse tree produced by the `table` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - exitTable?: (ctx: TableContext) => void; - - /** - * Enter a parse tree produced by the `inlineTableDefault1` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - enterInlineTableDefault1?: (ctx: InlineTableDefault1Context) => void; - /** - * Exit a parse tree produced by the `inlineTableDefault1` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - exitInlineTableDefault1?: (ctx: InlineTableDefault1Context) => void; - - /** - * Enter a parse tree produced by the `subquery` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - enterSubquery?: (ctx: SubqueryContext) => void; - /** - * Exit a parse tree produced by the `subquery` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - exitSubquery?: (ctx: SubqueryContext) => void; - - /** - * Enter a parse tree produced by the `singleInsertQuery` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - enterSingleInsertQuery?: (ctx: SingleInsertQueryContext) => void; - /** - * Exit a parse tree produced by the `singleInsertQuery` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - exitSingleInsertQuery?: (ctx: SingleInsertQueryContext) => void; - - /** - * Enter a parse tree produced by the `multiInsertQuery` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - enterMultiInsertQuery?: (ctx: MultiInsertQueryContext) => void; - /** - * Exit a parse tree produced by the `multiInsertQuery` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - exitMultiInsertQuery?: (ctx: MultiInsertQueryContext) => void; - - /** - * Enter a parse tree produced by the `deleteFromTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - enterDeleteFromTable?: (ctx: DeleteFromTableContext) => void; - /** - * Exit a parse tree produced by the `deleteFromTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - exitDeleteFromTable?: (ctx: DeleteFromTableContext) => void; - - /** - * Enter a parse tree produced by the `updateTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - enterUpdateTable?: (ctx: UpdateTableContext) => void; - /** - * Exit a parse tree produced by the `updateTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - exitUpdateTable?: (ctx: UpdateTableContext) => void; - - /** - * Enter a parse tree produced by the `mergeIntoTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - enterMergeIntoTable?: (ctx: MergeIntoTableContext) => void; - /** - * Exit a parse tree produced by the `mergeIntoTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - exitMergeIntoTable?: (ctx: MergeIntoTableContext) => void; - - /** - * Enter a parse tree produced by the `currentDatetime` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterCurrentDatetime?: (ctx: CurrentDatetimeContext) => void; - /** - * Exit a parse tree produced by the `currentDatetime` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitCurrentDatetime?: (ctx: CurrentDatetimeContext) => void; - - /** - * Enter a parse tree produced by the `searchedCase` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterSearchedCase?: (ctx: SearchedCaseContext) => void; - /** - * Exit a parse tree produced by the `searchedCase` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitSearchedCase?: (ctx: SearchedCaseContext) => void; - - /** - * Enter a parse tree produced by the `simpleCase` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterSimpleCase?: (ctx: SimpleCaseContext) => void; - /** - * Exit a parse tree produced by the `simpleCase` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitSimpleCase?: (ctx: SimpleCaseContext) => void; - - /** - * Enter a parse tree produced by the `cast` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterCast?: (ctx: CastContext) => void; - /** - * Exit a parse tree produced by the `cast` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitCast?: (ctx: CastContext) => void; - - /** - * Enter a parse tree produced by the `struct` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterStruct?: (ctx: StructContext) => void; - /** - * Exit a parse tree produced by the `struct` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitStruct?: (ctx: StructContext) => void; - - /** - * Enter a parse tree produced by the `first` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterFirst?: (ctx: FirstContext) => void; - /** - * Exit a parse tree produced by the `first` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitFirst?: (ctx: FirstContext) => void; - - /** - * Enter a parse tree produced by the `last` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterLast?: (ctx: LastContext) => void; - /** - * Exit a parse tree produced by the `last` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitLast?: (ctx: LastContext) => void; - - /** - * Enter a parse tree produced by the `position` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterPosition?: (ctx: PositionContext) => void; - /** - * Exit a parse tree produced by the `position` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitPosition?: (ctx: PositionContext) => void; - - /** - * Enter a parse tree produced by the `constantDefault` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterConstantDefault?: (ctx: ConstantDefaultContext) => void; - /** - * Exit a parse tree produced by the `constantDefault` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitConstantDefault?: (ctx: ConstantDefaultContext) => void; - - /** - * Enter a parse tree produced by the `star` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterStar?: (ctx: StarContext) => void; - /** - * Exit a parse tree produced by the `star` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitStar?: (ctx: StarContext) => void; - - /** - * Enter a parse tree produced by the `rowConstructor` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterRowConstructor?: (ctx: RowConstructorContext) => void; - /** - * Exit a parse tree produced by the `rowConstructor` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitRowConstructor?: (ctx: RowConstructorContext) => void; - - /** - * Enter a parse tree produced by the `subqueryExpression` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterSubqueryExpression?: (ctx: SubqueryExpressionContext) => void; - /** - * Exit a parse tree produced by the `subqueryExpression` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitSubqueryExpression?: (ctx: SubqueryExpressionContext) => void; - - /** - * Enter a parse tree produced by the `functionCall` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterFunctionCall?: (ctx: FunctionCallContext) => void; - /** - * Exit a parse tree produced by the `functionCall` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitFunctionCall?: (ctx: FunctionCallContext) => void; - - /** - * Enter a parse tree produced by the `lambda` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterLambda?: (ctx: LambdaContext) => void; - /** - * Exit a parse tree produced by the `lambda` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitLambda?: (ctx: LambdaContext) => void; - - /** - * Enter a parse tree produced by the `subscript` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterSubscript?: (ctx: SubscriptContext) => void; - /** - * Exit a parse tree produced by the `subscript` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitSubscript?: (ctx: SubscriptContext) => void; - - /** - * Enter a parse tree produced by the `columnReference` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterColumnReference?: (ctx: ColumnReferenceContext) => void; - /** - * Exit a parse tree produced by the `columnReference` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitColumnReference?: (ctx: ColumnReferenceContext) => void; - - /** - * Enter a parse tree produced by the `dereference` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterDereference?: (ctx: DereferenceContext) => void; - /** - * Exit a parse tree produced by the `dereference` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitDereference?: (ctx: DereferenceContext) => void; - - /** - * Enter a parse tree produced by the `parenthesizedExpression` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterParenthesizedExpression?: (ctx: ParenthesizedExpressionContext) => void; - /** - * Exit a parse tree produced by the `parenthesizedExpression` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitParenthesizedExpression?: (ctx: ParenthesizedExpressionContext) => void; - - /** - * Enter a parse tree produced by the `extract` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterExtract?: (ctx: ExtractContext) => void; - /** - * Exit a parse tree produced by the `extract` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitExtract?: (ctx: ExtractContext) => void; - - /** - * Enter a parse tree produced by the `substring` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterSubstring?: (ctx: SubstringContext) => void; - /** - * Exit a parse tree produced by the `substring` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitSubstring?: (ctx: SubstringContext) => void; - - /** - * Enter a parse tree produced by the `trim` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterTrim?: (ctx: TrimContext) => void; - /** - * Exit a parse tree produced by the `trim` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitTrim?: (ctx: TrimContext) => void; - - /** - * Enter a parse tree produced by the `overlay` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterOverlay?: (ctx: OverlayContext) => void; - /** - * Exit a parse tree produced by the `overlay` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitOverlay?: (ctx: OverlayContext) => void; - - /** - * Enter a parse tree produced by the `unquotedIdentifier` - * labeled alternative in `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - */ - enterUnquotedIdentifier?: (ctx: UnquotedIdentifierContext) => void; - /** - * Exit a parse tree produced by the `unquotedIdentifier` - * labeled alternative in `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - */ - exitUnquotedIdentifier?: (ctx: UnquotedIdentifierContext) => void; - - /** - * Enter a parse tree produced by the `quotedIdentifierAlternative` - * labeled alternative in `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - */ - enterQuotedIdentifierAlternative?: (ctx: QuotedIdentifierAlternativeContext) => void; - /** - * Exit a parse tree produced by the `quotedIdentifierAlternative` - * labeled alternative in `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - */ - exitQuotedIdentifierAlternative?: (ctx: QuotedIdentifierAlternativeContext) => void; - - /** - * Enter a parse tree produced by the `tableFileFormat` - * labeled alternative in `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - */ - enterTableFileFormat?: (ctx: TableFileFormatContext) => void; - /** - * Exit a parse tree produced by the `tableFileFormat` - * labeled alternative in `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - */ - exitTableFileFormat?: (ctx: TableFileFormatContext) => void; - - /** - * Enter a parse tree produced by the `genericFileFormat` - * labeled alternative in `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - */ - enterGenericFileFormat?: (ctx: GenericFileFormatContext) => void; - /** - * Exit a parse tree produced by the `genericFileFormat` - * labeled alternative in `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - */ - exitGenericFileFormat?: (ctx: GenericFileFormatContext) => void; - - /** - * Enter a parse tree produced by the `sampleByPercentile` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - enterSampleByPercentile?: (ctx: SampleByPercentileContext) => void; - /** - * Exit a parse tree produced by the `sampleByPercentile` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - exitSampleByPercentile?: (ctx: SampleByPercentileContext) => void; - - /** - * Enter a parse tree produced by the `sampleByRows` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - enterSampleByRows?: (ctx: SampleByRowsContext) => void; - /** - * Exit a parse tree produced by the `sampleByRows` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - exitSampleByRows?: (ctx: SampleByRowsContext) => void; - - /** - * Enter a parse tree produced by the `sampleByBucket` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - enterSampleByBucket?: (ctx: SampleByBucketContext) => void; - /** - * Exit a parse tree produced by the `sampleByBucket` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - exitSampleByBucket?: (ctx: SampleByBucketContext) => void; - - /** - * Enter a parse tree produced by the `sampleByBytes` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - enterSampleByBytes?: (ctx: SampleByBytesContext) => void; - /** - * Exit a parse tree produced by the `sampleByBytes` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - exitSampleByBytes?: (ctx: SampleByBytesContext) => void; - - /** - * Enter a parse tree produced by the `nullLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - enterNullLiteral?: (ctx: NullLiteralContext) => void; - /** - * Exit a parse tree produced by the `nullLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - exitNullLiteral?: (ctx: NullLiteralContext) => void; - - /** - * Enter a parse tree produced by the `intervalLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - enterIntervalLiteral?: (ctx: IntervalLiteralContext) => void; - /** - * Exit a parse tree produced by the `intervalLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - exitIntervalLiteral?: (ctx: IntervalLiteralContext) => void; - - /** - * Enter a parse tree produced by the `typeConstructor` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - enterTypeConstructor?: (ctx: TypeConstructorContext) => void; - /** - * Exit a parse tree produced by the `typeConstructor` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - exitTypeConstructor?: (ctx: TypeConstructorContext) => void; - - /** - * Enter a parse tree produced by the `numericLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - enterNumericLiteral?: (ctx: NumericLiteralContext) => void; - /** - * Exit a parse tree produced by the `numericLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - exitNumericLiteral?: (ctx: NumericLiteralContext) => void; - - /** - * Enter a parse tree produced by the `booleanLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - enterBooleanLiteral?: (ctx: BooleanLiteralContext) => void; - /** - * Exit a parse tree produced by the `booleanLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - exitBooleanLiteral?: (ctx: BooleanLiteralContext) => void; - - /** - * Enter a parse tree produced by the `stringLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - enterStringLiteral?: (ctx: StringLiteralContext) => void; - /** - * Exit a parse tree produced by the `stringLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - exitStringLiteral?: (ctx: StringLiteralContext) => void; - - /** - * Enter a parse tree produced by the `rowFormatSerde` - * labeled alternative in `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - */ - enterRowFormatSerde?: (ctx: RowFormatSerdeContext) => void; - /** - * Exit a parse tree produced by the `rowFormatSerde` - * labeled alternative in `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - */ - exitRowFormatSerde?: (ctx: RowFormatSerdeContext) => void; - - /** - * Enter a parse tree produced by the `rowFormatDelimited` - * labeled alternative in `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - */ - enterRowFormatDelimited?: (ctx: RowFormatDelimitedContext) => void; - /** - * Exit a parse tree produced by the `rowFormatDelimited` - * labeled alternative in `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - */ - exitRowFormatDelimited?: (ctx: RowFormatDelimitedContext) => void; - - /** - * Enter a parse tree produced by the `complexDataType` - * labeled alternative in `SparkSqlParser.dataType`. - * @param ctx the parse tree - */ - enterComplexDataType?: (ctx: ComplexDataTypeContext) => void; - /** - * Exit a parse tree produced by the `complexDataType` - * labeled alternative in `SparkSqlParser.dataType`. - * @param ctx the parse tree - */ - exitComplexDataType?: (ctx: ComplexDataTypeContext) => void; - - /** - * Enter a parse tree produced by the `primitiveDataType` - * labeled alternative in `SparkSqlParser.dataType`. - * @param ctx the parse tree - */ - enterPrimitiveDataType?: (ctx: PrimitiveDataTypeContext) => void; - /** - * Exit a parse tree produced by the `primitiveDataType` - * labeled alternative in `SparkSqlParser.dataType`. - * @param ctx the parse tree - */ - exitPrimitiveDataType?: (ctx: PrimitiveDataTypeContext) => void; - - /** - * Enter a parse tree produced by the `transformQuerySpecification` - * labeled alternative in `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - */ - enterTransformQuerySpecification?: (ctx: TransformQuerySpecificationContext) => void; - /** - * Exit a parse tree produced by the `transformQuerySpecification` - * labeled alternative in `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - */ - exitTransformQuerySpecification?: (ctx: TransformQuerySpecificationContext) => void; - - /** - * Enter a parse tree produced by the `regularQuerySpecification` - * labeled alternative in `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - */ - enterRegularQuerySpecification?: (ctx: RegularQuerySpecificationContext) => void; - /** - * Exit a parse tree produced by the `regularQuerySpecification` - * labeled alternative in `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - */ - exitRegularQuerySpecification?: (ctx: RegularQuerySpecificationContext) => void; - - /** - * Enter a parse tree produced by the `errorIdent` - * labeled alternative in `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - */ - enterErrorIdent?: (ctx: ErrorIdentContext) => void; - /** - * Exit a parse tree produced by the `errorIdent` - * labeled alternative in `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - */ - exitErrorIdent?: (ctx: ErrorIdentContext) => void; - - /** - * Enter a parse tree produced by the `realIdent` - * labeled alternative in `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - */ - enterRealIdent?: (ctx: RealIdentContext) => void; - /** - * Exit a parse tree produced by the `realIdent` - * labeled alternative in `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - */ - exitRealIdent?: (ctx: RealIdentContext) => void; - - /** - * Enter a parse tree produced by the `windowRef` - * labeled alternative in `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - */ - enterWindowRef?: (ctx: WindowRefContext) => void; - /** - * Exit a parse tree produced by the `windowRef` - * labeled alternative in `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - */ - exitWindowRef?: (ctx: WindowRefContext) => void; - - /** - * Enter a parse tree produced by the `windowDef` - * labeled alternative in `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - */ - enterWindowDef?: (ctx: WindowDefContext) => void; - /** - * Exit a parse tree produced by the `windowDef` - * labeled alternative in `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - */ - exitWindowDef?: (ctx: WindowDefContext) => void; - - /** - * Enter a parse tree produced by the `identityTransform` - * labeled alternative in `SparkSqlParser.transform`. - * @param ctx the parse tree - */ - enterIdentityTransform?: (ctx: IdentityTransformContext) => void; - /** - * Exit a parse tree produced by the `identityTransform` - * labeled alternative in `SparkSqlParser.transform`. - * @param ctx the parse tree - */ - exitIdentityTransform?: (ctx: IdentityTransformContext) => void; - - /** - * Enter a parse tree produced by the `applyTransform` - * labeled alternative in `SparkSqlParser.transform`. - * @param ctx the parse tree - */ - enterApplyTransform?: (ctx: ApplyTransformContext) => void; - /** - * Exit a parse tree produced by the `applyTransform` - * labeled alternative in `SparkSqlParser.transform`. - * @param ctx the parse tree - */ - exitApplyTransform?: (ctx: ApplyTransformContext) => void; - - /** - * Enter a parse tree produced by the `statementDefault` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterStatementDefault?: (ctx: StatementDefaultContext) => void; - /** - * Exit a parse tree produced by the `statementDefault` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitStatementDefault?: (ctx: StatementDefaultContext) => void; - - /** - * Enter a parse tree produced by the `dmlStatement` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDmlStatement?: (ctx: DmlStatementContext) => void; - /** - * Exit a parse tree produced by the `dmlStatement` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDmlStatement?: (ctx: DmlStatementContext) => void; - - /** - * Enter a parse tree produced by the `use` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterUse?: (ctx: UseContext) => void; - /** - * Exit a parse tree produced by the `use` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitUse?: (ctx: UseContext) => void; - - /** - * Enter a parse tree produced by the `createNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCreateNamespace?: (ctx: CreateNamespaceContext) => void; - /** - * Exit a parse tree produced by the `createNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCreateNamespace?: (ctx: CreateNamespaceContext) => void; - - /** - * Enter a parse tree produced by the `setNamespaceProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterSetNamespaceProperties?: (ctx: SetNamespacePropertiesContext) => void; - /** - * Exit a parse tree produced by the `setNamespaceProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitSetNamespaceProperties?: (ctx: SetNamespacePropertiesContext) => void; - - /** - * Enter a parse tree produced by the `setNamespaceLocation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterSetNamespaceLocation?: (ctx: SetNamespaceLocationContext) => void; - /** - * Exit a parse tree produced by the `setNamespaceLocation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitSetNamespaceLocation?: (ctx: SetNamespaceLocationContext) => void; - - /** - * Enter a parse tree produced by the `dropNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDropNamespace?: (ctx: DropNamespaceContext) => void; - /** - * Exit a parse tree produced by the `dropNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDropNamespace?: (ctx: DropNamespaceContext) => void; - - /** - * Enter a parse tree produced by the `showNamespaces` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowNamespaces?: (ctx: ShowNamespacesContext) => void; - /** - * Exit a parse tree produced by the `showNamespaces` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowNamespaces?: (ctx: ShowNamespacesContext) => void; - - /** - * Enter a parse tree produced by the `createTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCreateTable?: (ctx: CreateTableContext) => void; - /** - * Exit a parse tree produced by the `createTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCreateTable?: (ctx: CreateTableContext) => void; - - /** - * Enter a parse tree produced by the `createHiveTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCreateHiveTable?: (ctx: CreateHiveTableContext) => void; - /** - * Exit a parse tree produced by the `createHiveTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCreateHiveTable?: (ctx: CreateHiveTableContext) => void; - - /** - * Enter a parse tree produced by the `createTableLike` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCreateTableLike?: (ctx: CreateTableLikeContext) => void; - /** - * Exit a parse tree produced by the `createTableLike` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCreateTableLike?: (ctx: CreateTableLikeContext) => void; - - /** - * Enter a parse tree produced by the `replaceTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterReplaceTable?: (ctx: ReplaceTableContext) => void; - /** - * Exit a parse tree produced by the `replaceTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitReplaceTable?: (ctx: ReplaceTableContext) => void; - - /** - * Enter a parse tree produced by the `analyze` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterAnalyze?: (ctx: AnalyzeContext) => void; - /** - * Exit a parse tree produced by the `analyze` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitAnalyze?: (ctx: AnalyzeContext) => void; - - /** - * Enter a parse tree produced by the `addTableColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterAddTableColumns?: (ctx: AddTableColumnsContext) => void; - /** - * Exit a parse tree produced by the `addTableColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitAddTableColumns?: (ctx: AddTableColumnsContext) => void; - - /** - * Enter a parse tree produced by the `renameTableColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterRenameTableColumn?: (ctx: RenameTableColumnContext) => void; - /** - * Exit a parse tree produced by the `renameTableColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitRenameTableColumn?: (ctx: RenameTableColumnContext) => void; - - /** - * Enter a parse tree produced by the `dropTableColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDropTableColumns?: (ctx: DropTableColumnsContext) => void; - /** - * Exit a parse tree produced by the `dropTableColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDropTableColumns?: (ctx: DropTableColumnsContext) => void; - - /** - * Enter a parse tree produced by the `renameTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterRenameTable?: (ctx: RenameTableContext) => void; - /** - * Exit a parse tree produced by the `renameTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitRenameTable?: (ctx: RenameTableContext) => void; - - /** - * Enter a parse tree produced by the `setTableProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterSetTableProperties?: (ctx: SetTablePropertiesContext) => void; - /** - * Exit a parse tree produced by the `setTableProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitSetTableProperties?: (ctx: SetTablePropertiesContext) => void; - - /** - * Enter a parse tree produced by the `unsetTableProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterUnsetTableProperties?: (ctx: UnsetTablePropertiesContext) => void; - /** - * Exit a parse tree produced by the `unsetTableProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitUnsetTableProperties?: (ctx: UnsetTablePropertiesContext) => void; - - /** - * Enter a parse tree produced by the `alterTableAlterColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterAlterTableAlterColumn?: (ctx: AlterTableAlterColumnContext) => void; - /** - * Exit a parse tree produced by the `alterTableAlterColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitAlterTableAlterColumn?: (ctx: AlterTableAlterColumnContext) => void; - - /** - * Enter a parse tree produced by the `hiveChangeColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterHiveChangeColumn?: (ctx: HiveChangeColumnContext) => void; - /** - * Exit a parse tree produced by the `hiveChangeColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitHiveChangeColumn?: (ctx: HiveChangeColumnContext) => void; - - /** - * Enter a parse tree produced by the `hiveReplaceColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterHiveReplaceColumns?: (ctx: HiveReplaceColumnsContext) => void; - /** - * Exit a parse tree produced by the `hiveReplaceColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitHiveReplaceColumns?: (ctx: HiveReplaceColumnsContext) => void; - - /** - * Enter a parse tree produced by the `setTableSerDe` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterSetTableSerDe?: (ctx: SetTableSerDeContext) => void; - /** - * Exit a parse tree produced by the `setTableSerDe` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitSetTableSerDe?: (ctx: SetTableSerDeContext) => void; - - /** - * Enter a parse tree produced by the `addTablePartition` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterAddTablePartition?: (ctx: AddTablePartitionContext) => void; - /** - * Exit a parse tree produced by the `addTablePartition` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitAddTablePartition?: (ctx: AddTablePartitionContext) => void; - - /** - * Enter a parse tree produced by the `renameTablePartition` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterRenameTablePartition?: (ctx: RenameTablePartitionContext) => void; - /** - * Exit a parse tree produced by the `renameTablePartition` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitRenameTablePartition?: (ctx: RenameTablePartitionContext) => void; - - /** - * Enter a parse tree produced by the `dropTablePartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDropTablePartitions?: (ctx: DropTablePartitionsContext) => void; - /** - * Exit a parse tree produced by the `dropTablePartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDropTablePartitions?: (ctx: DropTablePartitionsContext) => void; - - /** - * Enter a parse tree produced by the `setTableLocation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterSetTableLocation?: (ctx: SetTableLocationContext) => void; - /** - * Exit a parse tree produced by the `setTableLocation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitSetTableLocation?: (ctx: SetTableLocationContext) => void; - - /** - * Enter a parse tree produced by the `recoverPartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterRecoverPartitions?: (ctx: RecoverPartitionsContext) => void; - /** - * Exit a parse tree produced by the `recoverPartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitRecoverPartitions?: (ctx: RecoverPartitionsContext) => void; - - /** - * Enter a parse tree produced by the `dropTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDropTable?: (ctx: DropTableContext) => void; - /** - * Exit a parse tree produced by the `dropTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDropTable?: (ctx: DropTableContext) => void; - - /** - * Enter a parse tree produced by the `dropView` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDropView?: (ctx: DropViewContext) => void; - /** - * Exit a parse tree produced by the `dropView` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDropView?: (ctx: DropViewContext) => void; - - /** - * Enter a parse tree produced by the `createView` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCreateView?: (ctx: CreateViewContext) => void; - /** - * Exit a parse tree produced by the `createView` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCreateView?: (ctx: CreateViewContext) => void; - - /** - * Enter a parse tree produced by the `createTempViewUsing` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCreateTempViewUsing?: (ctx: CreateTempViewUsingContext) => void; - /** - * Exit a parse tree produced by the `createTempViewUsing` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCreateTempViewUsing?: (ctx: CreateTempViewUsingContext) => void; - - /** - * Enter a parse tree produced by the `alterViewQuery` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterAlterViewQuery?: (ctx: AlterViewQueryContext) => void; - /** - * Exit a parse tree produced by the `alterViewQuery` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitAlterViewQuery?: (ctx: AlterViewQueryContext) => void; - - /** - * Enter a parse tree produced by the `createFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCreateFunction?: (ctx: CreateFunctionContext) => void; - /** - * Exit a parse tree produced by the `createFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCreateFunction?: (ctx: CreateFunctionContext) => void; - - /** - * Enter a parse tree produced by the `dropFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDropFunction?: (ctx: DropFunctionContext) => void; - /** - * Exit a parse tree produced by the `dropFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDropFunction?: (ctx: DropFunctionContext) => void; - - /** - * Enter a parse tree produced by the `explain` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterExplain?: (ctx: ExplainContext) => void; - /** - * Exit a parse tree produced by the `explain` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitExplain?: (ctx: ExplainContext) => void; - - /** - * Enter a parse tree produced by the `showTables` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowTables?: (ctx: ShowTablesContext) => void; - /** - * Exit a parse tree produced by the `showTables` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowTables?: (ctx: ShowTablesContext) => void; - - /** - * Enter a parse tree produced by the `showTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowTable?: (ctx: ShowTableContext) => void; - /** - * Exit a parse tree produced by the `showTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowTable?: (ctx: ShowTableContext) => void; - - /** - * Enter a parse tree produced by the `showTblProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowTblProperties?: (ctx: ShowTblPropertiesContext) => void; - /** - * Exit a parse tree produced by the `showTblProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowTblProperties?: (ctx: ShowTblPropertiesContext) => void; - - /** - * Enter a parse tree produced by the `showColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowColumns?: (ctx: ShowColumnsContext) => void; - /** - * Exit a parse tree produced by the `showColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowColumns?: (ctx: ShowColumnsContext) => void; - - /** - * Enter a parse tree produced by the `showViews` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowViews?: (ctx: ShowViewsContext) => void; - /** - * Exit a parse tree produced by the `showViews` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowViews?: (ctx: ShowViewsContext) => void; - - /** - * Enter a parse tree produced by the `showPartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowPartitions?: (ctx: ShowPartitionsContext) => void; - /** - * Exit a parse tree produced by the `showPartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowPartitions?: (ctx: ShowPartitionsContext) => void; - - /** - * Enter a parse tree produced by the `showFunctions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowFunctions?: (ctx: ShowFunctionsContext) => void; - /** - * Exit a parse tree produced by the `showFunctions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowFunctions?: (ctx: ShowFunctionsContext) => void; - - /** - * Enter a parse tree produced by the `showCreateTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowCreateTable?: (ctx: ShowCreateTableContext) => void; - /** - * Exit a parse tree produced by the `showCreateTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowCreateTable?: (ctx: ShowCreateTableContext) => void; - - /** - * Enter a parse tree produced by the `showCurrentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterShowCurrentNamespace?: (ctx: ShowCurrentNamespaceContext) => void; - /** - * Exit a parse tree produced by the `showCurrentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitShowCurrentNamespace?: (ctx: ShowCurrentNamespaceContext) => void; - - /** - * Enter a parse tree produced by the `describeFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDescribeFunction?: (ctx: DescribeFunctionContext) => void; - /** - * Exit a parse tree produced by the `describeFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDescribeFunction?: (ctx: DescribeFunctionContext) => void; - - /** - * Enter a parse tree produced by the `describeNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDescribeNamespace?: (ctx: DescribeNamespaceContext) => void; - /** - * Exit a parse tree produced by the `describeNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDescribeNamespace?: (ctx: DescribeNamespaceContext) => void; - - /** - * Enter a parse tree produced by the `describeRelation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDescribeRelation?: (ctx: DescribeRelationContext) => void; - /** - * Exit a parse tree produced by the `describeRelation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDescribeRelation?: (ctx: DescribeRelationContext) => void; - - /** - * Enter a parse tree produced by the `describeQuery` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterDescribeQuery?: (ctx: DescribeQueryContext) => void; - /** - * Exit a parse tree produced by the `describeQuery` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitDescribeQuery?: (ctx: DescribeQueryContext) => void; - - /** - * Enter a parse tree produced by the `commentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCommentNamespace?: (ctx: CommentNamespaceContext) => void; - /** - * Exit a parse tree produced by the `commentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCommentNamespace?: (ctx: CommentNamespaceContext) => void; - - /** - * Enter a parse tree produced by the `commentTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCommentTable?: (ctx: CommentTableContext) => void; - /** - * Exit a parse tree produced by the `commentTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCommentTable?: (ctx: CommentTableContext) => void; - - /** - * Enter a parse tree produced by the `refreshTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterRefreshTable?: (ctx: RefreshTableContext) => void; - /** - * Exit a parse tree produced by the `refreshTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitRefreshTable?: (ctx: RefreshTableContext) => void; - - /** - * Enter a parse tree produced by the `refreshFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterRefreshFunction?: (ctx: RefreshFunctionContext) => void; - /** - * Exit a parse tree produced by the `refreshFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitRefreshFunction?: (ctx: RefreshFunctionContext) => void; - - /** - * Enter a parse tree produced by the `refreshResource` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterRefreshResource?: (ctx: RefreshResourceContext) => void; - /** - * Exit a parse tree produced by the `refreshResource` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitRefreshResource?: (ctx: RefreshResourceContext) => void; - - /** - * Enter a parse tree produced by the `cacheTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterCacheTable?: (ctx: CacheTableContext) => void; - /** - * Exit a parse tree produced by the `cacheTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitCacheTable?: (ctx: CacheTableContext) => void; - - /** - * Enter a parse tree produced by the `uncacheTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterUncacheTable?: (ctx: UncacheTableContext) => void; - /** - * Exit a parse tree produced by the `uncacheTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitUncacheTable?: (ctx: UncacheTableContext) => void; - - /** - * Enter a parse tree produced by the `clearCache` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterClearCache?: (ctx: ClearCacheContext) => void; - /** - * Exit a parse tree produced by the `clearCache` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitClearCache?: (ctx: ClearCacheContext) => void; - - /** - * Enter a parse tree produced by the `loadData` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterLoadData?: (ctx: LoadDataContext) => void; - /** - * Exit a parse tree produced by the `loadData` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitLoadData?: (ctx: LoadDataContext) => void; - - /** - * Enter a parse tree produced by the `truncateTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterTruncateTable?: (ctx: TruncateTableContext) => void; - /** - * Exit a parse tree produced by the `truncateTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitTruncateTable?: (ctx: TruncateTableContext) => void; - - /** - * Enter a parse tree produced by the `repairTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterRepairTable?: (ctx: RepairTableContext) => void; - /** - * Exit a parse tree produced by the `repairTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitRepairTable?: (ctx: RepairTableContext) => void; - - /** - * Enter a parse tree produced by the `manageResource` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterManageResource?: (ctx: ManageResourceContext) => void; - /** - * Exit a parse tree produced by the `manageResource` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitManageResource?: (ctx: ManageResourceContext) => void; - - /** - * Enter a parse tree produced by the `failNativeCommand` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterFailNativeCommand?: (ctx: FailNativeCommandContext) => void; - /** - * Exit a parse tree produced by the `failNativeCommand` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitFailNativeCommand?: (ctx: FailNativeCommandContext) => void; - - /** - * Enter a parse tree produced by the `setTimeZone` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterSetTimeZone?: (ctx: SetTimeZoneContext) => void; - /** - * Exit a parse tree produced by the `setTimeZone` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitSetTimeZone?: (ctx: SetTimeZoneContext) => void; - - /** - * Enter a parse tree produced by the `setQuotedConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterSetQuotedConfiguration?: (ctx: SetQuotedConfigurationContext) => void; - /** - * Exit a parse tree produced by the `setQuotedConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitSetQuotedConfiguration?: (ctx: SetQuotedConfigurationContext) => void; - - /** - * Enter a parse tree produced by the `setConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterSetConfiguration?: (ctx: SetConfigurationContext) => void; - /** - * Exit a parse tree produced by the `setConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitSetConfiguration?: (ctx: SetConfigurationContext) => void; - - /** - * Enter a parse tree produced by the `resetQuotedConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterResetQuotedConfiguration?: (ctx: ResetQuotedConfigurationContext) => void; - /** - * Exit a parse tree produced by the `resetQuotedConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitResetQuotedConfiguration?: (ctx: ResetQuotedConfigurationContext) => void; - - /** - * Enter a parse tree produced by the `resetConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterResetConfiguration?: (ctx: ResetConfigurationContext) => void; - /** - * Exit a parse tree produced by the `resetConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitResetConfiguration?: (ctx: ResetConfigurationContext) => void; - - /** - * Enter a parse tree produced by the `logicalNot` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - enterLogicalNot?: (ctx: LogicalNotContext) => void; - /** - * Exit a parse tree produced by the `logicalNot` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - exitLogicalNot?: (ctx: LogicalNotContext) => void; - - /** - * Enter a parse tree produced by the `exists` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - enterExists?: (ctx: ExistsContext) => void; - /** - * Exit a parse tree produced by the `exists` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - exitExists?: (ctx: ExistsContext) => void; - - /** - * Enter a parse tree produced by the `predicated` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - enterPredicated?: (ctx: PredicatedContext) => void; - /** - * Exit a parse tree produced by the `predicated` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - exitPredicated?: (ctx: PredicatedContext) => void; - - /** - * Enter a parse tree produced by the `logicalBinary` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - enterLogicalBinary?: (ctx: LogicalBinaryContext) => void; - /** - * Exit a parse tree produced by the `logicalBinary` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - exitLogicalBinary?: (ctx: LogicalBinaryContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.program`. - * @param ctx the parse tree - */ - enterProgram?: (ctx: ProgramContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.program`. - * @param ctx the parse tree - */ - exitProgram?: (ctx: ProgramContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.singleStatement`. - * @param ctx the parse tree - */ - enterSingleStatement?: (ctx: SingleStatementContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.singleStatement`. - * @param ctx the parse tree - */ - exitSingleStatement?: (ctx: SingleStatementContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.emptyStatement`. - * @param ctx the parse tree - */ - enterEmptyStatement?: (ctx: EmptyStatementContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.emptyStatement`. - * @param ctx the parse tree - */ - exitEmptyStatement?: (ctx: EmptyStatementContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.singleExpression`. - * @param ctx the parse tree - */ - enterSingleExpression?: (ctx: SingleExpressionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.singleExpression`. - * @param ctx the parse tree - */ - exitSingleExpression?: (ctx: SingleExpressionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.singleTableIdentifier`. - * @param ctx the parse tree - */ - enterSingleTableIdentifier?: (ctx: SingleTableIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.singleTableIdentifier`. - * @param ctx the parse tree - */ - exitSingleTableIdentifier?: (ctx: SingleTableIdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.singleMultipartIdentifier`. - * @param ctx the parse tree - */ - enterSingleMultipartIdentifier?: (ctx: SingleMultipartIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.singleMultipartIdentifier`. - * @param ctx the parse tree - */ - exitSingleMultipartIdentifier?: (ctx: SingleMultipartIdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.singleDataType`. - * @param ctx the parse tree - */ - enterSingleDataType?: (ctx: SingleDataTypeContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.singleDataType`. - * @param ctx the parse tree - */ - exitSingleDataType?: (ctx: SingleDataTypeContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.singleTableSchema`. - * @param ctx the parse tree - */ - enterSingleTableSchema?: (ctx: SingleTableSchemaContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.singleTableSchema`. - * @param ctx the parse tree - */ - exitSingleTableSchema?: (ctx: SingleTableSchemaContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - enterStatement?: (ctx: StatementContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.statement`. - * @param ctx the parse tree - */ - exitStatement?: (ctx: StatementContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.configKey`. - * @param ctx the parse tree - */ - enterConfigKey?: (ctx: ConfigKeyContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.configKey`. - * @param ctx the parse tree - */ - exitConfigKey?: (ctx: ConfigKeyContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.unsupportedHiveNativeCommands`. - * @param ctx the parse tree - */ - enterUnsupportedHiveNativeCommands?: (ctx: UnsupportedHiveNativeCommandsContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.unsupportedHiveNativeCommands`. - * @param ctx the parse tree - */ - exitUnsupportedHiveNativeCommands?: (ctx: UnsupportedHiveNativeCommandsContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.createTableHeader`. - * @param ctx the parse tree - */ - enterCreateTableHeader?: (ctx: CreateTableHeaderContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.createTableHeader`. - * @param ctx the parse tree - */ - exitCreateTableHeader?: (ctx: CreateTableHeaderContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.replaceTableHeader`. - * @param ctx the parse tree - */ - enterReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.replaceTableHeader`. - * @param ctx the parse tree - */ - exitReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.bucketSpec`. - * @param ctx the parse tree - */ - enterBucketSpec?: (ctx: BucketSpecContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.bucketSpec`. - * @param ctx the parse tree - */ - exitBucketSpec?: (ctx: BucketSpecContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.skewSpec`. - * @param ctx the parse tree - */ - enterSkewSpec?: (ctx: SkewSpecContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.skewSpec`. - * @param ctx the parse tree - */ - exitSkewSpec?: (ctx: SkewSpecContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.locationSpec`. - * @param ctx the parse tree - */ - enterLocationSpec?: (ctx: LocationSpecContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.locationSpec`. - * @param ctx the parse tree - */ - exitLocationSpec?: (ctx: LocationSpecContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.commentSpec`. - * @param ctx the parse tree - */ - enterCommentSpec?: (ctx: CommentSpecContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.commentSpec`. - * @param ctx the parse tree - */ - exitCommentSpec?: (ctx: CommentSpecContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.query`. - * @param ctx the parse tree - */ - enterQuery?: (ctx: QueryContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.query`. - * @param ctx the parse tree - */ - exitQuery?: (ctx: QueryContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - enterInsertInto?: (ctx: InsertIntoContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.insertInto`. - * @param ctx the parse tree - */ - exitInsertInto?: (ctx: InsertIntoContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.partitionSpecLocation`. - * @param ctx the parse tree - */ - enterPartitionSpecLocation?: (ctx: PartitionSpecLocationContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.partitionSpecLocation`. - * @param ctx the parse tree - */ - exitPartitionSpecLocation?: (ctx: PartitionSpecLocationContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.partitionSpec`. - * @param ctx the parse tree - */ - enterPartitionSpec?: (ctx: PartitionSpecContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.partitionSpec`. - * @param ctx the parse tree - */ - exitPartitionSpec?: (ctx: PartitionSpecContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.partitionVal`. - * @param ctx the parse tree - */ - enterPartitionVal?: (ctx: PartitionValContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.partitionVal`. - * @param ctx the parse tree - */ - exitPartitionVal?: (ctx: PartitionValContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.namespace`. - * @param ctx the parse tree - */ - enterNamespace?: (ctx: NamespaceContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.namespace`. - * @param ctx the parse tree - */ - exitNamespace?: (ctx: NamespaceContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.describeFuncName`. - * @param ctx the parse tree - */ - enterDescribeFuncName?: (ctx: DescribeFuncNameContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.describeFuncName`. - * @param ctx the parse tree - */ - exitDescribeFuncName?: (ctx: DescribeFuncNameContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.describeColName`. - * @param ctx the parse tree - */ - enterDescribeColName?: (ctx: DescribeColNameContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.describeColName`. - * @param ctx the parse tree - */ - exitDescribeColName?: (ctx: DescribeColNameContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.ctes`. - * @param ctx the parse tree - */ - enterCtes?: (ctx: CtesContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.ctes`. - * @param ctx the parse tree - */ - exitCtes?: (ctx: CtesContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.namedQuery`. - * @param ctx the parse tree - */ - enterNamedQuery?: (ctx: NamedQueryContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.namedQuery`. - * @param ctx the parse tree - */ - exitNamedQuery?: (ctx: NamedQueryContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.tableProvider`. - * @param ctx the parse tree - */ - enterTableProvider?: (ctx: TableProviderContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.tableProvider`. - * @param ctx the parse tree - */ - exitTableProvider?: (ctx: TableProviderContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.createTableClauses`. - * @param ctx the parse tree - */ - enterCreateTableClauses?: (ctx: CreateTableClausesContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.createTableClauses`. - * @param ctx the parse tree - */ - exitCreateTableClauses?: (ctx: CreateTableClausesContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.tablePropertyList`. - * @param ctx the parse tree - */ - enterTablePropertyList?: (ctx: TablePropertyListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.tablePropertyList`. - * @param ctx the parse tree - */ - exitTablePropertyList?: (ctx: TablePropertyListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.tableProperty`. - * @param ctx the parse tree - */ - enterTableProperty?: (ctx: TablePropertyContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.tableProperty`. - * @param ctx the parse tree - */ - exitTableProperty?: (ctx: TablePropertyContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.tablePropertyKey`. - * @param ctx the parse tree - */ - enterTablePropertyKey?: (ctx: TablePropertyKeyContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.tablePropertyKey`. - * @param ctx the parse tree - */ - exitTablePropertyKey?: (ctx: TablePropertyKeyContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.tablePropertyValue`. - * @param ctx the parse tree - */ - enterTablePropertyValue?: (ctx: TablePropertyValueContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.tablePropertyValue`. - * @param ctx the parse tree - */ - exitTablePropertyValue?: (ctx: TablePropertyValueContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.constantList`. - * @param ctx the parse tree - */ - enterConstantList?: (ctx: ConstantListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.constantList`. - * @param ctx the parse tree - */ - exitConstantList?: (ctx: ConstantListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.nestedConstantList`. - * @param ctx the parse tree - */ - enterNestedConstantList?: (ctx: NestedConstantListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.nestedConstantList`. - * @param ctx the parse tree - */ - exitNestedConstantList?: (ctx: NestedConstantListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.createFileFormat`. - * @param ctx the parse tree - */ - enterCreateFileFormat?: (ctx: CreateFileFormatContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.createFileFormat`. - * @param ctx the parse tree - */ - exitCreateFileFormat?: (ctx: CreateFileFormatContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - */ - enterFileFormat?: (ctx: FileFormatContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - */ - exitFileFormat?: (ctx: FileFormatContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.storageHandler`. - * @param ctx the parse tree - */ - enterStorageHandler?: (ctx: StorageHandlerContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.storageHandler`. - * @param ctx the parse tree - */ - exitStorageHandler?: (ctx: StorageHandlerContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.resource`. - * @param ctx the parse tree - */ - enterResource?: (ctx: ResourceContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.resource`. - * @param ctx the parse tree - */ - exitResource?: (ctx: ResourceContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - enterDmlStatementNoWith?: (ctx: DmlStatementNoWithContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - */ - exitDmlStatementNoWith?: (ctx: DmlStatementNoWithContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.queryOrganization`. - * @param ctx the parse tree - */ - enterQueryOrganization?: (ctx: QueryOrganizationContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.queryOrganization`. - * @param ctx the parse tree - */ - exitQueryOrganization?: (ctx: QueryOrganizationContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. - * @param ctx the parse tree - */ - enterMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. - * @param ctx the parse tree - */ - exitMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - */ - enterQueryTerm?: (ctx: QueryTermContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - */ - exitQueryTerm?: (ctx: QueryTermContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - enterQueryPrimary?: (ctx: QueryPrimaryContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - */ - exitQueryPrimary?: (ctx: QueryPrimaryContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.sortItem`. - * @param ctx the parse tree - */ - enterSortItem?: (ctx: SortItemContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.sortItem`. - * @param ctx the parse tree - */ - exitSortItem?: (ctx: SortItemContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.fromStatement`. - * @param ctx the parse tree - */ - enterFromStatement?: (ctx: FromStatementContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.fromStatement`. - * @param ctx the parse tree - */ - exitFromStatement?: (ctx: FromStatementContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.fromStatementBody`. - * @param ctx the parse tree - */ - enterFromStatementBody?: (ctx: FromStatementBodyContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.fromStatementBody`. - * @param ctx the parse tree - */ - exitFromStatementBody?: (ctx: FromStatementBodyContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - */ - enterQuerySpecification?: (ctx: QuerySpecificationContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - */ - exitQuerySpecification?: (ctx: QuerySpecificationContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.transformClause`. - * @param ctx the parse tree - */ - enterTransformClause?: (ctx: TransformClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.transformClause`. - * @param ctx the parse tree - */ - exitTransformClause?: (ctx: TransformClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.selectClause`. - * @param ctx the parse tree - */ - enterSelectClause?: (ctx: SelectClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.selectClause`. - * @param ctx the parse tree - */ - exitSelectClause?: (ctx: SelectClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.setClause`. - * @param ctx the parse tree - */ - enterSetClause?: (ctx: SetClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.setClause`. - * @param ctx the parse tree - */ - exitSetClause?: (ctx: SetClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.matchedClause`. - * @param ctx the parse tree - */ - enterMatchedClause?: (ctx: MatchedClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.matchedClause`. - * @param ctx the parse tree - */ - exitMatchedClause?: (ctx: MatchedClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.notMatchedClause`. - * @param ctx the parse tree - */ - enterNotMatchedClause?: (ctx: NotMatchedClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.notMatchedClause`. - * @param ctx the parse tree - */ - exitNotMatchedClause?: (ctx: NotMatchedClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.matchedAction`. - * @param ctx the parse tree - */ - enterMatchedAction?: (ctx: MatchedActionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.matchedAction`. - * @param ctx the parse tree - */ - exitMatchedAction?: (ctx: MatchedActionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.notMatchedAction`. - * @param ctx the parse tree - */ - enterNotMatchedAction?: (ctx: NotMatchedActionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.notMatchedAction`. - * @param ctx the parse tree - */ - exitNotMatchedAction?: (ctx: NotMatchedActionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.assignmentList`. - * @param ctx the parse tree - */ - enterAssignmentList?: (ctx: AssignmentListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.assignmentList`. - * @param ctx the parse tree - */ - exitAssignmentList?: (ctx: AssignmentListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.assignment`. - * @param ctx the parse tree - */ - enterAssignment?: (ctx: AssignmentContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.assignment`. - * @param ctx the parse tree - */ - exitAssignment?: (ctx: AssignmentContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.whereClause`. - * @param ctx the parse tree - */ - enterWhereClause?: (ctx: WhereClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.whereClause`. - * @param ctx the parse tree - */ - exitWhereClause?: (ctx: WhereClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.havingClause`. - * @param ctx the parse tree - */ - enterHavingClause?: (ctx: HavingClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.havingClause`. - * @param ctx the parse tree - */ - exitHavingClause?: (ctx: HavingClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.hint`. - * @param ctx the parse tree - */ - enterHint?: (ctx: HintContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.hint`. - * @param ctx the parse tree - */ - exitHint?: (ctx: HintContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.hintStatement`. - * @param ctx the parse tree - */ - enterHintStatement?: (ctx: HintStatementContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.hintStatement`. - * @param ctx the parse tree - */ - exitHintStatement?: (ctx: HintStatementContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.fromClause`. - * @param ctx the parse tree - */ - enterFromClause?: (ctx: FromClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.fromClause`. - * @param ctx the parse tree - */ - exitFromClause?: (ctx: FromClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.aggregationClause`. - * @param ctx the parse tree - */ - enterAggregationClause?: (ctx: AggregationClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.aggregationClause`. - * @param ctx the parse tree - */ - exitAggregationClause?: (ctx: AggregationClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.groupingSet`. - * @param ctx the parse tree - */ - enterGroupingSet?: (ctx: GroupingSetContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.groupingSet`. - * @param ctx the parse tree - */ - exitGroupingSet?: (ctx: GroupingSetContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.pivotClause`. - * @param ctx the parse tree - */ - enterPivotClause?: (ctx: PivotClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.pivotClause`. - * @param ctx the parse tree - */ - exitPivotClause?: (ctx: PivotClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.pivotColumn`. - * @param ctx the parse tree - */ - enterPivotColumn?: (ctx: PivotColumnContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.pivotColumn`. - * @param ctx the parse tree - */ - exitPivotColumn?: (ctx: PivotColumnContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.pivotValue`. - * @param ctx the parse tree - */ - enterPivotValue?: (ctx: PivotValueContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.pivotValue`. - * @param ctx the parse tree - */ - exitPivotValue?: (ctx: PivotValueContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.lateralView`. - * @param ctx the parse tree - */ - enterLateralView?: (ctx: LateralViewContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.lateralView`. - * @param ctx the parse tree - */ - exitLateralView?: (ctx: LateralViewContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.setQuantifier`. - * @param ctx the parse tree - */ - enterSetQuantifier?: (ctx: SetQuantifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.setQuantifier`. - * @param ctx the parse tree - */ - exitSetQuantifier?: (ctx: SetQuantifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.relation`. - * @param ctx the parse tree - */ - enterRelation?: (ctx: RelationContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.relation`. - * @param ctx the parse tree - */ - exitRelation?: (ctx: RelationContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.joinRelation`. - * @param ctx the parse tree - */ - enterJoinRelation?: (ctx: JoinRelationContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.joinRelation`. - * @param ctx the parse tree - */ - exitJoinRelation?: (ctx: JoinRelationContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.joinType`. - * @param ctx the parse tree - */ - enterJoinType?: (ctx: JoinTypeContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.joinType`. - * @param ctx the parse tree - */ - exitJoinType?: (ctx: JoinTypeContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.joinCriteria`. - * @param ctx the parse tree - */ - enterJoinCriteria?: (ctx: JoinCriteriaContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.joinCriteria`. - * @param ctx the parse tree - */ - exitJoinCriteria?: (ctx: JoinCriteriaContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.sample`. - * @param ctx the parse tree - */ - enterSample?: (ctx: SampleContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.sample`. - * @param ctx the parse tree - */ - exitSample?: (ctx: SampleContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - enterSampleMethod?: (ctx: SampleMethodContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - */ - exitSampleMethod?: (ctx: SampleMethodContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.identifierList`. - * @param ctx the parse tree - */ - enterIdentifierList?: (ctx: IdentifierListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.identifierList`. - * @param ctx the parse tree - */ - exitIdentifierList?: (ctx: IdentifierListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.identifierSeq`. - * @param ctx the parse tree - */ - enterIdentifierSeq?: (ctx: IdentifierSeqContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.identifierSeq`. - * @param ctx the parse tree - */ - exitIdentifierSeq?: (ctx: IdentifierSeqContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.orderedIdentifierList`. - * @param ctx the parse tree - */ - enterOrderedIdentifierList?: (ctx: OrderedIdentifierListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.orderedIdentifierList`. - * @param ctx the parse tree - */ - exitOrderedIdentifierList?: (ctx: OrderedIdentifierListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.orderedIdentifier`. - * @param ctx the parse tree - */ - enterOrderedIdentifier?: (ctx: OrderedIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.orderedIdentifier`. - * @param ctx the parse tree - */ - exitOrderedIdentifier?: (ctx: OrderedIdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.identifierCommentList`. - * @param ctx the parse tree - */ - enterIdentifierCommentList?: (ctx: IdentifierCommentListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.identifierCommentList`. - * @param ctx the parse tree - */ - exitIdentifierCommentList?: (ctx: IdentifierCommentListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.identifierComment`. - * @param ctx the parse tree - */ - enterIdentifierComment?: (ctx: IdentifierCommentContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.identifierComment`. - * @param ctx the parse tree - */ - exitIdentifierComment?: (ctx: IdentifierCommentContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - enterRelationPrimary?: (ctx: RelationPrimaryContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - */ - exitRelationPrimary?: (ctx: RelationPrimaryContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.inlineTable`. - * @param ctx the parse tree - */ - enterInlineTable?: (ctx: InlineTableContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.inlineTable`. - * @param ctx the parse tree - */ - exitInlineTable?: (ctx: InlineTableContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.functionTable`. - * @param ctx the parse tree - */ - enterFunctionTable?: (ctx: FunctionTableContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.functionTable`. - * @param ctx the parse tree - */ - exitFunctionTable?: (ctx: FunctionTableContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.tableAlias`. - * @param ctx the parse tree - */ - enterTableAlias?: (ctx: TableAliasContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.tableAlias`. - * @param ctx the parse tree - */ - exitTableAlias?: (ctx: TableAliasContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - */ - enterRowFormat?: (ctx: RowFormatContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - */ - exitRowFormat?: (ctx: RowFormatContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.multipartIdentifierList`. - * @param ctx the parse tree - */ - enterMultipartIdentifierList?: (ctx: MultipartIdentifierListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.multipartIdentifierList`. - * @param ctx the parse tree - */ - exitMultipartIdentifierList?: (ctx: MultipartIdentifierListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.multipartIdentifier`. - * @param ctx the parse tree - */ - enterMultipartIdentifier?: (ctx: MultipartIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.multipartIdentifier`. - * @param ctx the parse tree - */ - exitMultipartIdentifier?: (ctx: MultipartIdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.tableIdentifier`. - * @param ctx the parse tree - */ - enterTableIdentifier?: (ctx: TableIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.tableIdentifier`. - * @param ctx the parse tree - */ - exitTableIdentifier?: (ctx: TableIdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.namedExpression`. - * @param ctx the parse tree - */ - enterNamedExpression?: (ctx: NamedExpressionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.namedExpression`. - * @param ctx the parse tree - */ - exitNamedExpression?: (ctx: NamedExpressionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.namedExpressionSeq`. - * @param ctx the parse tree - */ - enterNamedExpressionSeq?: (ctx: NamedExpressionSeqContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.namedExpressionSeq`. - * @param ctx the parse tree - */ - exitNamedExpressionSeq?: (ctx: NamedExpressionSeqContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.transformList`. - * @param ctx the parse tree - */ - enterTransformList?: (ctx: TransformListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.transformList`. - * @param ctx the parse tree - */ - exitTransformList?: (ctx: TransformListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.transform`. - * @param ctx the parse tree - */ - enterTransform?: (ctx: TransformContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.transform`. - * @param ctx the parse tree - */ - exitTransform?: (ctx: TransformContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.transformArgument`. - * @param ctx the parse tree - */ - enterTransformArgument?: (ctx: TransformArgumentContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.transformArgument`. - * @param ctx the parse tree - */ - exitTransformArgument?: (ctx: TransformArgumentContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.expression`. - * @param ctx the parse tree - */ - enterExpression?: (ctx: ExpressionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.expression`. - * @param ctx the parse tree - */ - exitExpression?: (ctx: ExpressionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - enterBooleanExpression?: (ctx: BooleanExpressionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - */ - exitBooleanExpression?: (ctx: BooleanExpressionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.predicate`. - * @param ctx the parse tree - */ - enterPredicate?: (ctx: PredicateContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.predicate`. - * @param ctx the parse tree - */ - exitPredicate?: (ctx: PredicateContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - enterValueExpression?: (ctx: ValueExpressionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - */ - exitValueExpression?: (ctx: ValueExpressionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - enterPrimaryExpression?: (ctx: PrimaryExpressionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - */ - exitPrimaryExpression?: (ctx: PrimaryExpressionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - enterConstant?: (ctx: ConstantContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.constant`. - * @param ctx the parse tree - */ - exitConstant?: (ctx: ConstantContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.comparisonOperator`. - * @param ctx the parse tree - */ - enterComparisonOperator?: (ctx: ComparisonOperatorContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.comparisonOperator`. - * @param ctx the parse tree - */ - exitComparisonOperator?: (ctx: ComparisonOperatorContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.arithmeticOperator`. - * @param ctx the parse tree - */ - enterArithmeticOperator?: (ctx: ArithmeticOperatorContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.arithmeticOperator`. - * @param ctx the parse tree - */ - exitArithmeticOperator?: (ctx: ArithmeticOperatorContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.predicateOperator`. - * @param ctx the parse tree - */ - enterPredicateOperator?: (ctx: PredicateOperatorContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.predicateOperator`. - * @param ctx the parse tree - */ - exitPredicateOperator?: (ctx: PredicateOperatorContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.booleanValue`. - * @param ctx the parse tree - */ - enterBooleanValue?: (ctx: BooleanValueContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.booleanValue`. - * @param ctx the parse tree - */ - exitBooleanValue?: (ctx: BooleanValueContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.interval`. - * @param ctx the parse tree - */ - enterInterval?: (ctx: IntervalContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.interval`. - * @param ctx the parse tree - */ - exitInterval?: (ctx: IntervalContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.errorCapturingMultiUnitsInterval`. - * @param ctx the parse tree - */ - enterErrorCapturingMultiUnitsInterval?: (ctx: ErrorCapturingMultiUnitsIntervalContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.errorCapturingMultiUnitsInterval`. - * @param ctx the parse tree - */ - exitErrorCapturingMultiUnitsInterval?: (ctx: ErrorCapturingMultiUnitsIntervalContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.multiUnitsInterval`. - * @param ctx the parse tree - */ - enterMultiUnitsInterval?: (ctx: MultiUnitsIntervalContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.multiUnitsInterval`. - * @param ctx the parse tree - */ - exitMultiUnitsInterval?: (ctx: MultiUnitsIntervalContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.errorCapturingUnitToUnitInterval`. - * @param ctx the parse tree - */ - enterErrorCapturingUnitToUnitInterval?: (ctx: ErrorCapturingUnitToUnitIntervalContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.errorCapturingUnitToUnitInterval`. - * @param ctx the parse tree - */ - exitErrorCapturingUnitToUnitInterval?: (ctx: ErrorCapturingUnitToUnitIntervalContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.unitToUnitInterval`. - * @param ctx the parse tree - */ - enterUnitToUnitInterval?: (ctx: UnitToUnitIntervalContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.unitToUnitInterval`. - * @param ctx the parse tree - */ - exitUnitToUnitInterval?: (ctx: UnitToUnitIntervalContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.intervalValue`. - * @param ctx the parse tree - */ - enterIntervalValue?: (ctx: IntervalValueContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.intervalValue`. - * @param ctx the parse tree - */ - exitIntervalValue?: (ctx: IntervalValueContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.colPosition`. - * @param ctx the parse tree - */ - enterColPosition?: (ctx: ColPositionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.colPosition`. - * @param ctx the parse tree - */ - exitColPosition?: (ctx: ColPositionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.dataType`. - * @param ctx the parse tree - */ - enterDataType?: (ctx: DataTypeContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.dataType`. - * @param ctx the parse tree - */ - exitDataType?: (ctx: DataTypeContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPositionList`. - * @param ctx the parse tree - */ - enterQualifiedColTypeWithPositionList?: (ctx: QualifiedColTypeWithPositionListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPositionList`. - * @param ctx the parse tree - */ - exitQualifiedColTypeWithPositionList?: (ctx: QualifiedColTypeWithPositionListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPosition`. - * @param ctx the parse tree - */ - enterQualifiedColTypeWithPosition?: (ctx: QualifiedColTypeWithPositionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPosition`. - * @param ctx the parse tree - */ - exitQualifiedColTypeWithPosition?: (ctx: QualifiedColTypeWithPositionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.colTypeList`. - * @param ctx the parse tree - */ - enterColTypeList?: (ctx: ColTypeListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.colTypeList`. - * @param ctx the parse tree - */ - exitColTypeList?: (ctx: ColTypeListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.colType`. - * @param ctx the parse tree - */ - enterColType?: (ctx: ColTypeContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.colType`. - * @param ctx the parse tree - */ - exitColType?: (ctx: ColTypeContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.complexColTypeList`. - * @param ctx the parse tree - */ - enterComplexColTypeList?: (ctx: ComplexColTypeListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.complexColTypeList`. - * @param ctx the parse tree - */ - exitComplexColTypeList?: (ctx: ComplexColTypeListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.complexColType`. - * @param ctx the parse tree - */ - enterComplexColType?: (ctx: ComplexColTypeContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.complexColType`. - * @param ctx the parse tree - */ - exitComplexColType?: (ctx: ComplexColTypeContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.whenClause`. - * @param ctx the parse tree - */ - enterWhenClause?: (ctx: WhenClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.whenClause`. - * @param ctx the parse tree - */ - exitWhenClause?: (ctx: WhenClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.windowClause`. - * @param ctx the parse tree - */ - enterWindowClause?: (ctx: WindowClauseContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.windowClause`. - * @param ctx the parse tree - */ - exitWindowClause?: (ctx: WindowClauseContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.namedWindow`. - * @param ctx the parse tree - */ - enterNamedWindow?: (ctx: NamedWindowContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.namedWindow`. - * @param ctx the parse tree - */ - exitNamedWindow?: (ctx: NamedWindowContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - */ - enterWindowSpec?: (ctx: WindowSpecContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - */ - exitWindowSpec?: (ctx: WindowSpecContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.windowFrame`. - * @param ctx the parse tree - */ - enterWindowFrame?: (ctx: WindowFrameContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.windowFrame`. - * @param ctx the parse tree - */ - exitWindowFrame?: (ctx: WindowFrameContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.frameBound`. - * @param ctx the parse tree - */ - enterFrameBound?: (ctx: FrameBoundContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.frameBound`. - * @param ctx the parse tree - */ - exitFrameBound?: (ctx: FrameBoundContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.qualifiedNameList`. - * @param ctx the parse tree - */ - enterQualifiedNameList?: (ctx: QualifiedNameListContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.qualifiedNameList`. - * @param ctx the parse tree - */ - exitQualifiedNameList?: (ctx: QualifiedNameListContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.functionName`. - * @param ctx the parse tree - */ - enterFunctionName?: (ctx: FunctionNameContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.functionName`. - * @param ctx the parse tree - */ - exitFunctionName?: (ctx: FunctionNameContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.qualifiedName`. - * @param ctx the parse tree - */ - enterQualifiedName?: (ctx: QualifiedNameContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.qualifiedName`. - * @param ctx the parse tree - */ - exitQualifiedName?: (ctx: QualifiedNameContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.errorCapturingIdentifier`. - * @param ctx the parse tree - */ - enterErrorCapturingIdentifier?: (ctx: ErrorCapturingIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.errorCapturingIdentifier`. - * @param ctx the parse tree - */ - exitErrorCapturingIdentifier?: (ctx: ErrorCapturingIdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - */ - enterErrorCapturingIdentifierExtra?: (ctx: ErrorCapturingIdentifierExtraContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - */ - exitErrorCapturingIdentifierExtra?: (ctx: ErrorCapturingIdentifierExtraContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.identifier`. - * @param ctx the parse tree - */ - enterIdentifier?: (ctx: IdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.identifier`. - * @param ctx the parse tree - */ - exitIdentifier?: (ctx: IdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - */ - enterStrictIdentifier?: (ctx: StrictIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - */ - exitStrictIdentifier?: (ctx: StrictIdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.quotedIdentifier`. - * @param ctx the parse tree - */ - enterQuotedIdentifier?: (ctx: QuotedIdentifierContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.quotedIdentifier`. - * @param ctx the parse tree - */ - exitQuotedIdentifier?: (ctx: QuotedIdentifierContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.number`. - * @param ctx the parse tree - */ - enterNumber?: (ctx: NumberContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.number`. - * @param ctx the parse tree - */ - exitNumber?: (ctx: NumberContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.alterColumnAction`. - * @param ctx the parse tree - */ - enterAlterColumnAction?: (ctx: AlterColumnActionContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.alterColumnAction`. - * @param ctx the parse tree - */ - exitAlterColumnAction?: (ctx: AlterColumnActionContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.ansiNonReserved`. - * @param ctx the parse tree - */ - enterAnsiNonReserved?: (ctx: AnsiNonReservedContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.ansiNonReserved`. - * @param ctx the parse tree - */ - exitAnsiNonReserved?: (ctx: AnsiNonReservedContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.strictNonReserved`. - * @param ctx the parse tree - */ - enterStrictNonReserved?: (ctx: StrictNonReservedContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.strictNonReserved`. - * @param ctx the parse tree - */ - exitStrictNonReserved?: (ctx: StrictNonReservedContext) => void; - - /** - * Enter a parse tree produced by `SparkSqlParser.nonReserved`. - * @param ctx the parse tree - */ - enterNonReserved?: (ctx: NonReservedContext) => void; - /** - * Exit a parse tree produced by `SparkSqlParser.nonReserved`. - * @param ctx the parse tree - */ - exitNonReserved?: (ctx: NonReservedContext) => void; -} - diff --git a/src/lib/spark/SparkSqlParser.interp b/src/lib/spark/SparkSqlParser.interp new file mode 100644 index 00000000..c5d63c57 --- /dev/null +++ b/src/lib/spark/SparkSqlParser.interp @@ -0,0 +1,962 @@ +token literal names: +null +';' +'(' +')' +',' +'.' +'[' +']' +'ADD' +'AFTER' +'ALL' +'ALTER' +'ALWAYS' +'ANALYZE' +'AND' +'ANTI' +'ANY' +'ANY_VALUE' +'ARCHIVE' +'ARRAY' +'AS' +'ASC' +'AT' +'AUTHORIZATION' +'BETWEEN' +'BIGINT' +'BINARY' +'BOOLEAN' +'BOTH' +'BUCKET' +'BUCKETS' +'BY' +'BYTE' +'CACHE' +'CASCADE' +'CASE' +'CAST' +'CATALOG' +'CATALOGS' +'CHANGE' +'CHAR' +'CHARACTER' +'CHECK' +'CLEAR' +'CLUSTER' +'CLUSTERED' +'CODEGEN' +'COLLATE' +'COLLECTION' +'COLUMN' +'COLUMNS' +'COMMENT' +'COMMIT' +'COMPACT' +'COMPACTIONS' +'COMPUTE' +'CONCATENATE' +'CONSTRAINT' +'COST' +'CREATE' +'CROSS' +'CUBE' +'CURRENT' +'CURRENT_DATE' +'CURRENT_TIME' +'CURRENT_TIMESTAMP' +'CURRENT_USER' +'DAY' +'DAYS' +'DAYOFYEAR' +'DATA' +'DATE' +'DATABASE' +'DATABASES' +'DATEADD' +'DATE_ADD' +'DATEDIFF' +'DATE_DIFF' +'DBPROPERTIES' +'DEC' +'DECIMAL' +'DECLARE' +'DEFAULT' +'DEFINED' +'DELETE' +'DELIMITED' +'DESC' +'DESCRIBE' +'DFS' +'DIRECTORIES' +'DIRECTORY' +'DISTINCT' +'DISTRIBUTE' +'DIV' +'DOUBLE' +'DROP' +'ELSE' +'END' +'ESCAPE' +'ESCAPED' +'EXCEPT' +'EXCHANGE' +'EXCLUDE' +'EXISTS' +'EXPLAIN' +'EXPORT' +'EXTENDED' +'EXTERNAL' +'EXTRACT' +'FALSE' +'FETCH' +'FIELDS' +'FILTER' +'FILEFORMAT' +'FIRST' +'FLOAT' +'FOLLOWING' +'FOR' +'FOREIGN' +'FORMAT' +'FORMATTED' +'FROM' +'FULL' +'FUNCTION' +'FUNCTIONS' +'GENERATED' +'GLOBAL' +'GRANT' +'GROUP' +'GROUPING' +'HAVING' +'X' +'HOUR' +'HOURS' +'IDENTIFIER' +'IF' +'IGNORE' +'IMPORT' +'IN' +'INCLUDE' +'INDEX' +'INDEXES' +'INNER' +'INPATH' +'INPUTFORMAT' +'INSERT' +'INTERSECT' +'INTERVAL' +'INT' +'INTEGER' +'INTO' +'IS' +'ITEMS' +'JOIN' +'KEYS' +'LAST' +'LATERAL' +'LAZY' +'LEADING' +'LEFT' +'LIKE' +'ILIKE' +'LIMIT' +'LINES' +'LIST' +'LOAD' +'LOCAL' +'LOCATION' +'LOCK' +'LOCKS' +'LOGICAL' +'LONG' +'MACRO' +'MAP' +'MATCHED' +'MERGE' +'MICROSECOND' +'MICROSECONDS' +'MILLISECOND' +'MILLISECONDS' +'MINUTE' +'MINUTES' +'MONTH' +'MONTHS' +'MSCK' +'NAME' +'NAMESPACE' +'NAMESPACES' +'NANOSECOND' +'NANOSECONDS' +'NATURAL' +'NO' +null +'NULL' +'NULLS' +'NUMERIC' +'OF' +'OFFSET' +'ON' +'ONLY' +'OPTION' +'OPTIONS' +'OR' +'ORDER' +'OUT' +'OUTER' +'OUTPUTFORMAT' +'OVER' +'OVERLAPS' +'OVERLAY' +'OVERWRITE' +'PARTITION' +'PARTITIONED' +'PARTITIONS' +'PERCENTILE_CONT' +'PERCENTILE_DISC' +'PERCENT' +'PIVOT' +'PLACING' +'POSITION' +'PRECEDING' +'PRIMARY' +'PRINCIPALS' +'PROPERTIES' +'PURGE' +'QUARTER' +'QUERY' +'RANGE' +'REAL' +'RECORDREADER' +'RECORDWRITER' +'RECOVER' +'REDUCE' +'REFERENCES' +'REFRESH' +'RENAME' +'REPAIR' +'REPEATABLE' +'REPLACE' +'RESET' +'RESPECT' +'RESTRICT' +'REVOKE' +'RIGHT' +null +'ROLE' +'ROLES' +'ROLLBACK' +'ROLLUP' +'ROW' +'ROWS' +'SECOND' +'SECONDS' +'SCHEMA' +'SCHEMAS' +'SELECT' +'SEMI' +'SEPARATED' +'SERDE' +'SERDEPROPERTIES' +'SESSION_USER' +'SET' +'MINUS' +'SETS' +'SHORT' +'SHOW' +'SINGLE' +'SKEWED' +'SMALLINT' +'SOME' +'SORT' +'SORTED' +'SOURCE' +'START' +'STATISTICS' +'STORED' +'STRATIFY' +'STRING' +'STRUCT' +'SUBSTR' +'SUBSTRING' +'SYNC' +'SYSTEM_TIME' +'SYSTEM_VERSION' +'TABLE' +'TABLES' +'TABLESAMPLE' +'TARGET' +'TBLPROPERTIES' +null +'TERMINATED' +'THEN' +'TIME' +'TIMEDIFF' +'TIMESTAMP' +'TIMESTAMP_LTZ' +'TIMESTAMP_NTZ' +'TIMESTAMPADD' +'TIMESTAMPDIFF' +'TINYINT' +'TO' +'TOUCH' +'TRAILING' +'TRANSACTION' +'TRANSACTIONS' +'TRANSFORM' +'TRIM' +'TRUE' +'TRUNCATE' +'TRY_CAST' +'TYPE' +'UNARCHIVE' +'UNBOUNDED' +'UNCACHE' +'UNION' +'UNIQUE' +'UNKNOWN' +'UNLOCK' +'UNPIVOT' +'UNSET' +'UPDATE' +'USE' +'USER' +'USING' +'VALUES' +'VARCHAR' +'VAR' +'VARIABLE' +'VERSION' +'VIEW' +'VIEWS' +'VOID' +'WEEK' +'WEEKS' +'WHEN' +'WHERE' +'WINDOW' +'WITH' +'WITHIN' +'YEAR' +'YEARS' +'ZONE' +null +'<=>' +'<>' +'!=' +'<' +null +'>' +null +'+' +'-' +'*' +'/' +'%' +'~' +'&' +'|' +'||' +'^' +':' +'->' +'=>' +'/*+' +'*/' +'?' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +SEMICOLON +LEFT_PAREN +RIGHT_PAREN +COMMA +DOT +LEFT_BRACKET +RIGHT_BRACKET +KW_ADD +KW_AFTER +KW_ALL +KW_ALTER +KW_ALWAYS +KW_ANALYZE +KW_AND +KW_ANTI +KW_ANY +KW_ANY_VALUE +KW_ARCHIVE +KW_ARRAY +KW_AS +KW_ASC +KW_AT +KW_AUTHORIZATION +KW_BETWEEN +KW_BIGINT +KW_BINARY +KW_BOOLEAN +KW_BOTH +KW_BUCKET +KW_BUCKETS +KW_BY +KW_BYTE +KW_CACHE +KW_CASCADE +KW_CASE +KW_CAST +KW_CATALOG +KW_CATALOGS +KW_CHANGE +KW_CHAR +KW_CHARACTER +KW_CHECK +KW_CLEAR +KW_CLUSTER +KW_CLUSTERED +KW_CODEGEN +KW_COLLATE +KW_COLLECTION +KW_COLUMN +KW_COLUMNS +KW_COMMENT +KW_COMMIT +KW_COMPACT +KW_COMPACTIONS +KW_COMPUTE +KW_CONCATENATE +KW_CONSTRAINT +KW_COST +KW_CREATE +KW_CROSS +KW_CUBE +KW_CURRENT +KW_CURRENT_DATE +KW_CURRENT_TIME +KW_CURRENT_TIMESTAMP +KW_CURRENT_USER +KW_DAY +KW_DAYS +KW_DAYOFYEAR +KW_DATA +KW_DATE +KW_DATABASE +KW_DATABASES +KW_DATEADD +KW_DATE_ADD +KW_DATEDIFF +KW_DATE_DIFF +KW_DBPROPERTIES +KW_DEC +KW_DECIMAL +KW_DECLARE +KW_DEFAULT +KW_DEFINED +KW_DELETE +KW_DELIMITED +KW_DESC +KW_DESCRIBE +KW_DFS +KW_DIRECTORIES +KW_DIRECTORY +KW_DISTINCT +KW_DISTRIBUTE +KW_DIV +KW_DOUBLE +KW_DROP +KW_ELSE +KW_END +KW_ESCAPE +KW_ESCAPED +KW_EXCEPT +KW_EXCHANGE +KW_EXCLUDE +KW_EXISTS +KW_EXPLAIN +KW_EXPORT +KW_EXTENDED +KW_EXTERNAL +KW_EXTRACT +KW_FALSE +KW_FETCH +KW_FIELDS +KW_FILTER +KW_FILEFORMAT +KW_FIRST +KW_FLOAT +KW_FOLLOWING +KW_FOR +KW_FOREIGN +KW_FORMAT +KW_FORMATTED +KW_FROM +KW_FULL +KW_FUNCTION +KW_FUNCTIONS +KW_GENERATED +KW_GLOBAL +KW_GRANT +KW_GROUP +KW_GROUPING +KW_HAVING +KW_BINARY_HEX +KW_HOUR +KW_HOURS +KW_IDENTIFIER_KW +KW_IF +KW_IGNORE +KW_IMPORT +KW_IN +KW_INCLUDE +KW_INDEX +KW_INDEXES +KW_INNER +KW_INPATH +KW_INPUTFORMAT +KW_INSERT +KW_INTERSECT +KW_INTERVAL +KW_INT +KW_INTEGER +KW_INTO +KW_IS +KW_ITEMS +KW_JOIN +KW_KEYS +KW_LAST +KW_LATERAL +KW_LAZY +KW_LEADING +KW_LEFT +KW_LIKE +KW_ILIKE +KW_LIMIT +KW_LINES +KW_LIST +KW_LOAD +KW_LOCAL +KW_LOCATION +KW_LOCK +KW_LOCKS +KW_LOGICAL +KW_LONG +KW_MACRO +KW_MAP +KW_MATCHED +KW_MERGE +KW_MICROSECOND +KW_MICROSECONDS +KW_MILLISECOND +KW_MILLISECONDS +KW_MINUTE +KW_MINUTES +KW_MONTH +KW_MONTHS +KW_MSCK +KW_NAME +KW_NAMESPACE +KW_NAMESPACES +KW_NANOSECOND +KW_NANOSECONDS +KW_NATURAL +KW_NO +KW_NOT +KW_NULL +KW_NULLS +KW_NUMERIC +KW_OF +KW_OFFSET +KW_ON +KW_ONLY +KW_OPTION +KW_OPTIONS +KW_OR +KW_ORDER +KW_OUT +KW_OUTER +KW_OUTPUTFORMAT +KW_OVER +KW_OVERLAPS +KW_OVERLAY +KW_OVERWRITE +KW_PARTITION +KW_PARTITIONED +KW_PARTITIONS +KW_PERCENTILE_CONT +KW_PERCENTILE_DISC +KW_PERCENTLIT +KW_PIVOT +KW_PLACING +KW_POSITION +KW_PRECEDING +KW_PRIMARY +KW_PRINCIPALS +KW_PROPERTIES +KW_PURGE +KW_QUARTER +KW_QUERY +KW_RANGE +KW_REAL +KW_RECORDREADER +KW_RECORDWRITER +KW_RECOVER +KW_REDUCE +KW_REFERENCES +KW_REFRESH +KW_RENAME +KW_REPAIR +KW_REPEATABLE +KW_REPLACE +KW_RESET +KW_RESPECT +KW_RESTRICT +KW_REVOKE +KW_RIGHT +KW_RLIKE +KW_ROLE +KW_ROLES +KW_ROLLBACK +KW_ROLLUP +KW_ROW +KW_ROWS +KW_SECOND +KW_SECONDS +KW_SCHEMA +KW_SCHEMAS +KW_SELECT +KW_SEMI +KW_SEPARATED +KW_SERDE +KW_SERDEPROPERTIES +KW_SESSION_USER +KW_SET +KW_SETMINUS +KW_SETS +KW_SHORT +KW_SHOW +KW_SINGLE +KW_SKEWED +KW_SMALLINT +KW_SOME +KW_SORT +KW_SORTED +KW_SOURCE +KW_START +KW_STATISTICS +KW_STORED +KW_STRATIFY +KW_STRING +KW_STRUCT +KW_SUBSTR +KW_SUBSTRING +KW_SYNC +KW_SYSTEM_TIME +KW_SYSTEM_VERSION +KW_TABLE +KW_TABLES +KW_TABLESAMPLE +KW_TARGET +KW_TBLPROPERTIES +KW_TEMPORARY +KW_TERMINATED +KW_THEN +KW_TIME +KW_TIMEDIFF +KW_TIMESTAMP +KW_TIMESTAMP_LTZ +KW_TIMESTAMP_NTZ +KW_TIMESTAMPADD +KW_TIMESTAMPDIFF +KW_TINYINT +KW_TO +KW_TOUCH +KW_TRAILING +KW_TRANSACTION +KW_TRANSACTIONS +KW_TRANSFORM +KW_TRIM +KW_TRUE +KW_TRUNCATE +KW_TRY_CAST +KW_TYPE +KW_UNARCHIVE +KW_UNBOUNDED +KW_UNCACHE +KW_UNION +KW_UNIQUE +KW_UNKNOWN +KW_UNLOCK +KW_UNPIVOT +KW_UNSET +KW_UPDATE +KW_USE +KW_USER +KW_USING +KW_VALUES +KW_VARCHAR +KW_VAR +KW_VARIABLE +KW_VERSION +KW_VIEW +KW_VIEWS +KW_VOID +KW_WEEK +KW_WEEKS +KW_WHEN +KW_WHERE +KW_WINDOW +KW_WITH +KW_WITHIN +KW_YEAR +KW_YEARS +KW_ZONE +EQ +NSEQ +NEQ +NEQJ +LT +LTE +GT +GTE +PLUS +MINUS +ASTERISK +SLASH +PERCENT +TILDE +AMPERSAND +PIPE +CONCAT_PIPE +HAT +COLON +ARROW +FAT_ARROW +HENT_START +HENT_END +QUESTION +STRING_LITERAL +DOUBLEQUOTED_STRING +BIGINT_LITERAL +SMALLINT_LITERAL +TINYINT_LITERAL +INTEGER_VALUE +EXPONENT_VALUE +DECIMAL_VALUE +FLOAT_LITERAL +DOUBLE_LITERAL +BIGDECIMAL_LITERAL +IDENTIFIER +BACKQUOTED_IDENTIFIER +SIMPLE_COMMENT +BRACKETED_COMMENT +WS +UNRECOGNIZED + +rule names: +program +singleStatement +tableIdentifierReference +viewIdentifierReference +functionIdentifierReference +namespaceIdentifierReference +statement +timezone +configKey +configValue +unsupportedHiveNativeCommands +createTableHeader +replaceTableHeader +bucketSpec +skewSpec +locationSpec +commentSpec +query +insertInto +partitionSpecLocation +partitionSpec +partitionVal +namespace +namespaces +describeFuncName +describeColName +ctes +namedQuery +tableProvider +createTableClauses +propertyList +property +propertyKey +propertyValue +expressionPropertyList +expressionProperty +constantList +nestedConstantList +createFileFormat +fileFormat +storageHandler +resource +dmlStatementNoWith +identifierReference +queryOrganization +multiInsertQueryBody +queryTerm +queryPrimary +sortItem +fromStatement +fromStatementBody +querySpecification +transformClause +selectClause +setClause +matchedClause +notMatchedClause +notMatchedBySourceClause +matchedAction +notMatchedAction +notMatchedBySourceAction +assignmentList +assignment +whereClause +havingClause +hint +hintStatement +fromClause +temporalClause +aggregationClause +groupByClause +groupingAnalytics +groupingElement +groupingSet +pivotClause +pivotColumn +pivotValue +unpivotClause +unpivotNullClause +unpivotOperator +unpivotSingleValueColumnClause +unpivotMultiValueColumnClause +unpivotColumnSet +unpivotValueColumn +unpivotNameColumn +unpivotColumnAndAlias +unpivotColumn +unpivotAlias +lateralView +setQuantifier +relation +relationExtension +joinRelation +joinType +joinCriteria +sample +sampleMethod +identifierList +identifierSeq +orderedIdentifierList +orderedIdentifier +identifierCommentList +identifierComment +relationPrimary +inlineTable +functionTableSubqueryArgument +tableArgumentPartitioning +functionTableNamedArgumentExpression +functionTableReferenceArgument +functionTableArgument +functionTable +tableAlias +rowFormat +multipartIdentifierList +multipartIdentifier +multipartIdentifierPropertyList +multipartIdentifierProperty +tableIdentifier +functionIdentifier +namedExpression +namedExpressionSeq +partitionFieldList +partitionField +transform +transformArgument +expression +namedArgumentExpression +functionArgument +expressionSeq +booleanExpression +predicate +valueExpression +datetimeUnit +primaryExpression +literalType +constant +comparisonOperator +arithmeticOperator +predicateOperator +booleanValue +interval +errorCapturingMultiUnitsInterval +multiUnitsInterval +errorCapturingUnitToUnitInterval +unitToUnitInterval +intervalValue +unitInMultiUnits +unitInUnitToUnit +colPosition +type +dataType +qualifiedColTypeWithPositionList +qualifiedColTypeWithPosition +colDefinitionDescriptorWithPosition +defaultExpression +variableDefaultExpression +colTypeList +colType +createOrReplaceTableColTypeList +createOrReplaceTableColType +colDefinitionOption +generationExpression +complexColTypeList +complexColType +whenClause +windowClause +namedWindow +windowSpec +windowFrame +frameBound +qualifiedNameList +functionName +qualifiedName +errorCapturingIdentifier +errorCapturingIdentifierExtra +identifier +strictIdentifier +quotedIdentifier +backQuotedIdentifier +number +alterColumnAction +stringLit +comment +version +ansiNonReserved +strictNonReserved +nonReserved + + +atn: +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 384, 3817, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 3, 2, 7, 2, 378, 10, 2, 12, 2, 14, 2, 381, 11, 2, 3, 2, 3, 2, 3, 3, 3, 3, 5, 3, 387, 10, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 5, 8, 399, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 412, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 419, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 427, 10, 8, 12, 8, 14, 8, 430, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 449, 10, 8, 3, 8, 3, 8, 5, 8, 453, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 459, 10, 8, 3, 8, 5, 8, 462, 10, 8, 3, 8, 5, 8, 465, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 472, 10, 8, 3, 8, 5, 8, 475, 10, 8, 3, 8, 3, 8, 5, 8, 479, 10, 8, 3, 8, 5, 8, 482, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 489, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 500, 10, 8, 12, 8, 14, 8, 503, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 510, 10, 8, 3, 8, 5, 8, 513, 10, 8, 3, 8, 3, 8, 5, 8, 517, 10, 8, 3, 8, 5, 8, 520, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 526, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 537, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 543, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 548, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 582, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 595, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 603, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 613, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 623, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 629, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 638, 10, 8, 3, 8, 3, 8, 5, 8, 642, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 648, 10, 8, 3, 8, 3, 8, 5, 8, 652, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 657, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 663, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 675, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 683, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 689, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 699, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 705, 10, 8, 3, 8, 6, 8, 708, 10, 8, 13, 8, 14, 8, 709, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 724, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 729, 10, 8, 3, 8, 3, 8, 3, 8, 7, 8, 734, 10, 8, 12, 8, 14, 8, 737, 11, 8, 3, 8, 5, 8, 740, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 746, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 761, 10, 8, 3, 8, 3, 8, 5, 8, 765, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 771, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 777, 10, 8, 3, 8, 5, 8, 780, 10, 8, 3, 8, 5, 8, 783, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 789, 10, 8, 3, 8, 3, 8, 5, 8, 793, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 801, 10, 8, 12, 8, 14, 8, 804, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 812, 10, 8, 3, 8, 5, 8, 815, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 824, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 829, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 835, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 842, 10, 8, 3, 8, 5, 8, 845, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 851, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 860, 10, 8, 12, 8, 14, 8, 863, 11, 8, 5, 8, 865, 10, 8, 3, 8, 3, 8, 5, 8, 869, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 874, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 880, 10, 8, 3, 8, 5, 8, 883, 10, 8, 3, 8, 3, 8, 5, 8, 887, 10, 8, 3, 8, 5, 8, 890, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 897, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 902, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 909, 10, 8, 3, 8, 5, 8, 912, 10, 8, 3, 8, 5, 8, 915, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 922, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 927, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 936, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 944, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 950, 10, 8, 3, 8, 5, 8, 953, 10, 8, 3, 8, 5, 8, 956, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 962, 10, 8, 3, 8, 3, 8, 5, 8, 966, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 971, 10, 8, 3, 8, 5, 8, 974, 10, 8, 3, 8, 3, 8, 5, 8, 978, 10, 8, 5, 8, 980, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 988, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 996, 10, 8, 3, 8, 5, 8, 999, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1004, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1010, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1016, 10, 8, 3, 8, 5, 8, 1019, 10, 8, 3, 8, 3, 8, 5, 8, 1023, 10, 8, 3, 8, 5, 8, 1026, 10, 8, 3, 8, 3, 8, 5, 8, 1030, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 1056, 10, 8, 12, 8, 14, 8, 1059, 11, 8, 5, 8, 1061, 10, 8, 3, 8, 3, 8, 5, 8, 1065, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1071, 10, 8, 3, 8, 5, 8, 1074, 10, 8, 3, 8, 5, 8, 1077, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1083, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1091, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1096, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1102, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1108, 10, 8, 3, 8, 5, 8, 1111, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1118, 10, 8, 3, 8, 3, 8, 3, 8, 7, 8, 1123, 10, 8, 12, 8, 14, 8, 1126, 11, 8, 3, 8, 3, 8, 3, 8, 7, 8, 1131, 10, 8, 12, 8, 14, 8, 1134, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 1148, 10, 8, 12, 8, 14, 8, 1151, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 1175, 10, 8, 12, 8, 14, 8, 1178, 11, 8, 5, 8, 1180, 10, 8, 3, 8, 3, 8, 7, 8, 1184, 10, 8, 12, 8, 14, 8, 1187, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 1193, 10, 8, 12, 8, 14, 8, 1196, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 1202, 10, 8, 12, 8, 14, 8, 1205, 11, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1212, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1217, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1222, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1229, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1235, 10, 8, 3, 8, 3, 8, 3, 8, 5, 8, 1240, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 1246, 10, 8, 12, 8, 14, 8, 1249, 11, 8, 5, 8, 1251, 10, 8, 3, 9, 3, 9, 5, 9, 1255, 10, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1267, 10, 12, 3, 12, 3, 12, 5, 12, 1271, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1278, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1394, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1402, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1410, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1419, 10, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 1429, 10, 12, 3, 13, 3, 13, 5, 13, 1433, 10, 13, 3, 13, 5, 13, 1436, 10, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 1442, 10, 13, 3, 13, 3, 13, 3, 14, 3, 14, 5, 14, 1448, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 1460, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 1472, 10, 16, 3, 16, 3, 16, 3, 16, 5, 16, 1477, 10, 16, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 5, 19, 1486, 10, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 5, 20, 1494, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1501, 10, 20, 5, 20, 1503, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1508, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1513, 10, 20, 3, 20, 3, 20, 5, 20, 1517, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1522, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1527, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1532, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1541, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1546, 10, 20, 3, 20, 5, 20, 1549, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1554, 10, 20, 3, 20, 3, 20, 5, 20, 1558, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 1563, 10, 20, 5, 20, 1565, 10, 20, 3, 21, 3, 21, 5, 21, 1569, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 7, 22, 1576, 10, 22, 12, 22, 14, 22, 1579, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 5, 23, 1586, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 1592, 10, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 1603, 10, 26, 3, 27, 3, 27, 3, 27, 7, 27, 1608, 10, 27, 12, 27, 14, 27, 1611, 11, 27, 3, 28, 3, 28, 3, 28, 3, 28, 7, 28, 1617, 10, 28, 12, 28, 14, 28, 1620, 11, 28, 3, 29, 3, 29, 5, 29, 1624, 10, 29, 3, 29, 5, 29, 1627, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 1649, 10, 31, 12, 31, 14, 31, 1652, 11, 31, 3, 32, 3, 32, 3, 32, 3, 32, 7, 32, 1658, 10, 32, 12, 32, 14, 32, 1661, 11, 32, 3, 32, 3, 32, 3, 33, 3, 33, 5, 33, 1667, 10, 33, 3, 33, 5, 33, 1670, 10, 33, 3, 34, 3, 34, 3, 34, 7, 34, 1675, 10, 34, 12, 34, 14, 34, 1678, 11, 34, 3, 34, 5, 34, 1681, 10, 34, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 1687, 10, 35, 3, 36, 3, 36, 3, 36, 3, 36, 7, 36, 1693, 10, 36, 12, 36, 14, 36, 1696, 11, 36, 3, 36, 3, 36, 3, 37, 3, 37, 5, 37, 1702, 10, 37, 3, 37, 5, 37, 1705, 10, 37, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 1711, 10, 38, 12, 38, 14, 38, 1714, 11, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 7, 39, 1722, 10, 39, 12, 39, 14, 39, 1725, 11, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 5, 40, 1735, 10, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 5, 41, 1743, 10, 41, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 1749, 10, 42, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 6, 44, 1759, 10, 44, 13, 44, 14, 44, 1760, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1768, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1775, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 1787, 10, 44, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 1793, 10, 44, 12, 44, 14, 44, 1796, 11, 44, 3, 44, 7, 44, 1799, 10, 44, 12, 44, 14, 44, 1802, 11, 44, 3, 44, 7, 44, 1805, 10, 44, 12, 44, 14, 44, 1808, 11, 44, 5, 44, 1810, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 1818, 10, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 1825, 10, 46, 12, 46, 14, 46, 1828, 11, 46, 5, 46, 1830, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 1837, 10, 46, 12, 46, 14, 46, 1840, 11, 46, 5, 46, 1842, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 1849, 10, 46, 12, 46, 14, 46, 1852, 11, 46, 5, 46, 1854, 10, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 1861, 10, 46, 12, 46, 14, 46, 1864, 11, 46, 5, 46, 1866, 10, 46, 3, 46, 5, 46, 1869, 10, 46, 3, 46, 3, 46, 3, 46, 5, 46, 1874, 10, 46, 5, 46, 1876, 10, 46, 3, 46, 3, 46, 5, 46, 1880, 10, 46, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1892, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1899, 10, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 1906, 10, 48, 3, 48, 7, 48, 1909, 10, 48, 12, 48, 14, 48, 1912, 11, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 1923, 10, 49, 3, 50, 3, 50, 5, 50, 1927, 10, 50, 3, 50, 3, 50, 5, 50, 1931, 10, 50, 3, 51, 3, 51, 6, 51, 1935, 10, 51, 13, 51, 14, 51, 1936, 3, 52, 3, 52, 5, 52, 1941, 10, 52, 3, 52, 3, 52, 3, 52, 3, 52, 7, 52, 1947, 10, 52, 12, 52, 14, 52, 1950, 11, 52, 3, 52, 5, 52, 1953, 10, 52, 3, 52, 5, 52, 1956, 10, 52, 3, 52, 5, 52, 1959, 10, 52, 3, 52, 5, 52, 1962, 10, 52, 3, 52, 3, 52, 5, 52, 1966, 10, 52, 3, 53, 3, 53, 5, 53, 1970, 10, 53, 3, 53, 7, 53, 1973, 10, 53, 12, 53, 14, 53, 1976, 11, 53, 3, 53, 5, 53, 1979, 10, 53, 3, 53, 5, 53, 1982, 10, 53, 3, 53, 5, 53, 1985, 10, 53, 3, 53, 5, 53, 1988, 10, 53, 3, 53, 3, 53, 5, 53, 1992, 10, 53, 3, 53, 7, 53, 1995, 10, 53, 12, 53, 14, 53, 1998, 11, 53, 3, 53, 5, 53, 2001, 10, 53, 3, 53, 5, 53, 2004, 10, 53, 3, 53, 5, 53, 2007, 10, 53, 3, 53, 5, 53, 2010, 10, 53, 5, 53, 2012, 10, 53, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 2018, 10, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 2025, 10, 54, 3, 54, 3, 54, 3, 54, 5, 54, 2030, 10, 54, 3, 54, 5, 54, 2033, 10, 54, 3, 54, 5, 54, 2036, 10, 54, 3, 54, 3, 54, 5, 54, 2040, 10, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 2050, 10, 54, 3, 54, 3, 54, 5, 54, 2054, 10, 54, 5, 54, 2056, 10, 54, 3, 54, 5, 54, 2059, 10, 54, 3, 54, 3, 54, 5, 54, 2063, 10, 54, 3, 55, 3, 55, 7, 55, 2067, 10, 55, 12, 55, 14, 55, 2070, 11, 55, 3, 55, 5, 55, 2073, 10, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 5, 57, 2084, 10, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 5, 58, 2094, 10, 58, 3, 58, 3, 58, 5, 58, 2098, 10, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 5, 59, 2110, 10, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 2122, 10, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 7, 61, 2135, 10, 61, 12, 61, 14, 61, 2138, 11, 61, 3, 61, 3, 61, 5, 61, 2142, 10, 61, 3, 62, 3, 62, 3, 62, 3, 62, 5, 62, 2148, 10, 62, 3, 63, 3, 63, 3, 63, 7, 63, 2153, 10, 63, 12, 63, 14, 63, 2156, 11, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 5, 67, 2171, 10, 67, 3, 67, 7, 67, 2174, 10, 67, 12, 67, 14, 67, 2177, 11, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 7, 68, 2187, 10, 68, 12, 68, 14, 68, 2190, 11, 68, 3, 68, 3, 68, 5, 68, 2194, 10, 68, 3, 69, 3, 69, 3, 69, 3, 69, 7, 69, 2200, 10, 69, 12, 69, 14, 69, 2203, 11, 69, 3, 69, 7, 69, 2206, 10, 69, 12, 69, 14, 69, 2209, 11, 69, 3, 69, 5, 69, 2212, 10, 69, 3, 69, 5, 69, 2215, 10, 69, 3, 70, 5, 70, 2218, 10, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 5, 70, 2225, 10, 70, 3, 70, 3, 70, 3, 70, 3, 70, 5, 70, 2231, 10, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 2238, 10, 71, 12, 71, 14, 71, 2241, 11, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 2248, 10, 71, 12, 71, 14, 71, 2251, 11, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 2263, 10, 71, 12, 71, 14, 71, 2266, 11, 71, 3, 71, 3, 71, 5, 71, 2270, 10, 71, 5, 71, 2272, 10, 71, 3, 72, 3, 72, 5, 72, 2276, 10, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 2283, 10, 73, 12, 73, 14, 73, 2286, 11, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 7, 73, 2296, 10, 73, 12, 73, 14, 73, 2299, 11, 73, 3, 73, 3, 73, 5, 73, 2303, 10, 73, 3, 74, 3, 74, 5, 74, 2307, 10, 74, 3, 75, 3, 75, 3, 75, 3, 75, 7, 75, 2313, 10, 75, 12, 75, 14, 75, 2316, 11, 75, 5, 75, 2318, 10, 75, 3, 75, 3, 75, 5, 75, 2322, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 7, 76, 2334, 10, 76, 12, 76, 14, 76, 2337, 11, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 7, 77, 2347, 10, 77, 12, 77, 14, 77, 2350, 11, 77, 3, 77, 3, 77, 5, 77, 2354, 10, 77, 3, 78, 3, 78, 5, 78, 2358, 10, 78, 3, 78, 5, 78, 2361, 10, 78, 3, 79, 3, 79, 5, 79, 2365, 10, 79, 3, 79, 3, 79, 3, 79, 3, 79, 5, 79, 2371, 10, 79, 3, 79, 5, 79, 2374, 10, 79, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 5, 81, 2381, 10, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 7, 82, 2391, 10, 82, 12, 82, 14, 82, 2394, 11, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 7, 83, 2402, 10, 83, 12, 83, 14, 83, 2405, 11, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 7, 83, 2415, 10, 83, 12, 83, 14, 83, 2418, 11, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 7, 84, 2426, 10, 84, 12, 84, 14, 84, 2429, 11, 84, 3, 84, 3, 84, 5, 84, 2433, 10, 84, 3, 85, 3, 85, 3, 86, 3, 86, 3, 87, 3, 87, 5, 87, 2441, 10, 87, 3, 88, 3, 88, 3, 89, 5, 89, 2446, 10, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 5, 90, 2453, 10, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 7, 90, 2460, 10, 90, 12, 90, 14, 90, 2463, 11, 90, 5, 90, 2465, 10, 90, 3, 90, 3, 90, 3, 90, 5, 90, 2470, 10, 90, 3, 90, 3, 90, 3, 90, 7, 90, 2475, 10, 90, 12, 90, 14, 90, 2478, 11, 90, 5, 90, 2480, 10, 90, 3, 91, 3, 91, 3, 92, 5, 92, 2485, 10, 92, 3, 92, 3, 92, 7, 92, 2489, 10, 92, 12, 92, 14, 92, 2492, 11, 92, 3, 93, 3, 93, 3, 93, 5, 93, 2497, 10, 93, 3, 94, 3, 94, 3, 94, 5, 94, 2502, 10, 94, 3, 94, 3, 94, 5, 94, 2506, 10, 94, 3, 94, 3, 94, 3, 94, 3, 94, 5, 94, 2512, 10, 94, 3, 94, 3, 94, 5, 94, 2516, 10, 94, 3, 95, 5, 95, 2519, 10, 95, 3, 95, 3, 95, 3, 95, 5, 95, 2524, 10, 95, 3, 95, 5, 95, 2527, 10, 95, 3, 95, 3, 95, 3, 95, 5, 95, 2532, 10, 95, 3, 95, 3, 95, 5, 95, 2536, 10, 95, 3, 95, 5, 95, 2539, 10, 95, 3, 95, 5, 95, 2542, 10, 95, 3, 96, 3, 96, 3, 96, 3, 96, 5, 96, 2548, 10, 96, 3, 97, 3, 97, 3, 97, 5, 97, 2553, 10, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 5, 97, 2560, 10, 97, 3, 98, 5, 98, 2563, 10, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 5, 98, 2581, 10, 98, 5, 98, 2583, 10, 98, 3, 98, 5, 98, 2586, 10, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 7, 100, 2595, 10, 100, 12, 100, 14, 100, 2598, 11, 100, 3, 101, 3, 101, 3, 101, 3, 101, 7, 101, 2604, 10, 101, 12, 101, 14, 101, 2607, 11, 101, 3, 101, 3, 101, 3, 102, 3, 102, 5, 102, 2613, 10, 102, 3, 103, 3, 103, 3, 103, 3, 103, 7, 103, 2619, 10, 103, 12, 103, 14, 103, 2622, 11, 103, 3, 103, 3, 103, 3, 104, 3, 104, 5, 104, 2628, 10, 104, 3, 105, 3, 105, 5, 105, 2632, 10, 105, 3, 105, 5, 105, 2635, 10, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 5, 105, 2643, 10, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 5, 105, 2651, 10, 105, 3, 105, 3, 105, 3, 105, 3, 105, 5, 105, 2657, 10, 105, 3, 106, 3, 106, 3, 106, 3, 106, 7, 106, 2663, 10, 106, 12, 106, 14, 106, 2666, 11, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 5, 107, 2673, 10, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 5, 107, 2680, 10, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 5, 107, 2687, 10, 107, 5, 107, 2689, 10, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 7, 108, 2700, 10, 108, 12, 108, 14, 108, 2703, 11, 108, 3, 108, 3, 108, 3, 108, 5, 108, 2708, 10, 108, 5, 108, 2710, 10, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 7, 108, 2718, 10, 108, 12, 108, 14, 108, 2721, 11, 108, 3, 108, 3, 108, 3, 108, 5, 108, 2726, 10, 108, 5, 108, 2728, 10, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 5, 110, 2736, 10, 110, 3, 111, 3, 111, 5, 111, 2740, 10, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 7, 112, 2747, 10, 112, 12, 112, 14, 112, 2750, 11, 112, 5, 112, 2752, 10, 112, 3, 112, 3, 112, 3, 112, 3, 113, 5, 113, 2758, 10, 113, 3, 113, 3, 113, 5, 113, 2762, 10, 113, 5, 113, 2764, 10, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 2773, 10, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 2785, 10, 114, 5, 114, 2787, 10, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 2794, 10, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 2801, 10, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 2807, 10, 114, 3, 114, 3, 114, 3, 114, 3, 114, 5, 114, 2813, 10, 114, 5, 114, 2815, 10, 114, 3, 115, 3, 115, 3, 115, 7, 115, 2820, 10, 115, 12, 115, 14, 115, 2823, 11, 115, 3, 116, 3, 116, 3, 116, 7, 116, 2828, 10, 116, 12, 116, 14, 116, 2831, 11, 116, 3, 117, 3, 117, 3, 117, 7, 117, 2836, 10, 117, 12, 117, 14, 117, 2839, 11, 117, 3, 118, 3, 118, 3, 118, 5, 118, 2844, 10, 118, 3, 119, 3, 119, 3, 119, 5, 119, 2849, 10, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 5, 120, 2856, 10, 120, 3, 120, 3, 120, 3, 121, 3, 121, 5, 121, 2862, 10, 121, 3, 121, 3, 121, 5, 121, 2866, 10, 121, 5, 121, 2868, 10, 121, 3, 122, 3, 122, 3, 122, 7, 122, 2873, 10, 122, 12, 122, 14, 122, 2876, 11, 122, 3, 123, 3, 123, 3, 123, 3, 123, 7, 123, 2882, 10, 123, 12, 123, 14, 123, 2885, 11, 123, 3, 123, 3, 123, 3, 124, 3, 124, 5, 124, 2891, 10, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 7, 125, 2899, 10, 125, 12, 125, 14, 125, 2902, 11, 125, 3, 125, 3, 125, 5, 125, 2906, 10, 125, 3, 126, 3, 126, 5, 126, 2910, 10, 126, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 5, 129, 2920, 10, 129, 3, 130, 3, 130, 3, 130, 7, 130, 2925, 10, 130, 12, 130, 14, 130, 2928, 11, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 5, 131, 2940, 10, 131, 5, 131, 2942, 10, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 7, 131, 2950, 10, 131, 12, 131, 14, 131, 2953, 11, 131, 3, 132, 5, 132, 2956, 10, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 5, 132, 2964, 10, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 7, 132, 2971, 10, 132, 12, 132, 14, 132, 2974, 11, 132, 3, 132, 3, 132, 3, 132, 5, 132, 2979, 10, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 5, 132, 2987, 10, 132, 3, 132, 3, 132, 3, 132, 5, 132, 2992, 10, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 7, 132, 3002, 10, 132, 12, 132, 14, 132, 3005, 11, 132, 3, 132, 3, 132, 5, 132, 3009, 10, 132, 3, 132, 5, 132, 3012, 10, 132, 3, 132, 3, 132, 3, 132, 3, 132, 5, 132, 3018, 10, 132, 3, 132, 3, 132, 5, 132, 3022, 10, 132, 3, 132, 3, 132, 3, 132, 5, 132, 3027, 10, 132, 3, 132, 3, 132, 3, 132, 5, 132, 3032, 10, 132, 3, 132, 3, 132, 3, 132, 5, 132, 3037, 10, 132, 3, 133, 3, 133, 3, 133, 3, 133, 5, 133, 3043, 10, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 7, 133, 3064, 10, 133, 12, 133, 14, 133, 3067, 11, 133, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3077, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3089, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 6, 135, 3099, 10, 135, 13, 135, 14, 135, 3100, 3, 135, 3, 135, 5, 135, 3105, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 6, 135, 3112, 10, 135, 13, 135, 14, 135, 3113, 3, 135, 3, 135, 5, 135, 3118, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 7, 135, 3134, 10, 135, 12, 135, 14, 135, 3137, 11, 135, 5, 135, 3139, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3147, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3156, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3165, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 6, 135, 3186, 10, 135, 13, 135, 14, 135, 3187, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3204, 10, 135, 3, 135, 3, 135, 3, 135, 7, 135, 3209, 10, 135, 12, 135, 14, 135, 3212, 11, 135, 5, 135, 3214, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3223, 10, 135, 3, 135, 3, 135, 5, 135, 3227, 10, 135, 3, 135, 3, 135, 5, 135, 3231, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 6, 135, 3241, 10, 135, 13, 135, 14, 135, 3242, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3268, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3275, 10, 135, 3, 135, 5, 135, 3278, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3293, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 5, 135, 3314, 10, 135, 3, 135, 3, 135, 5, 135, 3318, 10, 135, 5, 135, 3320, 10, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 7, 135, 3330, 10, 135, 12, 135, 14, 135, 3333, 11, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 3342, 10, 136, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 3, 137, 6, 137, 3355, 10, 137, 13, 137, 14, 137, 3356, 5, 137, 3359, 10, 137, 3, 138, 3, 138, 3, 139, 3, 139, 3, 140, 3, 140, 3, 141, 3, 141, 3, 142, 3, 142, 3, 142, 5, 142, 3372, 10, 142, 3, 143, 3, 143, 5, 143, 3376, 10, 143, 3, 144, 3, 144, 3, 144, 6, 144, 3381, 10, 144, 13, 144, 14, 144, 3382, 3, 145, 3, 145, 3, 145, 5, 145, 3388, 10, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 147, 5, 147, 3396, 10, 147, 3, 147, 3, 147, 3, 147, 5, 147, 3401, 10, 147, 3, 148, 3, 148, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 5, 150, 3410, 10, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 5, 151, 3442, 10, 151, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 5, 152, 3459, 10, 152, 3, 152, 3, 152, 5, 152, 3463, 10, 152, 3, 152, 3, 152, 3, 152, 3, 152, 5, 152, 3469, 10, 152, 3, 152, 3, 152, 3, 152, 3, 152, 5, 152, 3475, 10, 152, 3, 152, 3, 152, 3, 152, 3, 152, 3, 152, 7, 152, 3482, 10, 152, 12, 152, 14, 152, 3485, 11, 152, 3, 152, 5, 152, 3488, 10, 152, 5, 152, 3490, 10, 152, 3, 153, 3, 153, 3, 153, 7, 153, 3495, 10, 153, 12, 153, 14, 153, 3498, 11, 153, 3, 154, 3, 154, 3, 154, 7, 154, 3503, 10, 154, 12, 154, 14, 154, 3506, 11, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 5, 155, 3513, 10, 155, 3, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 7, 158, 3524, 10, 158, 12, 158, 14, 158, 3527, 11, 158, 3, 159, 3, 159, 3, 159, 3, 159, 5, 159, 3533, 10, 159, 3, 159, 5, 159, 3536, 10, 159, 3, 160, 3, 160, 3, 160, 7, 160, 3541, 10, 160, 12, 160, 14, 160, 3544, 11, 160, 3, 161, 3, 161, 3, 161, 7, 161, 3549, 10, 161, 12, 161, 14, 161, 3552, 11, 161, 3, 162, 3, 162, 3, 162, 3, 162, 3, 162, 5, 162, 3559, 10, 162, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 7, 164, 3571, 10, 164, 12, 164, 14, 164, 3574, 11, 164, 3, 165, 3, 165, 5, 165, 3578, 10, 165, 3, 165, 3, 165, 3, 165, 5, 165, 3583, 10, 165, 3, 165, 5, 165, 3586, 10, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 167, 7, 167, 3597, 10, 167, 12, 167, 14, 167, 3600, 11, 167, 3, 168, 3, 168, 3, 168, 3, 168, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 7, 169, 3617, 10, 169, 12, 169, 14, 169, 3620, 11, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 7, 169, 3627, 10, 169, 12, 169, 14, 169, 3630, 11, 169, 5, 169, 3632, 10, 169, 3, 169, 3, 169, 3, 169, 3, 169, 3, 169, 7, 169, 3639, 10, 169, 12, 169, 14, 169, 3642, 11, 169, 5, 169, 3644, 10, 169, 5, 169, 3646, 10, 169, 3, 169, 5, 169, 3649, 10, 169, 3, 169, 5, 169, 3652, 10, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 5, 170, 3670, 10, 170, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 5, 171, 3679, 10, 171, 3, 172, 3, 172, 3, 172, 7, 172, 3684, 10, 172, 12, 172, 14, 172, 3687, 11, 172, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 3, 173, 5, 173, 3698, 10, 173, 3, 174, 3, 174, 3, 174, 7, 174, 3703, 10, 174, 12, 174, 14, 174, 3706, 11, 174, 3, 175, 3, 175, 3, 175, 3, 176, 3, 176, 6, 176, 3713, 10, 176, 13, 176, 14, 176, 3714, 3, 176, 5, 176, 3718, 10, 176, 3, 177, 3, 177, 3, 177, 5, 177, 3723, 10, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 5, 178, 3731, 10, 178, 3, 179, 3, 179, 3, 179, 5, 179, 3736, 10, 179, 3, 180, 3, 180, 3, 181, 3, 181, 5, 181, 3742, 10, 181, 3, 181, 3, 181, 3, 181, 5, 181, 3747, 10, 181, 3, 181, 3, 181, 3, 181, 5, 181, 3752, 10, 181, 3, 181, 3, 181, 5, 181, 3756, 10, 181, 3, 181, 3, 181, 5, 181, 3760, 10, 181, 3, 181, 3, 181, 5, 181, 3764, 10, 181, 3, 181, 3, 181, 5, 181, 3768, 10, 181, 3, 181, 3, 181, 5, 181, 3772, 10, 181, 3, 181, 3, 181, 5, 181, 3776, 10, 181, 3, 181, 3, 181, 5, 181, 3780, 10, 181, 3, 181, 5, 181, 3783, 10, 181, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 5, 182, 3796, 10, 182, 3, 183, 3, 183, 3, 183, 5, 183, 3801, 10, 183, 3, 184, 3, 184, 5, 184, 3805, 10, 184, 3, 185, 3, 185, 5, 185, 3809, 10, 185, 3, 186, 3, 186, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 11, 1057, 1124, 1132, 1149, 1176, 1185, 1194, 1203, 1247, 2, 6, 94, 260, 264, 268, 189, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 48, 2, 50, 2, 52, 2, 54, 2, 56, 2, 58, 2, 60, 2, 62, 2, 64, 2, 66, 2, 68, 2, 70, 2, 72, 2, 74, 2, 76, 2, 78, 2, 80, 2, 82, 2, 84, 2, 86, 2, 88, 2, 90, 2, 92, 2, 94, 2, 96, 2, 98, 2, 100, 2, 102, 2, 104, 2, 106, 2, 108, 2, 110, 2, 112, 2, 114, 2, 116, 2, 118, 2, 120, 2, 122, 2, 124, 2, 126, 2, 128, 2, 130, 2, 132, 2, 134, 2, 136, 2, 138, 2, 140, 2, 142, 2, 144, 2, 146, 2, 148, 2, 150, 2, 152, 2, 154, 2, 156, 2, 158, 2, 160, 2, 162, 2, 164, 2, 166, 2, 168, 2, 170, 2, 172, 2, 174, 2, 176, 2, 178, 2, 180, 2, 182, 2, 184, 2, 186, 2, 188, 2, 190, 2, 192, 2, 194, 2, 196, 2, 198, 2, 200, 2, 202, 2, 204, 2, 206, 2, 208, 2, 210, 2, 212, 2, 214, 2, 216, 2, 218, 2, 220, 2, 222, 2, 224, 2, 226, 2, 228, 2, 230, 2, 232, 2, 234, 2, 236, 2, 238, 2, 240, 2, 242, 2, 244, 2, 246, 2, 248, 2, 250, 2, 252, 2, 254, 2, 256, 2, 258, 2, 260, 2, 262, 2, 264, 2, 266, 2, 268, 2, 270, 2, 272, 2, 274, 2, 276, 2, 278, 2, 280, 2, 282, 2, 284, 2, 286, 2, 288, 2, 290, 2, 292, 2, 294, 2, 296, 2, 298, 2, 300, 2, 302, 2, 304, 2, 306, 2, 308, 2, 310, 2, 312, 2, 314, 2, 316, 2, 318, 2, 320, 2, 322, 2, 324, 2, 326, 2, 328, 2, 330, 2, 332, 2, 334, 2, 336, 2, 338, 2, 340, 2, 342, 2, 344, 2, 346, 2, 348, 2, 350, 2, 352, 2, 354, 2, 356, 2, 358, 2, 360, 2, 362, 2, 364, 2, 366, 2, 368, 2, 370, 2, 372, 2, 374, 2, 2, 62, 4, 2, 80, 80, 225, 225, 4, 2, 36, 36, 243, 243, 4, 2, 123, 123, 140, 140, 3, 2, 51, 52, 4, 2, 286, 286, 331, 331, 4, 2, 13, 13, 41, 41, 7, 2, 48, 48, 60, 60, 108, 108, 122, 122, 172, 172, 3, 2, 88, 89, 4, 2, 108, 108, 122, 122, 5, 2, 10, 10, 97, 97, 283, 283, 4, 2, 10, 10, 166, 166, 3, 2, 328, 329, 5, 2, 74, 74, 188, 188, 255, 255, 5, 2, 75, 75, 189, 189, 256, 256, 6, 2, 102, 102, 148, 148, 264, 264, 316, 316, 5, 2, 102, 102, 264, 264, 316, 316, 4, 2, 23, 23, 88, 88, 4, 2, 116, 116, 157, 157, 4, 2, 285, 285, 330, 330, 4, 2, 284, 284, 296, 296, 4, 2, 63, 63, 250, 250, 4, 2, 104, 104, 141, 141, 4, 2, 12, 12, 93, 93, 4, 2, 373, 373, 375, 375, 4, 2, 94, 94, 213, 213, 4, 2, 205, 205, 272, 272, 3, 2, 162, 163, 5, 2, 12, 12, 18, 18, 271, 271, 5, 2, 111, 111, 309, 309, 318, 318, 4, 2, 352, 353, 357, 357, 4, 2, 95, 95, 354, 356, 4, 2, 352, 353, 360, 360, 13, 2, 69, 69, 71, 71, 134, 134, 178, 178, 180, 180, 182, 182, 184, 184, 227, 227, 253, 253, 334, 334, 341, 341, 6, 2, 65, 65, 67, 68, 262, 262, 324, 324, 4, 2, 76, 77, 299, 299, 5, 2, 78, 79, 295, 295, 300, 300, 4, 2, 38, 38, 311, 311, 4, 2, 138, 138, 242, 242, 3, 2, 281, 282, 4, 2, 6, 6, 123, 123, 4, 2, 6, 6, 119, 119, 5, 2, 30, 30, 160, 160, 304, 304, 3, 2, 216, 217, 3, 2, 344, 351, 4, 2, 95, 95, 352, 361, 6, 2, 16, 16, 140, 140, 194, 194, 204, 204, 4, 2, 111, 111, 309, 309, 3, 2, 352, 353, 9, 2, 69, 70, 134, 135, 178, 185, 190, 191, 253, 254, 334, 335, 341, 342, 8, 2, 69, 69, 134, 134, 182, 182, 184, 184, 253, 253, 341, 341, 4, 2, 184, 184, 341, 341, 6, 2, 69, 69, 134, 134, 182, 182, 253, 253, 5, 2, 134, 134, 182, 182, 253, 253, 4, 2, 84, 84, 344, 344, 4, 2, 118, 118, 222, 222, 3, 2, 374, 375, 4, 2, 97, 97, 263, 263, 53, 2, 10, 11, 13, 15, 17, 17, 19, 21, 23, 24, 26, 29, 31, 36, 39, 43, 45, 48, 50, 50, 52, 58, 60, 60, 63, 64, 69, 92, 94, 97, 101, 101, 103, 110, 113, 113, 115, 118, 121, 122, 125, 128, 131, 131, 133, 139, 141, 143, 145, 147, 149, 151, 154, 154, 156, 157, 159, 159, 162, 191, 193, 193, 196, 198, 202, 203, 206, 206, 208, 209, 211, 215, 218, 222, 224, 234, 236, 244, 246, 256, 258, 261, 263, 270, 272, 285, 287, 292, 295, 301, 303, 303, 305, 315, 319, 323, 326, 335, 338, 338, 341, 343, 18, 2, 17, 17, 62, 62, 102, 102, 124, 124, 144, 144, 148, 148, 155, 155, 158, 158, 161, 161, 192, 192, 200, 200, 245, 245, 258, 258, 264, 264, 316, 316, 325, 325, 19, 2, 10, 16, 18, 61, 63, 101, 103, 123, 125, 143, 145, 147, 149, 154, 156, 157, 159, 160, 162, 191, 193, 199, 201, 244, 246, 257, 259, 263, 265, 315, 317, 324, 326, 343, 2, 4405, 2, 379, 3, 2, 2, 2, 4, 384, 3, 2, 2, 2, 6, 388, 3, 2, 2, 2, 8, 390, 3, 2, 2, 2, 10, 392, 3, 2, 2, 2, 12, 394, 3, 2, 2, 2, 14, 1250, 3, 2, 2, 2, 16, 1254, 3, 2, 2, 2, 18, 1256, 3, 2, 2, 2, 20, 1258, 3, 2, 2, 2, 22, 1428, 3, 2, 2, 2, 24, 1430, 3, 2, 2, 2, 26, 1447, 3, 2, 2, 2, 28, 1453, 3, 2, 2, 2, 30, 1465, 3, 2, 2, 2, 32, 1478, 3, 2, 2, 2, 34, 1481, 3, 2, 2, 2, 36, 1485, 3, 2, 2, 2, 38, 1564, 3, 2, 2, 2, 40, 1566, 3, 2, 2, 2, 42, 1570, 3, 2, 2, 2, 44, 1591, 3, 2, 2, 2, 46, 1593, 3, 2, 2, 2, 48, 1595, 3, 2, 2, 2, 50, 1602, 3, 2, 2, 2, 52, 1604, 3, 2, 2, 2, 54, 1612, 3, 2, 2, 2, 56, 1621, 3, 2, 2, 2, 58, 1632, 3, 2, 2, 2, 60, 1650, 3, 2, 2, 2, 62, 1653, 3, 2, 2, 2, 64, 1664, 3, 2, 2, 2, 66, 1680, 3, 2, 2, 2, 68, 1686, 3, 2, 2, 2, 70, 1688, 3, 2, 2, 2, 72, 1699, 3, 2, 2, 2, 74, 1706, 3, 2, 2, 2, 76, 1717, 3, 2, 2, 2, 78, 1734, 3, 2, 2, 2, 80, 1742, 3, 2, 2, 2, 82, 1744, 3, 2, 2, 2, 84, 1750, 3, 2, 2, 2, 86, 1809, 3, 2, 2, 2, 88, 1817, 3, 2, 2, 2, 90, 1829, 3, 2, 2, 2, 92, 1881, 3, 2, 2, 2, 94, 1884, 3, 2, 2, 2, 96, 1922, 3, 2, 2, 2, 98, 1924, 3, 2, 2, 2, 100, 1932, 3, 2, 2, 2, 102, 1965, 3, 2, 2, 2, 104, 2011, 3, 2, 2, 2, 106, 2032, 3, 2, 2, 2, 108, 2064, 3, 2, 2, 2, 110, 2076, 3, 2, 2, 2, 112, 2079, 3, 2, 2, 2, 114, 2088, 3, 2, 2, 2, 116, 2102, 3, 2, 2, 2, 118, 2121, 3, 2, 2, 2, 120, 2141, 3, 2, 2, 2, 122, 2147, 3, 2, 2, 2, 124, 2149, 3, 2, 2, 2, 126, 2157, 3, 2, 2, 2, 128, 2161, 3, 2, 2, 2, 130, 2164, 3, 2, 2, 2, 132, 2167, 3, 2, 2, 2, 134, 2193, 3, 2, 2, 2, 136, 2195, 3, 2, 2, 2, 138, 2230, 3, 2, 2, 2, 140, 2271, 3, 2, 2, 2, 142, 2275, 3, 2, 2, 2, 144, 2302, 3, 2, 2, 2, 146, 2306, 3, 2, 2, 2, 148, 2321, 3, 2, 2, 2, 150, 2323, 3, 2, 2, 2, 152, 2353, 3, 2, 2, 2, 154, 2355, 3, 2, 2, 2, 156, 2362, 3, 2, 2, 2, 158, 2375, 3, 2, 2, 2, 160, 2380, 3, 2, 2, 2, 162, 2382, 3, 2, 2, 2, 164, 2397, 3, 2, 2, 2, 166, 2421, 3, 2, 2, 2, 168, 2434, 3, 2, 2, 2, 170, 2436, 3, 2, 2, 2, 172, 2438, 3, 2, 2, 2, 174, 2442, 3, 2, 2, 2, 176, 2445, 3, 2, 2, 2, 178, 2449, 3, 2, 2, 2, 180, 2481, 3, 2, 2, 2, 182, 2484, 3, 2, 2, 2, 184, 2496, 3, 2, 2, 2, 186, 2515, 3, 2, 2, 2, 188, 2541, 3, 2, 2, 2, 190, 2547, 3, 2, 2, 2, 192, 2549, 3, 2, 2, 2, 194, 2585, 3, 2, 2, 2, 196, 2587, 3, 2, 2, 2, 198, 2591, 3, 2, 2, 2, 200, 2599, 3, 2, 2, 2, 202, 2610, 3, 2, 2, 2, 204, 2614, 3, 2, 2, 2, 206, 2625, 3, 2, 2, 2, 208, 2656, 3, 2, 2, 2, 210, 2658, 3, 2, 2, 2, 212, 2688, 3, 2, 2, 2, 214, 2709, 3, 2, 2, 2, 216, 2729, 3, 2, 2, 2, 218, 2735, 3, 2, 2, 2, 220, 2739, 3, 2, 2, 2, 222, 2741, 3, 2, 2, 2, 224, 2763, 3, 2, 2, 2, 226, 2814, 3, 2, 2, 2, 228, 2816, 3, 2, 2, 2, 230, 2824, 3, 2, 2, 2, 232, 2832, 3, 2, 2, 2, 234, 2840, 3, 2, 2, 2, 236, 2848, 3, 2, 2, 2, 238, 2855, 3, 2, 2, 2, 240, 2859, 3, 2, 2, 2, 242, 2869, 3, 2, 2, 2, 244, 2877, 3, 2, 2, 2, 246, 2890, 3, 2, 2, 2, 248, 2905, 3, 2, 2, 2, 250, 2909, 3, 2, 2, 2, 252, 2911, 3, 2, 2, 2, 254, 2913, 3, 2, 2, 2, 256, 2919, 3, 2, 2, 2, 258, 2921, 3, 2, 2, 2, 260, 2941, 3, 2, 2, 2, 262, 3036, 3, 2, 2, 2, 264, 3042, 3, 2, 2, 2, 266, 3068, 3, 2, 2, 2, 268, 3319, 3, 2, 2, 2, 270, 3341, 3, 2, 2, 2, 272, 3358, 3, 2, 2, 2, 274, 3360, 3, 2, 2, 2, 276, 3362, 3, 2, 2, 2, 278, 3364, 3, 2, 2, 2, 280, 3366, 3, 2, 2, 2, 282, 3368, 3, 2, 2, 2, 284, 3373, 3, 2, 2, 2, 286, 3380, 3, 2, 2, 2, 288, 3384, 3, 2, 2, 2, 290, 3389, 3, 2, 2, 2, 292, 3395, 3, 2, 2, 2, 294, 3402, 3, 2, 2, 2, 296, 3404, 3, 2, 2, 2, 298, 3409, 3, 2, 2, 2, 300, 3441, 3, 2, 2, 2, 302, 3489, 3, 2, 2, 2, 304, 3491, 3, 2, 2, 2, 306, 3499, 3, 2, 2, 2, 308, 3512, 3, 2, 2, 2, 310, 3514, 3, 2, 2, 2, 312, 3517, 3, 2, 2, 2, 314, 3520, 3, 2, 2, 2, 316, 3528, 3, 2, 2, 2, 318, 3537, 3, 2, 2, 2, 320, 3545, 3, 2, 2, 2, 322, 3558, 3, 2, 2, 2, 324, 3560, 3, 2, 2, 2, 326, 3567, 3, 2, 2, 2, 328, 3575, 3, 2, 2, 2, 330, 3587, 3, 2, 2, 2, 332, 3592, 3, 2, 2, 2, 334, 3601, 3, 2, 2, 2, 336, 3651, 3, 2, 2, 2, 338, 3669, 3, 2, 2, 2, 340, 3678, 3, 2, 2, 2, 342, 3680, 3, 2, 2, 2, 344, 3697, 3, 2, 2, 2, 346, 3699, 3, 2, 2, 2, 348, 3707, 3, 2, 2, 2, 350, 3717, 3, 2, 2, 2, 352, 3722, 3, 2, 2, 2, 354, 3730, 3, 2, 2, 2, 356, 3735, 3, 2, 2, 2, 358, 3737, 3, 2, 2, 2, 360, 3782, 3, 2, 2, 2, 362, 3795, 3, 2, 2, 2, 364, 3800, 3, 2, 2, 2, 366, 3804, 3, 2, 2, 2, 368, 3808, 3, 2, 2, 2, 370, 3810, 3, 2, 2, 2, 372, 3812, 3, 2, 2, 2, 374, 3814, 3, 2, 2, 2, 376, 378, 5, 4, 3, 2, 377, 376, 3, 2, 2, 2, 378, 381, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 382, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 383, 7, 2, 2, 3, 383, 3, 3, 2, 2, 2, 384, 386, 5, 14, 8, 2, 385, 387, 7, 3, 2, 2, 386, 385, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 5, 3, 2, 2, 2, 388, 389, 5, 88, 45, 2, 389, 7, 3, 2, 2, 2, 390, 391, 5, 88, 45, 2, 391, 9, 3, 2, 2, 2, 392, 393, 5, 88, 45, 2, 393, 11, 3, 2, 2, 2, 394, 395, 5, 88, 45, 2, 395, 13, 3, 2, 2, 2, 396, 1251, 5, 36, 19, 2, 397, 399, 5, 54, 28, 2, 398, 397, 3, 2, 2, 2, 398, 399, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 1251, 5, 86, 44, 2, 401, 402, 7, 323, 2, 2, 402, 1251, 5, 88, 45, 2, 403, 404, 7, 323, 2, 2, 404, 405, 5, 46, 24, 2, 405, 406, 5, 12, 7, 2, 406, 1251, 3, 2, 2, 2, 407, 408, 7, 263, 2, 2, 408, 411, 7, 39, 2, 2, 409, 412, 5, 352, 177, 2, 410, 412, 5, 364, 183, 2, 411, 409, 3, 2, 2, 2, 411, 410, 3, 2, 2, 2, 412, 1251, 3, 2, 2, 2, 413, 414, 7, 61, 2, 2, 414, 418, 5, 46, 24, 2, 415, 416, 7, 137, 2, 2, 416, 417, 7, 194, 2, 2, 417, 419, 7, 105, 2, 2, 418, 415, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 428, 5, 12, 7, 2, 421, 427, 5, 34, 18, 2, 422, 427, 5, 32, 17, 2, 423, 424, 7, 339, 2, 2, 424, 425, 9, 2, 2, 2, 425, 427, 5, 62, 32, 2, 426, 421, 3, 2, 2, 2, 426, 422, 3, 2, 2, 2, 426, 423, 3, 2, 2, 2, 427, 430, 3, 2, 2, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 1251, 3, 2, 2, 2, 430, 428, 3, 2, 2, 2, 431, 432, 7, 13, 2, 2, 432, 433, 5, 46, 24, 2, 433, 434, 5, 12, 7, 2, 434, 435, 7, 263, 2, 2, 435, 436, 9, 2, 2, 2, 436, 437, 5, 62, 32, 2, 437, 1251, 3, 2, 2, 2, 438, 439, 7, 13, 2, 2, 439, 440, 5, 46, 24, 2, 440, 441, 5, 12, 7, 2, 441, 442, 7, 263, 2, 2, 442, 443, 5, 32, 17, 2, 443, 1251, 3, 2, 2, 2, 444, 445, 7, 97, 2, 2, 445, 448, 5, 46, 24, 2, 446, 447, 7, 137, 2, 2, 447, 449, 7, 105, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 452, 5, 12, 7, 2, 451, 453, 9, 3, 2, 2, 452, 451, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 1251, 3, 2, 2, 2, 454, 455, 7, 267, 2, 2, 455, 458, 5, 48, 25, 2, 456, 457, 9, 4, 2, 2, 457, 459, 5, 230, 116, 2, 458, 456, 3, 2, 2, 2, 458, 459, 3, 2, 2, 2, 459, 464, 3, 2, 2, 2, 460, 462, 7, 162, 2, 2, 461, 460, 3, 2, 2, 2, 461, 462, 3, 2, 2, 2, 462, 463, 3, 2, 2, 2, 463, 465, 5, 364, 183, 2, 464, 461, 3, 2, 2, 2, 464, 465, 3, 2, 2, 2, 465, 1251, 3, 2, 2, 2, 466, 471, 5, 24, 13, 2, 467, 468, 7, 4, 2, 2, 468, 469, 5, 318, 160, 2, 469, 470, 7, 5, 2, 2, 470, 472, 3, 2, 2, 2, 471, 467, 3, 2, 2, 2, 471, 472, 3, 2, 2, 2, 472, 474, 3, 2, 2, 2, 473, 475, 5, 58, 30, 2, 474, 473, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 481, 5, 60, 31, 2, 477, 479, 7, 22, 2, 2, 478, 477, 3, 2, 2, 2, 478, 479, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 482, 5, 36, 19, 2, 481, 478, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 1251, 3, 2, 2, 2, 483, 484, 7, 61, 2, 2, 484, 488, 7, 286, 2, 2, 485, 486, 7, 137, 2, 2, 486, 487, 7, 194, 2, 2, 487, 489, 7, 105, 2, 2, 488, 485, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 5, 236, 119, 2, 491, 492, 7, 162, 2, 2, 492, 501, 5, 236, 119, 2, 493, 500, 5, 58, 30, 2, 494, 500, 5, 226, 114, 2, 495, 500, 5, 78, 40, 2, 496, 500, 5, 32, 17, 2, 497, 498, 7, 290, 2, 2, 498, 500, 5, 62, 32, 2, 499, 493, 3, 2, 2, 2, 499, 494, 3, 2, 2, 2, 499, 495, 3, 2, 2, 2, 499, 496, 3, 2, 2, 2, 499, 497, 3, 2, 2, 2, 500, 503, 3, 2, 2, 2, 501, 499, 3, 2, 2, 2, 501, 502, 3, 2, 2, 2, 502, 1251, 3, 2, 2, 2, 503, 501, 3, 2, 2, 2, 504, 509, 5, 26, 14, 2, 505, 506, 7, 4, 2, 2, 506, 507, 5, 318, 160, 2, 507, 508, 7, 5, 2, 2, 508, 510, 3, 2, 2, 2, 509, 505, 3, 2, 2, 2, 509, 510, 3, 2, 2, 2, 510, 512, 3, 2, 2, 2, 511, 513, 5, 58, 30, 2, 512, 511, 3, 2, 2, 2, 512, 513, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 519, 5, 60, 31, 2, 515, 517, 7, 22, 2, 2, 516, 515, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 518, 3, 2, 2, 2, 518, 520, 5, 36, 19, 2, 519, 516, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 1251, 3, 2, 2, 2, 521, 522, 7, 15, 2, 2, 522, 523, 7, 286, 2, 2, 523, 525, 5, 6, 4, 2, 524, 526, 5, 42, 22, 2, 525, 524, 3, 2, 2, 2, 525, 526, 3, 2, 2, 2, 526, 527, 3, 2, 2, 2, 527, 528, 7, 57, 2, 2, 528, 536, 7, 276, 2, 2, 529, 537, 5, 352, 177, 2, 530, 531, 7, 119, 2, 2, 531, 532, 7, 52, 2, 2, 532, 537, 5, 198, 100, 2, 533, 534, 7, 119, 2, 2, 534, 535, 7, 12, 2, 2, 535, 537, 7, 52, 2, 2, 536, 529, 3, 2, 2, 2, 536, 530, 3, 2, 2, 2, 536, 533, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 1251, 3, 2, 2, 2, 538, 539, 7, 15, 2, 2, 539, 542, 7, 287, 2, 2, 540, 541, 9, 4, 2, 2, 541, 543, 5, 6, 4, 2, 542, 540, 3, 2, 2, 2, 542, 543, 3, 2, 2, 2, 543, 544, 3, 2, 2, 2, 544, 545, 7, 57, 2, 2, 545, 547, 7, 276, 2, 2, 546, 548, 5, 352, 177, 2, 547, 546, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 1251, 3, 2, 2, 2, 549, 550, 7, 13, 2, 2, 550, 551, 7, 286, 2, 2, 551, 552, 5, 6, 4, 2, 552, 553, 7, 10, 2, 2, 553, 554, 9, 5, 2, 2, 554, 555, 5, 304, 153, 2, 555, 1251, 3, 2, 2, 2, 556, 557, 7, 13, 2, 2, 557, 558, 7, 286, 2, 2, 558, 559, 5, 6, 4, 2, 559, 560, 7, 10, 2, 2, 560, 561, 9, 5, 2, 2, 561, 562, 7, 4, 2, 2, 562, 563, 5, 304, 153, 2, 563, 564, 7, 5, 2, 2, 564, 1251, 3, 2, 2, 2, 565, 566, 7, 13, 2, 2, 566, 567, 7, 286, 2, 2, 567, 568, 5, 6, 4, 2, 568, 569, 7, 237, 2, 2, 569, 570, 7, 51, 2, 2, 570, 571, 5, 230, 116, 2, 571, 572, 7, 302, 2, 2, 572, 573, 5, 348, 175, 2, 573, 1251, 3, 2, 2, 2, 574, 575, 7, 13, 2, 2, 575, 576, 7, 286, 2, 2, 576, 577, 5, 6, 4, 2, 577, 578, 7, 97, 2, 2, 578, 581, 9, 5, 2, 2, 579, 580, 7, 137, 2, 2, 580, 582, 7, 105, 2, 2, 581, 579, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 7, 4, 2, 2, 584, 585, 5, 228, 115, 2, 585, 586, 7, 5, 2, 2, 586, 1251, 3, 2, 2, 2, 587, 588, 7, 13, 2, 2, 588, 589, 7, 286, 2, 2, 589, 590, 5, 6, 4, 2, 590, 591, 7, 97, 2, 2, 591, 594, 9, 5, 2, 2, 592, 593, 7, 137, 2, 2, 593, 595, 7, 105, 2, 2, 594, 592, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 596, 3, 2, 2, 2, 596, 597, 5, 228, 115, 2, 597, 1251, 3, 2, 2, 2, 598, 599, 7, 13, 2, 2, 599, 602, 9, 6, 2, 2, 600, 603, 5, 6, 4, 2, 601, 603, 5, 8, 5, 2, 602, 600, 3, 2, 2, 2, 602, 601, 3, 2, 2, 2, 603, 604, 3, 2, 2, 2, 604, 605, 7, 237, 2, 2, 605, 606, 7, 302, 2, 2, 606, 607, 5, 230, 116, 2, 607, 1251, 3, 2, 2, 2, 608, 609, 7, 13, 2, 2, 609, 612, 9, 6, 2, 2, 610, 613, 5, 6, 4, 2, 611, 613, 5, 8, 5, 2, 612, 610, 3, 2, 2, 2, 612, 611, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 615, 7, 263, 2, 2, 615, 616, 7, 290, 2, 2, 616, 617, 5, 62, 32, 2, 617, 1251, 3, 2, 2, 2, 618, 619, 7, 13, 2, 2, 619, 622, 9, 6, 2, 2, 620, 623, 5, 6, 4, 2, 621, 623, 5, 8, 5, 2, 622, 620, 3, 2, 2, 2, 622, 621, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 624, 625, 7, 321, 2, 2, 625, 628, 7, 290, 2, 2, 626, 627, 7, 137, 2, 2, 627, 629, 7, 105, 2, 2, 628, 626, 3, 2, 2, 2, 628, 629, 3, 2, 2, 2, 629, 630, 3, 2, 2, 2, 630, 631, 5, 62, 32, 2, 631, 1251, 3, 2, 2, 2, 632, 633, 7, 13, 2, 2, 633, 634, 7, 286, 2, 2, 634, 635, 5, 6, 4, 2, 635, 637, 9, 7, 2, 2, 636, 638, 7, 51, 2, 2, 637, 636, 3, 2, 2, 2, 637, 638, 3, 2, 2, 2, 638, 639, 3, 2, 2, 2, 639, 641, 5, 230, 116, 2, 640, 642, 5, 362, 182, 2, 641, 640, 3, 2, 2, 2, 641, 642, 3, 2, 2, 2, 642, 1251, 3, 2, 2, 2, 643, 644, 7, 13, 2, 2, 644, 645, 7, 286, 2, 2, 645, 647, 5, 6, 4, 2, 646, 648, 5, 42, 22, 2, 647, 646, 3, 2, 2, 2, 647, 648, 3, 2, 2, 2, 648, 649, 3, 2, 2, 2, 649, 651, 7, 41, 2, 2, 650, 652, 7, 51, 2, 2, 651, 650, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 654, 5, 230, 116, 2, 654, 656, 5, 316, 159, 2, 655, 657, 5, 298, 150, 2, 656, 655, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 1251, 3, 2, 2, 2, 658, 659, 7, 13, 2, 2, 659, 660, 7, 286, 2, 2, 660, 662, 5, 6, 4, 2, 661, 663, 5, 42, 22, 2, 662, 661, 3, 2, 2, 2, 662, 663, 3, 2, 2, 2, 663, 664, 3, 2, 2, 2, 664, 665, 7, 240, 2, 2, 665, 666, 7, 52, 2, 2, 666, 667, 7, 4, 2, 2, 667, 668, 5, 304, 153, 2, 668, 669, 7, 5, 2, 2, 669, 1251, 3, 2, 2, 2, 670, 671, 7, 13, 2, 2, 671, 672, 7, 286, 2, 2, 672, 674, 5, 6, 4, 2, 673, 675, 5, 42, 22, 2, 674, 673, 3, 2, 2, 2, 674, 675, 3, 2, 2, 2, 675, 676, 3, 2, 2, 2, 676, 677, 7, 263, 2, 2, 677, 678, 7, 260, 2, 2, 678, 682, 5, 364, 183, 2, 679, 680, 7, 339, 2, 2, 680, 681, 7, 261, 2, 2, 681, 683, 5, 62, 32, 2, 682, 679, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 1251, 3, 2, 2, 2, 684, 685, 7, 13, 2, 2, 685, 686, 7, 286, 2, 2, 686, 688, 5, 6, 4, 2, 687, 689, 5, 42, 22, 2, 688, 687, 3, 2, 2, 2, 688, 689, 3, 2, 2, 2, 689, 690, 3, 2, 2, 2, 690, 691, 7, 263, 2, 2, 691, 692, 7, 261, 2, 2, 692, 693, 5, 62, 32, 2, 693, 1251, 3, 2, 2, 2, 694, 695, 7, 13, 2, 2, 695, 698, 9, 6, 2, 2, 696, 699, 5, 6, 4, 2, 697, 699, 5, 8, 5, 2, 698, 696, 3, 2, 2, 2, 698, 697, 3, 2, 2, 2, 699, 700, 3, 2, 2, 2, 700, 704, 7, 10, 2, 2, 701, 702, 7, 137, 2, 2, 702, 703, 7, 194, 2, 2, 703, 705, 7, 105, 2, 2, 704, 701, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 707, 3, 2, 2, 2, 706, 708, 5, 40, 21, 2, 707, 706, 3, 2, 2, 2, 708, 709, 3, 2, 2, 2, 709, 707, 3, 2, 2, 2, 709, 710, 3, 2, 2, 2, 710, 1251, 3, 2, 2, 2, 711, 712, 7, 13, 2, 2, 712, 713, 7, 286, 2, 2, 713, 714, 5, 6, 4, 2, 714, 715, 5, 42, 22, 2, 715, 716, 7, 237, 2, 2, 716, 717, 7, 302, 2, 2, 717, 718, 5, 42, 22, 2, 718, 1251, 3, 2, 2, 2, 719, 720, 7, 13, 2, 2, 720, 723, 9, 6, 2, 2, 721, 724, 5, 6, 4, 2, 722, 724, 5, 8, 5, 2, 723, 721, 3, 2, 2, 2, 723, 722, 3, 2, 2, 2, 724, 725, 3, 2, 2, 2, 725, 728, 7, 97, 2, 2, 726, 727, 7, 137, 2, 2, 727, 729, 7, 105, 2, 2, 728, 726, 3, 2, 2, 2, 728, 729, 3, 2, 2, 2, 729, 730, 3, 2, 2, 2, 730, 735, 5, 42, 22, 2, 731, 732, 7, 6, 2, 2, 732, 734, 5, 42, 22, 2, 733, 731, 3, 2, 2, 2, 734, 737, 3, 2, 2, 2, 735, 733, 3, 2, 2, 2, 735, 736, 3, 2, 2, 2, 736, 739, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 738, 740, 7, 226, 2, 2, 739, 738, 3, 2, 2, 2, 739, 740, 3, 2, 2, 2, 740, 1251, 3, 2, 2, 2, 741, 742, 7, 13, 2, 2, 742, 743, 7, 286, 2, 2, 743, 745, 5, 6, 4, 2, 744, 746, 5, 42, 22, 2, 745, 744, 3, 2, 2, 2, 745, 746, 3, 2, 2, 2, 746, 747, 3, 2, 2, 2, 747, 748, 7, 263, 2, 2, 748, 749, 5, 32, 17, 2, 749, 1251, 3, 2, 2, 2, 750, 751, 7, 13, 2, 2, 751, 752, 7, 286, 2, 2, 752, 753, 5, 6, 4, 2, 753, 754, 7, 233, 2, 2, 754, 755, 7, 215, 2, 2, 755, 1251, 3, 2, 2, 2, 756, 757, 7, 97, 2, 2, 757, 760, 7, 286, 2, 2, 758, 759, 7, 137, 2, 2, 759, 761, 7, 105, 2, 2, 760, 758, 3, 2, 2, 2, 760, 761, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 764, 5, 6, 4, 2, 763, 765, 7, 226, 2, 2, 764, 763, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 1251, 3, 2, 2, 2, 766, 767, 7, 97, 2, 2, 767, 770, 7, 331, 2, 2, 768, 769, 7, 137, 2, 2, 769, 771, 7, 105, 2, 2, 770, 768, 3, 2, 2, 2, 770, 771, 3, 2, 2, 2, 771, 772, 3, 2, 2, 2, 772, 1251, 5, 8, 5, 2, 773, 776, 7, 61, 2, 2, 774, 775, 7, 204, 2, 2, 775, 777, 7, 240, 2, 2, 776, 774, 3, 2, 2, 2, 776, 777, 3, 2, 2, 2, 777, 782, 3, 2, 2, 2, 778, 780, 7, 128, 2, 2, 779, 778, 3, 2, 2, 2, 779, 780, 3, 2, 2, 2, 780, 781, 3, 2, 2, 2, 781, 783, 7, 291, 2, 2, 782, 779, 3, 2, 2, 2, 782, 783, 3, 2, 2, 2, 783, 784, 3, 2, 2, 2, 784, 788, 7, 331, 2, 2, 785, 786, 7, 137, 2, 2, 786, 787, 7, 194, 2, 2, 787, 789, 7, 105, 2, 2, 788, 785, 3, 2, 2, 2, 788, 789, 3, 2, 2, 2, 789, 790, 3, 2, 2, 2, 790, 792, 5, 8, 5, 2, 791, 793, 5, 204, 103, 2, 792, 791, 3, 2, 2, 2, 792, 793, 3, 2, 2, 2, 793, 802, 3, 2, 2, 2, 794, 801, 5, 34, 18, 2, 795, 796, 7, 214, 2, 2, 796, 797, 7, 200, 2, 2, 797, 801, 5, 196, 99, 2, 798, 799, 7, 290, 2, 2, 799, 801, 5, 62, 32, 2, 800, 794, 3, 2, 2, 2, 800, 795, 3, 2, 2, 2, 800, 798, 3, 2, 2, 2, 801, 804, 3, 2, 2, 2, 802, 800, 3, 2, 2, 2, 802, 803, 3, 2, 2, 2, 803, 805, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 805, 806, 7, 22, 2, 2, 806, 807, 5, 36, 19, 2, 807, 1251, 3, 2, 2, 2, 808, 811, 7, 61, 2, 2, 809, 810, 7, 204, 2, 2, 810, 812, 7, 240, 2, 2, 811, 809, 3, 2, 2, 2, 811, 812, 3, 2, 2, 2, 812, 814, 3, 2, 2, 2, 813, 815, 7, 128, 2, 2, 814, 813, 3, 2, 2, 2, 814, 815, 3, 2, 2, 2, 815, 816, 3, 2, 2, 2, 816, 817, 7, 291, 2, 2, 817, 818, 7, 331, 2, 2, 818, 823, 5, 236, 119, 2, 819, 820, 7, 4, 2, 2, 820, 821, 5, 314, 158, 2, 821, 822, 7, 5, 2, 2, 822, 824, 3, 2, 2, 2, 823, 819, 3, 2, 2, 2, 823, 824, 3, 2, 2, 2, 824, 825, 3, 2, 2, 2, 825, 828, 5, 58, 30, 2, 826, 827, 7, 203, 2, 2, 827, 829, 5, 62, 32, 2, 828, 826, 3, 2, 2, 2, 828, 829, 3, 2, 2, 2, 829, 1251, 3, 2, 2, 2, 830, 831, 7, 13, 2, 2, 831, 832, 7, 331, 2, 2, 832, 834, 5, 8, 5, 2, 833, 835, 7, 22, 2, 2, 834, 833, 3, 2, 2, 2, 834, 835, 3, 2, 2, 2, 835, 836, 3, 2, 2, 2, 836, 837, 5, 36, 19, 2, 837, 1251, 3, 2, 2, 2, 838, 841, 7, 61, 2, 2, 839, 840, 7, 204, 2, 2, 840, 842, 7, 240, 2, 2, 841, 839, 3, 2, 2, 2, 841, 842, 3, 2, 2, 2, 842, 844, 3, 2, 2, 2, 843, 845, 7, 291, 2, 2, 844, 843, 3, 2, 2, 2, 844, 845, 3, 2, 2, 2, 845, 846, 3, 2, 2, 2, 846, 850, 7, 125, 2, 2, 847, 848, 7, 137, 2, 2, 848, 849, 7, 194, 2, 2, 849, 851, 7, 105, 2, 2, 850, 847, 3, 2, 2, 2, 850, 851, 3, 2, 2, 2, 851, 852, 3, 2, 2, 2, 852, 853, 5, 10, 6, 2, 853, 854, 7, 22, 2, 2, 854, 864, 5, 364, 183, 2, 855, 856, 7, 325, 2, 2, 856, 861, 5, 84, 43, 2, 857, 858, 7, 6, 2, 2, 858, 860, 5, 84, 43, 2, 859, 857, 3, 2, 2, 2, 860, 863, 3, 2, 2, 2, 861, 859, 3, 2, 2, 2, 861, 862, 3, 2, 2, 2, 862, 865, 3, 2, 2, 2, 863, 861, 3, 2, 2, 2, 864, 855, 3, 2, 2, 2, 864, 865, 3, 2, 2, 2, 865, 1251, 3, 2, 2, 2, 866, 868, 7, 97, 2, 2, 867, 869, 7, 291, 2, 2, 868, 867, 3, 2, 2, 2, 868, 869, 3, 2, 2, 2, 869, 870, 3, 2, 2, 2, 870, 873, 7, 125, 2, 2, 871, 872, 7, 137, 2, 2, 872, 874, 7, 105, 2, 2, 873, 871, 3, 2, 2, 2, 873, 874, 3, 2, 2, 2, 874, 875, 3, 2, 2, 2, 875, 1251, 5, 10, 6, 2, 876, 879, 7, 83, 2, 2, 877, 878, 7, 204, 2, 2, 878, 880, 7, 240, 2, 2, 879, 877, 3, 2, 2, 2, 879, 880, 3, 2, 2, 2, 880, 882, 3, 2, 2, 2, 881, 883, 7, 329, 2, 2, 882, 881, 3, 2, 2, 2, 882, 883, 3, 2, 2, 2, 883, 884, 3, 2, 2, 2, 884, 886, 5, 10, 6, 2, 885, 887, 5, 302, 152, 2, 886, 885, 3, 2, 2, 2, 886, 887, 3, 2, 2, 2, 887, 889, 3, 2, 2, 2, 888, 890, 5, 312, 157, 2, 889, 888, 3, 2, 2, 2, 889, 890, 3, 2, 2, 2, 890, 1251, 3, 2, 2, 2, 891, 892, 7, 97, 2, 2, 892, 893, 7, 291, 2, 2, 893, 896, 7, 329, 2, 2, 894, 895, 7, 137, 2, 2, 895, 897, 7, 105, 2, 2, 896, 894, 3, 2, 2, 2, 896, 897, 3, 2, 2, 2, 897, 898, 3, 2, 2, 2, 898, 1251, 5, 88, 45, 2, 899, 901, 7, 106, 2, 2, 900, 902, 9, 8, 2, 2, 901, 900, 3, 2, 2, 2, 901, 902, 3, 2, 2, 2, 902, 903, 3, 2, 2, 2, 903, 1251, 5, 14, 8, 2, 904, 905, 7, 267, 2, 2, 905, 908, 7, 287, 2, 2, 906, 907, 9, 4, 2, 2, 907, 909, 5, 6, 4, 2, 908, 906, 3, 2, 2, 2, 908, 909, 3, 2, 2, 2, 909, 914, 3, 2, 2, 2, 910, 912, 7, 162, 2, 2, 911, 910, 3, 2, 2, 2, 911, 912, 3, 2, 2, 2, 912, 913, 3, 2, 2, 2, 913, 915, 5, 364, 183, 2, 914, 911, 3, 2, 2, 2, 914, 915, 3, 2, 2, 2, 915, 1251, 3, 2, 2, 2, 916, 917, 7, 267, 2, 2, 917, 918, 7, 286, 2, 2, 918, 921, 7, 108, 2, 2, 919, 920, 9, 4, 2, 2, 920, 922, 5, 6, 4, 2, 921, 919, 3, 2, 2, 2, 921, 922, 3, 2, 2, 2, 922, 923, 3, 2, 2, 2, 923, 924, 7, 162, 2, 2, 924, 926, 5, 364, 183, 2, 925, 927, 5, 42, 22, 2, 926, 925, 3, 2, 2, 2, 926, 927, 3, 2, 2, 2, 927, 1251, 3, 2, 2, 2, 928, 929, 7, 267, 2, 2, 929, 930, 7, 290, 2, 2, 930, 935, 5, 6, 4, 2, 931, 932, 7, 4, 2, 2, 932, 933, 5, 66, 34, 2, 933, 934, 7, 5, 2, 2, 934, 936, 3, 2, 2, 2, 935, 931, 3, 2, 2, 2, 935, 936, 3, 2, 2, 2, 936, 1251, 3, 2, 2, 2, 937, 938, 7, 267, 2, 2, 938, 939, 7, 52, 2, 2, 939, 940, 9, 4, 2, 2, 940, 943, 5, 6, 4, 2, 941, 942, 9, 4, 2, 2, 942, 944, 5, 230, 116, 2, 943, 941, 3, 2, 2, 2, 943, 944, 3, 2, 2, 2, 944, 1251, 3, 2, 2, 2, 945, 946, 7, 267, 2, 2, 946, 949, 7, 332, 2, 2, 947, 948, 9, 4, 2, 2, 948, 950, 5, 8, 5, 2, 949, 947, 3, 2, 2, 2, 949, 950, 3, 2, 2, 2, 950, 955, 3, 2, 2, 2, 951, 953, 7, 162, 2, 2, 952, 951, 3, 2, 2, 2, 952, 953, 3, 2, 2, 2, 953, 954, 3, 2, 2, 2, 954, 956, 5, 364, 183, 2, 955, 952, 3, 2, 2, 2, 955, 956, 3, 2, 2, 2, 956, 1251, 3, 2, 2, 2, 957, 958, 7, 267, 2, 2, 958, 959, 7, 215, 2, 2, 959, 961, 5, 88, 45, 2, 960, 962, 5, 42, 22, 2, 961, 960, 3, 2, 2, 2, 961, 962, 3, 2, 2, 2, 962, 1251, 3, 2, 2, 2, 963, 965, 7, 267, 2, 2, 964, 966, 5, 352, 177, 2, 965, 964, 3, 2, 2, 2, 965, 966, 3, 2, 2, 2, 966, 967, 3, 2, 2, 2, 967, 970, 7, 126, 2, 2, 968, 969, 9, 4, 2, 2, 969, 971, 5, 6, 4, 2, 970, 968, 3, 2, 2, 2, 970, 971, 3, 2, 2, 2, 971, 979, 3, 2, 2, 2, 972, 974, 7, 162, 2, 2, 973, 972, 3, 2, 2, 2, 973, 974, 3, 2, 2, 2, 974, 977, 3, 2, 2, 2, 975, 978, 5, 230, 116, 2, 976, 978, 5, 364, 183, 2, 977, 975, 3, 2, 2, 2, 977, 976, 3, 2, 2, 2, 978, 980, 3, 2, 2, 2, 979, 973, 3, 2, 2, 2, 979, 980, 3, 2, 2, 2, 980, 1251, 3, 2, 2, 2, 981, 982, 7, 267, 2, 2, 982, 983, 7, 61, 2, 2, 983, 984, 7, 286, 2, 2, 984, 987, 5, 6, 4, 2, 985, 986, 7, 22, 2, 2, 986, 988, 7, 260, 2, 2, 987, 985, 3, 2, 2, 2, 987, 988, 3, 2, 2, 2, 988, 1251, 3, 2, 2, 2, 989, 990, 7, 267, 2, 2, 990, 991, 7, 64, 2, 2, 991, 1251, 5, 46, 24, 2, 992, 993, 7, 267, 2, 2, 993, 998, 7, 40, 2, 2, 994, 996, 7, 162, 2, 2, 995, 994, 3, 2, 2, 2, 995, 996, 3, 2, 2, 2, 996, 997, 3, 2, 2, 2, 997, 999, 5, 364, 183, 2, 998, 995, 3, 2, 2, 2, 998, 999, 3, 2, 2, 2, 999, 1251, 3, 2, 2, 2, 1000, 1001, 9, 9, 2, 2, 1001, 1003, 7, 125, 2, 2, 1002, 1004, 7, 108, 2, 2, 1003, 1002, 3, 2, 2, 2, 1003, 1004, 3, 2, 2, 2, 1004, 1005, 3, 2, 2, 2, 1005, 1251, 5, 50, 26, 2, 1006, 1007, 9, 9, 2, 2, 1007, 1009, 5, 46, 24, 2, 1008, 1010, 7, 108, 2, 2, 1009, 1008, 3, 2, 2, 2, 1009, 1010, 3, 2, 2, 2, 1010, 1011, 3, 2, 2, 2, 1011, 1012, 5, 12, 7, 2, 1012, 1251, 3, 2, 2, 2, 1013, 1015, 9, 9, 2, 2, 1014, 1016, 7, 286, 2, 2, 1015, 1014, 3, 2, 2, 2, 1015, 1016, 3, 2, 2, 2, 1016, 1018, 3, 2, 2, 2, 1017, 1019, 9, 10, 2, 2, 1018, 1017, 3, 2, 2, 2, 1018, 1019, 3, 2, 2, 2, 1019, 1020, 3, 2, 2, 2, 1020, 1022, 5, 6, 4, 2, 1021, 1023, 5, 42, 22, 2, 1022, 1021, 3, 2, 2, 2, 1022, 1023, 3, 2, 2, 2, 1023, 1025, 3, 2, 2, 2, 1024, 1026, 5, 52, 27, 2, 1025, 1024, 3, 2, 2, 2, 1025, 1026, 3, 2, 2, 2, 1026, 1251, 3, 2, 2, 2, 1027, 1029, 9, 9, 2, 2, 1028, 1030, 7, 228, 2, 2, 1029, 1028, 3, 2, 2, 2, 1029, 1030, 3, 2, 2, 2, 1030, 1031, 3, 2, 2, 2, 1031, 1251, 5, 36, 19, 2, 1032, 1033, 7, 53, 2, 2, 1033, 1034, 7, 200, 2, 2, 1034, 1035, 5, 46, 24, 2, 1035, 1036, 5, 12, 7, 2, 1036, 1037, 7, 153, 2, 2, 1037, 1038, 5, 366, 184, 2, 1038, 1251, 3, 2, 2, 2, 1039, 1040, 7, 53, 2, 2, 1040, 1041, 7, 200, 2, 2, 1041, 1042, 7, 286, 2, 2, 1042, 1043, 5, 6, 4, 2, 1043, 1044, 7, 153, 2, 2, 1044, 1045, 5, 366, 184, 2, 1045, 1251, 3, 2, 2, 2, 1046, 1047, 7, 236, 2, 2, 1047, 1048, 7, 286, 2, 2, 1048, 1251, 5, 6, 4, 2, 1049, 1050, 7, 236, 2, 2, 1050, 1051, 7, 125, 2, 2, 1051, 1251, 5, 10, 6, 2, 1052, 1060, 7, 236, 2, 2, 1053, 1061, 5, 364, 183, 2, 1054, 1056, 11, 2, 2, 2, 1055, 1054, 3, 2, 2, 2, 1056, 1059, 3, 2, 2, 2, 1057, 1058, 3, 2, 2, 2, 1057, 1055, 3, 2, 2, 2, 1058, 1061, 3, 2, 2, 2, 1059, 1057, 3, 2, 2, 2, 1060, 1053, 3, 2, 2, 2, 1060, 1057, 3, 2, 2, 2, 1061, 1251, 3, 2, 2, 2, 1062, 1064, 7, 35, 2, 2, 1063, 1065, 7, 159, 2, 2, 1064, 1063, 3, 2, 2, 2, 1064, 1065, 3, 2, 2, 2, 1065, 1066, 3, 2, 2, 2, 1066, 1067, 7, 286, 2, 2, 1067, 1070, 5, 6, 4, 2, 1068, 1069, 7, 203, 2, 2, 1069, 1071, 5, 62, 32, 2, 1070, 1068, 3, 2, 2, 2, 1070, 1071, 3, 2, 2, 2, 1071, 1076, 3, 2, 2, 2, 1072, 1074, 7, 22, 2, 2, 1073, 1072, 3, 2, 2, 2, 1073, 1074, 3, 2, 2, 2, 1074, 1075, 3, 2, 2, 2, 1075, 1077, 5, 36, 19, 2, 1076, 1073, 3, 2, 2, 2, 1076, 1077, 3, 2, 2, 2, 1077, 1251, 3, 2, 2, 2, 1078, 1079, 7, 315, 2, 2, 1079, 1082, 7, 286, 2, 2, 1080, 1081, 7, 137, 2, 2, 1081, 1083, 7, 105, 2, 2, 1082, 1080, 3, 2, 2, 2, 1082, 1083, 3, 2, 2, 2, 1083, 1084, 3, 2, 2, 2, 1084, 1251, 5, 6, 4, 2, 1085, 1086, 7, 45, 2, 2, 1086, 1251, 7, 35, 2, 2, 1087, 1088, 7, 167, 2, 2, 1088, 1090, 7, 72, 2, 2, 1089, 1091, 7, 168, 2, 2, 1090, 1089, 3, 2, 2, 2, 1090, 1091, 3, 2, 2, 2, 1091, 1092, 3, 2, 2, 2, 1092, 1093, 7, 145, 2, 2, 1093, 1095, 5, 364, 183, 2, 1094, 1096, 7, 212, 2, 2, 1095, 1094, 3, 2, 2, 2, 1095, 1096, 3, 2, 2, 2, 1096, 1097, 3, 2, 2, 2, 1097, 1098, 7, 152, 2, 2, 1098, 1099, 7, 286, 2, 2, 1099, 1101, 5, 6, 4, 2, 1100, 1102, 5, 42, 22, 2, 1101, 1100, 3, 2, 2, 2, 1101, 1102, 3, 2, 2, 2, 1102, 1251, 3, 2, 2, 2, 1103, 1104, 7, 310, 2, 2, 1104, 1105, 7, 286, 2, 2, 1105, 1107, 5, 6, 4, 2, 1106, 1108, 5, 42, 22, 2, 1107, 1106, 3, 2, 2, 2, 1107, 1108, 3, 2, 2, 2, 1108, 1251, 3, 2, 2, 2, 1109, 1111, 7, 186, 2, 2, 1110, 1109, 3, 2, 2, 2, 1110, 1111, 3, 2, 2, 2, 1111, 1112, 3, 2, 2, 2, 1112, 1113, 7, 238, 2, 2, 1113, 1114, 7, 286, 2, 2, 1114, 1117, 5, 6, 4, 2, 1115, 1116, 9, 11, 2, 2, 1116, 1118, 7, 215, 2, 2, 1117, 1115, 3, 2, 2, 2, 1117, 1118, 3, 2, 2, 2, 1118, 1251, 3, 2, 2, 2, 1119, 1120, 9, 12, 2, 2, 1120, 1124, 5, 352, 177, 2, 1121, 1123, 11, 2, 2, 2, 1122, 1121, 3, 2, 2, 2, 1123, 1126, 3, 2, 2, 2, 1124, 1125, 3, 2, 2, 2, 1124, 1122, 3, 2, 2, 2, 1125, 1251, 3, 2, 2, 2, 1126, 1124, 3, 2, 2, 2, 1127, 1128, 7, 263, 2, 2, 1128, 1132, 7, 247, 2, 2, 1129, 1131, 11, 2, 2, 2, 1130, 1129, 3, 2, 2, 2, 1131, 1134, 3, 2, 2, 2, 1132, 1133, 3, 2, 2, 2, 1132, 1130, 3, 2, 2, 2, 1133, 1251, 3, 2, 2, 2, 1134, 1132, 3, 2, 2, 2, 1135, 1136, 7, 263, 2, 2, 1136, 1137, 7, 294, 2, 2, 1137, 1138, 7, 343, 2, 2, 1138, 1251, 5, 282, 142, 2, 1139, 1140, 7, 263, 2, 2, 1140, 1141, 7, 294, 2, 2, 1141, 1142, 7, 343, 2, 2, 1142, 1251, 5, 16, 9, 2, 1143, 1144, 7, 263, 2, 2, 1144, 1145, 7, 294, 2, 2, 1145, 1149, 7, 343, 2, 2, 1146, 1148, 11, 2, 2, 2, 1147, 1146, 3, 2, 2, 2, 1148, 1151, 3, 2, 2, 2, 1149, 1150, 3, 2, 2, 2, 1149, 1147, 3, 2, 2, 2, 1150, 1251, 3, 2, 2, 2, 1151, 1149, 3, 2, 2, 2, 1152, 1153, 7, 263, 2, 2, 1153, 1154, 9, 13, 2, 2, 1154, 1251, 5, 124, 63, 2, 1155, 1156, 7, 263, 2, 2, 1156, 1157, 9, 13, 2, 2, 1157, 1158, 7, 4, 2, 2, 1158, 1159, 5, 228, 115, 2, 1159, 1160, 7, 5, 2, 2, 1160, 1161, 7, 344, 2, 2, 1161, 1162, 7, 4, 2, 2, 1162, 1163, 5, 36, 19, 2, 1163, 1164, 7, 5, 2, 2, 1164, 1251, 3, 2, 2, 2, 1165, 1166, 7, 263, 2, 2, 1166, 1167, 5, 18, 10, 2, 1167, 1168, 7, 344, 2, 2, 1168, 1169, 5, 20, 11, 2, 1169, 1251, 3, 2, 2, 2, 1170, 1171, 7, 263, 2, 2, 1171, 1179, 5, 18, 10, 2, 1172, 1176, 7, 344, 2, 2, 1173, 1175, 11, 2, 2, 2, 1174, 1173, 3, 2, 2, 2, 1175, 1178, 3, 2, 2, 2, 1176, 1177, 3, 2, 2, 2, 1176, 1174, 3, 2, 2, 2, 1177, 1180, 3, 2, 2, 2, 1178, 1176, 3, 2, 2, 2, 1179, 1172, 3, 2, 2, 2, 1179, 1180, 3, 2, 2, 2, 1180, 1251, 3, 2, 2, 2, 1181, 1185, 7, 263, 2, 2, 1182, 1184, 11, 2, 2, 2, 1183, 1182, 3, 2, 2, 2, 1184, 1187, 3, 2, 2, 2, 1185, 1186, 3, 2, 2, 2, 1185, 1183, 3, 2, 2, 2, 1186, 1188, 3, 2, 2, 2, 1187, 1185, 3, 2, 2, 2, 1188, 1189, 7, 344, 2, 2, 1189, 1251, 5, 20, 11, 2, 1190, 1194, 7, 263, 2, 2, 1191, 1193, 11, 2, 2, 2, 1192, 1191, 3, 2, 2, 2, 1193, 1196, 3, 2, 2, 2, 1194, 1195, 3, 2, 2, 2, 1194, 1192, 3, 2, 2, 2, 1195, 1251, 3, 2, 2, 2, 1196, 1194, 3, 2, 2, 2, 1197, 1198, 7, 241, 2, 2, 1198, 1251, 5, 18, 10, 2, 1199, 1203, 7, 241, 2, 2, 1200, 1202, 11, 2, 2, 2, 1201, 1200, 3, 2, 2, 2, 1202, 1205, 3, 2, 2, 2, 1203, 1204, 3, 2, 2, 2, 1203, 1201, 3, 2, 2, 2, 1204, 1251, 3, 2, 2, 2, 1205, 1203, 3, 2, 2, 2, 1206, 1207, 7, 61, 2, 2, 1207, 1211, 7, 142, 2, 2, 1208, 1209, 7, 137, 2, 2, 1209, 1210, 7, 194, 2, 2, 1210, 1212, 7, 105, 2, 2, 1211, 1208, 3, 2, 2, 2, 1211, 1212, 3, 2, 2, 2, 1212, 1213, 3, 2, 2, 2, 1213, 1214, 5, 352, 177, 2, 1214, 1216, 7, 200, 2, 2, 1215, 1217, 7, 286, 2, 2, 1216, 1215, 3, 2, 2, 2, 1216, 1217, 3, 2, 2, 2, 1217, 1218, 3, 2, 2, 2, 1218, 1221, 5, 6, 4, 2, 1219, 1220, 7, 325, 2, 2, 1220, 1222, 5, 352, 177, 2, 1221, 1219, 3, 2, 2, 2, 1221, 1222, 3, 2, 2, 2, 1222, 1223, 3, 2, 2, 2, 1223, 1224, 7, 4, 2, 2, 1224, 1225, 5, 232, 117, 2, 1225, 1228, 7, 5, 2, 2, 1226, 1227, 7, 203, 2, 2, 1227, 1229, 5, 62, 32, 2, 1228, 1226, 3, 2, 2, 2, 1228, 1229, 3, 2, 2, 2, 1229, 1251, 3, 2, 2, 2, 1230, 1231, 7, 97, 2, 2, 1231, 1234, 7, 142, 2, 2, 1232, 1233, 7, 137, 2, 2, 1233, 1235, 7, 105, 2, 2, 1234, 1232, 3, 2, 2, 2, 1234, 1235, 3, 2, 2, 2, 1235, 1236, 3, 2, 2, 2, 1236, 1237, 5, 352, 177, 2, 1237, 1239, 7, 200, 2, 2, 1238, 1240, 7, 286, 2, 2, 1239, 1238, 3, 2, 2, 2, 1239, 1240, 3, 2, 2, 2, 1240, 1241, 3, 2, 2, 2, 1241, 1242, 5, 6, 4, 2, 1242, 1251, 3, 2, 2, 2, 1243, 1247, 5, 22, 12, 2, 1244, 1246, 11, 2, 2, 2, 1245, 1244, 3, 2, 2, 2, 1246, 1249, 3, 2, 2, 2, 1247, 1248, 3, 2, 2, 2, 1247, 1245, 3, 2, 2, 2, 1248, 1251, 3, 2, 2, 2, 1249, 1247, 3, 2, 2, 2, 1250, 396, 3, 2, 2, 2, 1250, 398, 3, 2, 2, 2, 1250, 401, 3, 2, 2, 2, 1250, 403, 3, 2, 2, 2, 1250, 407, 3, 2, 2, 2, 1250, 413, 3, 2, 2, 2, 1250, 431, 3, 2, 2, 2, 1250, 438, 3, 2, 2, 2, 1250, 444, 3, 2, 2, 2, 1250, 454, 3, 2, 2, 2, 1250, 466, 3, 2, 2, 2, 1250, 483, 3, 2, 2, 2, 1250, 504, 3, 2, 2, 2, 1250, 521, 3, 2, 2, 2, 1250, 538, 3, 2, 2, 2, 1250, 549, 3, 2, 2, 2, 1250, 556, 3, 2, 2, 2, 1250, 565, 3, 2, 2, 2, 1250, 574, 3, 2, 2, 2, 1250, 587, 3, 2, 2, 2, 1250, 598, 3, 2, 2, 2, 1250, 608, 3, 2, 2, 2, 1250, 618, 3, 2, 2, 2, 1250, 632, 3, 2, 2, 2, 1250, 643, 3, 2, 2, 2, 1250, 658, 3, 2, 2, 2, 1250, 670, 3, 2, 2, 2, 1250, 684, 3, 2, 2, 2, 1250, 694, 3, 2, 2, 2, 1250, 711, 3, 2, 2, 2, 1250, 719, 3, 2, 2, 2, 1250, 741, 3, 2, 2, 2, 1250, 750, 3, 2, 2, 2, 1250, 756, 3, 2, 2, 2, 1250, 766, 3, 2, 2, 2, 1250, 773, 3, 2, 2, 2, 1250, 808, 3, 2, 2, 2, 1250, 830, 3, 2, 2, 2, 1250, 838, 3, 2, 2, 2, 1250, 866, 3, 2, 2, 2, 1250, 876, 3, 2, 2, 2, 1250, 891, 3, 2, 2, 2, 1250, 899, 3, 2, 2, 2, 1250, 904, 3, 2, 2, 2, 1250, 916, 3, 2, 2, 2, 1250, 928, 3, 2, 2, 2, 1250, 937, 3, 2, 2, 2, 1250, 945, 3, 2, 2, 2, 1250, 957, 3, 2, 2, 2, 1250, 963, 3, 2, 2, 2, 1250, 981, 3, 2, 2, 2, 1250, 989, 3, 2, 2, 2, 1250, 992, 3, 2, 2, 2, 1250, 1000, 3, 2, 2, 2, 1250, 1006, 3, 2, 2, 2, 1250, 1013, 3, 2, 2, 2, 1250, 1027, 3, 2, 2, 2, 1250, 1032, 3, 2, 2, 2, 1250, 1039, 3, 2, 2, 2, 1250, 1046, 3, 2, 2, 2, 1250, 1049, 3, 2, 2, 2, 1250, 1052, 3, 2, 2, 2, 1250, 1062, 3, 2, 2, 2, 1250, 1078, 3, 2, 2, 2, 1250, 1085, 3, 2, 2, 2, 1250, 1087, 3, 2, 2, 2, 1250, 1103, 3, 2, 2, 2, 1250, 1110, 3, 2, 2, 2, 1250, 1119, 3, 2, 2, 2, 1250, 1127, 3, 2, 2, 2, 1250, 1135, 3, 2, 2, 2, 1250, 1139, 3, 2, 2, 2, 1250, 1143, 3, 2, 2, 2, 1250, 1152, 3, 2, 2, 2, 1250, 1155, 3, 2, 2, 2, 1250, 1165, 3, 2, 2, 2, 1250, 1170, 3, 2, 2, 2, 1250, 1181, 3, 2, 2, 2, 1250, 1190, 3, 2, 2, 2, 1250, 1197, 3, 2, 2, 2, 1250, 1199, 3, 2, 2, 2, 1250, 1206, 3, 2, 2, 2, 1250, 1230, 3, 2, 2, 2, 1250, 1243, 3, 2, 2, 2, 1251, 15, 3, 2, 2, 2, 1252, 1255, 5, 364, 183, 2, 1253, 1255, 7, 168, 2, 2, 1254, 1252, 3, 2, 2, 2, 1254, 1253, 3, 2, 2, 2, 1255, 17, 3, 2, 2, 2, 1256, 1257, 5, 356, 179, 2, 1257, 19, 3, 2, 2, 2, 1258, 1259, 5, 358, 180, 2, 1259, 21, 3, 2, 2, 2, 1260, 1261, 7, 61, 2, 2, 1261, 1429, 7, 247, 2, 2, 1262, 1263, 7, 97, 2, 2, 1263, 1429, 7, 247, 2, 2, 1264, 1266, 7, 129, 2, 2, 1265, 1267, 7, 247, 2, 2, 1266, 1265, 3, 2, 2, 2, 1266, 1267, 3, 2, 2, 2, 1267, 1429, 3, 2, 2, 2, 1268, 1270, 7, 244, 2, 2, 1269, 1271, 7, 247, 2, 2, 1270, 1269, 3, 2, 2, 2, 1270, 1271, 3, 2, 2, 2, 1271, 1429, 3, 2, 2, 2, 1272, 1273, 7, 267, 2, 2, 1273, 1429, 7, 129, 2, 2, 1274, 1275, 7, 267, 2, 2, 1275, 1277, 7, 247, 2, 2, 1276, 1278, 7, 129, 2, 2, 1277, 1276, 3, 2, 2, 2, 1277, 1278, 3, 2, 2, 2, 1278, 1429, 3, 2, 2, 2, 1279, 1280, 7, 267, 2, 2, 1280, 1429, 7, 224, 2, 2, 1281, 1282, 7, 267, 2, 2, 1282, 1429, 7, 248, 2, 2, 1283, 1284, 7, 267, 2, 2, 1284, 1285, 7, 64, 2, 2, 1285, 1429, 7, 248, 2, 2, 1286, 1287, 7, 107, 2, 2, 1287, 1429, 7, 286, 2, 2, 1288, 1289, 7, 139, 2, 2, 1289, 1429, 7, 286, 2, 2, 1290, 1291, 7, 267, 2, 2, 1291, 1429, 7, 56, 2, 2, 1292, 1293, 7, 267, 2, 2, 1293, 1294, 7, 61, 2, 2, 1294, 1429, 7, 286, 2, 2, 1295, 1296, 7, 267, 2, 2, 1296, 1429, 7, 306, 2, 2, 1297, 1298, 7, 267, 2, 2, 1298, 1429, 7, 143, 2, 2, 1299, 1300, 7, 267, 2, 2, 1300, 1429, 7, 171, 2, 2, 1301, 1302, 7, 61, 2, 2, 1302, 1429, 7, 142, 2, 2, 1303, 1304, 7, 97, 2, 2, 1304, 1429, 7, 142, 2, 2, 1305, 1306, 7, 13, 2, 2, 1306, 1429, 7, 142, 2, 2, 1307, 1308, 7, 170, 2, 2, 1308, 1429, 7, 286, 2, 2, 1309, 1310, 7, 170, 2, 2, 1310, 1429, 7, 74, 2, 2, 1311, 1312, 7, 319, 2, 2, 1312, 1429, 7, 286, 2, 2, 1313, 1314, 7, 319, 2, 2, 1314, 1429, 7, 74, 2, 2, 1315, 1316, 7, 61, 2, 2, 1316, 1317, 7, 291, 2, 2, 1317, 1429, 7, 174, 2, 2, 1318, 1319, 7, 97, 2, 2, 1319, 1320, 7, 291, 2, 2, 1320, 1429, 7, 174, 2, 2, 1321, 1322, 7, 13, 2, 2, 1322, 1323, 7, 286, 2, 2, 1323, 1324, 5, 236, 119, 2, 1324, 1325, 7, 194, 2, 2, 1325, 1326, 7, 47, 2, 2, 1326, 1429, 3, 2, 2, 2, 1327, 1328, 7, 13, 2, 2, 1328, 1329, 7, 286, 2, 2, 1329, 1330, 5, 236, 119, 2, 1330, 1331, 7, 47, 2, 2, 1331, 1332, 7, 33, 2, 2, 1332, 1429, 3, 2, 2, 2, 1333, 1334, 7, 13, 2, 2, 1334, 1335, 7, 286, 2, 2, 1335, 1336, 5, 236, 119, 2, 1336, 1337, 7, 194, 2, 2, 1337, 1338, 7, 273, 2, 2, 1338, 1429, 3, 2, 2, 2, 1339, 1340, 7, 13, 2, 2, 1340, 1341, 7, 286, 2, 2, 1341, 1342, 5, 236, 119, 2, 1342, 1343, 7, 269, 2, 2, 1343, 1344, 7, 33, 2, 2, 1344, 1429, 3, 2, 2, 2, 1345, 1346, 7, 13, 2, 2, 1346, 1347, 7, 286, 2, 2, 1347, 1348, 5, 236, 119, 2, 1348, 1349, 7, 194, 2, 2, 1349, 1350, 7, 269, 2, 2, 1350, 1429, 3, 2, 2, 2, 1351, 1352, 7, 13, 2, 2, 1352, 1353, 7, 286, 2, 2, 1353, 1354, 5, 236, 119, 2, 1354, 1355, 7, 194, 2, 2, 1355, 1356, 7, 277, 2, 2, 1356, 1357, 7, 22, 2, 2, 1357, 1358, 7, 91, 2, 2, 1358, 1429, 3, 2, 2, 2, 1359, 1360, 7, 13, 2, 2, 1360, 1361, 7, 286, 2, 2, 1361, 1362, 5, 236, 119, 2, 1362, 1363, 7, 263, 2, 2, 1363, 1364, 7, 269, 2, 2, 1364, 1365, 7, 169, 2, 2, 1365, 1429, 3, 2, 2, 2, 1366, 1367, 7, 13, 2, 2, 1367, 1368, 7, 286, 2, 2, 1368, 1369, 5, 236, 119, 2, 1369, 1370, 7, 103, 2, 2, 1370, 1371, 7, 213, 2, 2, 1371, 1429, 3, 2, 2, 2, 1372, 1373, 7, 13, 2, 2, 1373, 1374, 7, 286, 2, 2, 1374, 1375, 5, 236, 119, 2, 1375, 1376, 7, 20, 2, 2, 1376, 1377, 7, 213, 2, 2, 1377, 1429, 3, 2, 2, 2, 1378, 1379, 7, 13, 2, 2, 1379, 1380, 7, 286, 2, 2, 1380, 1381, 5, 236, 119, 2, 1381, 1382, 7, 313, 2, 2, 1382, 1383, 7, 213, 2, 2, 1383, 1429, 3, 2, 2, 2, 1384, 1385, 7, 13, 2, 2, 1385, 1386, 7, 286, 2, 2, 1386, 1387, 5, 236, 119, 2, 1387, 1388, 7, 303, 2, 2, 1388, 1429, 3, 2, 2, 2, 1389, 1390, 7, 13, 2, 2, 1390, 1391, 7, 286, 2, 2, 1391, 1393, 5, 236, 119, 2, 1392, 1394, 5, 42, 22, 2, 1393, 1392, 3, 2, 2, 2, 1393, 1394, 3, 2, 2, 2, 1394, 1395, 3, 2, 2, 2, 1395, 1396, 7, 55, 2, 2, 1396, 1429, 3, 2, 2, 2, 1397, 1398, 7, 13, 2, 2, 1398, 1399, 7, 286, 2, 2, 1399, 1401, 5, 236, 119, 2, 1400, 1402, 5, 42, 22, 2, 1401, 1400, 3, 2, 2, 2, 1401, 1402, 3, 2, 2, 2, 1402, 1403, 3, 2, 2, 2, 1403, 1404, 7, 58, 2, 2, 1404, 1429, 3, 2, 2, 2, 1405, 1406, 7, 13, 2, 2, 1406, 1407, 7, 286, 2, 2, 1407, 1409, 5, 236, 119, 2, 1408, 1410, 5, 42, 22, 2, 1409, 1408, 3, 2, 2, 2, 1409, 1410, 3, 2, 2, 2, 1410, 1411, 3, 2, 2, 2, 1411, 1412, 7, 263, 2, 2, 1412, 1413, 7, 115, 2, 2, 1413, 1429, 3, 2, 2, 2, 1414, 1415, 7, 13, 2, 2, 1415, 1416, 7, 286, 2, 2, 1416, 1418, 5, 236, 119, 2, 1417, 1419, 5, 42, 22, 2, 1418, 1417, 3, 2, 2, 2, 1418, 1419, 3, 2, 2, 2, 1419, 1420, 3, 2, 2, 2, 1420, 1421, 7, 240, 2, 2, 1421, 1422, 7, 52, 2, 2, 1422, 1429, 3, 2, 2, 2, 1423, 1424, 7, 275, 2, 2, 1424, 1429, 7, 305, 2, 2, 1425, 1429, 7, 54, 2, 2, 1426, 1429, 7, 249, 2, 2, 1427, 1429, 7, 90, 2, 2, 1428, 1260, 3, 2, 2, 2, 1428, 1262, 3, 2, 2, 2, 1428, 1264, 3, 2, 2, 2, 1428, 1268, 3, 2, 2, 2, 1428, 1272, 3, 2, 2, 2, 1428, 1274, 3, 2, 2, 2, 1428, 1279, 3, 2, 2, 2, 1428, 1281, 3, 2, 2, 2, 1428, 1283, 3, 2, 2, 2, 1428, 1286, 3, 2, 2, 2, 1428, 1288, 3, 2, 2, 2, 1428, 1290, 3, 2, 2, 2, 1428, 1292, 3, 2, 2, 2, 1428, 1295, 3, 2, 2, 2, 1428, 1297, 3, 2, 2, 2, 1428, 1299, 3, 2, 2, 2, 1428, 1301, 3, 2, 2, 2, 1428, 1303, 3, 2, 2, 2, 1428, 1305, 3, 2, 2, 2, 1428, 1307, 3, 2, 2, 2, 1428, 1309, 3, 2, 2, 2, 1428, 1311, 3, 2, 2, 2, 1428, 1313, 3, 2, 2, 2, 1428, 1315, 3, 2, 2, 2, 1428, 1318, 3, 2, 2, 2, 1428, 1321, 3, 2, 2, 2, 1428, 1327, 3, 2, 2, 2, 1428, 1333, 3, 2, 2, 2, 1428, 1339, 3, 2, 2, 2, 1428, 1345, 3, 2, 2, 2, 1428, 1351, 3, 2, 2, 2, 1428, 1359, 3, 2, 2, 2, 1428, 1366, 3, 2, 2, 2, 1428, 1372, 3, 2, 2, 2, 1428, 1378, 3, 2, 2, 2, 1428, 1384, 3, 2, 2, 2, 1428, 1389, 3, 2, 2, 2, 1428, 1397, 3, 2, 2, 2, 1428, 1405, 3, 2, 2, 2, 1428, 1414, 3, 2, 2, 2, 1428, 1423, 3, 2, 2, 2, 1428, 1425, 3, 2, 2, 2, 1428, 1426, 3, 2, 2, 2, 1428, 1427, 3, 2, 2, 2, 1429, 23, 3, 2, 2, 2, 1430, 1432, 7, 61, 2, 2, 1431, 1433, 7, 291, 2, 2, 1432, 1431, 3, 2, 2, 2, 1432, 1433, 3, 2, 2, 2, 1433, 1435, 3, 2, 2, 2, 1434, 1436, 7, 109, 2, 2, 1435, 1434, 3, 2, 2, 2, 1435, 1436, 3, 2, 2, 2, 1436, 1437, 3, 2, 2, 2, 1437, 1441, 7, 286, 2, 2, 1438, 1439, 7, 137, 2, 2, 1439, 1440, 7, 194, 2, 2, 1440, 1442, 7, 105, 2, 2, 1441, 1438, 3, 2, 2, 2, 1441, 1442, 3, 2, 2, 2, 1442, 1443, 3, 2, 2, 2, 1443, 1444, 5, 6, 4, 2, 1444, 25, 3, 2, 2, 2, 1445, 1446, 7, 61, 2, 2, 1446, 1448, 7, 204, 2, 2, 1447, 1445, 3, 2, 2, 2, 1447, 1448, 3, 2, 2, 2, 1448, 1449, 3, 2, 2, 2, 1449, 1450, 7, 240, 2, 2, 1450, 1451, 7, 286, 2, 2, 1451, 1452, 5, 6, 4, 2, 1452, 27, 3, 2, 2, 2, 1453, 1454, 7, 47, 2, 2, 1454, 1455, 7, 33, 2, 2, 1455, 1459, 5, 196, 99, 2, 1456, 1457, 7, 273, 2, 2, 1457, 1458, 7, 33, 2, 2, 1458, 1460, 5, 200, 101, 2, 1459, 1456, 3, 2, 2, 2, 1459, 1460, 3, 2, 2, 2, 1460, 1461, 3, 2, 2, 2, 1461, 1462, 7, 152, 2, 2, 1462, 1463, 7, 373, 2, 2, 1463, 1464, 7, 32, 2, 2, 1464, 29, 3, 2, 2, 2, 1465, 1466, 7, 269, 2, 2, 1466, 1467, 7, 33, 2, 2, 1467, 1468, 5, 196, 99, 2, 1468, 1471, 7, 200, 2, 2, 1469, 1472, 5, 74, 38, 2, 1470, 1472, 5, 76, 39, 2, 1471, 1469, 3, 2, 2, 2, 1471, 1470, 3, 2, 2, 2, 1472, 1476, 3, 2, 2, 2, 1473, 1474, 7, 277, 2, 2, 1474, 1475, 7, 22, 2, 2, 1475, 1477, 7, 91, 2, 2, 1476, 1473, 3, 2, 2, 2, 1476, 1477, 3, 2, 2, 2, 1477, 31, 3, 2, 2, 2, 1478, 1479, 7, 169, 2, 2, 1479, 1480, 5, 364, 183, 2, 1480, 33, 3, 2, 2, 2, 1481, 1482, 7, 53, 2, 2, 1482, 1483, 5, 364, 183, 2, 1483, 35, 3, 2, 2, 2, 1484, 1486, 5, 54, 28, 2, 1485, 1484, 3, 2, 2, 2, 1485, 1486, 3, 2, 2, 2, 1486, 1487, 3, 2, 2, 2, 1487, 1488, 5, 94, 48, 2, 1488, 1489, 5, 90, 46, 2, 1489, 37, 3, 2, 2, 2, 1490, 1491, 7, 147, 2, 2, 1491, 1493, 7, 212, 2, 2, 1492, 1494, 7, 286, 2, 2, 1493, 1492, 3, 2, 2, 2, 1493, 1494, 3, 2, 2, 2, 1494, 1495, 3, 2, 2, 2, 1495, 1502, 5, 6, 4, 2, 1496, 1500, 5, 42, 22, 2, 1497, 1498, 7, 137, 2, 2, 1498, 1499, 7, 194, 2, 2, 1499, 1501, 7, 105, 2, 2, 1500, 1497, 3, 2, 2, 2, 1500, 1501, 3, 2, 2, 2, 1501, 1503, 3, 2, 2, 2, 1502, 1496, 3, 2, 2, 2, 1502, 1503, 3, 2, 2, 2, 1503, 1507, 3, 2, 2, 2, 1504, 1505, 7, 33, 2, 2, 1505, 1508, 7, 187, 2, 2, 1506, 1508, 5, 196, 99, 2, 1507, 1504, 3, 2, 2, 2, 1507, 1506, 3, 2, 2, 2, 1507, 1508, 3, 2, 2, 2, 1508, 1565, 3, 2, 2, 2, 1509, 1510, 7, 147, 2, 2, 1510, 1512, 7, 152, 2, 2, 1511, 1513, 7, 286, 2, 2, 1512, 1511, 3, 2, 2, 2, 1512, 1513, 3, 2, 2, 2, 1513, 1514, 3, 2, 2, 2, 1514, 1516, 5, 6, 4, 2, 1515, 1517, 5, 42, 22, 2, 1516, 1515, 3, 2, 2, 2, 1516, 1517, 3, 2, 2, 2, 1517, 1521, 3, 2, 2, 2, 1518, 1519, 7, 137, 2, 2, 1519, 1520, 7, 194, 2, 2, 1520, 1522, 7, 105, 2, 2, 1521, 1518, 3, 2, 2, 2, 1521, 1522, 3, 2, 2, 2, 1522, 1526, 3, 2, 2, 2, 1523, 1524, 7, 33, 2, 2, 1524, 1527, 7, 187, 2, 2, 1525, 1527, 5, 196, 99, 2, 1526, 1523, 3, 2, 2, 2, 1526, 1525, 3, 2, 2, 2, 1526, 1527, 3, 2, 2, 2, 1527, 1565, 3, 2, 2, 2, 1528, 1529, 7, 147, 2, 2, 1529, 1531, 7, 152, 2, 2, 1530, 1532, 7, 286, 2, 2, 1531, 1530, 3, 2, 2, 2, 1531, 1532, 3, 2, 2, 2, 1532, 1533, 3, 2, 2, 2, 1533, 1534, 5, 6, 4, 2, 1534, 1535, 7, 240, 2, 2, 1535, 1536, 5, 128, 65, 2, 1536, 1565, 3, 2, 2, 2, 1537, 1538, 7, 147, 2, 2, 1538, 1540, 7, 212, 2, 2, 1539, 1541, 7, 168, 2, 2, 1540, 1539, 3, 2, 2, 2, 1540, 1541, 3, 2, 2, 2, 1541, 1542, 3, 2, 2, 2, 1542, 1543, 7, 92, 2, 2, 1543, 1545, 5, 364, 183, 2, 1544, 1546, 5, 226, 114, 2, 1545, 1544, 3, 2, 2, 2, 1545, 1546, 3, 2, 2, 2, 1546, 1548, 3, 2, 2, 2, 1547, 1549, 5, 78, 40, 2, 1548, 1547, 3, 2, 2, 2, 1548, 1549, 3, 2, 2, 2, 1549, 1565, 3, 2, 2, 2, 1550, 1551, 7, 147, 2, 2, 1551, 1553, 7, 212, 2, 2, 1552, 1554, 7, 168, 2, 2, 1553, 1552, 3, 2, 2, 2, 1553, 1554, 3, 2, 2, 2, 1554, 1555, 3, 2, 2, 2, 1555, 1557, 7, 92, 2, 2, 1556, 1558, 5, 364, 183, 2, 1557, 1556, 3, 2, 2, 2, 1557, 1558, 3, 2, 2, 2, 1558, 1559, 3, 2, 2, 2, 1559, 1562, 5, 58, 30, 2, 1560, 1561, 7, 203, 2, 2, 1561, 1563, 5, 62, 32, 2, 1562, 1560, 3, 2, 2, 2, 1562, 1563, 3, 2, 2, 2, 1563, 1565, 3, 2, 2, 2, 1564, 1490, 3, 2, 2, 2, 1564, 1509, 3, 2, 2, 2, 1564, 1528, 3, 2, 2, 2, 1564, 1537, 3, 2, 2, 2, 1564, 1550, 3, 2, 2, 2, 1565, 39, 3, 2, 2, 2, 1566, 1568, 5, 42, 22, 2, 1567, 1569, 5, 32, 17, 2, 1568, 1567, 3, 2, 2, 2, 1568, 1569, 3, 2, 2, 2, 1569, 41, 3, 2, 2, 2, 1570, 1571, 7, 213, 2, 2, 1571, 1572, 7, 4, 2, 2, 1572, 1577, 5, 44, 23, 2, 1573, 1574, 7, 6, 2, 2, 1574, 1576, 5, 44, 23, 2, 1575, 1573, 3, 2, 2, 2, 1576, 1579, 3, 2, 2, 2, 1577, 1575, 3, 2, 2, 2, 1577, 1578, 3, 2, 2, 2, 1578, 1580, 3, 2, 2, 2, 1579, 1577, 3, 2, 2, 2, 1580, 1581, 7, 5, 2, 2, 1581, 43, 3, 2, 2, 2, 1582, 1585, 5, 352, 177, 2, 1583, 1584, 7, 344, 2, 2, 1584, 1586, 5, 272, 137, 2, 1585, 1583, 3, 2, 2, 2, 1585, 1586, 3, 2, 2, 2, 1586, 1592, 3, 2, 2, 2, 1587, 1588, 5, 352, 177, 2, 1588, 1589, 7, 344, 2, 2, 1589, 1590, 7, 84, 2, 2, 1590, 1592, 3, 2, 2, 2, 1591, 1582, 3, 2, 2, 2, 1591, 1587, 3, 2, 2, 2, 1592, 45, 3, 2, 2, 2, 1593, 1594, 9, 14, 2, 2, 1594, 47, 3, 2, 2, 2, 1595, 1596, 9, 15, 2, 2, 1596, 49, 3, 2, 2, 2, 1597, 1603, 5, 88, 45, 2, 1598, 1603, 5, 364, 183, 2, 1599, 1603, 5, 274, 138, 2, 1600, 1603, 5, 276, 139, 2, 1601, 1603, 5, 278, 140, 2, 1602, 1597, 3, 2, 2, 2, 1602, 1598, 3, 2, 2, 2, 1602, 1599, 3, 2, 2, 2, 1602, 1600, 3, 2, 2, 2, 1602, 1601, 3, 2, 2, 2, 1603, 51, 3, 2, 2, 2, 1604, 1609, 5, 352, 177, 2, 1605, 1606, 7, 7, 2, 2, 1606, 1608, 5, 352, 177, 2, 1607, 1605, 3, 2, 2, 2, 1608, 1611, 3, 2, 2, 2, 1609, 1607, 3, 2, 2, 2, 1609, 1610, 3, 2, 2, 2, 1610, 53, 3, 2, 2, 2, 1611, 1609, 3, 2, 2, 2, 1612, 1613, 7, 339, 2, 2, 1613, 1618, 5, 56, 29, 2, 1614, 1615, 7, 6, 2, 2, 1615, 1617, 5, 56, 29, 2, 1616, 1614, 3, 2, 2, 2, 1617, 1620, 3, 2, 2, 2, 1618, 1616, 3, 2, 2, 2, 1618, 1619, 3, 2, 2, 2, 1619, 55, 3, 2, 2, 2, 1620, 1618, 3, 2, 2, 2, 1621, 1623, 5, 348, 175, 2, 1622, 1624, 5, 196, 99, 2, 1623, 1622, 3, 2, 2, 2, 1623, 1624, 3, 2, 2, 2, 1624, 1626, 3, 2, 2, 2, 1625, 1627, 7, 22, 2, 2, 1626, 1625, 3, 2, 2, 2, 1626, 1627, 3, 2, 2, 2, 1627, 1628, 3, 2, 2, 2, 1628, 1629, 7, 4, 2, 2, 1629, 1630, 5, 36, 19, 2, 1630, 1631, 7, 5, 2, 2, 1631, 57, 3, 2, 2, 2, 1632, 1633, 7, 325, 2, 2, 1633, 1634, 5, 230, 116, 2, 1634, 59, 3, 2, 2, 2, 1635, 1636, 7, 203, 2, 2, 1636, 1649, 5, 70, 36, 2, 1637, 1638, 7, 214, 2, 2, 1638, 1639, 7, 33, 2, 2, 1639, 1649, 5, 244, 123, 2, 1640, 1649, 5, 30, 16, 2, 1641, 1649, 5, 28, 15, 2, 1642, 1649, 5, 226, 114, 2, 1643, 1649, 5, 78, 40, 2, 1644, 1649, 5, 32, 17, 2, 1645, 1649, 5, 34, 18, 2, 1646, 1647, 7, 290, 2, 2, 1647, 1649, 5, 62, 32, 2, 1648, 1635, 3, 2, 2, 2, 1648, 1637, 3, 2, 2, 2, 1648, 1640, 3, 2, 2, 2, 1648, 1641, 3, 2, 2, 2, 1648, 1642, 3, 2, 2, 2, 1648, 1643, 3, 2, 2, 2, 1648, 1644, 3, 2, 2, 2, 1648, 1645, 3, 2, 2, 2, 1648, 1646, 3, 2, 2, 2, 1649, 1652, 3, 2, 2, 2, 1650, 1648, 3, 2, 2, 2, 1650, 1651, 3, 2, 2, 2, 1651, 61, 3, 2, 2, 2, 1652, 1650, 3, 2, 2, 2, 1653, 1654, 7, 4, 2, 2, 1654, 1659, 5, 64, 33, 2, 1655, 1656, 7, 6, 2, 2, 1656, 1658, 5, 64, 33, 2, 1657, 1655, 3, 2, 2, 2, 1658, 1661, 3, 2, 2, 2, 1659, 1657, 3, 2, 2, 2, 1659, 1660, 3, 2, 2, 2, 1660, 1662, 3, 2, 2, 2, 1661, 1659, 3, 2, 2, 2, 1662, 1663, 7, 5, 2, 2, 1663, 63, 3, 2, 2, 2, 1664, 1669, 5, 66, 34, 2, 1665, 1667, 7, 344, 2, 2, 1666, 1665, 3, 2, 2, 2, 1666, 1667, 3, 2, 2, 2, 1667, 1668, 3, 2, 2, 2, 1668, 1670, 5, 68, 35, 2, 1669, 1666, 3, 2, 2, 2, 1669, 1670, 3, 2, 2, 2, 1670, 65, 3, 2, 2, 2, 1671, 1676, 5, 352, 177, 2, 1672, 1673, 7, 7, 2, 2, 1673, 1675, 5, 352, 177, 2, 1674, 1672, 3, 2, 2, 2, 1675, 1678, 3, 2, 2, 2, 1676, 1674, 3, 2, 2, 2, 1676, 1677, 3, 2, 2, 2, 1677, 1681, 3, 2, 2, 2, 1678, 1676, 3, 2, 2, 2, 1679, 1681, 5, 364, 183, 2, 1680, 1671, 3, 2, 2, 2, 1680, 1679, 3, 2, 2, 2, 1681, 67, 3, 2, 2, 2, 1682, 1687, 7, 373, 2, 2, 1683, 1687, 7, 375, 2, 2, 1684, 1687, 5, 280, 141, 2, 1685, 1687, 5, 364, 183, 2, 1686, 1682, 3, 2, 2, 2, 1686, 1683, 3, 2, 2, 2, 1686, 1684, 3, 2, 2, 2, 1686, 1685, 3, 2, 2, 2, 1687, 69, 3, 2, 2, 2, 1688, 1689, 7, 4, 2, 2, 1689, 1694, 5, 72, 37, 2, 1690, 1691, 7, 6, 2, 2, 1691, 1693, 5, 72, 37, 2, 1692, 1690, 3, 2, 2, 2, 1693, 1696, 3, 2, 2, 2, 1694, 1692, 3, 2, 2, 2, 1694, 1695, 3, 2, 2, 2, 1695, 1697, 3, 2, 2, 2, 1696, 1694, 3, 2, 2, 2, 1697, 1698, 7, 5, 2, 2, 1698, 71, 3, 2, 2, 2, 1699, 1704, 5, 66, 34, 2, 1700, 1702, 7, 344, 2, 2, 1701, 1700, 3, 2, 2, 2, 1701, 1702, 3, 2, 2, 2, 1702, 1703, 3, 2, 2, 2, 1703, 1705, 5, 252, 127, 2, 1704, 1701, 3, 2, 2, 2, 1704, 1705, 3, 2, 2, 2, 1705, 73, 3, 2, 2, 2, 1706, 1707, 7, 4, 2, 2, 1707, 1712, 5, 272, 137, 2, 1708, 1709, 7, 6, 2, 2, 1709, 1711, 5, 272, 137, 2, 1710, 1708, 3, 2, 2, 2, 1711, 1714, 3, 2, 2, 2, 1712, 1710, 3, 2, 2, 2, 1712, 1713, 3, 2, 2, 2, 1713, 1715, 3, 2, 2, 2, 1714, 1712, 3, 2, 2, 2, 1715, 1716, 7, 5, 2, 2, 1716, 75, 3, 2, 2, 2, 1717, 1718, 7, 4, 2, 2, 1718, 1723, 5, 74, 38, 2, 1719, 1720, 7, 6, 2, 2, 1720, 1722, 5, 74, 38, 2, 1721, 1719, 3, 2, 2, 2, 1722, 1725, 3, 2, 2, 2, 1723, 1721, 3, 2, 2, 2, 1723, 1724, 3, 2, 2, 2, 1724, 1726, 3, 2, 2, 2, 1725, 1723, 3, 2, 2, 2, 1726, 1727, 7, 5, 2, 2, 1727, 77, 3, 2, 2, 2, 1728, 1729, 7, 277, 2, 2, 1729, 1730, 7, 22, 2, 2, 1730, 1735, 5, 80, 41, 2, 1731, 1732, 7, 277, 2, 2, 1732, 1733, 7, 33, 2, 2, 1733, 1735, 5, 82, 42, 2, 1734, 1728, 3, 2, 2, 2, 1734, 1731, 3, 2, 2, 2, 1735, 79, 3, 2, 2, 2, 1736, 1737, 7, 146, 2, 2, 1737, 1738, 5, 364, 183, 2, 1738, 1739, 7, 208, 2, 2, 1739, 1740, 5, 364, 183, 2, 1740, 1743, 3, 2, 2, 2, 1741, 1743, 5, 352, 177, 2, 1742, 1736, 3, 2, 2, 2, 1742, 1741, 3, 2, 2, 2, 1743, 81, 3, 2, 2, 2, 1744, 1748, 5, 364, 183, 2, 1745, 1746, 7, 339, 2, 2, 1746, 1747, 7, 261, 2, 2, 1747, 1749, 5, 62, 32, 2, 1748, 1745, 3, 2, 2, 2, 1748, 1749, 3, 2, 2, 2, 1749, 83, 3, 2, 2, 2, 1750, 1751, 5, 352, 177, 2, 1751, 1752, 5, 364, 183, 2, 1752, 85, 3, 2, 2, 2, 1753, 1754, 5, 38, 20, 2, 1754, 1755, 5, 36, 19, 2, 1755, 1810, 3, 2, 2, 2, 1756, 1758, 5, 136, 69, 2, 1757, 1759, 5, 92, 47, 2, 1758, 1757, 3, 2, 2, 2, 1759, 1760, 3, 2, 2, 2, 1760, 1758, 3, 2, 2, 2, 1760, 1761, 3, 2, 2, 2, 1761, 1810, 3, 2, 2, 2, 1762, 1763, 7, 86, 2, 2, 1763, 1764, 7, 123, 2, 2, 1764, 1765, 5, 88, 45, 2, 1765, 1767, 5, 224, 113, 2, 1766, 1768, 5, 128, 65, 2, 1767, 1766, 3, 2, 2, 2, 1767, 1768, 3, 2, 2, 2, 1768, 1810, 3, 2, 2, 2, 1769, 1770, 7, 322, 2, 2, 1770, 1771, 5, 88, 45, 2, 1771, 1772, 5, 224, 113, 2, 1772, 1774, 5, 110, 56, 2, 1773, 1775, 5, 128, 65, 2, 1774, 1773, 3, 2, 2, 2, 1774, 1775, 3, 2, 2, 2, 1775, 1810, 3, 2, 2, 2, 1776, 1777, 7, 177, 2, 2, 1777, 1778, 7, 152, 2, 2, 1778, 1779, 5, 88, 45, 2, 1779, 1780, 5, 224, 113, 2, 1780, 1786, 7, 325, 2, 2, 1781, 1787, 5, 88, 45, 2, 1782, 1783, 7, 4, 2, 2, 1783, 1784, 5, 36, 19, 2, 1784, 1785, 7, 5, 2, 2, 1785, 1787, 3, 2, 2, 2, 1786, 1781, 3, 2, 2, 2, 1786, 1782, 3, 2, 2, 2, 1787, 1788, 3, 2, 2, 2, 1788, 1789, 5, 224, 113, 2, 1789, 1790, 7, 200, 2, 2, 1790, 1794, 5, 260, 131, 2, 1791, 1793, 5, 112, 57, 2, 1792, 1791, 3, 2, 2, 2, 1793, 1796, 3, 2, 2, 2, 1794, 1792, 3, 2, 2, 2, 1794, 1795, 3, 2, 2, 2, 1795, 1800, 3, 2, 2, 2, 1796, 1794, 3, 2, 2, 2, 1797, 1799, 5, 114, 58, 2, 1798, 1797, 3, 2, 2, 2, 1799, 1802, 3, 2, 2, 2, 1800, 1798, 3, 2, 2, 2, 1800, 1801, 3, 2, 2, 2, 1801, 1806, 3, 2, 2, 2, 1802, 1800, 3, 2, 2, 2, 1803, 1805, 5, 116, 59, 2, 1804, 1803, 3, 2, 2, 2, 1805, 1808, 3, 2, 2, 2, 1806, 1804, 3, 2, 2, 2, 1806, 1807, 3, 2, 2, 2, 1807, 1810, 3, 2, 2, 2, 1808, 1806, 3, 2, 2, 2, 1809, 1753, 3, 2, 2, 2, 1809, 1756, 3, 2, 2, 2, 1809, 1762, 3, 2, 2, 2, 1809, 1769, 3, 2, 2, 2, 1809, 1776, 3, 2, 2, 2, 1810, 87, 3, 2, 2, 2, 1811, 1812, 7, 136, 2, 2, 1812, 1813, 7, 4, 2, 2, 1813, 1814, 5, 252, 127, 2, 1814, 1815, 7, 5, 2, 2, 1815, 1818, 3, 2, 2, 2, 1816, 1818, 5, 230, 116, 2, 1817, 1811, 3, 2, 2, 2, 1817, 1816, 3, 2, 2, 2, 1818, 89, 3, 2, 2, 2, 1819, 1820, 7, 205, 2, 2, 1820, 1821, 7, 33, 2, 2, 1821, 1826, 5, 98, 50, 2, 1822, 1823, 7, 6, 2, 2, 1823, 1825, 5, 98, 50, 2, 1824, 1822, 3, 2, 2, 2, 1825, 1828, 3, 2, 2, 2, 1826, 1824, 3, 2, 2, 2, 1826, 1827, 3, 2, 2, 2, 1827, 1830, 3, 2, 2, 2, 1828, 1826, 3, 2, 2, 2, 1829, 1819, 3, 2, 2, 2, 1829, 1830, 3, 2, 2, 2, 1830, 1841, 3, 2, 2, 2, 1831, 1832, 7, 46, 2, 2, 1832, 1833, 7, 33, 2, 2, 1833, 1838, 5, 252, 127, 2, 1834, 1835, 7, 6, 2, 2, 1835, 1837, 5, 252, 127, 2, 1836, 1834, 3, 2, 2, 2, 1837, 1840, 3, 2, 2, 2, 1838, 1836, 3, 2, 2, 2, 1838, 1839, 3, 2, 2, 2, 1839, 1842, 3, 2, 2, 2, 1840, 1838, 3, 2, 2, 2, 1841, 1831, 3, 2, 2, 2, 1841, 1842, 3, 2, 2, 2, 1842, 1853, 3, 2, 2, 2, 1843, 1844, 7, 94, 2, 2, 1844, 1845, 7, 33, 2, 2, 1845, 1850, 5, 252, 127, 2, 1846, 1847, 7, 6, 2, 2, 1847, 1849, 5, 252, 127, 2, 1848, 1846, 3, 2, 2, 2, 1849, 1852, 3, 2, 2, 2, 1850, 1848, 3, 2, 2, 2, 1850, 1851, 3, 2, 2, 2, 1851, 1854, 3, 2, 2, 2, 1852, 1850, 3, 2, 2, 2, 1853, 1843, 3, 2, 2, 2, 1853, 1854, 3, 2, 2, 2, 1854, 1865, 3, 2, 2, 2, 1855, 1856, 7, 272, 2, 2, 1856, 1857, 7, 33, 2, 2, 1857, 1862, 5, 98, 50, 2, 1858, 1859, 7, 6, 2, 2, 1859, 1861, 5, 98, 50, 2, 1860, 1858, 3, 2, 2, 2, 1861, 1864, 3, 2, 2, 2, 1862, 1860, 3, 2, 2, 2, 1862, 1863, 3, 2, 2, 2, 1863, 1866, 3, 2, 2, 2, 1864, 1862, 3, 2, 2, 2, 1865, 1855, 3, 2, 2, 2, 1865, 1866, 3, 2, 2, 2, 1866, 1868, 3, 2, 2, 2, 1867, 1869, 5, 332, 167, 2, 1868, 1867, 3, 2, 2, 2, 1868, 1869, 3, 2, 2, 2, 1869, 1875, 3, 2, 2, 2, 1870, 1873, 7, 164, 2, 2, 1871, 1874, 7, 12, 2, 2, 1872, 1874, 5, 252, 127, 2, 1873, 1871, 3, 2, 2, 2, 1873, 1872, 3, 2, 2, 2, 1874, 1876, 3, 2, 2, 2, 1875, 1870, 3, 2, 2, 2, 1875, 1876, 3, 2, 2, 2, 1876, 1879, 3, 2, 2, 2, 1877, 1878, 7, 199, 2, 2, 1878, 1880, 5, 252, 127, 2, 1879, 1877, 3, 2, 2, 2, 1879, 1880, 3, 2, 2, 2, 1880, 91, 3, 2, 2, 2, 1881, 1882, 5, 38, 20, 2, 1882, 1883, 5, 102, 52, 2, 1883, 93, 3, 2, 2, 2, 1884, 1885, 8, 48, 1, 2, 1885, 1886, 5, 96, 49, 2, 1886, 1910, 3, 2, 2, 2, 1887, 1888, 12, 5, 2, 2, 1888, 1889, 6, 48, 3, 2, 1889, 1891, 9, 16, 2, 2, 1890, 1892, 5, 180, 91, 2, 1891, 1890, 3, 2, 2, 2, 1891, 1892, 3, 2, 2, 2, 1892, 1893, 3, 2, 2, 2, 1893, 1909, 5, 94, 48, 6, 1894, 1895, 12, 4, 2, 2, 1895, 1896, 6, 48, 5, 2, 1896, 1898, 7, 148, 2, 2, 1897, 1899, 5, 180, 91, 2, 1898, 1897, 3, 2, 2, 2, 1898, 1899, 3, 2, 2, 2, 1899, 1900, 3, 2, 2, 2, 1900, 1909, 5, 94, 48, 5, 1901, 1902, 12, 3, 2, 2, 1902, 1903, 6, 48, 7, 2, 1903, 1905, 9, 17, 2, 2, 1904, 1906, 5, 180, 91, 2, 1905, 1904, 3, 2, 2, 2, 1905, 1906, 3, 2, 2, 2, 1906, 1907, 3, 2, 2, 2, 1907, 1909, 5, 94, 48, 4, 1908, 1887, 3, 2, 2, 2, 1908, 1894, 3, 2, 2, 2, 1908, 1901, 3, 2, 2, 2, 1909, 1912, 3, 2, 2, 2, 1910, 1908, 3, 2, 2, 2, 1910, 1911, 3, 2, 2, 2, 1911, 95, 3, 2, 2, 2, 1912, 1910, 3, 2, 2, 2, 1913, 1923, 5, 104, 53, 2, 1914, 1923, 5, 100, 51, 2, 1915, 1916, 7, 286, 2, 2, 1916, 1923, 5, 6, 4, 2, 1917, 1923, 5, 210, 106, 2, 1918, 1919, 7, 4, 2, 2, 1919, 1920, 5, 36, 19, 2, 1920, 1921, 7, 5, 2, 2, 1921, 1923, 3, 2, 2, 2, 1922, 1913, 3, 2, 2, 2, 1922, 1914, 3, 2, 2, 2, 1922, 1915, 3, 2, 2, 2, 1922, 1917, 3, 2, 2, 2, 1922, 1918, 3, 2, 2, 2, 1923, 97, 3, 2, 2, 2, 1924, 1926, 5, 252, 127, 2, 1925, 1927, 9, 18, 2, 2, 1926, 1925, 3, 2, 2, 2, 1926, 1927, 3, 2, 2, 2, 1927, 1930, 3, 2, 2, 2, 1928, 1929, 7, 196, 2, 2, 1929, 1931, 9, 19, 2, 2, 1930, 1928, 3, 2, 2, 2, 1930, 1931, 3, 2, 2, 2, 1931, 99, 3, 2, 2, 2, 1932, 1934, 5, 136, 69, 2, 1933, 1935, 5, 102, 52, 2, 1934, 1933, 3, 2, 2, 2, 1935, 1936, 3, 2, 2, 2, 1936, 1934, 3, 2, 2, 2, 1936, 1937, 3, 2, 2, 2, 1937, 101, 3, 2, 2, 2, 1938, 1940, 5, 106, 54, 2, 1939, 1941, 5, 128, 65, 2, 1940, 1939, 3, 2, 2, 2, 1940, 1941, 3, 2, 2, 2, 1941, 1942, 3, 2, 2, 2, 1942, 1943, 5, 90, 46, 2, 1943, 1966, 3, 2, 2, 2, 1944, 1948, 5, 108, 55, 2, 1945, 1947, 5, 178, 90, 2, 1946, 1945, 3, 2, 2, 2, 1947, 1950, 3, 2, 2, 2, 1948, 1946, 3, 2, 2, 2, 1948, 1949, 3, 2, 2, 2, 1949, 1952, 3, 2, 2, 2, 1950, 1948, 3, 2, 2, 2, 1951, 1953, 5, 128, 65, 2, 1952, 1951, 3, 2, 2, 2, 1952, 1953, 3, 2, 2, 2, 1953, 1955, 3, 2, 2, 2, 1954, 1956, 5, 140, 71, 2, 1955, 1954, 3, 2, 2, 2, 1955, 1956, 3, 2, 2, 2, 1956, 1958, 3, 2, 2, 2, 1957, 1959, 5, 130, 66, 2, 1958, 1957, 3, 2, 2, 2, 1958, 1959, 3, 2, 2, 2, 1959, 1961, 3, 2, 2, 2, 1960, 1962, 5, 332, 167, 2, 1961, 1960, 3, 2, 2, 2, 1961, 1962, 3, 2, 2, 2, 1962, 1963, 3, 2, 2, 2, 1963, 1964, 5, 90, 46, 2, 1964, 1966, 3, 2, 2, 2, 1965, 1938, 3, 2, 2, 2, 1965, 1944, 3, 2, 2, 2, 1966, 103, 3, 2, 2, 2, 1967, 1969, 5, 106, 54, 2, 1968, 1970, 5, 136, 69, 2, 1969, 1968, 3, 2, 2, 2, 1969, 1970, 3, 2, 2, 2, 1970, 1974, 3, 2, 2, 2, 1971, 1973, 5, 178, 90, 2, 1972, 1971, 3, 2, 2, 2, 1973, 1976, 3, 2, 2, 2, 1974, 1972, 3, 2, 2, 2, 1974, 1975, 3, 2, 2, 2, 1975, 1978, 3, 2, 2, 2, 1976, 1974, 3, 2, 2, 2, 1977, 1979, 5, 128, 65, 2, 1978, 1977, 3, 2, 2, 2, 1978, 1979, 3, 2, 2, 2, 1979, 1981, 3, 2, 2, 2, 1980, 1982, 5, 140, 71, 2, 1981, 1980, 3, 2, 2, 2, 1981, 1982, 3, 2, 2, 2, 1982, 1984, 3, 2, 2, 2, 1983, 1985, 5, 130, 66, 2, 1984, 1983, 3, 2, 2, 2, 1984, 1985, 3, 2, 2, 2, 1985, 1987, 3, 2, 2, 2, 1986, 1988, 5, 332, 167, 2, 1987, 1986, 3, 2, 2, 2, 1987, 1988, 3, 2, 2, 2, 1988, 2012, 3, 2, 2, 2, 1989, 1991, 5, 108, 55, 2, 1990, 1992, 5, 136, 69, 2, 1991, 1990, 3, 2, 2, 2, 1991, 1992, 3, 2, 2, 2, 1992, 1996, 3, 2, 2, 2, 1993, 1995, 5, 178, 90, 2, 1994, 1993, 3, 2, 2, 2, 1995, 1998, 3, 2, 2, 2, 1996, 1994, 3, 2, 2, 2, 1996, 1997, 3, 2, 2, 2, 1997, 2000, 3, 2, 2, 2, 1998, 1996, 3, 2, 2, 2, 1999, 2001, 5, 128, 65, 2, 2000, 1999, 3, 2, 2, 2, 2000, 2001, 3, 2, 2, 2, 2001, 2003, 3, 2, 2, 2, 2002, 2004, 5, 140, 71, 2, 2003, 2002, 3, 2, 2, 2, 2003, 2004, 3, 2, 2, 2, 2004, 2006, 3, 2, 2, 2, 2005, 2007, 5, 130, 66, 2, 2006, 2005, 3, 2, 2, 2, 2006, 2007, 3, 2, 2, 2, 2007, 2009, 3, 2, 2, 2, 2008, 2010, 5, 332, 167, 2, 2009, 2008, 3, 2, 2, 2, 2009, 2010, 3, 2, 2, 2, 2010, 2012, 3, 2, 2, 2, 2011, 1967, 3, 2, 2, 2, 2011, 1989, 3, 2, 2, 2, 2012, 105, 3, 2, 2, 2, 2013, 2014, 7, 257, 2, 2, 2014, 2015, 7, 307, 2, 2, 2015, 2017, 7, 4, 2, 2, 2016, 2018, 5, 180, 91, 2, 2017, 2016, 3, 2, 2, 2, 2017, 2018, 3, 2, 2, 2, 2018, 2019, 3, 2, 2, 2, 2019, 2020, 5, 258, 130, 2, 2020, 2021, 7, 5, 2, 2, 2021, 2033, 3, 2, 2, 2, 2022, 2024, 7, 175, 2, 2, 2023, 2025, 5, 180, 91, 2, 2024, 2023, 3, 2, 2, 2, 2024, 2025, 3, 2, 2, 2, 2025, 2026, 3, 2, 2, 2, 2026, 2033, 5, 258, 130, 2, 2027, 2029, 7, 234, 2, 2, 2028, 2030, 5, 180, 91, 2, 2029, 2028, 3, 2, 2, 2, 2029, 2030, 3, 2, 2, 2, 2030, 2031, 3, 2, 2, 2, 2031, 2033, 5, 258, 130, 2, 2032, 2013, 3, 2, 2, 2, 2032, 2022, 3, 2, 2, 2, 2032, 2027, 3, 2, 2, 2, 2033, 2035, 3, 2, 2, 2, 2034, 2036, 5, 226, 114, 2, 2035, 2034, 3, 2, 2, 2, 2035, 2036, 3, 2, 2, 2, 2036, 2039, 3, 2, 2, 2, 2037, 2038, 7, 232, 2, 2, 2038, 2040, 5, 364, 183, 2, 2039, 2037, 3, 2, 2, 2, 2039, 2040, 3, 2, 2, 2, 2040, 2041, 3, 2, 2, 2, 2041, 2042, 7, 325, 2, 2, 2042, 2055, 5, 364, 183, 2, 2043, 2053, 7, 22, 2, 2, 2044, 2054, 5, 198, 100, 2, 2045, 2054, 5, 314, 158, 2, 2046, 2049, 7, 4, 2, 2, 2047, 2050, 5, 198, 100, 2, 2048, 2050, 5, 314, 158, 2, 2049, 2047, 3, 2, 2, 2, 2049, 2048, 3, 2, 2, 2, 2050, 2051, 3, 2, 2, 2, 2051, 2052, 7, 5, 2, 2, 2052, 2054, 3, 2, 2, 2, 2053, 2044, 3, 2, 2, 2, 2053, 2045, 3, 2, 2, 2, 2053, 2046, 3, 2, 2, 2, 2054, 2056, 3, 2, 2, 2, 2055, 2043, 3, 2, 2, 2, 2055, 2056, 3, 2, 2, 2, 2056, 2058, 3, 2, 2, 2, 2057, 2059, 5, 226, 114, 2, 2058, 2057, 3, 2, 2, 2, 2058, 2059, 3, 2, 2, 2, 2059, 2062, 3, 2, 2, 2, 2060, 2061, 7, 231, 2, 2, 2061, 2063, 5, 364, 183, 2, 2062, 2060, 3, 2, 2, 2, 2062, 2063, 3, 2, 2, 2, 2063, 107, 3, 2, 2, 2, 2064, 2068, 7, 257, 2, 2, 2065, 2067, 5, 132, 67, 2, 2066, 2065, 3, 2, 2, 2, 2067, 2070, 3, 2, 2, 2, 2068, 2066, 3, 2, 2, 2, 2068, 2069, 3, 2, 2, 2, 2069, 2072, 3, 2, 2, 2, 2070, 2068, 3, 2, 2, 2, 2071, 2073, 5, 180, 91, 2, 2072, 2071, 3, 2, 2, 2, 2072, 2073, 3, 2, 2, 2, 2073, 2074, 3, 2, 2, 2, 2074, 2075, 5, 242, 122, 2, 2075, 109, 3, 2, 2, 2, 2076, 2077, 7, 263, 2, 2, 2077, 2078, 5, 124, 63, 2, 2078, 111, 3, 2, 2, 2, 2079, 2080, 7, 336, 2, 2, 2080, 2083, 7, 176, 2, 2, 2081, 2082, 7, 16, 2, 2, 2082, 2084, 5, 260, 131, 2, 2083, 2081, 3, 2, 2, 2, 2083, 2084, 3, 2, 2, 2, 2084, 2085, 3, 2, 2, 2, 2085, 2086, 7, 293, 2, 2, 2086, 2087, 5, 118, 60, 2, 2087, 113, 3, 2, 2, 2, 2088, 2089, 7, 336, 2, 2, 2089, 2090, 7, 194, 2, 2, 2090, 2093, 7, 176, 2, 2, 2091, 2092, 7, 33, 2, 2, 2092, 2094, 7, 289, 2, 2, 2093, 2091, 3, 2, 2, 2, 2093, 2094, 3, 2, 2, 2, 2094, 2097, 3, 2, 2, 2, 2095, 2096, 7, 16, 2, 2, 2096, 2098, 5, 260, 131, 2, 2097, 2095, 3, 2, 2, 2, 2097, 2098, 3, 2, 2, 2, 2098, 2099, 3, 2, 2, 2, 2099, 2100, 7, 293, 2, 2, 2100, 2101, 5, 120, 61, 2, 2101, 115, 3, 2, 2, 2, 2102, 2103, 7, 336, 2, 2, 2103, 2104, 7, 194, 2, 2, 2104, 2105, 7, 176, 2, 2, 2105, 2106, 7, 33, 2, 2, 2106, 2109, 7, 274, 2, 2, 2107, 2108, 7, 16, 2, 2, 2108, 2110, 5, 260, 131, 2, 2109, 2107, 3, 2, 2, 2, 2109, 2110, 3, 2, 2, 2, 2110, 2111, 3, 2, 2, 2, 2111, 2112, 7, 293, 2, 2, 2112, 2113, 5, 122, 62, 2, 2113, 117, 3, 2, 2, 2, 2114, 2122, 7, 86, 2, 2, 2115, 2116, 7, 322, 2, 2, 2116, 2117, 7, 263, 2, 2, 2117, 2122, 7, 354, 2, 2, 2118, 2119, 7, 322, 2, 2, 2119, 2120, 7, 263, 2, 2, 2120, 2122, 5, 124, 63, 2, 2121, 2114, 3, 2, 2, 2, 2121, 2115, 3, 2, 2, 2, 2121, 2118, 3, 2, 2, 2, 2122, 119, 3, 2, 2, 2, 2123, 2124, 7, 147, 2, 2, 2124, 2142, 7, 354, 2, 2, 2125, 2126, 7, 147, 2, 2, 2126, 2127, 7, 4, 2, 2, 2127, 2128, 5, 228, 115, 2, 2128, 2129, 7, 5, 2, 2, 2129, 2130, 7, 326, 2, 2, 2130, 2131, 7, 4, 2, 2, 2131, 2136, 5, 252, 127, 2, 2132, 2133, 7, 6, 2, 2, 2133, 2135, 5, 252, 127, 2, 2134, 2132, 3, 2, 2, 2, 2135, 2138, 3, 2, 2, 2, 2136, 2134, 3, 2, 2, 2, 2136, 2137, 3, 2, 2, 2, 2137, 2139, 3, 2, 2, 2, 2138, 2136, 3, 2, 2, 2, 2139, 2140, 7, 5, 2, 2, 2140, 2142, 3, 2, 2, 2, 2141, 2123, 3, 2, 2, 2, 2141, 2125, 3, 2, 2, 2, 2142, 121, 3, 2, 2, 2, 2143, 2148, 7, 86, 2, 2, 2144, 2145, 7, 322, 2, 2, 2145, 2146, 7, 263, 2, 2, 2146, 2148, 5, 124, 63, 2, 2147, 2143, 3, 2, 2, 2, 2147, 2144, 3, 2, 2, 2, 2148, 123, 3, 2, 2, 2, 2149, 2154, 5, 126, 64, 2, 2150, 2151, 7, 6, 2, 2, 2151, 2153, 5, 126, 64, 2, 2152, 2150, 3, 2, 2, 2, 2153, 2156, 3, 2, 2, 2, 2154, 2152, 3, 2, 2, 2, 2154, 2155, 3, 2, 2, 2, 2155, 125, 3, 2, 2, 2, 2156, 2154, 3, 2, 2, 2, 2157, 2158, 5, 230, 116, 2, 2158, 2159, 7, 344, 2, 2, 2159, 2160, 5, 252, 127, 2, 2160, 127, 3, 2, 2, 2, 2161, 2162, 7, 337, 2, 2, 2162, 2163, 5, 260, 131, 2, 2163, 129, 3, 2, 2, 2, 2164, 2165, 7, 132, 2, 2, 2165, 2166, 5, 260, 131, 2, 2166, 131, 3, 2, 2, 2, 2167, 2168, 7, 365, 2, 2, 2168, 2175, 5, 134, 68, 2, 2169, 2171, 7, 6, 2, 2, 2170, 2169, 3, 2, 2, 2, 2170, 2171, 3, 2, 2, 2, 2171, 2172, 3, 2, 2, 2, 2172, 2174, 5, 134, 68, 2, 2173, 2170, 3, 2, 2, 2, 2174, 2177, 3, 2, 2, 2, 2175, 2173, 3, 2, 2, 2, 2175, 2176, 3, 2, 2, 2, 2176, 2178, 3, 2, 2, 2, 2177, 2175, 3, 2, 2, 2, 2178, 2179, 7, 366, 2, 2, 2179, 133, 3, 2, 2, 2, 2180, 2194, 5, 352, 177, 2, 2181, 2182, 5, 352, 177, 2, 2182, 2183, 7, 4, 2, 2, 2183, 2188, 5, 268, 135, 2, 2184, 2185, 7, 6, 2, 2, 2185, 2187, 5, 268, 135, 2, 2186, 2184, 3, 2, 2, 2, 2187, 2190, 3, 2, 2, 2, 2188, 2186, 3, 2, 2, 2, 2188, 2189, 3, 2, 2, 2, 2189, 2191, 3, 2, 2, 2, 2190, 2188, 3, 2, 2, 2, 2191, 2192, 7, 5, 2, 2, 2192, 2194, 3, 2, 2, 2, 2193, 2180, 3, 2, 2, 2, 2193, 2181, 3, 2, 2, 2, 2194, 135, 3, 2, 2, 2, 2195, 2196, 7, 123, 2, 2, 2196, 2201, 5, 182, 92, 2, 2197, 2198, 7, 6, 2, 2, 2198, 2200, 5, 182, 92, 2, 2199, 2197, 3, 2, 2, 2, 2200, 2203, 3, 2, 2, 2, 2201, 2199, 3, 2, 2, 2, 2201, 2202, 3, 2, 2, 2, 2202, 2207, 3, 2, 2, 2, 2203, 2201, 3, 2, 2, 2, 2204, 2206, 5, 178, 90, 2, 2205, 2204, 3, 2, 2, 2, 2206, 2209, 3, 2, 2, 2, 2207, 2205, 3, 2, 2, 2, 2207, 2208, 3, 2, 2, 2, 2208, 2211, 3, 2, 2, 2, 2209, 2207, 3, 2, 2, 2, 2210, 2212, 5, 150, 76, 2, 2211, 2210, 3, 2, 2, 2, 2211, 2212, 3, 2, 2, 2, 2212, 2214, 3, 2, 2, 2, 2213, 2215, 5, 156, 79, 2, 2214, 2213, 3, 2, 2, 2, 2214, 2215, 3, 2, 2, 2, 2215, 137, 3, 2, 2, 2, 2216, 2218, 7, 119, 2, 2, 2217, 2216, 3, 2, 2, 2, 2217, 2218, 3, 2, 2, 2, 2218, 2219, 3, 2, 2, 2, 2219, 2220, 9, 20, 2, 2, 2220, 2221, 7, 22, 2, 2, 2221, 2222, 7, 198, 2, 2, 2222, 2231, 5, 368, 185, 2, 2223, 2225, 7, 119, 2, 2, 2224, 2223, 3, 2, 2, 2, 2224, 2225, 3, 2, 2, 2, 2225, 2226, 3, 2, 2, 2, 2226, 2227, 9, 21, 2, 2, 2227, 2228, 7, 22, 2, 2, 2228, 2229, 7, 198, 2, 2, 2229, 2231, 5, 264, 133, 2, 2230, 2217, 3, 2, 2, 2, 2230, 2224, 3, 2, 2, 2, 2231, 139, 3, 2, 2, 2, 2232, 2233, 7, 130, 2, 2, 2233, 2234, 7, 33, 2, 2, 2234, 2239, 5, 142, 72, 2, 2235, 2236, 7, 6, 2, 2, 2236, 2238, 5, 142, 72, 2, 2237, 2235, 3, 2, 2, 2, 2238, 2241, 3, 2, 2, 2, 2239, 2237, 3, 2, 2, 2, 2239, 2240, 3, 2, 2, 2, 2240, 2272, 3, 2, 2, 2, 2241, 2239, 3, 2, 2, 2, 2242, 2243, 7, 130, 2, 2, 2243, 2244, 7, 33, 2, 2, 2244, 2249, 5, 252, 127, 2, 2245, 2246, 7, 6, 2, 2, 2246, 2248, 5, 252, 127, 2, 2247, 2245, 3, 2, 2, 2, 2248, 2251, 3, 2, 2, 2, 2249, 2247, 3, 2, 2, 2, 2249, 2250, 3, 2, 2, 2, 2250, 2269, 3, 2, 2, 2, 2251, 2249, 3, 2, 2, 2, 2252, 2253, 7, 339, 2, 2, 2253, 2270, 7, 250, 2, 2, 2254, 2255, 7, 339, 2, 2, 2255, 2270, 7, 63, 2, 2, 2256, 2257, 7, 131, 2, 2, 2257, 2258, 7, 265, 2, 2, 2258, 2259, 7, 4, 2, 2, 2259, 2264, 5, 148, 75, 2, 2260, 2261, 7, 6, 2, 2, 2261, 2263, 5, 148, 75, 2, 2262, 2260, 3, 2, 2, 2, 2263, 2266, 3, 2, 2, 2, 2264, 2262, 3, 2, 2, 2, 2264, 2265, 3, 2, 2, 2, 2265, 2267, 3, 2, 2, 2, 2266, 2264, 3, 2, 2, 2, 2267, 2268, 7, 5, 2, 2, 2268, 2270, 3, 2, 2, 2, 2269, 2252, 3, 2, 2, 2, 2269, 2254, 3, 2, 2, 2, 2269, 2256, 3, 2, 2, 2, 2269, 2270, 3, 2, 2, 2, 2270, 2272, 3, 2, 2, 2, 2271, 2232, 3, 2, 2, 2, 2271, 2242, 3, 2, 2, 2, 2272, 141, 3, 2, 2, 2, 2273, 2276, 5, 144, 73, 2, 2274, 2276, 5, 252, 127, 2, 2275, 2273, 3, 2, 2, 2, 2275, 2274, 3, 2, 2, 2, 2276, 143, 3, 2, 2, 2, 2277, 2278, 9, 22, 2, 2, 2278, 2279, 7, 4, 2, 2, 2279, 2284, 5, 148, 75, 2, 2280, 2281, 7, 6, 2, 2, 2281, 2283, 5, 148, 75, 2, 2282, 2280, 3, 2, 2, 2, 2283, 2286, 3, 2, 2, 2, 2284, 2282, 3, 2, 2, 2, 2284, 2285, 3, 2, 2, 2, 2285, 2287, 3, 2, 2, 2, 2286, 2284, 3, 2, 2, 2, 2287, 2288, 7, 5, 2, 2, 2288, 2303, 3, 2, 2, 2, 2289, 2290, 7, 131, 2, 2, 2290, 2291, 7, 265, 2, 2, 2291, 2292, 7, 4, 2, 2, 2292, 2297, 5, 146, 74, 2, 2293, 2294, 7, 6, 2, 2, 2294, 2296, 5, 146, 74, 2, 2295, 2293, 3, 2, 2, 2, 2296, 2299, 3, 2, 2, 2, 2297, 2295, 3, 2, 2, 2, 2297, 2298, 3, 2, 2, 2, 2298, 2300, 3, 2, 2, 2, 2299, 2297, 3, 2, 2, 2, 2300, 2301, 7, 5, 2, 2, 2301, 2303, 3, 2, 2, 2, 2302, 2277, 3, 2, 2, 2, 2302, 2289, 3, 2, 2, 2, 2303, 145, 3, 2, 2, 2, 2304, 2307, 5, 144, 73, 2, 2305, 2307, 5, 148, 75, 2, 2306, 2304, 3, 2, 2, 2, 2306, 2305, 3, 2, 2, 2, 2307, 147, 3, 2, 2, 2, 2308, 2317, 7, 4, 2, 2, 2309, 2314, 5, 252, 127, 2, 2310, 2311, 7, 6, 2, 2, 2311, 2313, 5, 252, 127, 2, 2312, 2310, 3, 2, 2, 2, 2313, 2316, 3, 2, 2, 2, 2314, 2312, 3, 2, 2, 2, 2314, 2315, 3, 2, 2, 2, 2315, 2318, 3, 2, 2, 2, 2316, 2314, 3, 2, 2, 2, 2317, 2309, 3, 2, 2, 2, 2317, 2318, 3, 2, 2, 2, 2318, 2319, 3, 2, 2, 2, 2319, 2322, 7, 5, 2, 2, 2320, 2322, 5, 252, 127, 2, 2321, 2308, 3, 2, 2, 2, 2321, 2320, 3, 2, 2, 2, 2322, 149, 3, 2, 2, 2, 2323, 2324, 7, 219, 2, 2, 2324, 2325, 7, 4, 2, 2, 2325, 2326, 5, 242, 122, 2, 2326, 2327, 7, 119, 2, 2, 2327, 2328, 5, 152, 77, 2, 2328, 2329, 7, 140, 2, 2, 2329, 2330, 7, 4, 2, 2, 2330, 2335, 5, 154, 78, 2, 2331, 2332, 7, 6, 2, 2, 2332, 2334, 5, 154, 78, 2, 2333, 2331, 3, 2, 2, 2, 2334, 2337, 3, 2, 2, 2, 2335, 2333, 3, 2, 2, 2, 2335, 2336, 3, 2, 2, 2, 2336, 2338, 3, 2, 2, 2, 2337, 2335, 3, 2, 2, 2, 2338, 2339, 7, 5, 2, 2, 2339, 2340, 7, 5, 2, 2, 2340, 151, 3, 2, 2, 2, 2341, 2354, 5, 352, 177, 2, 2342, 2343, 7, 4, 2, 2, 2343, 2348, 5, 352, 177, 2, 2344, 2345, 7, 6, 2, 2, 2345, 2347, 5, 352, 177, 2, 2346, 2344, 3, 2, 2, 2, 2347, 2350, 3, 2, 2, 2, 2348, 2346, 3, 2, 2, 2, 2348, 2349, 3, 2, 2, 2, 2349, 2351, 3, 2, 2, 2, 2350, 2348, 3, 2, 2, 2, 2351, 2352, 7, 5, 2, 2, 2352, 2354, 3, 2, 2, 2, 2353, 2341, 3, 2, 2, 2, 2353, 2342, 3, 2, 2, 2, 2354, 153, 3, 2, 2, 2, 2355, 2360, 5, 252, 127, 2, 2356, 2358, 7, 22, 2, 2, 2357, 2356, 3, 2, 2, 2, 2357, 2358, 3, 2, 2, 2, 2358, 2359, 3, 2, 2, 2, 2359, 2361, 5, 352, 177, 2, 2360, 2357, 3, 2, 2, 2, 2360, 2361, 3, 2, 2, 2, 2361, 155, 3, 2, 2, 2, 2362, 2364, 7, 320, 2, 2, 2363, 2365, 5, 158, 80, 2, 2364, 2363, 3, 2, 2, 2, 2364, 2365, 3, 2, 2, 2, 2365, 2366, 3, 2, 2, 2, 2366, 2367, 7, 4, 2, 2, 2367, 2368, 5, 160, 81, 2, 2368, 2373, 7, 5, 2, 2, 2369, 2371, 7, 22, 2, 2, 2370, 2369, 3, 2, 2, 2, 2370, 2371, 3, 2, 2, 2, 2371, 2372, 3, 2, 2, 2, 2372, 2374, 5, 352, 177, 2, 2373, 2370, 3, 2, 2, 2, 2373, 2374, 3, 2, 2, 2, 2374, 157, 3, 2, 2, 2, 2375, 2376, 9, 23, 2, 2, 2376, 2377, 7, 196, 2, 2, 2377, 159, 3, 2, 2, 2, 2378, 2381, 5, 162, 82, 2, 2379, 2381, 5, 164, 83, 2, 2380, 2378, 3, 2, 2, 2, 2380, 2379, 3, 2, 2, 2, 2381, 161, 3, 2, 2, 2, 2382, 2383, 5, 168, 85, 2, 2383, 2384, 7, 119, 2, 2, 2384, 2385, 5, 170, 86, 2, 2385, 2386, 7, 140, 2, 2, 2386, 2387, 7, 4, 2, 2, 2387, 2392, 5, 172, 87, 2, 2388, 2389, 7, 6, 2, 2, 2389, 2391, 5, 172, 87, 2, 2390, 2388, 3, 2, 2, 2, 2391, 2394, 3, 2, 2, 2, 2392, 2390, 3, 2, 2, 2, 2392, 2393, 3, 2, 2, 2, 2393, 2395, 3, 2, 2, 2, 2394, 2392, 3, 2, 2, 2, 2395, 2396, 7, 5, 2, 2, 2396, 163, 3, 2, 2, 2, 2397, 2398, 7, 4, 2, 2, 2398, 2403, 5, 168, 85, 2, 2399, 2400, 7, 6, 2, 2, 2400, 2402, 5, 168, 85, 2, 2401, 2399, 3, 2, 2, 2, 2402, 2405, 3, 2, 2, 2, 2403, 2401, 3, 2, 2, 2, 2403, 2404, 3, 2, 2, 2, 2404, 2406, 3, 2, 2, 2, 2405, 2403, 3, 2, 2, 2, 2406, 2407, 7, 5, 2, 2, 2407, 2408, 7, 119, 2, 2, 2408, 2409, 5, 170, 86, 2, 2409, 2410, 7, 140, 2, 2, 2410, 2411, 7, 4, 2, 2, 2411, 2416, 5, 166, 84, 2, 2412, 2413, 7, 6, 2, 2, 2413, 2415, 5, 166, 84, 2, 2414, 2412, 3, 2, 2, 2, 2415, 2418, 3, 2, 2, 2, 2416, 2414, 3, 2, 2, 2, 2416, 2417, 3, 2, 2, 2, 2417, 2419, 3, 2, 2, 2, 2418, 2416, 3, 2, 2, 2, 2419, 2420, 7, 5, 2, 2, 2420, 165, 3, 2, 2, 2, 2421, 2422, 7, 4, 2, 2, 2422, 2427, 5, 174, 88, 2, 2423, 2424, 7, 6, 2, 2, 2424, 2426, 5, 174, 88, 2, 2425, 2423, 3, 2, 2, 2, 2426, 2429, 3, 2, 2, 2, 2427, 2425, 3, 2, 2, 2, 2427, 2428, 3, 2, 2, 2, 2428, 2430, 3, 2, 2, 2, 2429, 2427, 3, 2, 2, 2, 2430, 2432, 7, 5, 2, 2, 2431, 2433, 5, 176, 89, 2, 2432, 2431, 3, 2, 2, 2, 2432, 2433, 3, 2, 2, 2, 2433, 167, 3, 2, 2, 2, 2434, 2435, 5, 352, 177, 2, 2435, 169, 3, 2, 2, 2, 2436, 2437, 5, 352, 177, 2, 2437, 171, 3, 2, 2, 2, 2438, 2440, 5, 174, 88, 2, 2439, 2441, 5, 176, 89, 2, 2440, 2439, 3, 2, 2, 2, 2440, 2441, 3, 2, 2, 2, 2441, 173, 3, 2, 2, 2, 2442, 2443, 5, 230, 116, 2, 2443, 175, 3, 2, 2, 2, 2444, 2446, 7, 22, 2, 2, 2445, 2444, 3, 2, 2, 2, 2445, 2446, 3, 2, 2, 2, 2446, 2447, 3, 2, 2, 2, 2447, 2448, 5, 352, 177, 2, 2448, 177, 3, 2, 2, 2, 2449, 2450, 7, 158, 2, 2, 2450, 2452, 7, 331, 2, 2, 2451, 2453, 7, 207, 2, 2, 2452, 2451, 3, 2, 2, 2, 2452, 2453, 3, 2, 2, 2, 2453, 2454, 3, 2, 2, 2, 2454, 2455, 5, 346, 174, 2, 2455, 2464, 7, 4, 2, 2, 2456, 2461, 5, 252, 127, 2, 2457, 2458, 7, 6, 2, 2, 2458, 2460, 5, 252, 127, 2, 2459, 2457, 3, 2, 2, 2, 2460, 2463, 3, 2, 2, 2, 2461, 2459, 3, 2, 2, 2, 2461, 2462, 3, 2, 2, 2, 2462, 2465, 3, 2, 2, 2, 2463, 2461, 3, 2, 2, 2, 2464, 2456, 3, 2, 2, 2, 2464, 2465, 3, 2, 2, 2, 2465, 2466, 3, 2, 2, 2, 2466, 2467, 7, 5, 2, 2, 2467, 2479, 5, 352, 177, 2, 2468, 2470, 7, 22, 2, 2, 2469, 2468, 3, 2, 2, 2, 2469, 2470, 3, 2, 2, 2, 2470, 2471, 3, 2, 2, 2, 2471, 2476, 5, 352, 177, 2, 2472, 2473, 7, 6, 2, 2, 2473, 2475, 5, 352, 177, 2, 2474, 2472, 3, 2, 2, 2, 2475, 2478, 3, 2, 2, 2, 2476, 2474, 3, 2, 2, 2, 2476, 2477, 3, 2, 2, 2, 2477, 2480, 3, 2, 2, 2, 2478, 2476, 3, 2, 2, 2, 2479, 2469, 3, 2, 2, 2, 2479, 2480, 3, 2, 2, 2, 2480, 179, 3, 2, 2, 2, 2481, 2482, 9, 24, 2, 2, 2482, 181, 3, 2, 2, 2, 2483, 2485, 7, 158, 2, 2, 2484, 2483, 3, 2, 2, 2, 2484, 2485, 3, 2, 2, 2, 2485, 2486, 3, 2, 2, 2, 2486, 2490, 5, 208, 105, 2, 2487, 2489, 5, 184, 93, 2, 2488, 2487, 3, 2, 2, 2, 2489, 2492, 3, 2, 2, 2, 2490, 2488, 3, 2, 2, 2, 2490, 2491, 3, 2, 2, 2, 2491, 183, 3, 2, 2, 2, 2492, 2490, 3, 2, 2, 2, 2493, 2497, 5, 186, 94, 2, 2494, 2497, 5, 150, 76, 2, 2495, 2497, 5, 156, 79, 2, 2496, 2493, 3, 2, 2, 2, 2496, 2494, 3, 2, 2, 2, 2496, 2495, 3, 2, 2, 2, 2497, 185, 3, 2, 2, 2, 2498, 2499, 5, 188, 95, 2, 2499, 2501, 7, 155, 2, 2, 2500, 2502, 7, 158, 2, 2, 2501, 2500, 3, 2, 2, 2, 2501, 2502, 3, 2, 2, 2, 2502, 2503, 3, 2, 2, 2, 2503, 2505, 5, 208, 105, 2, 2504, 2506, 5, 190, 96, 2, 2505, 2504, 3, 2, 2, 2, 2505, 2506, 3, 2, 2, 2, 2506, 2516, 3, 2, 2, 2, 2507, 2508, 7, 192, 2, 2, 2508, 2509, 5, 188, 95, 2, 2509, 2511, 7, 155, 2, 2, 2510, 2512, 7, 158, 2, 2, 2511, 2510, 3, 2, 2, 2, 2511, 2512, 3, 2, 2, 2, 2512, 2513, 3, 2, 2, 2, 2513, 2514, 5, 208, 105, 2, 2514, 2516, 3, 2, 2, 2, 2515, 2498, 3, 2, 2, 2, 2515, 2507, 3, 2, 2, 2, 2516, 187, 3, 2, 2, 2, 2517, 2519, 7, 144, 2, 2, 2518, 2517, 3, 2, 2, 2, 2518, 2519, 3, 2, 2, 2, 2519, 2542, 3, 2, 2, 2, 2520, 2542, 7, 62, 2, 2, 2521, 2523, 7, 161, 2, 2, 2522, 2524, 7, 207, 2, 2, 2523, 2522, 3, 2, 2, 2, 2523, 2524, 3, 2, 2, 2, 2524, 2542, 3, 2, 2, 2, 2525, 2527, 7, 161, 2, 2, 2526, 2525, 3, 2, 2, 2, 2526, 2527, 3, 2, 2, 2, 2527, 2528, 3, 2, 2, 2, 2528, 2542, 7, 258, 2, 2, 2529, 2531, 7, 245, 2, 2, 2530, 2532, 7, 207, 2, 2, 2531, 2530, 3, 2, 2, 2, 2531, 2532, 3, 2, 2, 2, 2532, 2542, 3, 2, 2, 2, 2533, 2535, 7, 124, 2, 2, 2534, 2536, 7, 207, 2, 2, 2535, 2534, 3, 2, 2, 2, 2535, 2536, 3, 2, 2, 2, 2536, 2542, 3, 2, 2, 2, 2537, 2539, 7, 161, 2, 2, 2538, 2537, 3, 2, 2, 2, 2538, 2539, 3, 2, 2, 2, 2539, 2540, 3, 2, 2, 2, 2540, 2542, 7, 17, 2, 2, 2541, 2518, 3, 2, 2, 2, 2541, 2520, 3, 2, 2, 2, 2541, 2521, 3, 2, 2, 2, 2541, 2526, 3, 2, 2, 2, 2541, 2529, 3, 2, 2, 2, 2541, 2533, 3, 2, 2, 2, 2541, 2538, 3, 2, 2, 2, 2542, 189, 3, 2, 2, 2, 2543, 2544, 7, 200, 2, 2, 2544, 2548, 5, 260, 131, 2, 2545, 2546, 7, 325, 2, 2, 2546, 2548, 5, 196, 99, 2, 2547, 2543, 3, 2, 2, 2, 2547, 2545, 3, 2, 2, 2, 2548, 191, 3, 2, 2, 2, 2549, 2550, 7, 288, 2, 2, 2550, 2552, 7, 4, 2, 2, 2551, 2553, 5, 194, 98, 2, 2552, 2551, 3, 2, 2, 2, 2552, 2553, 3, 2, 2, 2, 2553, 2554, 3, 2, 2, 2, 2554, 2559, 7, 5, 2, 2, 2555, 2556, 7, 239, 2, 2, 2556, 2557, 7, 4, 2, 2, 2557, 2558, 7, 373, 2, 2, 2558, 2560, 7, 5, 2, 2, 2559, 2555, 3, 2, 2, 2, 2559, 2560, 3, 2, 2, 2, 2560, 193, 3, 2, 2, 2, 2561, 2563, 7, 353, 2, 2, 2562, 2561, 3, 2, 2, 2, 2562, 2563, 3, 2, 2, 2, 2563, 2564, 3, 2, 2, 2, 2564, 2565, 9, 25, 2, 2, 2565, 2586, 7, 218, 2, 2, 2566, 2567, 5, 252, 127, 2, 2567, 2568, 7, 252, 2, 2, 2568, 2586, 3, 2, 2, 2, 2569, 2570, 7, 31, 2, 2, 2570, 2571, 7, 373, 2, 2, 2571, 2572, 7, 206, 2, 2, 2572, 2573, 7, 198, 2, 2, 2573, 2582, 7, 373, 2, 2, 2574, 2580, 7, 200, 2, 2, 2575, 2581, 5, 352, 177, 2, 2576, 2577, 5, 346, 174, 2, 2577, 2578, 7, 4, 2, 2, 2578, 2579, 7, 5, 2, 2, 2579, 2581, 3, 2, 2, 2, 2580, 2575, 3, 2, 2, 2, 2580, 2576, 3, 2, 2, 2, 2581, 2583, 3, 2, 2, 2, 2582, 2574, 3, 2, 2, 2, 2582, 2583, 3, 2, 2, 2, 2583, 2586, 3, 2, 2, 2, 2584, 2586, 5, 252, 127, 2, 2585, 2562, 3, 2, 2, 2, 2585, 2566, 3, 2, 2, 2, 2585, 2569, 3, 2, 2, 2, 2585, 2584, 3, 2, 2, 2, 2586, 195, 3, 2, 2, 2, 2587, 2588, 7, 4, 2, 2, 2588, 2589, 5, 198, 100, 2, 2589, 2590, 7, 5, 2, 2, 2590, 197, 3, 2, 2, 2, 2591, 2596, 5, 348, 175, 2, 2592, 2593, 7, 6, 2, 2, 2593, 2595, 5, 348, 175, 2, 2594, 2592, 3, 2, 2, 2, 2595, 2598, 3, 2, 2, 2, 2596, 2594, 3, 2, 2, 2, 2596, 2597, 3, 2, 2, 2, 2597, 199, 3, 2, 2, 2, 2598, 2596, 3, 2, 2, 2, 2599, 2600, 7, 4, 2, 2, 2600, 2605, 5, 202, 102, 2, 2601, 2602, 7, 6, 2, 2, 2602, 2604, 5, 202, 102, 2, 2603, 2601, 3, 2, 2, 2, 2604, 2607, 3, 2, 2, 2, 2605, 2603, 3, 2, 2, 2, 2605, 2606, 3, 2, 2, 2, 2606, 2608, 3, 2, 2, 2, 2607, 2605, 3, 2, 2, 2, 2608, 2609, 7, 5, 2, 2, 2609, 201, 3, 2, 2, 2, 2610, 2612, 5, 348, 175, 2, 2611, 2613, 9, 18, 2, 2, 2612, 2611, 3, 2, 2, 2, 2612, 2613, 3, 2, 2, 2, 2613, 203, 3, 2, 2, 2, 2614, 2615, 7, 4, 2, 2, 2615, 2620, 5, 206, 104, 2, 2616, 2617, 7, 6, 2, 2, 2617, 2619, 5, 206, 104, 2, 2618, 2616, 3, 2, 2, 2, 2619, 2622, 3, 2, 2, 2, 2620, 2618, 3, 2, 2, 2, 2620, 2621, 3, 2, 2, 2, 2621, 2623, 3, 2, 2, 2, 2622, 2620, 3, 2, 2, 2, 2623, 2624, 7, 5, 2, 2, 2624, 205, 3, 2, 2, 2, 2625, 2627, 5, 352, 177, 2, 2626, 2628, 5, 34, 18, 2, 2627, 2626, 3, 2, 2, 2, 2627, 2628, 3, 2, 2, 2, 2628, 207, 3, 2, 2, 2, 2629, 2631, 5, 88, 45, 2, 2630, 2632, 5, 138, 70, 2, 2631, 2630, 3, 2, 2, 2, 2631, 2632, 3, 2, 2, 2, 2632, 2634, 3, 2, 2, 2, 2633, 2635, 5, 192, 97, 2, 2634, 2633, 3, 2, 2, 2, 2634, 2635, 3, 2, 2, 2, 2635, 2636, 3, 2, 2, 2, 2636, 2637, 5, 224, 113, 2, 2637, 2657, 3, 2, 2, 2, 2638, 2639, 7, 4, 2, 2, 2639, 2640, 5, 36, 19, 2, 2640, 2642, 7, 5, 2, 2, 2641, 2643, 5, 192, 97, 2, 2642, 2641, 3, 2, 2, 2, 2642, 2643, 3, 2, 2, 2, 2643, 2644, 3, 2, 2, 2, 2644, 2645, 5, 224, 113, 2, 2645, 2657, 3, 2, 2, 2, 2646, 2647, 7, 4, 2, 2, 2647, 2648, 5, 182, 92, 2, 2648, 2650, 7, 5, 2, 2, 2649, 2651, 5, 192, 97, 2, 2650, 2649, 3, 2, 2, 2, 2650, 2651, 3, 2, 2, 2, 2651, 2652, 3, 2, 2, 2, 2652, 2653, 5, 224, 113, 2, 2653, 2657, 3, 2, 2, 2, 2654, 2657, 5, 210, 106, 2, 2655, 2657, 5, 222, 112, 2, 2656, 2629, 3, 2, 2, 2, 2656, 2638, 3, 2, 2, 2, 2656, 2646, 3, 2, 2, 2, 2656, 2654, 3, 2, 2, 2, 2656, 2655, 3, 2, 2, 2, 2657, 209, 3, 2, 2, 2, 2658, 2659, 7, 326, 2, 2, 2659, 2664, 5, 252, 127, 2, 2660, 2661, 7, 6, 2, 2, 2661, 2663, 5, 252, 127, 2, 2662, 2660, 3, 2, 2, 2, 2663, 2666, 3, 2, 2, 2, 2664, 2662, 3, 2, 2, 2, 2664, 2665, 3, 2, 2, 2, 2665, 2667, 3, 2, 2, 2, 2666, 2664, 3, 2, 2, 2, 2667, 2668, 5, 224, 113, 2, 2668, 211, 3, 2, 2, 2, 2669, 2670, 7, 286, 2, 2, 2670, 2672, 5, 6, 4, 2, 2671, 2673, 5, 214, 108, 2, 2672, 2671, 3, 2, 2, 2, 2672, 2673, 3, 2, 2, 2, 2673, 2689, 3, 2, 2, 2, 2674, 2675, 7, 286, 2, 2, 2675, 2676, 7, 4, 2, 2, 2676, 2677, 5, 6, 4, 2, 2677, 2679, 7, 5, 2, 2, 2678, 2680, 5, 214, 108, 2, 2679, 2678, 3, 2, 2, 2, 2679, 2680, 3, 2, 2, 2, 2680, 2689, 3, 2, 2, 2, 2681, 2682, 7, 286, 2, 2, 2682, 2683, 7, 4, 2, 2, 2683, 2684, 5, 36, 19, 2, 2684, 2686, 7, 5, 2, 2, 2685, 2687, 5, 214, 108, 2, 2686, 2685, 3, 2, 2, 2, 2686, 2687, 3, 2, 2, 2, 2687, 2689, 3, 2, 2, 2, 2688, 2669, 3, 2, 2, 2, 2688, 2674, 3, 2, 2, 2, 2688, 2681, 3, 2, 2, 2, 2689, 213, 3, 2, 2, 2, 2690, 2691, 7, 339, 2, 2, 2691, 2692, 7, 268, 2, 2, 2692, 2710, 7, 213, 2, 2, 2693, 2694, 9, 26, 2, 2, 2694, 2707, 7, 33, 2, 2, 2695, 2696, 7, 4, 2, 2, 2696, 2701, 5, 252, 127, 2, 2697, 2698, 7, 6, 2, 2, 2698, 2700, 5, 252, 127, 2, 2699, 2697, 3, 2, 2, 2, 2700, 2703, 3, 2, 2, 2, 2701, 2699, 3, 2, 2, 2, 2701, 2702, 3, 2, 2, 2, 2702, 2704, 3, 2, 2, 2, 2703, 2701, 3, 2, 2, 2, 2704, 2705, 7, 5, 2, 2, 2705, 2708, 3, 2, 2, 2, 2706, 2708, 5, 252, 127, 2, 2707, 2695, 3, 2, 2, 2, 2707, 2706, 3, 2, 2, 2, 2708, 2710, 3, 2, 2, 2, 2709, 2690, 3, 2, 2, 2, 2709, 2693, 3, 2, 2, 2, 2710, 2727, 3, 2, 2, 2, 2711, 2712, 9, 27, 2, 2, 2712, 2725, 7, 33, 2, 2, 2713, 2714, 7, 4, 2, 2, 2714, 2719, 5, 98, 50, 2, 2715, 2716, 7, 6, 2, 2, 2716, 2718, 5, 98, 50, 2, 2717, 2715, 3, 2, 2, 2, 2718, 2721, 3, 2, 2, 2, 2719, 2717, 3, 2, 2, 2, 2719, 2720, 3, 2, 2, 2, 2720, 2722, 3, 2, 2, 2, 2721, 2719, 3, 2, 2, 2, 2722, 2723, 7, 5, 2, 2, 2723, 2726, 3, 2, 2, 2, 2724, 2726, 5, 98, 50, 2, 2725, 2713, 3, 2, 2, 2, 2725, 2724, 3, 2, 2, 2, 2726, 2728, 3, 2, 2, 2, 2727, 2711, 3, 2, 2, 2, 2727, 2728, 3, 2, 2, 2, 2728, 215, 3, 2, 2, 2, 2729, 2730, 5, 352, 177, 2, 2730, 2731, 7, 364, 2, 2, 2731, 2732, 5, 212, 107, 2, 2732, 217, 3, 2, 2, 2, 2733, 2736, 5, 212, 107, 2, 2734, 2736, 5, 216, 109, 2, 2735, 2733, 3, 2, 2, 2, 2735, 2734, 3, 2, 2, 2, 2736, 219, 3, 2, 2, 2, 2737, 2740, 5, 218, 110, 2, 2738, 2740, 5, 256, 129, 2, 2739, 2737, 3, 2, 2, 2, 2739, 2738, 3, 2, 2, 2, 2740, 221, 3, 2, 2, 2, 2741, 2742, 5, 344, 173, 2, 2742, 2751, 7, 4, 2, 2, 2743, 2748, 5, 220, 111, 2, 2744, 2745, 7, 6, 2, 2, 2745, 2747, 5, 220, 111, 2, 2746, 2744, 3, 2, 2, 2, 2747, 2750, 3, 2, 2, 2, 2748, 2746, 3, 2, 2, 2, 2748, 2749, 3, 2, 2, 2, 2749, 2752, 3, 2, 2, 2, 2750, 2748, 3, 2, 2, 2, 2751, 2743, 3, 2, 2, 2, 2751, 2752, 3, 2, 2, 2, 2752, 2753, 3, 2, 2, 2, 2753, 2754, 7, 5, 2, 2, 2754, 2755, 5, 224, 113, 2, 2755, 223, 3, 2, 2, 2, 2756, 2758, 7, 22, 2, 2, 2757, 2756, 3, 2, 2, 2, 2757, 2758, 3, 2, 2, 2, 2758, 2759, 3, 2, 2, 2, 2759, 2761, 5, 354, 178, 2, 2760, 2762, 5, 196, 99, 2, 2761, 2760, 3, 2, 2, 2, 2761, 2762, 3, 2, 2, 2, 2762, 2764, 3, 2, 2, 2, 2763, 2757, 3, 2, 2, 2, 2763, 2764, 3, 2, 2, 2, 2764, 225, 3, 2, 2, 2, 2765, 2766, 7, 251, 2, 2, 2766, 2767, 7, 121, 2, 2, 2767, 2768, 7, 260, 2, 2, 2768, 2772, 5, 364, 183, 2, 2769, 2770, 7, 339, 2, 2, 2770, 2771, 7, 261, 2, 2, 2771, 2773, 5, 62, 32, 2, 2772, 2769, 3, 2, 2, 2, 2772, 2773, 3, 2, 2, 2, 2773, 2815, 3, 2, 2, 2, 2774, 2775, 7, 251, 2, 2, 2775, 2776, 7, 121, 2, 2, 2776, 2786, 7, 87, 2, 2, 2777, 2778, 7, 113, 2, 2, 2778, 2779, 7, 292, 2, 2, 2779, 2780, 7, 33, 2, 2, 2780, 2784, 5, 364, 183, 2, 2781, 2782, 7, 101, 2, 2, 2782, 2783, 7, 33, 2, 2, 2783, 2785, 5, 364, 183, 2, 2784, 2781, 3, 2, 2, 2, 2784, 2785, 3, 2, 2, 2, 2785, 2787, 3, 2, 2, 2, 2786, 2777, 3, 2, 2, 2, 2786, 2787, 3, 2, 2, 2, 2787, 2793, 3, 2, 2, 2, 2788, 2789, 7, 50, 2, 2, 2789, 2790, 7, 154, 2, 2, 2790, 2791, 7, 292, 2, 2, 2791, 2792, 7, 33, 2, 2, 2792, 2794, 5, 364, 183, 2, 2793, 2788, 3, 2, 2, 2, 2793, 2794, 3, 2, 2, 2, 2794, 2800, 3, 2, 2, 2, 2795, 2796, 7, 175, 2, 2, 2796, 2797, 7, 156, 2, 2, 2797, 2798, 7, 292, 2, 2, 2798, 2799, 7, 33, 2, 2, 2799, 2801, 5, 364, 183, 2, 2800, 2795, 3, 2, 2, 2, 2800, 2801, 3, 2, 2, 2, 2801, 2806, 3, 2, 2, 2, 2802, 2803, 7, 165, 2, 2, 2803, 2804, 7, 292, 2, 2, 2804, 2805, 7, 33, 2, 2, 2805, 2807, 5, 364, 183, 2, 2806, 2802, 3, 2, 2, 2, 2806, 2807, 3, 2, 2, 2, 2807, 2812, 3, 2, 2, 2, 2808, 2809, 7, 195, 2, 2, 2809, 2810, 7, 85, 2, 2, 2810, 2811, 7, 22, 2, 2, 2811, 2813, 5, 364, 183, 2, 2812, 2808, 3, 2, 2, 2, 2812, 2813, 3, 2, 2, 2, 2813, 2815, 3, 2, 2, 2, 2814, 2765, 3, 2, 2, 2, 2814, 2774, 3, 2, 2, 2, 2815, 227, 3, 2, 2, 2, 2816, 2821, 5, 230, 116, 2, 2817, 2818, 7, 6, 2, 2, 2818, 2820, 5, 230, 116, 2, 2819, 2817, 3, 2, 2, 2, 2820, 2823, 3, 2, 2, 2, 2821, 2819, 3, 2, 2, 2, 2821, 2822, 3, 2, 2, 2, 2822, 229, 3, 2, 2, 2, 2823, 2821, 3, 2, 2, 2, 2824, 2829, 5, 348, 175, 2, 2825, 2826, 7, 7, 2, 2, 2826, 2828, 5, 348, 175, 2, 2827, 2825, 3, 2, 2, 2, 2828, 2831, 3, 2, 2, 2, 2829, 2827, 3, 2, 2, 2, 2829, 2830, 3, 2, 2, 2, 2830, 231, 3, 2, 2, 2, 2831, 2829, 3, 2, 2, 2, 2832, 2837, 5, 234, 118, 2, 2833, 2834, 7, 6, 2, 2, 2834, 2836, 5, 234, 118, 2, 2835, 2833, 3, 2, 2, 2, 2836, 2839, 3, 2, 2, 2, 2837, 2835, 3, 2, 2, 2, 2837, 2838, 3, 2, 2, 2, 2838, 233, 3, 2, 2, 2, 2839, 2837, 3, 2, 2, 2, 2840, 2843, 5, 230, 116, 2, 2841, 2842, 7, 203, 2, 2, 2842, 2844, 5, 62, 32, 2, 2843, 2841, 3, 2, 2, 2, 2843, 2844, 3, 2, 2, 2, 2844, 235, 3, 2, 2, 2, 2845, 2846, 5, 348, 175, 2, 2846, 2847, 7, 7, 2, 2, 2847, 2849, 3, 2, 2, 2, 2848, 2845, 3, 2, 2, 2, 2848, 2849, 3, 2, 2, 2, 2849, 2850, 3, 2, 2, 2, 2850, 2851, 5, 348, 175, 2, 2851, 237, 3, 2, 2, 2, 2852, 2853, 5, 348, 175, 2, 2853, 2854, 7, 7, 2, 2, 2854, 2856, 3, 2, 2, 2, 2855, 2852, 3, 2, 2, 2, 2855, 2856, 3, 2, 2, 2, 2856, 2857, 3, 2, 2, 2, 2857, 2858, 5, 348, 175, 2, 2858, 239, 3, 2, 2, 2, 2859, 2867, 5, 252, 127, 2, 2860, 2862, 7, 22, 2, 2, 2861, 2860, 3, 2, 2, 2, 2861, 2862, 3, 2, 2, 2, 2862, 2865, 3, 2, 2, 2, 2863, 2866, 5, 348, 175, 2, 2864, 2866, 5, 196, 99, 2, 2865, 2863, 3, 2, 2, 2, 2865, 2864, 3, 2, 2, 2, 2866, 2868, 3, 2, 2, 2, 2867, 2861, 3, 2, 2, 2, 2867, 2868, 3, 2, 2, 2, 2868, 241, 3, 2, 2, 2, 2869, 2874, 5, 240, 121, 2, 2870, 2871, 7, 6, 2, 2, 2871, 2873, 5, 240, 121, 2, 2872, 2870, 3, 2, 2, 2, 2873, 2876, 3, 2, 2, 2, 2874, 2872, 3, 2, 2, 2, 2874, 2875, 3, 2, 2, 2, 2875, 243, 3, 2, 2, 2, 2876, 2874, 3, 2, 2, 2, 2877, 2878, 7, 4, 2, 2, 2878, 2883, 5, 246, 124, 2, 2879, 2880, 7, 6, 2, 2, 2880, 2882, 5, 246, 124, 2, 2881, 2879, 3, 2, 2, 2, 2882, 2885, 3, 2, 2, 2, 2883, 2881, 3, 2, 2, 2, 2883, 2884, 3, 2, 2, 2, 2884, 2886, 3, 2, 2, 2, 2885, 2883, 3, 2, 2, 2, 2886, 2887, 7, 5, 2, 2, 2887, 245, 3, 2, 2, 2, 2888, 2891, 5, 248, 125, 2, 2889, 2891, 5, 316, 159, 2, 2890, 2888, 3, 2, 2, 2, 2890, 2889, 3, 2, 2, 2, 2891, 247, 3, 2, 2, 2, 2892, 2906, 5, 346, 174, 2, 2893, 2894, 5, 352, 177, 2, 2894, 2895, 7, 4, 2, 2, 2895, 2900, 5, 250, 126, 2, 2896, 2897, 7, 6, 2, 2, 2897, 2899, 5, 250, 126, 2, 2898, 2896, 3, 2, 2, 2, 2899, 2902, 3, 2, 2, 2, 2900, 2898, 3, 2, 2, 2, 2900, 2901, 3, 2, 2, 2, 2901, 2903, 3, 2, 2, 2, 2902, 2900, 3, 2, 2, 2, 2903, 2904, 7, 5, 2, 2, 2904, 2906, 3, 2, 2, 2, 2905, 2892, 3, 2, 2, 2, 2905, 2893, 3, 2, 2, 2, 2906, 249, 3, 2, 2, 2, 2907, 2910, 5, 346, 174, 2, 2908, 2910, 5, 272, 137, 2, 2909, 2907, 3, 2, 2, 2, 2909, 2908, 3, 2, 2, 2, 2910, 251, 3, 2, 2, 2, 2911, 2912, 5, 260, 131, 2, 2912, 253, 3, 2, 2, 2, 2913, 2914, 5, 352, 177, 2, 2914, 2915, 7, 364, 2, 2, 2915, 2916, 5, 252, 127, 2, 2916, 255, 3, 2, 2, 2, 2917, 2920, 5, 252, 127, 2, 2918, 2920, 5, 254, 128, 2, 2919, 2917, 3, 2, 2, 2, 2919, 2918, 3, 2, 2, 2, 2920, 257, 3, 2, 2, 2, 2921, 2926, 5, 252, 127, 2, 2922, 2923, 7, 6, 2, 2, 2923, 2925, 5, 252, 127, 2, 2924, 2922, 3, 2, 2, 2, 2925, 2928, 3, 2, 2, 2, 2926, 2924, 3, 2, 2, 2, 2926, 2927, 3, 2, 2, 2, 2927, 259, 3, 2, 2, 2, 2928, 2926, 3, 2, 2, 2, 2929, 2930, 8, 131, 1, 2, 2930, 2931, 7, 194, 2, 2, 2931, 2942, 5, 260, 131, 7, 2932, 2933, 7, 105, 2, 2, 2933, 2934, 7, 4, 2, 2, 2934, 2935, 5, 36, 19, 2, 2935, 2936, 7, 5, 2, 2, 2936, 2942, 3, 2, 2, 2, 2937, 2939, 5, 264, 133, 2, 2938, 2940, 5, 262, 132, 2, 2939, 2938, 3, 2, 2, 2, 2939, 2940, 3, 2, 2, 2, 2940, 2942, 3, 2, 2, 2, 2941, 2929, 3, 2, 2, 2, 2941, 2932, 3, 2, 2, 2, 2941, 2937, 3, 2, 2, 2, 2942, 2951, 3, 2, 2, 2, 2943, 2944, 12, 4, 2, 2, 2944, 2945, 7, 16, 2, 2, 2945, 2950, 5, 260, 131, 5, 2946, 2947, 12, 3, 2, 2, 2947, 2948, 7, 204, 2, 2, 2948, 2950, 5, 260, 131, 4, 2949, 2943, 3, 2, 2, 2, 2949, 2946, 3, 2, 2, 2, 2950, 2953, 3, 2, 2, 2, 2951, 2949, 3, 2, 2, 2, 2951, 2952, 3, 2, 2, 2, 2952, 261, 3, 2, 2, 2, 2953, 2951, 3, 2, 2, 2, 2954, 2956, 7, 194, 2, 2, 2955, 2954, 3, 2, 2, 2, 2955, 2956, 3, 2, 2, 2, 2956, 2957, 3, 2, 2, 2, 2957, 2958, 7, 26, 2, 2, 2958, 2959, 5, 264, 133, 2, 2959, 2960, 7, 16, 2, 2, 2960, 2961, 5, 264, 133, 2, 2961, 3037, 3, 2, 2, 2, 2962, 2964, 7, 194, 2, 2, 2963, 2962, 3, 2, 2, 2, 2963, 2964, 3, 2, 2, 2, 2964, 2965, 3, 2, 2, 2, 2965, 2966, 7, 140, 2, 2, 2966, 2967, 7, 4, 2, 2, 2967, 2972, 5, 252, 127, 2, 2968, 2969, 7, 6, 2, 2, 2969, 2971, 5, 252, 127, 2, 2970, 2968, 3, 2, 2, 2, 2971, 2974, 3, 2, 2, 2, 2972, 2970, 3, 2, 2, 2, 2972, 2973, 3, 2, 2, 2, 2973, 2975, 3, 2, 2, 2, 2974, 2972, 3, 2, 2, 2, 2975, 2976, 7, 5, 2, 2, 2976, 3037, 3, 2, 2, 2, 2977, 2979, 7, 194, 2, 2, 2978, 2977, 3, 2, 2, 2, 2978, 2979, 3, 2, 2, 2, 2979, 2980, 3, 2, 2, 2, 2980, 2981, 7, 140, 2, 2, 2981, 2982, 7, 4, 2, 2, 2982, 2983, 5, 36, 19, 2, 2983, 2984, 7, 5, 2, 2, 2984, 3037, 3, 2, 2, 2, 2985, 2987, 7, 194, 2, 2, 2986, 2985, 3, 2, 2, 2, 2986, 2987, 3, 2, 2, 2, 2987, 2988, 3, 2, 2, 2, 2988, 2989, 7, 246, 2, 2, 2989, 3037, 5, 264, 133, 2, 2990, 2992, 7, 194, 2, 2, 2991, 2990, 3, 2, 2, 2, 2991, 2992, 3, 2, 2, 2, 2992, 2993, 3, 2, 2, 2, 2993, 2994, 9, 28, 2, 2, 2994, 3008, 9, 29, 2, 2, 2995, 2996, 7, 4, 2, 2, 2996, 3009, 7, 5, 2, 2, 2997, 2998, 7, 4, 2, 2, 2998, 3003, 5, 252, 127, 2, 2999, 3000, 7, 6, 2, 2, 3000, 3002, 5, 252, 127, 2, 3001, 2999, 3, 2, 2, 2, 3002, 3005, 3, 2, 2, 2, 3003, 3001, 3, 2, 2, 2, 3003, 3004, 3, 2, 2, 2, 3004, 3006, 3, 2, 2, 2, 3005, 3003, 3, 2, 2, 2, 3006, 3007, 7, 5, 2, 2, 3007, 3009, 3, 2, 2, 2, 3008, 2995, 3, 2, 2, 2, 3008, 2997, 3, 2, 2, 2, 3009, 3037, 3, 2, 2, 2, 3010, 3012, 7, 194, 2, 2, 3011, 3010, 3, 2, 2, 2, 3011, 3012, 3, 2, 2, 2, 3012, 3013, 3, 2, 2, 2, 3013, 3014, 9, 28, 2, 2, 3014, 3017, 5, 264, 133, 2, 3015, 3016, 7, 100, 2, 2, 3016, 3018, 5, 364, 183, 2, 3017, 3015, 3, 2, 2, 2, 3017, 3018, 3, 2, 2, 2, 3018, 3037, 3, 2, 2, 2, 3019, 3021, 7, 153, 2, 2, 3020, 3022, 7, 194, 2, 2, 3021, 3020, 3, 2, 2, 2, 3021, 3022, 3, 2, 2, 2, 3022, 3023, 3, 2, 2, 2, 3023, 3037, 7, 195, 2, 2, 3024, 3026, 7, 153, 2, 2, 3025, 3027, 7, 194, 2, 2, 3026, 3025, 3, 2, 2, 2, 3026, 3027, 3, 2, 2, 2, 3027, 3028, 3, 2, 2, 2, 3028, 3037, 9, 30, 2, 2, 3029, 3031, 7, 153, 2, 2, 3030, 3032, 7, 194, 2, 2, 3031, 3030, 3, 2, 2, 2, 3031, 3032, 3, 2, 2, 2, 3032, 3033, 3, 2, 2, 2, 3033, 3034, 7, 93, 2, 2, 3034, 3035, 7, 123, 2, 2, 3035, 3037, 5, 264, 133, 2, 3036, 2955, 3, 2, 2, 2, 3036, 2963, 3, 2, 2, 2, 3036, 2978, 3, 2, 2, 2, 3036, 2986, 3, 2, 2, 2, 3036, 2991, 3, 2, 2, 2, 3036, 3011, 3, 2, 2, 2, 3036, 3019, 3, 2, 2, 2, 3036, 3024, 3, 2, 2, 2, 3036, 3029, 3, 2, 2, 2, 3037, 263, 3, 2, 2, 2, 3038, 3039, 8, 133, 1, 2, 3039, 3043, 5, 268, 135, 2, 3040, 3041, 9, 31, 2, 2, 3041, 3043, 5, 264, 133, 9, 3042, 3038, 3, 2, 2, 2, 3042, 3040, 3, 2, 2, 2, 3043, 3065, 3, 2, 2, 2, 3044, 3045, 12, 8, 2, 2, 3045, 3046, 9, 32, 2, 2, 3046, 3064, 5, 264, 133, 9, 3047, 3048, 12, 7, 2, 2, 3048, 3049, 9, 33, 2, 2, 3049, 3064, 5, 264, 133, 8, 3050, 3051, 12, 6, 2, 2, 3051, 3052, 7, 358, 2, 2, 3052, 3064, 5, 264, 133, 7, 3053, 3054, 12, 5, 2, 2, 3054, 3055, 7, 361, 2, 2, 3055, 3064, 5, 264, 133, 6, 3056, 3057, 12, 4, 2, 2, 3057, 3058, 7, 359, 2, 2, 3058, 3064, 5, 264, 133, 5, 3059, 3060, 12, 3, 2, 2, 3060, 3061, 5, 274, 138, 2, 3061, 3062, 5, 264, 133, 4, 3062, 3064, 3, 2, 2, 2, 3063, 3044, 3, 2, 2, 2, 3063, 3047, 3, 2, 2, 2, 3063, 3050, 3, 2, 2, 2, 3063, 3053, 3, 2, 2, 2, 3063, 3056, 3, 2, 2, 2, 3063, 3059, 3, 2, 2, 2, 3064, 3067, 3, 2, 2, 2, 3065, 3063, 3, 2, 2, 2, 3065, 3066, 3, 2, 2, 2, 3066, 265, 3, 2, 2, 2, 3067, 3065, 3, 2, 2, 2, 3068, 3069, 9, 34, 2, 2, 3069, 267, 3, 2, 2, 2, 3070, 3071, 8, 135, 1, 2, 3071, 3320, 9, 35, 2, 2, 3072, 3073, 9, 36, 2, 2, 3073, 3076, 7, 4, 2, 2, 3074, 3077, 5, 266, 134, 2, 3075, 3077, 5, 364, 183, 2, 3076, 3074, 3, 2, 2, 2, 3076, 3075, 3, 2, 2, 2, 3077, 3078, 3, 2, 2, 2, 3078, 3079, 7, 6, 2, 2, 3079, 3080, 5, 264, 133, 2, 3080, 3081, 7, 6, 2, 2, 3081, 3082, 5, 264, 133, 2, 3082, 3083, 7, 5, 2, 2, 3083, 3320, 3, 2, 2, 2, 3084, 3085, 9, 37, 2, 2, 3085, 3088, 7, 4, 2, 2, 3086, 3089, 5, 266, 134, 2, 3087, 3089, 5, 364, 183, 2, 3088, 3086, 3, 2, 2, 2, 3088, 3087, 3, 2, 2, 2, 3089, 3090, 3, 2, 2, 2, 3090, 3091, 7, 6, 2, 2, 3091, 3092, 5, 264, 133, 2, 3092, 3093, 7, 6, 2, 2, 3093, 3094, 5, 264, 133, 2, 3094, 3095, 7, 5, 2, 2, 3095, 3320, 3, 2, 2, 2, 3096, 3098, 7, 37, 2, 2, 3097, 3099, 5, 330, 166, 2, 3098, 3097, 3, 2, 2, 2, 3099, 3100, 3, 2, 2, 2, 3100, 3098, 3, 2, 2, 2, 3100, 3101, 3, 2, 2, 2, 3101, 3104, 3, 2, 2, 2, 3102, 3103, 7, 98, 2, 2, 3103, 3105, 5, 252, 127, 2, 3104, 3102, 3, 2, 2, 2, 3104, 3105, 3, 2, 2, 2, 3105, 3106, 3, 2, 2, 2, 3106, 3107, 7, 99, 2, 2, 3107, 3320, 3, 2, 2, 2, 3108, 3109, 7, 37, 2, 2, 3109, 3111, 5, 252, 127, 2, 3110, 3112, 5, 330, 166, 2, 3111, 3110, 3, 2, 2, 2, 3112, 3113, 3, 2, 2, 2, 3113, 3111, 3, 2, 2, 2, 3113, 3114, 3, 2, 2, 2, 3114, 3117, 3, 2, 2, 2, 3115, 3116, 7, 98, 2, 2, 3116, 3118, 5, 252, 127, 2, 3117, 3115, 3, 2, 2, 2, 3117, 3118, 3, 2, 2, 2, 3118, 3119, 3, 2, 2, 2, 3119, 3120, 7, 99, 2, 2, 3120, 3320, 3, 2, 2, 2, 3121, 3122, 9, 38, 2, 2, 3122, 3123, 7, 4, 2, 2, 3123, 3124, 5, 252, 127, 2, 3124, 3125, 7, 22, 2, 2, 3125, 3126, 5, 302, 152, 2, 3126, 3127, 7, 5, 2, 2, 3127, 3320, 3, 2, 2, 2, 3128, 3129, 7, 280, 2, 2, 3129, 3138, 7, 4, 2, 2, 3130, 3135, 5, 240, 121, 2, 3131, 3132, 7, 6, 2, 2, 3132, 3134, 5, 240, 121, 2, 3133, 3131, 3, 2, 2, 2, 3134, 3137, 3, 2, 2, 2, 3135, 3133, 3, 2, 2, 2, 3135, 3136, 3, 2, 2, 2, 3136, 3139, 3, 2, 2, 2, 3137, 3135, 3, 2, 2, 2, 3138, 3130, 3, 2, 2, 2, 3138, 3139, 3, 2, 2, 2, 3139, 3140, 3, 2, 2, 2, 3140, 3320, 7, 5, 2, 2, 3141, 3142, 7, 116, 2, 2, 3142, 3143, 7, 4, 2, 2, 3143, 3146, 5, 252, 127, 2, 3144, 3145, 7, 138, 2, 2, 3145, 3147, 7, 196, 2, 2, 3146, 3144, 3, 2, 2, 2, 3146, 3147, 3, 2, 2, 2, 3147, 3148, 3, 2, 2, 2, 3148, 3149, 7, 5, 2, 2, 3149, 3320, 3, 2, 2, 2, 3150, 3151, 7, 19, 2, 2, 3151, 3152, 7, 4, 2, 2, 3152, 3155, 5, 252, 127, 2, 3153, 3154, 7, 138, 2, 2, 3154, 3156, 7, 196, 2, 2, 3155, 3153, 3, 2, 2, 2, 3155, 3156, 3, 2, 2, 2, 3156, 3157, 3, 2, 2, 2, 3157, 3158, 7, 5, 2, 2, 3158, 3320, 3, 2, 2, 2, 3159, 3160, 7, 157, 2, 2, 3160, 3161, 7, 4, 2, 2, 3161, 3164, 5, 252, 127, 2, 3162, 3163, 7, 138, 2, 2, 3163, 3165, 7, 196, 2, 2, 3164, 3162, 3, 2, 2, 2, 3164, 3165, 3, 2, 2, 2, 3165, 3166, 3, 2, 2, 2, 3166, 3167, 7, 5, 2, 2, 3167, 3320, 3, 2, 2, 2, 3168, 3169, 7, 221, 2, 2, 3169, 3170, 7, 4, 2, 2, 3170, 3171, 5, 264, 133, 2, 3171, 3172, 7, 140, 2, 2, 3172, 3173, 5, 264, 133, 2, 3173, 3174, 7, 5, 2, 2, 3174, 3320, 3, 2, 2, 2, 3175, 3320, 5, 272, 137, 2, 3176, 3320, 7, 354, 2, 2, 3177, 3178, 5, 346, 174, 2, 3178, 3179, 7, 7, 2, 2, 3179, 3180, 7, 354, 2, 2, 3180, 3320, 3, 2, 2, 2, 3181, 3182, 7, 4, 2, 2, 3182, 3185, 5, 240, 121, 2, 3183, 3184, 7, 6, 2, 2, 3184, 3186, 5, 240, 121, 2, 3185, 3183, 3, 2, 2, 2, 3186, 3187, 3, 2, 2, 2, 3187, 3185, 3, 2, 2, 2, 3187, 3188, 3, 2, 2, 2, 3188, 3189, 3, 2, 2, 2, 3189, 3190, 7, 5, 2, 2, 3190, 3320, 3, 2, 2, 2, 3191, 3192, 7, 4, 2, 2, 3192, 3193, 5, 36, 19, 2, 3193, 3194, 7, 5, 2, 2, 3194, 3320, 3, 2, 2, 2, 3195, 3196, 7, 136, 2, 2, 3196, 3197, 7, 4, 2, 2, 3197, 3198, 5, 252, 127, 2, 3198, 3199, 7, 5, 2, 2, 3199, 3320, 3, 2, 2, 2, 3200, 3201, 5, 344, 173, 2, 3201, 3213, 7, 4, 2, 2, 3202, 3204, 5, 180, 91, 2, 3203, 3202, 3, 2, 2, 2, 3203, 3204, 3, 2, 2, 2, 3204, 3205, 3, 2, 2, 2, 3205, 3210, 5, 256, 129, 2, 3206, 3207, 7, 6, 2, 2, 3207, 3209, 5, 256, 129, 2, 3208, 3206, 3, 2, 2, 2, 3209, 3212, 3, 2, 2, 2, 3210, 3208, 3, 2, 2, 2, 3210, 3211, 3, 2, 2, 2, 3211, 3214, 3, 2, 2, 2, 3212, 3210, 3, 2, 2, 2, 3213, 3203, 3, 2, 2, 2, 3213, 3214, 3, 2, 2, 2, 3214, 3215, 3, 2, 2, 2, 3215, 3222, 7, 5, 2, 2, 3216, 3217, 7, 114, 2, 2, 3217, 3218, 7, 4, 2, 2, 3218, 3219, 7, 337, 2, 2, 3219, 3220, 5, 260, 131, 2, 3220, 3221, 7, 5, 2, 2, 3221, 3223, 3, 2, 2, 2, 3222, 3216, 3, 2, 2, 2, 3222, 3223, 3, 2, 2, 2, 3223, 3226, 3, 2, 2, 2, 3224, 3225, 9, 39, 2, 2, 3225, 3227, 7, 196, 2, 2, 3226, 3224, 3, 2, 2, 2, 3226, 3227, 3, 2, 2, 2, 3227, 3230, 3, 2, 2, 2, 3228, 3229, 7, 209, 2, 2, 3229, 3231, 5, 336, 169, 2, 3230, 3228, 3, 2, 2, 2, 3230, 3231, 3, 2, 2, 2, 3231, 3320, 3, 2, 2, 2, 3232, 3233, 5, 352, 177, 2, 3233, 3234, 7, 363, 2, 2, 3234, 3235, 5, 252, 127, 2, 3235, 3320, 3, 2, 2, 2, 3236, 3237, 7, 4, 2, 2, 3237, 3240, 5, 352, 177, 2, 3238, 3239, 7, 6, 2, 2, 3239, 3241, 5, 352, 177, 2, 3240, 3238, 3, 2, 2, 2, 3241, 3242, 3, 2, 2, 2, 3242, 3240, 3, 2, 2, 2, 3242, 3243, 3, 2, 2, 2, 3243, 3244, 3, 2, 2, 2, 3244, 3245, 7, 5, 2, 2, 3245, 3246, 7, 363, 2, 2, 3246, 3247, 5, 252, 127, 2, 3247, 3320, 3, 2, 2, 2, 3248, 3320, 5, 352, 177, 2, 3249, 3250, 7, 4, 2, 2, 3250, 3251, 5, 252, 127, 2, 3251, 3252, 7, 5, 2, 2, 3252, 3320, 3, 2, 2, 2, 3253, 3254, 7, 110, 2, 2, 3254, 3255, 7, 4, 2, 2, 3255, 3256, 5, 352, 177, 2, 3256, 3257, 7, 123, 2, 2, 3257, 3258, 5, 264, 133, 2, 3258, 3259, 7, 5, 2, 2, 3259, 3320, 3, 2, 2, 2, 3260, 3261, 9, 40, 2, 2, 3261, 3262, 7, 4, 2, 2, 3262, 3263, 5, 264, 133, 2, 3263, 3264, 9, 41, 2, 2, 3264, 3267, 5, 264, 133, 2, 3265, 3266, 9, 42, 2, 2, 3266, 3268, 5, 264, 133, 2, 3267, 3265, 3, 2, 2, 2, 3267, 3268, 3, 2, 2, 2, 3268, 3269, 3, 2, 2, 2, 3269, 3270, 7, 5, 2, 2, 3270, 3320, 3, 2, 2, 2, 3271, 3272, 7, 308, 2, 2, 3272, 3274, 7, 4, 2, 2, 3273, 3275, 9, 43, 2, 2, 3274, 3273, 3, 2, 2, 2, 3274, 3275, 3, 2, 2, 2, 3275, 3277, 3, 2, 2, 2, 3276, 3278, 5, 264, 133, 2, 3277, 3276, 3, 2, 2, 2, 3277, 3278, 3, 2, 2, 2, 3278, 3279, 3, 2, 2, 2, 3279, 3280, 7, 123, 2, 2, 3280, 3281, 5, 264, 133, 2, 3281, 3282, 7, 5, 2, 2, 3282, 3320, 3, 2, 2, 2, 3283, 3284, 7, 211, 2, 2, 3284, 3285, 7, 4, 2, 2, 3285, 3286, 5, 264, 133, 2, 3286, 3287, 7, 220, 2, 2, 3287, 3288, 5, 264, 133, 2, 3288, 3289, 7, 123, 2, 2, 3289, 3292, 5, 264, 133, 2, 3290, 3291, 7, 119, 2, 2, 3291, 3293, 5, 264, 133, 2, 3292, 3290, 3, 2, 2, 2, 3292, 3293, 3, 2, 2, 2, 3293, 3294, 3, 2, 2, 2, 3294, 3295, 7, 5, 2, 2, 3295, 3320, 3, 2, 2, 2, 3296, 3297, 9, 44, 2, 2, 3297, 3298, 7, 4, 2, 2, 3298, 3299, 5, 264, 133, 2, 3299, 3300, 7, 5, 2, 2, 3300, 3301, 7, 340, 2, 2, 3301, 3302, 7, 130, 2, 2, 3302, 3303, 7, 4, 2, 2, 3303, 3304, 7, 205, 2, 2, 3304, 3305, 7, 33, 2, 2, 3305, 3306, 5, 98, 50, 2, 3306, 3313, 7, 5, 2, 2, 3307, 3308, 7, 114, 2, 2, 3308, 3309, 7, 4, 2, 2, 3309, 3310, 7, 337, 2, 2, 3310, 3311, 5, 260, 131, 2, 3311, 3312, 7, 5, 2, 2, 3312, 3314, 3, 2, 2, 2, 3313, 3307, 3, 2, 2, 2, 3313, 3314, 3, 2, 2, 2, 3314, 3317, 3, 2, 2, 2, 3315, 3316, 7, 209, 2, 2, 3316, 3318, 5, 336, 169, 2, 3317, 3315, 3, 2, 2, 2, 3317, 3318, 3, 2, 2, 2, 3318, 3320, 3, 2, 2, 2, 3319, 3070, 3, 2, 2, 2, 3319, 3072, 3, 2, 2, 2, 3319, 3084, 3, 2, 2, 2, 3319, 3096, 3, 2, 2, 2, 3319, 3108, 3, 2, 2, 2, 3319, 3121, 3, 2, 2, 2, 3319, 3128, 3, 2, 2, 2, 3319, 3141, 3, 2, 2, 2, 3319, 3150, 3, 2, 2, 2, 3319, 3159, 3, 2, 2, 2, 3319, 3168, 3, 2, 2, 2, 3319, 3175, 3, 2, 2, 2, 3319, 3176, 3, 2, 2, 2, 3319, 3177, 3, 2, 2, 2, 3319, 3181, 3, 2, 2, 2, 3319, 3191, 3, 2, 2, 2, 3319, 3195, 3, 2, 2, 2, 3319, 3200, 3, 2, 2, 2, 3319, 3232, 3, 2, 2, 2, 3319, 3236, 3, 2, 2, 2, 3319, 3248, 3, 2, 2, 2, 3319, 3249, 3, 2, 2, 2, 3319, 3253, 3, 2, 2, 2, 3319, 3260, 3, 2, 2, 2, 3319, 3271, 3, 2, 2, 2, 3319, 3283, 3, 2, 2, 2, 3319, 3296, 3, 2, 2, 2, 3320, 3331, 3, 2, 2, 2, 3321, 3322, 12, 11, 2, 2, 3322, 3323, 7, 8, 2, 2, 3323, 3324, 5, 264, 133, 2, 3324, 3325, 7, 9, 2, 2, 3325, 3330, 3, 2, 2, 2, 3326, 3327, 12, 9, 2, 2, 3327, 3328, 7, 7, 2, 2, 3328, 3330, 5, 352, 177, 2, 3329, 3321, 3, 2, 2, 2, 3329, 3326, 3, 2, 2, 2, 3330, 3333, 3, 2, 2, 2, 3331, 3329, 3, 2, 2, 2, 3331, 3332, 3, 2, 2, 2, 3332, 269, 3, 2, 2, 2, 3333, 3331, 3, 2, 2, 2, 3334, 3342, 7, 73, 2, 2, 3335, 3342, 7, 296, 2, 2, 3336, 3342, 7, 297, 2, 2, 3337, 3342, 7, 298, 2, 2, 3338, 3342, 7, 149, 2, 2, 3339, 3342, 7, 133, 2, 2, 3340, 3342, 5, 352, 177, 2, 3341, 3334, 3, 2, 2, 2, 3341, 3335, 3, 2, 2, 2, 3341, 3336, 3, 2, 2, 2, 3341, 3337, 3, 2, 2, 2, 3341, 3338, 3, 2, 2, 2, 3341, 3339, 3, 2, 2, 2, 3341, 3340, 3, 2, 2, 2, 3342, 271, 3, 2, 2, 2, 3343, 3359, 7, 195, 2, 2, 3344, 3359, 7, 367, 2, 2, 3345, 3346, 7, 362, 2, 2, 3346, 3359, 5, 352, 177, 2, 3347, 3359, 5, 282, 142, 2, 3348, 3349, 5, 270, 136, 2, 3349, 3350, 5, 364, 183, 2, 3350, 3359, 3, 2, 2, 2, 3351, 3359, 5, 360, 181, 2, 3352, 3359, 5, 280, 141, 2, 3353, 3355, 5, 364, 183, 2, 3354, 3353, 3, 2, 2, 2, 3355, 3356, 3, 2, 2, 2, 3356, 3354, 3, 2, 2, 2, 3356, 3357, 3, 2, 2, 2, 3357, 3359, 3, 2, 2, 2, 3358, 3343, 3, 2, 2, 2, 3358, 3344, 3, 2, 2, 2, 3358, 3345, 3, 2, 2, 2, 3358, 3347, 3, 2, 2, 2, 3358, 3348, 3, 2, 2, 2, 3358, 3351, 3, 2, 2, 2, 3358, 3352, 3, 2, 2, 2, 3358, 3354, 3, 2, 2, 2, 3359, 273, 3, 2, 2, 2, 3360, 3361, 9, 45, 2, 2, 3361, 275, 3, 2, 2, 2, 3362, 3363, 9, 46, 2, 2, 3363, 277, 3, 2, 2, 2, 3364, 3365, 9, 47, 2, 2, 3365, 279, 3, 2, 2, 2, 3366, 3367, 9, 48, 2, 2, 3367, 281, 3, 2, 2, 2, 3368, 3371, 7, 149, 2, 2, 3369, 3372, 5, 284, 143, 2, 3370, 3372, 5, 288, 145, 2, 3371, 3369, 3, 2, 2, 2, 3371, 3370, 3, 2, 2, 2, 3372, 283, 3, 2, 2, 2, 3373, 3375, 5, 286, 144, 2, 3374, 3376, 5, 290, 146, 2, 3375, 3374, 3, 2, 2, 2, 3375, 3376, 3, 2, 2, 2, 3376, 285, 3, 2, 2, 2, 3377, 3378, 5, 292, 147, 2, 3378, 3379, 5, 294, 148, 2, 3379, 3381, 3, 2, 2, 2, 3380, 3377, 3, 2, 2, 2, 3381, 3382, 3, 2, 2, 2, 3382, 3380, 3, 2, 2, 2, 3382, 3383, 3, 2, 2, 2, 3383, 287, 3, 2, 2, 2, 3384, 3387, 5, 290, 146, 2, 3385, 3388, 5, 286, 144, 2, 3386, 3388, 5, 290, 146, 2, 3387, 3385, 3, 2, 2, 2, 3387, 3386, 3, 2, 2, 2, 3387, 3388, 3, 2, 2, 2, 3388, 289, 3, 2, 2, 2, 3389, 3390, 5, 292, 147, 2, 3390, 3391, 5, 296, 149, 2, 3391, 3392, 7, 302, 2, 2, 3392, 3393, 5, 296, 149, 2, 3393, 291, 3, 2, 2, 2, 3394, 3396, 9, 49, 2, 2, 3395, 3394, 3, 2, 2, 2, 3395, 3396, 3, 2, 2, 2, 3396, 3400, 3, 2, 2, 2, 3397, 3401, 7, 373, 2, 2, 3398, 3401, 7, 375, 2, 2, 3399, 3401, 5, 364, 183, 2, 3400, 3397, 3, 2, 2, 2, 3400, 3398, 3, 2, 2, 2, 3400, 3399, 3, 2, 2, 2, 3401, 293, 3, 2, 2, 2, 3402, 3403, 9, 50, 2, 2, 3403, 295, 3, 2, 2, 2, 3404, 3405, 9, 51, 2, 2, 3405, 297, 3, 2, 2, 2, 3406, 3410, 7, 116, 2, 2, 3407, 3408, 7, 11, 2, 2, 3408, 3410, 5, 348, 175, 2, 3409, 3406, 3, 2, 2, 2, 3409, 3407, 3, 2, 2, 2, 3410, 299, 3, 2, 2, 2, 3411, 3442, 7, 29, 2, 2, 3412, 3442, 7, 301, 2, 2, 3413, 3442, 7, 34, 2, 2, 3414, 3442, 7, 270, 2, 2, 3415, 3442, 7, 266, 2, 2, 3416, 3442, 7, 150, 2, 2, 3417, 3442, 7, 151, 2, 2, 3418, 3442, 7, 27, 2, 2, 3419, 3442, 7, 173, 2, 2, 3420, 3442, 7, 117, 2, 2, 3421, 3442, 7, 230, 2, 2, 3422, 3442, 7, 96, 2, 2, 3423, 3442, 7, 73, 2, 2, 3424, 3442, 7, 296, 2, 2, 3425, 3442, 7, 298, 2, 2, 3426, 3442, 7, 297, 2, 2, 3427, 3442, 7, 279, 2, 2, 3428, 3442, 7, 43, 2, 2, 3429, 3442, 7, 42, 2, 2, 3430, 3442, 7, 327, 2, 2, 3431, 3442, 7, 28, 2, 2, 3432, 3442, 7, 82, 2, 2, 3433, 3442, 7, 81, 2, 2, 3434, 3442, 7, 197, 2, 2, 3435, 3442, 7, 333, 2, 2, 3436, 3442, 7, 149, 2, 2, 3437, 3442, 7, 21, 2, 2, 3438, 3442, 7, 280, 2, 2, 3439, 3442, 7, 175, 2, 2, 3440, 3442, 5, 352, 177, 2, 3441, 3411, 3, 2, 2, 2, 3441, 3412, 3, 2, 2, 2, 3441, 3413, 3, 2, 2, 2, 3441, 3414, 3, 2, 2, 2, 3441, 3415, 3, 2, 2, 2, 3441, 3416, 3, 2, 2, 2, 3441, 3417, 3, 2, 2, 2, 3441, 3418, 3, 2, 2, 2, 3441, 3419, 3, 2, 2, 2, 3441, 3420, 3, 2, 2, 2, 3441, 3421, 3, 2, 2, 2, 3441, 3422, 3, 2, 2, 2, 3441, 3423, 3, 2, 2, 2, 3441, 3424, 3, 2, 2, 2, 3441, 3425, 3, 2, 2, 2, 3441, 3426, 3, 2, 2, 2, 3441, 3427, 3, 2, 2, 2, 3441, 3428, 3, 2, 2, 2, 3441, 3429, 3, 2, 2, 2, 3441, 3430, 3, 2, 2, 2, 3441, 3431, 3, 2, 2, 2, 3441, 3432, 3, 2, 2, 2, 3441, 3433, 3, 2, 2, 2, 3441, 3434, 3, 2, 2, 2, 3441, 3435, 3, 2, 2, 2, 3441, 3436, 3, 2, 2, 2, 3441, 3437, 3, 2, 2, 2, 3441, 3438, 3, 2, 2, 2, 3441, 3439, 3, 2, 2, 2, 3441, 3440, 3, 2, 2, 2, 3442, 301, 3, 2, 2, 2, 3443, 3444, 7, 21, 2, 2, 3444, 3445, 7, 348, 2, 2, 3445, 3446, 5, 302, 152, 2, 3446, 3447, 7, 350, 2, 2, 3447, 3490, 3, 2, 2, 2, 3448, 3449, 7, 175, 2, 2, 3449, 3450, 7, 348, 2, 2, 3450, 3451, 5, 302, 152, 2, 3451, 3452, 7, 6, 2, 2, 3452, 3453, 5, 302, 152, 2, 3453, 3454, 7, 350, 2, 2, 3454, 3490, 3, 2, 2, 2, 3455, 3462, 7, 280, 2, 2, 3456, 3458, 7, 348, 2, 2, 3457, 3459, 5, 326, 164, 2, 3458, 3457, 3, 2, 2, 2, 3458, 3459, 3, 2, 2, 2, 3459, 3460, 3, 2, 2, 2, 3460, 3463, 7, 350, 2, 2, 3461, 3463, 7, 346, 2, 2, 3462, 3456, 3, 2, 2, 2, 3462, 3461, 3, 2, 2, 2, 3463, 3490, 3, 2, 2, 2, 3464, 3465, 7, 149, 2, 2, 3465, 3468, 9, 52, 2, 2, 3466, 3467, 7, 302, 2, 2, 3467, 3469, 7, 184, 2, 2, 3468, 3466, 3, 2, 2, 2, 3468, 3469, 3, 2, 2, 2, 3469, 3490, 3, 2, 2, 2, 3470, 3471, 7, 149, 2, 2, 3471, 3474, 9, 53, 2, 2, 3472, 3473, 7, 302, 2, 2, 3473, 3475, 9, 54, 2, 2, 3474, 3472, 3, 2, 2, 2, 3474, 3475, 3, 2, 2, 2, 3475, 3490, 3, 2, 2, 2, 3476, 3487, 5, 300, 151, 2, 3477, 3478, 7, 4, 2, 2, 3478, 3483, 7, 373, 2, 2, 3479, 3480, 7, 6, 2, 2, 3480, 3482, 7, 373, 2, 2, 3481, 3479, 3, 2, 2, 2, 3482, 3485, 3, 2, 2, 2, 3483, 3481, 3, 2, 2, 2, 3483, 3484, 3, 2, 2, 2, 3484, 3486, 3, 2, 2, 2, 3485, 3483, 3, 2, 2, 2, 3486, 3488, 7, 5, 2, 2, 3487, 3477, 3, 2, 2, 2, 3487, 3488, 3, 2, 2, 2, 3488, 3490, 3, 2, 2, 2, 3489, 3443, 3, 2, 2, 2, 3489, 3448, 3, 2, 2, 2, 3489, 3455, 3, 2, 2, 2, 3489, 3464, 3, 2, 2, 2, 3489, 3470, 3, 2, 2, 2, 3489, 3476, 3, 2, 2, 2, 3490, 303, 3, 2, 2, 2, 3491, 3496, 5, 306, 154, 2, 3492, 3493, 7, 6, 2, 2, 3493, 3495, 5, 306, 154, 2, 3494, 3492, 3, 2, 2, 2, 3495, 3498, 3, 2, 2, 2, 3496, 3494, 3, 2, 2, 2, 3496, 3497, 3, 2, 2, 2, 3497, 305, 3, 2, 2, 2, 3498, 3496, 3, 2, 2, 2, 3499, 3500, 5, 230, 116, 2, 3500, 3504, 5, 302, 152, 2, 3501, 3503, 5, 308, 155, 2, 3502, 3501, 3, 2, 2, 2, 3503, 3506, 3, 2, 2, 2, 3504, 3502, 3, 2, 2, 2, 3504, 3505, 3, 2, 2, 2, 3505, 307, 3, 2, 2, 2, 3506, 3504, 3, 2, 2, 2, 3507, 3508, 7, 194, 2, 2, 3508, 3513, 7, 195, 2, 2, 3509, 3513, 5, 310, 156, 2, 3510, 3513, 5, 34, 18, 2, 3511, 3513, 5, 298, 150, 2, 3512, 3507, 3, 2, 2, 2, 3512, 3509, 3, 2, 2, 2, 3512, 3510, 3, 2, 2, 2, 3512, 3511, 3, 2, 2, 2, 3513, 309, 3, 2, 2, 2, 3514, 3515, 7, 84, 2, 2, 3515, 3516, 5, 252, 127, 2, 3516, 311, 3, 2, 2, 2, 3517, 3518, 9, 55, 2, 2, 3518, 3519, 5, 252, 127, 2, 3519, 313, 3, 2, 2, 2, 3520, 3525, 5, 316, 159, 2, 3521, 3522, 7, 6, 2, 2, 3522, 3524, 5, 316, 159, 2, 3523, 3521, 3, 2, 2, 2, 3524, 3527, 3, 2, 2, 2, 3525, 3523, 3, 2, 2, 2, 3525, 3526, 3, 2, 2, 2, 3526, 315, 3, 2, 2, 2, 3527, 3525, 3, 2, 2, 2, 3528, 3529, 5, 348, 175, 2, 3529, 3532, 5, 302, 152, 2, 3530, 3531, 7, 194, 2, 2, 3531, 3533, 7, 195, 2, 2, 3532, 3530, 3, 2, 2, 2, 3532, 3533, 3, 2, 2, 2, 3533, 3535, 3, 2, 2, 2, 3534, 3536, 5, 34, 18, 2, 3535, 3534, 3, 2, 2, 2, 3535, 3536, 3, 2, 2, 2, 3536, 317, 3, 2, 2, 2, 3537, 3542, 5, 320, 161, 2, 3538, 3539, 7, 6, 2, 2, 3539, 3541, 5, 320, 161, 2, 3540, 3538, 3, 2, 2, 2, 3541, 3544, 3, 2, 2, 2, 3542, 3540, 3, 2, 2, 2, 3542, 3543, 3, 2, 2, 2, 3543, 319, 3, 2, 2, 2, 3544, 3542, 3, 2, 2, 2, 3545, 3546, 5, 348, 175, 2, 3546, 3550, 5, 302, 152, 2, 3547, 3549, 5, 322, 162, 2, 3548, 3547, 3, 2, 2, 2, 3549, 3552, 3, 2, 2, 2, 3550, 3548, 3, 2, 2, 2, 3550, 3551, 3, 2, 2, 2, 3551, 321, 3, 2, 2, 2, 3552, 3550, 3, 2, 2, 2, 3553, 3554, 7, 194, 2, 2, 3554, 3559, 7, 195, 2, 2, 3555, 3559, 5, 310, 156, 2, 3556, 3559, 5, 324, 163, 2, 3557, 3559, 5, 34, 18, 2, 3558, 3553, 3, 2, 2, 2, 3558, 3555, 3, 2, 2, 2, 3558, 3556, 3, 2, 2, 2, 3558, 3557, 3, 2, 2, 2, 3559, 323, 3, 2, 2, 2, 3560, 3561, 7, 127, 2, 2, 3561, 3562, 7, 14, 2, 2, 3562, 3563, 7, 22, 2, 2, 3563, 3564, 7, 4, 2, 2, 3564, 3565, 5, 252, 127, 2, 3565, 3566, 7, 5, 2, 2, 3566, 325, 3, 2, 2, 2, 3567, 3572, 5, 328, 165, 2, 3568, 3569, 7, 6, 2, 2, 3569, 3571, 5, 328, 165, 2, 3570, 3568, 3, 2, 2, 2, 3571, 3574, 3, 2, 2, 2, 3572, 3570, 3, 2, 2, 2, 3572, 3573, 3, 2, 2, 2, 3573, 327, 3, 2, 2, 2, 3574, 3572, 3, 2, 2, 2, 3575, 3577, 5, 352, 177, 2, 3576, 3578, 7, 362, 2, 2, 3577, 3576, 3, 2, 2, 2, 3577, 3578, 3, 2, 2, 2, 3578, 3579, 3, 2, 2, 2, 3579, 3582, 5, 302, 152, 2, 3580, 3581, 7, 194, 2, 2, 3581, 3583, 7, 195, 2, 2, 3582, 3580, 3, 2, 2, 2, 3582, 3583, 3, 2, 2, 2, 3583, 3585, 3, 2, 2, 2, 3584, 3586, 5, 34, 18, 2, 3585, 3584, 3, 2, 2, 2, 3585, 3586, 3, 2, 2, 2, 3586, 329, 3, 2, 2, 2, 3587, 3588, 7, 336, 2, 2, 3588, 3589, 5, 252, 127, 2, 3589, 3590, 7, 293, 2, 2, 3590, 3591, 5, 252, 127, 2, 3591, 331, 3, 2, 2, 2, 3592, 3593, 7, 338, 2, 2, 3593, 3598, 5, 334, 168, 2, 3594, 3595, 7, 6, 2, 2, 3595, 3597, 5, 334, 168, 2, 3596, 3594, 3, 2, 2, 2, 3597, 3600, 3, 2, 2, 2, 3598, 3596, 3, 2, 2, 2, 3598, 3599, 3, 2, 2, 2, 3599, 333, 3, 2, 2, 2, 3600, 3598, 3, 2, 2, 2, 3601, 3602, 5, 348, 175, 2, 3602, 3603, 7, 22, 2, 2, 3603, 3604, 5, 336, 169, 2, 3604, 335, 3, 2, 2, 2, 3605, 3652, 5, 348, 175, 2, 3606, 3607, 7, 4, 2, 2, 3607, 3608, 5, 348, 175, 2, 3608, 3609, 7, 5, 2, 2, 3609, 3652, 3, 2, 2, 2, 3610, 3645, 7, 4, 2, 2, 3611, 3612, 7, 46, 2, 2, 3612, 3613, 7, 33, 2, 2, 3613, 3618, 5, 252, 127, 2, 3614, 3615, 7, 6, 2, 2, 3615, 3617, 5, 252, 127, 2, 3616, 3614, 3, 2, 2, 2, 3617, 3620, 3, 2, 2, 2, 3618, 3616, 3, 2, 2, 2, 3618, 3619, 3, 2, 2, 2, 3619, 3646, 3, 2, 2, 2, 3620, 3618, 3, 2, 2, 2, 3621, 3622, 9, 26, 2, 2, 3622, 3623, 7, 33, 2, 2, 3623, 3628, 5, 252, 127, 2, 3624, 3625, 7, 6, 2, 2, 3625, 3627, 5, 252, 127, 2, 3626, 3624, 3, 2, 2, 2, 3627, 3630, 3, 2, 2, 2, 3628, 3626, 3, 2, 2, 2, 3628, 3629, 3, 2, 2, 2, 3629, 3632, 3, 2, 2, 2, 3630, 3628, 3, 2, 2, 2, 3631, 3621, 3, 2, 2, 2, 3631, 3632, 3, 2, 2, 2, 3632, 3643, 3, 2, 2, 2, 3633, 3634, 9, 27, 2, 2, 3634, 3635, 7, 33, 2, 2, 3635, 3640, 5, 98, 50, 2, 3636, 3637, 7, 6, 2, 2, 3637, 3639, 5, 98, 50, 2, 3638, 3636, 3, 2, 2, 2, 3639, 3642, 3, 2, 2, 2, 3640, 3638, 3, 2, 2, 2, 3640, 3641, 3, 2, 2, 2, 3641, 3644, 3, 2, 2, 2, 3642, 3640, 3, 2, 2, 2, 3643, 3633, 3, 2, 2, 2, 3643, 3644, 3, 2, 2, 2, 3644, 3646, 3, 2, 2, 2, 3645, 3611, 3, 2, 2, 2, 3645, 3631, 3, 2, 2, 2, 3646, 3648, 3, 2, 2, 2, 3647, 3649, 5, 338, 170, 2, 3648, 3647, 3, 2, 2, 2, 3648, 3649, 3, 2, 2, 2, 3649, 3650, 3, 2, 2, 2, 3650, 3652, 7, 5, 2, 2, 3651, 3605, 3, 2, 2, 2, 3651, 3606, 3, 2, 2, 2, 3651, 3610, 3, 2, 2, 2, 3652, 337, 3, 2, 2, 2, 3653, 3654, 7, 229, 2, 2, 3654, 3670, 5, 340, 171, 2, 3655, 3656, 7, 252, 2, 2, 3656, 3670, 5, 340, 171, 2, 3657, 3658, 7, 229, 2, 2, 3658, 3659, 7, 26, 2, 2, 3659, 3660, 5, 340, 171, 2, 3660, 3661, 7, 16, 2, 2, 3661, 3662, 5, 340, 171, 2, 3662, 3670, 3, 2, 2, 2, 3663, 3664, 7, 252, 2, 2, 3664, 3665, 7, 26, 2, 2, 3665, 3666, 5, 340, 171, 2, 3666, 3667, 7, 16, 2, 2, 3667, 3668, 5, 340, 171, 2, 3668, 3670, 3, 2, 2, 2, 3669, 3653, 3, 2, 2, 2, 3669, 3655, 3, 2, 2, 2, 3669, 3657, 3, 2, 2, 2, 3669, 3663, 3, 2, 2, 2, 3670, 339, 3, 2, 2, 2, 3671, 3672, 7, 314, 2, 2, 3672, 3679, 9, 56, 2, 2, 3673, 3674, 7, 64, 2, 2, 3674, 3679, 7, 251, 2, 2, 3675, 3676, 5, 252, 127, 2, 3676, 3677, 9, 56, 2, 2, 3677, 3679, 3, 2, 2, 2, 3678, 3671, 3, 2, 2, 2, 3678, 3673, 3, 2, 2, 2, 3678, 3675, 3, 2, 2, 2, 3679, 341, 3, 2, 2, 2, 3680, 3685, 5, 346, 174, 2, 3681, 3682, 7, 6, 2, 2, 3682, 3684, 5, 346, 174, 2, 3683, 3681, 3, 2, 2, 2, 3684, 3687, 3, 2, 2, 2, 3685, 3683, 3, 2, 2, 2, 3685, 3686, 3, 2, 2, 2, 3686, 343, 3, 2, 2, 2, 3687, 3685, 3, 2, 2, 2, 3688, 3689, 7, 136, 2, 2, 3689, 3690, 7, 4, 2, 2, 3690, 3691, 5, 252, 127, 2, 3691, 3692, 7, 5, 2, 2, 3692, 3698, 3, 2, 2, 2, 3693, 3698, 5, 346, 174, 2, 3694, 3698, 7, 114, 2, 2, 3695, 3698, 7, 161, 2, 2, 3696, 3698, 7, 245, 2, 2, 3697, 3688, 3, 2, 2, 2, 3697, 3693, 3, 2, 2, 2, 3697, 3694, 3, 2, 2, 2, 3697, 3695, 3, 2, 2, 2, 3697, 3696, 3, 2, 2, 2, 3698, 345, 3, 2, 2, 2, 3699, 3704, 5, 352, 177, 2, 3700, 3701, 7, 7, 2, 2, 3701, 3703, 5, 352, 177, 2, 3702, 3700, 3, 2, 2, 2, 3703, 3706, 3, 2, 2, 2, 3704, 3702, 3, 2, 2, 2, 3704, 3705, 3, 2, 2, 2, 3705, 347, 3, 2, 2, 2, 3706, 3704, 3, 2, 2, 2, 3707, 3708, 5, 352, 177, 2, 3708, 3709, 5, 350, 176, 2, 3709, 349, 3, 2, 2, 2, 3710, 3711, 7, 353, 2, 2, 3711, 3713, 5, 352, 177, 2, 3712, 3710, 3, 2, 2, 2, 3713, 3714, 3, 2, 2, 2, 3714, 3712, 3, 2, 2, 2, 3714, 3715, 3, 2, 2, 2, 3715, 3718, 3, 2, 2, 2, 3716, 3718, 3, 2, 2, 2, 3717, 3712, 3, 2, 2, 2, 3717, 3716, 3, 2, 2, 2, 3718, 351, 3, 2, 2, 2, 3719, 3723, 5, 354, 178, 2, 3720, 3721, 6, 177, 18, 2, 3721, 3723, 5, 372, 187, 2, 3722, 3719, 3, 2, 2, 2, 3722, 3720, 3, 2, 2, 2, 3723, 353, 3, 2, 2, 2, 3724, 3731, 7, 379, 2, 2, 3725, 3731, 5, 356, 179, 2, 3726, 3727, 6, 178, 19, 2, 3727, 3731, 5, 370, 186, 2, 3728, 3729, 6, 178, 20, 2, 3729, 3731, 5, 374, 188, 2, 3730, 3724, 3, 2, 2, 2, 3730, 3725, 3, 2, 2, 2, 3730, 3726, 3, 2, 2, 2, 3730, 3728, 3, 2, 2, 2, 3731, 355, 3, 2, 2, 2, 3732, 3736, 7, 380, 2, 2, 3733, 3734, 6, 179, 21, 2, 3734, 3736, 7, 369, 2, 2, 3735, 3732, 3, 2, 2, 2, 3735, 3733, 3, 2, 2, 2, 3736, 357, 3, 2, 2, 2, 3737, 3738, 7, 380, 2, 2, 3738, 359, 3, 2, 2, 2, 3739, 3741, 6, 181, 22, 2, 3740, 3742, 7, 353, 2, 2, 3741, 3740, 3, 2, 2, 2, 3741, 3742, 3, 2, 2, 2, 3742, 3743, 3, 2, 2, 2, 3743, 3783, 7, 374, 2, 2, 3744, 3746, 6, 181, 23, 2, 3745, 3747, 7, 353, 2, 2, 3746, 3745, 3, 2, 2, 2, 3746, 3747, 3, 2, 2, 2, 3747, 3748, 3, 2, 2, 2, 3748, 3783, 7, 375, 2, 2, 3749, 3751, 6, 181, 24, 2, 3750, 3752, 7, 353, 2, 2, 3751, 3750, 3, 2, 2, 2, 3751, 3752, 3, 2, 2, 2, 3752, 3753, 3, 2, 2, 2, 3753, 3783, 9, 57, 2, 2, 3754, 3756, 7, 353, 2, 2, 3755, 3754, 3, 2, 2, 2, 3755, 3756, 3, 2, 2, 2, 3756, 3757, 3, 2, 2, 2, 3757, 3783, 7, 373, 2, 2, 3758, 3760, 7, 353, 2, 2, 3759, 3758, 3, 2, 2, 2, 3759, 3760, 3, 2, 2, 2, 3760, 3761, 3, 2, 2, 2, 3761, 3783, 7, 370, 2, 2, 3762, 3764, 7, 353, 2, 2, 3763, 3762, 3, 2, 2, 2, 3763, 3764, 3, 2, 2, 2, 3764, 3765, 3, 2, 2, 2, 3765, 3783, 7, 371, 2, 2, 3766, 3768, 7, 353, 2, 2, 3767, 3766, 3, 2, 2, 2, 3767, 3768, 3, 2, 2, 2, 3768, 3769, 3, 2, 2, 2, 3769, 3783, 7, 372, 2, 2, 3770, 3772, 7, 353, 2, 2, 3771, 3770, 3, 2, 2, 2, 3771, 3772, 3, 2, 2, 2, 3772, 3773, 3, 2, 2, 2, 3773, 3783, 7, 377, 2, 2, 3774, 3776, 7, 353, 2, 2, 3775, 3774, 3, 2, 2, 2, 3775, 3776, 3, 2, 2, 2, 3776, 3777, 3, 2, 2, 2, 3777, 3783, 7, 376, 2, 2, 3778, 3780, 7, 353, 2, 2, 3779, 3778, 3, 2, 2, 2, 3779, 3780, 3, 2, 2, 2, 3780, 3781, 3, 2, 2, 2, 3781, 3783, 7, 378, 2, 2, 3782, 3739, 3, 2, 2, 2, 3782, 3744, 3, 2, 2, 2, 3782, 3749, 3, 2, 2, 2, 3782, 3755, 3, 2, 2, 2, 3782, 3759, 3, 2, 2, 2, 3782, 3763, 3, 2, 2, 2, 3782, 3767, 3, 2, 2, 2, 3782, 3771, 3, 2, 2, 2, 3782, 3775, 3, 2, 2, 2, 3782, 3779, 3, 2, 2, 2, 3783, 361, 3, 2, 2, 2, 3784, 3785, 7, 312, 2, 2, 3785, 3796, 5, 302, 152, 2, 3786, 3796, 5, 34, 18, 2, 3787, 3796, 5, 298, 150, 2, 3788, 3789, 9, 58, 2, 2, 3789, 3790, 7, 194, 2, 2, 3790, 3796, 7, 195, 2, 2, 3791, 3792, 7, 263, 2, 2, 3792, 3796, 5, 310, 156, 2, 3793, 3794, 7, 97, 2, 2, 3794, 3796, 7, 84, 2, 2, 3795, 3784, 3, 2, 2, 2, 3795, 3786, 3, 2, 2, 2, 3795, 3787, 3, 2, 2, 2, 3795, 3788, 3, 2, 2, 2, 3795, 3791, 3, 2, 2, 2, 3795, 3793, 3, 2, 2, 2, 3796, 363, 3, 2, 2, 2, 3797, 3801, 7, 368, 2, 2, 3798, 3799, 6, 183, 25, 2, 3799, 3801, 7, 369, 2, 2, 3800, 3797, 3, 2, 2, 2, 3800, 3798, 3, 2, 2, 2, 3801, 365, 3, 2, 2, 2, 3802, 3805, 5, 364, 183, 2, 3803, 3805, 7, 195, 2, 2, 3804, 3802, 3, 2, 2, 2, 3804, 3803, 3, 2, 2, 2, 3805, 367, 3, 2, 2, 2, 3806, 3809, 7, 373, 2, 2, 3807, 3809, 5, 364, 183, 2, 3808, 3806, 3, 2, 2, 2, 3808, 3807, 3, 2, 2, 2, 3809, 369, 3, 2, 2, 2, 3810, 3811, 9, 59, 2, 2, 3811, 371, 3, 2, 2, 2, 3812, 3813, 9, 60, 2, 2, 3813, 373, 3, 2, 2, 2, 3814, 3815, 9, 61, 2, 2, 3815, 375, 3, 2, 2, 2, 499, 379, 386, 398, 411, 418, 426, 428, 448, 452, 458, 461, 464, 471, 474, 478, 481, 488, 499, 501, 509, 512, 516, 519, 525, 536, 542, 547, 581, 594, 602, 612, 622, 628, 637, 641, 647, 651, 656, 662, 674, 682, 688, 698, 704, 709, 723, 728, 735, 739, 745, 760, 764, 770, 776, 779, 782, 788, 792, 800, 802, 811, 814, 823, 828, 834, 841, 844, 850, 861, 864, 868, 873, 879, 882, 886, 889, 896, 901, 908, 911, 914, 921, 926, 935, 943, 949, 952, 955, 961, 965, 970, 973, 977, 979, 987, 995, 998, 1003, 1009, 1015, 1018, 1022, 1025, 1029, 1057, 1060, 1064, 1070, 1073, 1076, 1082, 1090, 1095, 1101, 1107, 1110, 1117, 1124, 1132, 1149, 1176, 1179, 1185, 1194, 1203, 1211, 1216, 1221, 1228, 1234, 1239, 1247, 1250, 1254, 1266, 1270, 1277, 1393, 1401, 1409, 1418, 1428, 1432, 1435, 1441, 1447, 1459, 1471, 1476, 1485, 1493, 1500, 1502, 1507, 1512, 1516, 1521, 1526, 1531, 1540, 1545, 1548, 1553, 1557, 1562, 1564, 1568, 1577, 1585, 1591, 1602, 1609, 1618, 1623, 1626, 1648, 1650, 1659, 1666, 1669, 1676, 1680, 1686, 1694, 1701, 1704, 1712, 1723, 1734, 1742, 1748, 1760, 1767, 1774, 1786, 1794, 1800, 1806, 1809, 1817, 1826, 1829, 1838, 1841, 1850, 1853, 1862, 1865, 1868, 1873, 1875, 1879, 1891, 1898, 1905, 1908, 1910, 1922, 1926, 1930, 1936, 1940, 1948, 1952, 1955, 1958, 1961, 1965, 1969, 1974, 1978, 1981, 1984, 1987, 1991, 1996, 2000, 2003, 2006, 2009, 2011, 2017, 2024, 2029, 2032, 2035, 2039, 2049, 2053, 2055, 2058, 2062, 2068, 2072, 2083, 2093, 2097, 2109, 2121, 2136, 2141, 2147, 2154, 2170, 2175, 2188, 2193, 2201, 2207, 2211, 2214, 2217, 2224, 2230, 2239, 2249, 2264, 2269, 2271, 2275, 2284, 2297, 2302, 2306, 2314, 2317, 2321, 2335, 2348, 2353, 2357, 2360, 2364, 2370, 2373, 2380, 2392, 2403, 2416, 2427, 2432, 2440, 2445, 2452, 2461, 2464, 2469, 2476, 2479, 2484, 2490, 2496, 2501, 2505, 2511, 2515, 2518, 2523, 2526, 2531, 2535, 2538, 2541, 2547, 2552, 2559, 2562, 2580, 2582, 2585, 2596, 2605, 2612, 2620, 2627, 2631, 2634, 2642, 2650, 2656, 2664, 2672, 2679, 2686, 2688, 2701, 2707, 2709, 2719, 2725, 2727, 2735, 2739, 2748, 2751, 2757, 2761, 2763, 2772, 2784, 2786, 2793, 2800, 2806, 2812, 2814, 2821, 2829, 2837, 2843, 2848, 2855, 2861, 2865, 2867, 2874, 2883, 2890, 2900, 2905, 2909, 2919, 2926, 2939, 2941, 2949, 2951, 2955, 2963, 2972, 2978, 2986, 2991, 3003, 3008, 3011, 3017, 3021, 3026, 3031, 3036, 3042, 3063, 3065, 3076, 3088, 3100, 3104, 3113, 3117, 3135, 3138, 3146, 3155, 3164, 3187, 3203, 3210, 3213, 3222, 3226, 3230, 3242, 3267, 3274, 3277, 3292, 3313, 3317, 3319, 3329, 3331, 3341, 3356, 3358, 3371, 3375, 3382, 3387, 3395, 3400, 3409, 3441, 3458, 3462, 3468, 3474, 3483, 3487, 3489, 3496, 3504, 3512, 3525, 3532, 3535, 3542, 3550, 3558, 3572, 3577, 3582, 3585, 3598, 3618, 3628, 3631, 3640, 3643, 3645, 3648, 3651, 3669, 3678, 3685, 3697, 3704, 3714, 3717, 3722, 3730, 3735, 3741, 3746, 3751, 3755, 3759, 3763, 3767, 3771, 3775, 3779, 3782, 3795, 3800, 3804, 3808] \ No newline at end of file diff --git a/src/lib/spark/SparkSqlParser.tokens b/src/lib/spark/SparkSqlParser.tokens new file mode 100644 index 00000000..fa6c02c0 --- /dev/null +++ b/src/lib/spark/SparkSqlParser.tokens @@ -0,0 +1,741 @@ +SEMICOLON=1 +LEFT_PAREN=2 +RIGHT_PAREN=3 +COMMA=4 +DOT=5 +LEFT_BRACKET=6 +RIGHT_BRACKET=7 +KW_ADD=8 +KW_AFTER=9 +KW_ALL=10 +KW_ALTER=11 +KW_ALWAYS=12 +KW_ANALYZE=13 +KW_AND=14 +KW_ANTI=15 +KW_ANY=16 +KW_ANY_VALUE=17 +KW_ARCHIVE=18 +KW_ARRAY=19 +KW_AS=20 +KW_ASC=21 +KW_AT=22 +KW_AUTHORIZATION=23 +KW_BETWEEN=24 +KW_BIGINT=25 +KW_BINARY=26 +KW_BOOLEAN=27 +KW_BOTH=28 +KW_BUCKET=29 +KW_BUCKETS=30 +KW_BY=31 +KW_BYTE=32 +KW_CACHE=33 +KW_CASCADE=34 +KW_CASE=35 +KW_CAST=36 +KW_CATALOG=37 +KW_CATALOGS=38 +KW_CHANGE=39 +KW_CHAR=40 +KW_CHARACTER=41 +KW_CHECK=42 +KW_CLEAR=43 +KW_CLUSTER=44 +KW_CLUSTERED=45 +KW_CODEGEN=46 +KW_COLLATE=47 +KW_COLLECTION=48 +KW_COLUMN=49 +KW_COLUMNS=50 +KW_COMMENT=51 +KW_COMMIT=52 +KW_COMPACT=53 +KW_COMPACTIONS=54 +KW_COMPUTE=55 +KW_CONCATENATE=56 +KW_CONSTRAINT=57 +KW_COST=58 +KW_CREATE=59 +KW_CROSS=60 +KW_CUBE=61 +KW_CURRENT=62 +KW_CURRENT_DATE=63 +KW_CURRENT_TIME=64 +KW_CURRENT_TIMESTAMP=65 +KW_CURRENT_USER=66 +KW_DAY=67 +KW_DAYS=68 +KW_DAYOFYEAR=69 +KW_DATA=70 +KW_DATE=71 +KW_DATABASE=72 +KW_DATABASES=73 +KW_DATEADD=74 +KW_DATE_ADD=75 +KW_DATEDIFF=76 +KW_DATE_DIFF=77 +KW_DBPROPERTIES=78 +KW_DEC=79 +KW_DECIMAL=80 +KW_DECLARE=81 +KW_DEFAULT=82 +KW_DEFINED=83 +KW_DELETE=84 +KW_DELIMITED=85 +KW_DESC=86 +KW_DESCRIBE=87 +KW_DFS=88 +KW_DIRECTORIES=89 +KW_DIRECTORY=90 +KW_DISTINCT=91 +KW_DISTRIBUTE=92 +KW_DIV=93 +KW_DOUBLE=94 +KW_DROP=95 +KW_ELSE=96 +KW_END=97 +KW_ESCAPE=98 +KW_ESCAPED=99 +KW_EXCEPT=100 +KW_EXCHANGE=101 +KW_EXCLUDE=102 +KW_EXISTS=103 +KW_EXPLAIN=104 +KW_EXPORT=105 +KW_EXTENDED=106 +KW_EXTERNAL=107 +KW_EXTRACT=108 +KW_FALSE=109 +KW_FETCH=110 +KW_FIELDS=111 +KW_FILTER=112 +KW_FILEFORMAT=113 +KW_FIRST=114 +KW_FLOAT=115 +KW_FOLLOWING=116 +KW_FOR=117 +KW_FOREIGN=118 +KW_FORMAT=119 +KW_FORMATTED=120 +KW_FROM=121 +KW_FULL=122 +KW_FUNCTION=123 +KW_FUNCTIONS=124 +KW_GENERATED=125 +KW_GLOBAL=126 +KW_GRANT=127 +KW_GROUP=128 +KW_GROUPING=129 +KW_HAVING=130 +KW_BINARY_HEX=131 +KW_HOUR=132 +KW_HOURS=133 +KW_IDENTIFIER_KW=134 +KW_IF=135 +KW_IGNORE=136 +KW_IMPORT=137 +KW_IN=138 +KW_INCLUDE=139 +KW_INDEX=140 +KW_INDEXES=141 +KW_INNER=142 +KW_INPATH=143 +KW_INPUTFORMAT=144 +KW_INSERT=145 +KW_INTERSECT=146 +KW_INTERVAL=147 +KW_INT=148 +KW_INTEGER=149 +KW_INTO=150 +KW_IS=151 +KW_ITEMS=152 +KW_JOIN=153 +KW_KEYS=154 +KW_LAST=155 +KW_LATERAL=156 +KW_LAZY=157 +KW_LEADING=158 +KW_LEFT=159 +KW_LIKE=160 +KW_ILIKE=161 +KW_LIMIT=162 +KW_LINES=163 +KW_LIST=164 +KW_LOAD=165 +KW_LOCAL=166 +KW_LOCATION=167 +KW_LOCK=168 +KW_LOCKS=169 +KW_LOGICAL=170 +KW_LONG=171 +KW_MACRO=172 +KW_MAP=173 +KW_MATCHED=174 +KW_MERGE=175 +KW_MICROSECOND=176 +KW_MICROSECONDS=177 +KW_MILLISECOND=178 +KW_MILLISECONDS=179 +KW_MINUTE=180 +KW_MINUTES=181 +KW_MONTH=182 +KW_MONTHS=183 +KW_MSCK=184 +KW_NAME=185 +KW_NAMESPACE=186 +KW_NAMESPACES=187 +KW_NANOSECOND=188 +KW_NANOSECONDS=189 +KW_NATURAL=190 +KW_NO=191 +KW_NOT=192 +KW_NULL=193 +KW_NULLS=194 +KW_NUMERIC=195 +KW_OF=196 +KW_OFFSET=197 +KW_ON=198 +KW_ONLY=199 +KW_OPTION=200 +KW_OPTIONS=201 +KW_OR=202 +KW_ORDER=203 +KW_OUT=204 +KW_OUTER=205 +KW_OUTPUTFORMAT=206 +KW_OVER=207 +KW_OVERLAPS=208 +KW_OVERLAY=209 +KW_OVERWRITE=210 +KW_PARTITION=211 +KW_PARTITIONED=212 +KW_PARTITIONS=213 +KW_PERCENTILE_CONT=214 +KW_PERCENTILE_DISC=215 +KW_PERCENTLIT=216 +KW_PIVOT=217 +KW_PLACING=218 +KW_POSITION=219 +KW_PRECEDING=220 +KW_PRIMARY=221 +KW_PRINCIPALS=222 +KW_PROPERTIES=223 +KW_PURGE=224 +KW_QUARTER=225 +KW_QUERY=226 +KW_RANGE=227 +KW_REAL=228 +KW_RECORDREADER=229 +KW_RECORDWRITER=230 +KW_RECOVER=231 +KW_REDUCE=232 +KW_REFERENCES=233 +KW_REFRESH=234 +KW_RENAME=235 +KW_REPAIR=236 +KW_REPEATABLE=237 +KW_REPLACE=238 +KW_RESET=239 +KW_RESPECT=240 +KW_RESTRICT=241 +KW_REVOKE=242 +KW_RIGHT=243 +KW_RLIKE=244 +KW_ROLE=245 +KW_ROLES=246 +KW_ROLLBACK=247 +KW_ROLLUP=248 +KW_ROW=249 +KW_ROWS=250 +KW_SECOND=251 +KW_SECONDS=252 +KW_SCHEMA=253 +KW_SCHEMAS=254 +KW_SELECT=255 +KW_SEMI=256 +KW_SEPARATED=257 +KW_SERDE=258 +KW_SERDEPROPERTIES=259 +KW_SESSION_USER=260 +KW_SET=261 +KW_SETMINUS=262 +KW_SETS=263 +KW_SHORT=264 +KW_SHOW=265 +KW_SINGLE=266 +KW_SKEWED=267 +KW_SMALLINT=268 +KW_SOME=269 +KW_SORT=270 +KW_SORTED=271 +KW_SOURCE=272 +KW_START=273 +KW_STATISTICS=274 +KW_STORED=275 +KW_STRATIFY=276 +KW_STRING=277 +KW_STRUCT=278 +KW_SUBSTR=279 +KW_SUBSTRING=280 +KW_SYNC=281 +KW_SYSTEM_TIME=282 +KW_SYSTEM_VERSION=283 +KW_TABLE=284 +KW_TABLES=285 +KW_TABLESAMPLE=286 +KW_TARGET=287 +KW_TBLPROPERTIES=288 +KW_TEMPORARY=289 +KW_TERMINATED=290 +KW_THEN=291 +KW_TIME=292 +KW_TIMEDIFF=293 +KW_TIMESTAMP=294 +KW_TIMESTAMP_LTZ=295 +KW_TIMESTAMP_NTZ=296 +KW_TIMESTAMPADD=297 +KW_TIMESTAMPDIFF=298 +KW_TINYINT=299 +KW_TO=300 +KW_TOUCH=301 +KW_TRAILING=302 +KW_TRANSACTION=303 +KW_TRANSACTIONS=304 +KW_TRANSFORM=305 +KW_TRIM=306 +KW_TRUE=307 +KW_TRUNCATE=308 +KW_TRY_CAST=309 +KW_TYPE=310 +KW_UNARCHIVE=311 +KW_UNBOUNDED=312 +KW_UNCACHE=313 +KW_UNION=314 +KW_UNIQUE=315 +KW_UNKNOWN=316 +KW_UNLOCK=317 +KW_UNPIVOT=318 +KW_UNSET=319 +KW_UPDATE=320 +KW_USE=321 +KW_USER=322 +KW_USING=323 +KW_VALUES=324 +KW_VARCHAR=325 +KW_VAR=326 +KW_VARIABLE=327 +KW_VERSION=328 +KW_VIEW=329 +KW_VIEWS=330 +KW_VOID=331 +KW_WEEK=332 +KW_WEEKS=333 +KW_WHEN=334 +KW_WHERE=335 +KW_WINDOW=336 +KW_WITH=337 +KW_WITHIN=338 +KW_YEAR=339 +KW_YEARS=340 +KW_ZONE=341 +EQ=342 +NSEQ=343 +NEQ=344 +NEQJ=345 +LT=346 +LTE=347 +GT=348 +GTE=349 +PLUS=350 +MINUS=351 +ASTERISK=352 +SLASH=353 +PERCENT=354 +TILDE=355 +AMPERSAND=356 +PIPE=357 +CONCAT_PIPE=358 +HAT=359 +COLON=360 +ARROW=361 +FAT_ARROW=362 +HENT_START=363 +HENT_END=364 +QUESTION=365 +STRING_LITERAL=366 +DOUBLEQUOTED_STRING=367 +BIGINT_LITERAL=368 +SMALLINT_LITERAL=369 +TINYINT_LITERAL=370 +INTEGER_VALUE=371 +EXPONENT_VALUE=372 +DECIMAL_VALUE=373 +FLOAT_LITERAL=374 +DOUBLE_LITERAL=375 +BIGDECIMAL_LITERAL=376 +IDENTIFIER=377 +BACKQUOTED_IDENTIFIER=378 +SIMPLE_COMMENT=379 +BRACKETED_COMMENT=380 +WS=381 +UNRECOGNIZED=382 +';'=1 +'('=2 +')'=3 +','=4 +'.'=5 +'['=6 +']'=7 +'ADD'=8 +'AFTER'=9 +'ALL'=10 +'ALTER'=11 +'ALWAYS'=12 +'ANALYZE'=13 +'AND'=14 +'ANTI'=15 +'ANY'=16 +'ANY_VALUE'=17 +'ARCHIVE'=18 +'ARRAY'=19 +'AS'=20 +'ASC'=21 +'AT'=22 +'AUTHORIZATION'=23 +'BETWEEN'=24 +'BIGINT'=25 +'BINARY'=26 +'BOOLEAN'=27 +'BOTH'=28 +'BUCKET'=29 +'BUCKETS'=30 +'BY'=31 +'BYTE'=32 +'CACHE'=33 +'CASCADE'=34 +'CASE'=35 +'CAST'=36 +'CATALOG'=37 +'CATALOGS'=38 +'CHANGE'=39 +'CHAR'=40 +'CHARACTER'=41 +'CHECK'=42 +'CLEAR'=43 +'CLUSTER'=44 +'CLUSTERED'=45 +'CODEGEN'=46 +'COLLATE'=47 +'COLLECTION'=48 +'COLUMN'=49 +'COLUMNS'=50 +'COMMENT'=51 +'COMMIT'=52 +'COMPACT'=53 +'COMPACTIONS'=54 +'COMPUTE'=55 +'CONCATENATE'=56 +'CONSTRAINT'=57 +'COST'=58 +'CREATE'=59 +'CROSS'=60 +'CUBE'=61 +'CURRENT'=62 +'CURRENT_DATE'=63 +'CURRENT_TIME'=64 +'CURRENT_TIMESTAMP'=65 +'CURRENT_USER'=66 +'DAY'=67 +'DAYS'=68 +'DAYOFYEAR'=69 +'DATA'=70 +'DATE'=71 +'DATABASE'=72 +'DATABASES'=73 +'DATEADD'=74 +'DATE_ADD'=75 +'DATEDIFF'=76 +'DATE_DIFF'=77 +'DBPROPERTIES'=78 +'DEC'=79 +'DECIMAL'=80 +'DECLARE'=81 +'DEFAULT'=82 +'DEFINED'=83 +'DELETE'=84 +'DELIMITED'=85 +'DESC'=86 +'DESCRIBE'=87 +'DFS'=88 +'DIRECTORIES'=89 +'DIRECTORY'=90 +'DISTINCT'=91 +'DISTRIBUTE'=92 +'DIV'=93 +'DOUBLE'=94 +'DROP'=95 +'ELSE'=96 +'END'=97 +'ESCAPE'=98 +'ESCAPED'=99 +'EXCEPT'=100 +'EXCHANGE'=101 +'EXCLUDE'=102 +'EXISTS'=103 +'EXPLAIN'=104 +'EXPORT'=105 +'EXTENDED'=106 +'EXTERNAL'=107 +'EXTRACT'=108 +'FALSE'=109 +'FETCH'=110 +'FIELDS'=111 +'FILTER'=112 +'FILEFORMAT'=113 +'FIRST'=114 +'FLOAT'=115 +'FOLLOWING'=116 +'FOR'=117 +'FOREIGN'=118 +'FORMAT'=119 +'FORMATTED'=120 +'FROM'=121 +'FULL'=122 +'FUNCTION'=123 +'FUNCTIONS'=124 +'GENERATED'=125 +'GLOBAL'=126 +'GRANT'=127 +'GROUP'=128 +'GROUPING'=129 +'HAVING'=130 +'X'=131 +'HOUR'=132 +'HOURS'=133 +'IDENTIFIER'=134 +'IF'=135 +'IGNORE'=136 +'IMPORT'=137 +'IN'=138 +'INCLUDE'=139 +'INDEX'=140 +'INDEXES'=141 +'INNER'=142 +'INPATH'=143 +'INPUTFORMAT'=144 +'INSERT'=145 +'INTERSECT'=146 +'INTERVAL'=147 +'INT'=148 +'INTEGER'=149 +'INTO'=150 +'IS'=151 +'ITEMS'=152 +'JOIN'=153 +'KEYS'=154 +'LAST'=155 +'LATERAL'=156 +'LAZY'=157 +'LEADING'=158 +'LEFT'=159 +'LIKE'=160 +'ILIKE'=161 +'LIMIT'=162 +'LINES'=163 +'LIST'=164 +'LOAD'=165 +'LOCAL'=166 +'LOCATION'=167 +'LOCK'=168 +'LOCKS'=169 +'LOGICAL'=170 +'LONG'=171 +'MACRO'=172 +'MAP'=173 +'MATCHED'=174 +'MERGE'=175 +'MICROSECOND'=176 +'MICROSECONDS'=177 +'MILLISECOND'=178 +'MILLISECONDS'=179 +'MINUTE'=180 +'MINUTES'=181 +'MONTH'=182 +'MONTHS'=183 +'MSCK'=184 +'NAME'=185 +'NAMESPACE'=186 +'NAMESPACES'=187 +'NANOSECOND'=188 +'NANOSECONDS'=189 +'NATURAL'=190 +'NO'=191 +'NULL'=193 +'NULLS'=194 +'NUMERIC'=195 +'OF'=196 +'OFFSET'=197 +'ON'=198 +'ONLY'=199 +'OPTION'=200 +'OPTIONS'=201 +'OR'=202 +'ORDER'=203 +'OUT'=204 +'OUTER'=205 +'OUTPUTFORMAT'=206 +'OVER'=207 +'OVERLAPS'=208 +'OVERLAY'=209 +'OVERWRITE'=210 +'PARTITION'=211 +'PARTITIONED'=212 +'PARTITIONS'=213 +'PERCENTILE_CONT'=214 +'PERCENTILE_DISC'=215 +'PERCENT'=216 +'PIVOT'=217 +'PLACING'=218 +'POSITION'=219 +'PRECEDING'=220 +'PRIMARY'=221 +'PRINCIPALS'=222 +'PROPERTIES'=223 +'PURGE'=224 +'QUARTER'=225 +'QUERY'=226 +'RANGE'=227 +'REAL'=228 +'RECORDREADER'=229 +'RECORDWRITER'=230 +'RECOVER'=231 +'REDUCE'=232 +'REFERENCES'=233 +'REFRESH'=234 +'RENAME'=235 +'REPAIR'=236 +'REPEATABLE'=237 +'REPLACE'=238 +'RESET'=239 +'RESPECT'=240 +'RESTRICT'=241 +'REVOKE'=242 +'RIGHT'=243 +'ROLE'=245 +'ROLES'=246 +'ROLLBACK'=247 +'ROLLUP'=248 +'ROW'=249 +'ROWS'=250 +'SECOND'=251 +'SECONDS'=252 +'SCHEMA'=253 +'SCHEMAS'=254 +'SELECT'=255 +'SEMI'=256 +'SEPARATED'=257 +'SERDE'=258 +'SERDEPROPERTIES'=259 +'SESSION_USER'=260 +'SET'=261 +'MINUS'=262 +'SETS'=263 +'SHORT'=264 +'SHOW'=265 +'SINGLE'=266 +'SKEWED'=267 +'SMALLINT'=268 +'SOME'=269 +'SORT'=270 +'SORTED'=271 +'SOURCE'=272 +'START'=273 +'STATISTICS'=274 +'STORED'=275 +'STRATIFY'=276 +'STRING'=277 +'STRUCT'=278 +'SUBSTR'=279 +'SUBSTRING'=280 +'SYNC'=281 +'SYSTEM_TIME'=282 +'SYSTEM_VERSION'=283 +'TABLE'=284 +'TABLES'=285 +'TABLESAMPLE'=286 +'TARGET'=287 +'TBLPROPERTIES'=288 +'TERMINATED'=290 +'THEN'=291 +'TIME'=292 +'TIMEDIFF'=293 +'TIMESTAMP'=294 +'TIMESTAMP_LTZ'=295 +'TIMESTAMP_NTZ'=296 +'TIMESTAMPADD'=297 +'TIMESTAMPDIFF'=298 +'TINYINT'=299 +'TO'=300 +'TOUCH'=301 +'TRAILING'=302 +'TRANSACTION'=303 +'TRANSACTIONS'=304 +'TRANSFORM'=305 +'TRIM'=306 +'TRUE'=307 +'TRUNCATE'=308 +'TRY_CAST'=309 +'TYPE'=310 +'UNARCHIVE'=311 +'UNBOUNDED'=312 +'UNCACHE'=313 +'UNION'=314 +'UNIQUE'=315 +'UNKNOWN'=316 +'UNLOCK'=317 +'UNPIVOT'=318 +'UNSET'=319 +'UPDATE'=320 +'USE'=321 +'USER'=322 +'USING'=323 +'VALUES'=324 +'VARCHAR'=325 +'VAR'=326 +'VARIABLE'=327 +'VERSION'=328 +'VIEW'=329 +'VIEWS'=330 +'VOID'=331 +'WEEK'=332 +'WEEKS'=333 +'WHEN'=334 +'WHERE'=335 +'WINDOW'=336 +'WITH'=337 +'WITHIN'=338 +'YEAR'=339 +'YEARS'=340 +'ZONE'=341 +'<=>'=343 +'<>'=344 +'!='=345 +'<'=346 +'>'=348 +'+'=350 +'-'=351 +'*'=352 +'/'=353 +'%'=354 +'~'=355 +'&'=356 +'|'=357 +'||'=358 +'^'=359 +':'=360 +'->'=361 +'=>'=362 +'/*+'=363 +'*/'=364 +'?'=365 diff --git a/src/lib/spark/SparkSqlParser.ts b/src/lib/spark/SparkSqlParser.ts index f99fb502..aef936c3 100644 --- a/src/lib/spark/SparkSqlParser.ts +++ b/src/lib/spark/SparkSqlParser.ts @@ -1,4 +1,4 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/spark/SparkSql.g4 by ANTLR 4.9.0-SNAPSHOT +// Generated from /Users/edy/github/dt-sql-parser/src/grammar/spark/SparkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT import { ATN } from "antlr4ts/atn/ATN"; @@ -23,316 +23,403 @@ import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; import * as Utils from "antlr4ts/misc/Utils"; -import { SparkSqlListener } from "./SparkSqlListener"; -import { SparkSqlVisitor } from "./SparkSqlVisitor"; +import { SparkSqlParserListener } from "./SparkSqlParserListener"; +import { SparkSqlParserVisitor } from "./SparkSqlParserVisitor"; export class SparkSqlParser extends Parser { - public static readonly T__0 = 1; - public static readonly T__1 = 2; - public static readonly T__2 = 3; - public static readonly T__3 = 4; - public static readonly T__4 = 5; - public static readonly T__5 = 6; - public static readonly T__6 = 7; - public static readonly T__7 = 8; - public static readonly T__8 = 9; - public static readonly T__9 = 10; - public static readonly ADD = 11; - public static readonly AFTER = 12; - public static readonly ALL = 13; - public static readonly ALTER = 14; - public static readonly ANALYZE = 15; - public static readonly AND = 16; - public static readonly ANTI = 17; - public static readonly ANY = 18; - public static readonly ARCHIVE = 19; - public static readonly ARRAY = 20; - public static readonly AS = 21; - public static readonly ASC = 22; - public static readonly AT = 23; - public static readonly AUTHORIZATION = 24; - public static readonly BETWEEN = 25; - public static readonly BOTH = 26; - public static readonly BUCKET = 27; - public static readonly BUCKETS = 28; - public static readonly BY = 29; - public static readonly CACHE = 30; - public static readonly CASCADE = 31; - public static readonly CASE = 32; - public static readonly CAST = 33; - public static readonly CHANGE = 34; - public static readonly CHECK = 35; - public static readonly CLEAR = 36; - public static readonly CLUSTER = 37; - public static readonly CLUSTERED = 38; - public static readonly CODEGEN = 39; - public static readonly COLLATE = 40; - public static readonly COLLECTION = 41; - public static readonly COLUMN = 42; - public static readonly COLUMNS = 43; - public static readonly COMMENT = 44; - public static readonly COMMIT = 45; - public static readonly COMPACT = 46; - public static readonly COMPACTIONS = 47; - public static readonly COMPUTE = 48; - public static readonly CONCATENATE = 49; - public static readonly CONSTRAINT = 50; - public static readonly COST = 51; - public static readonly CREATE = 52; - public static readonly CROSS = 53; - public static readonly CUBE = 54; - public static readonly CURRENT = 55; - public static readonly CURRENT_DATE = 56; - public static readonly CURRENT_TIME = 57; - public static readonly CURRENT_TIMESTAMP = 58; - public static readonly CURRENT_USER = 59; - public static readonly DATA = 60; - public static readonly DATABASE = 61; - public static readonly DATABASES = 62; - public static readonly DBPROPERTIES = 63; - public static readonly DEFINED = 64; - public static readonly DELETE = 65; - public static readonly DELIMITED = 66; - public static readonly DESC = 67; - public static readonly DESCRIBE = 68; - public static readonly DFS = 69; - public static readonly DIRECTORIES = 70; - public static readonly DIRECTORY = 71; - public static readonly DISTINCT = 72; - public static readonly DISTRIBUTE = 73; - public static readonly DIV = 74; - public static readonly DROP = 75; - public static readonly ELSE = 76; - public static readonly END = 77; - public static readonly ESCAPE = 78; - public static readonly ESCAPED = 79; - public static readonly EXCEPT = 80; - public static readonly EXCHANGE = 81; - public static readonly EXISTS = 82; - public static readonly EXPLAIN = 83; - public static readonly EXPORT = 84; - public static readonly EXTENDED = 85; - public static readonly EXTERNAL = 86; - public static readonly EXTRACT = 87; - public static readonly FALSE = 88; - public static readonly FETCH = 89; - public static readonly FIELDS = 90; - public static readonly FILTER = 91; - public static readonly FILEFORMAT = 92; - public static readonly FIRST = 93; - public static readonly FOLLOWING = 94; - public static readonly FOR = 95; - public static readonly FOREIGN = 96; - public static readonly FORMAT = 97; - public static readonly FORMATTED = 98; - public static readonly FROM = 99; - public static readonly FULL = 100; - public static readonly FUNCTION = 101; - public static readonly FUNCTIONS = 102; - public static readonly GLOBAL = 103; - public static readonly GRANT = 104; - public static readonly GROUP = 105; - public static readonly GROUPING = 106; - public static readonly HAVING = 107; - public static readonly IF = 108; - public static readonly IGNORE = 109; - public static readonly IMPORT = 110; - public static readonly IN = 111; - public static readonly INDEX = 112; - public static readonly INDEXES = 113; - public static readonly INNER = 114; - public static readonly INPATH = 115; - public static readonly INPUTFORMAT = 116; - public static readonly INSERT = 117; - public static readonly INTERSECT = 118; - public static readonly INTERVAL = 119; - public static readonly INTO = 120; - public static readonly IS = 121; - public static readonly ITEMS = 122; - public static readonly JOIN = 123; - public static readonly KEYS = 124; - public static readonly LAST = 125; - public static readonly LATERAL = 126; - public static readonly LAZY = 127; - public static readonly LEADING = 128; - public static readonly LEFT = 129; - public static readonly LIKE = 130; - public static readonly LIMIT = 131; - public static readonly LINES = 132; - public static readonly LIST = 133; - public static readonly LOAD = 134; - public static readonly LOCAL = 135; - public static readonly LOCATION = 136; - public static readonly LOCK = 137; - public static readonly LOCKS = 138; - public static readonly LOGICAL = 139; - public static readonly MACRO = 140; - public static readonly MAP = 141; - public static readonly MATCHED = 142; - public static readonly MERGE = 143; - public static readonly MSCK = 144; - public static readonly NAMESPACE = 145; - public static readonly NAMESPACES = 146; - public static readonly NATURAL = 147; - public static readonly NO = 148; - public static readonly NOT = 149; - public static readonly NULL = 150; - public static readonly NULLS = 151; - public static readonly OF = 152; - public static readonly ON = 153; - public static readonly ONLY = 154; - public static readonly OPTION = 155; - public static readonly OPTIONS = 156; - public static readonly OR = 157; - public static readonly ORDER = 158; - public static readonly OUT = 159; - public static readonly OUTER = 160; - public static readonly OUTPUTFORMAT = 161; - public static readonly OVER = 162; - public static readonly OVERLAPS = 163; - public static readonly OVERLAY = 164; - public static readonly OVERWRITE = 165; - public static readonly PARTITION = 166; - public static readonly PARTITIONED = 167; - public static readonly PARTITIONS = 168; - public static readonly PERCENTLIT = 169; - public static readonly PIVOT = 170; - public static readonly PLACING = 171; - public static readonly POSITION = 172; - public static readonly PRECEDING = 173; - public static readonly PRIMARY = 174; - public static readonly PRINCIPALS = 175; - public static readonly PROPERTIES = 176; - public static readonly PURGE = 177; - public static readonly QUERY = 178; - public static readonly RANGE = 179; - public static readonly RECORDREADER = 180; - public static readonly RECORDWRITER = 181; - public static readonly RECOVER = 182; - public static readonly REDUCE = 183; - public static readonly REFERENCES = 184; - public static readonly REFRESH = 185; - public static readonly RENAME = 186; - public static readonly REPAIR = 187; - public static readonly REPLACE = 188; - public static readonly RESET = 189; - public static readonly RESTRICT = 190; - public static readonly REVOKE = 191; - public static readonly RIGHT = 192; - public static readonly RLIKE = 193; - public static readonly ROLE = 194; - public static readonly ROLES = 195; - public static readonly ROLLBACK = 196; - public static readonly ROLLUP = 197; - public static readonly ROW = 198; - public static readonly ROWS = 199; - public static readonly SCHEMA = 200; - public static readonly SELECT = 201; - public static readonly SEMI = 202; - public static readonly SEPARATED = 203; - public static readonly SERDE = 204; - public static readonly SERDEPROPERTIES = 205; - public static readonly SESSION_USER = 206; - public static readonly SET = 207; - public static readonly SETMINUS = 208; - public static readonly SETS = 209; - public static readonly SHOW = 210; - public static readonly SKEWED = 211; - public static readonly SOME = 212; - public static readonly SORT = 213; - public static readonly SORTED = 214; - public static readonly START = 215; - public static readonly STATISTICS = 216; - public static readonly STORED = 217; - public static readonly STRATIFY = 218; - public static readonly STRUCT = 219; - public static readonly SUBSTR = 220; - public static readonly SUBSTRING = 221; - public static readonly TABLE = 222; - public static readonly TABLES = 223; - public static readonly TABLESAMPLE = 224; - public static readonly TBLPROPERTIES = 225; - public static readonly TEMPORARY = 226; - public static readonly TERMINATED = 227; - public static readonly THEN = 228; - public static readonly TIME = 229; - public static readonly TO = 230; - public static readonly TOUCH = 231; - public static readonly TRAILING = 232; - public static readonly TRANSACTION = 233; - public static readonly TRANSACTIONS = 234; - public static readonly TRANSFORM = 235; - public static readonly TRIM = 236; - public static readonly TRUE = 237; - public static readonly TRUNCATE = 238; - public static readonly TYPE = 239; - public static readonly UNARCHIVE = 240; - public static readonly UNBOUNDED = 241; - public static readonly UNCACHE = 242; - public static readonly UNION = 243; - public static readonly UNIQUE = 244; - public static readonly UNKNOWN = 245; - public static readonly UNLOCK = 246; - public static readonly UNSET = 247; - public static readonly UPDATE = 248; - public static readonly USE = 249; - public static readonly USER = 250; - public static readonly USING = 251; - public static readonly VALUES = 252; - public static readonly VIEW = 253; - public static readonly VIEWS = 254; - public static readonly WHEN = 255; - public static readonly WHERE = 256; - public static readonly WINDOW = 257; - public static readonly WITH = 258; - public static readonly ZONE = 259; - public static readonly EQ = 260; - public static readonly NSEQ = 261; - public static readonly NEQ = 262; - public static readonly NEQJ = 263; - public static readonly LT = 264; - public static readonly LTE = 265; - public static readonly GT = 266; - public static readonly GTE = 267; - public static readonly PLUS = 268; - public static readonly MINUS = 269; - public static readonly ASTERISK = 270; - public static readonly SLASH = 271; - public static readonly PERCENT = 272; - public static readonly TILDE = 273; - public static readonly AMPERSAND = 274; - public static readonly PIPE = 275; - public static readonly CONCAT_PIPE = 276; - public static readonly HAT = 277; - public static readonly SEMICOLON = 278; - public static readonly STRING = 279; - public static readonly BIGINT_LITERAL = 280; - public static readonly SMALLINT_LITERAL = 281; - public static readonly TINYINT_LITERAL = 282; - public static readonly INTEGER_VALUE = 283; - public static readonly EXPONENT_VALUE = 284; - public static readonly DECIMAL_VALUE = 285; - public static readonly FLOAT_LITERAL = 286; - public static readonly DOUBLE_LITERAL = 287; - public static readonly BIGDECIMAL_LITERAL = 288; - public static readonly IDENTIFIER = 289; - public static readonly BACKQUOTED_IDENTIFIER = 290; - public static readonly CUSTOM_VARS = 291; - public static readonly SIMPLE_COMMENT = 292; - public static readonly BRACKETED_COMMENT = 293; - public static readonly WS = 294; - public static readonly UNRECOGNIZED = 295; + public static readonly SEMICOLON = 1; + public static readonly LEFT_PAREN = 2; + public static readonly RIGHT_PAREN = 3; + public static readonly COMMA = 4; + public static readonly DOT = 5; + public static readonly LEFT_BRACKET = 6; + public static readonly RIGHT_BRACKET = 7; + public static readonly KW_ADD = 8; + public static readonly KW_AFTER = 9; + public static readonly KW_ALL = 10; + public static readonly KW_ALTER = 11; + public static readonly KW_ALWAYS = 12; + public static readonly KW_ANALYZE = 13; + public static readonly KW_AND = 14; + public static readonly KW_ANTI = 15; + public static readonly KW_ANY = 16; + public static readonly KW_ANY_VALUE = 17; + public static readonly KW_ARCHIVE = 18; + public static readonly KW_ARRAY = 19; + public static readonly KW_AS = 20; + public static readonly KW_ASC = 21; + public static readonly KW_AT = 22; + public static readonly KW_AUTHORIZATION = 23; + public static readonly KW_BETWEEN = 24; + public static readonly KW_BIGINT = 25; + public static readonly KW_BINARY = 26; + public static readonly KW_BOOLEAN = 27; + public static readonly KW_BOTH = 28; + public static readonly KW_BUCKET = 29; + public static readonly KW_BUCKETS = 30; + public static readonly KW_BY = 31; + public static readonly KW_BYTE = 32; + public static readonly KW_CACHE = 33; + public static readonly KW_CASCADE = 34; + public static readonly KW_CASE = 35; + public static readonly KW_CAST = 36; + public static readonly KW_CATALOG = 37; + public static readonly KW_CATALOGS = 38; + public static readonly KW_CHANGE = 39; + public static readonly KW_CHAR = 40; + public static readonly KW_CHARACTER = 41; + public static readonly KW_CHECK = 42; + public static readonly KW_CLEAR = 43; + public static readonly KW_CLUSTER = 44; + public static readonly KW_CLUSTERED = 45; + public static readonly KW_CODEGEN = 46; + public static readonly KW_COLLATE = 47; + public static readonly KW_COLLECTION = 48; + public static readonly KW_COLUMN = 49; + public static readonly KW_COLUMNS = 50; + public static readonly KW_COMMENT = 51; + public static readonly KW_COMMIT = 52; + public static readonly KW_COMPACT = 53; + public static readonly KW_COMPACTIONS = 54; + public static readonly KW_COMPUTE = 55; + public static readonly KW_CONCATENATE = 56; + public static readonly KW_CONSTRAINT = 57; + public static readonly KW_COST = 58; + public static readonly KW_CREATE = 59; + public static readonly KW_CROSS = 60; + public static readonly KW_CUBE = 61; + public static readonly KW_CURRENT = 62; + public static readonly KW_CURRENT_DATE = 63; + public static readonly KW_CURRENT_TIME = 64; + public static readonly KW_CURRENT_TIMESTAMP = 65; + public static readonly KW_CURRENT_USER = 66; + public static readonly KW_DAY = 67; + public static readonly KW_DAYS = 68; + public static readonly KW_DAYOFYEAR = 69; + public static readonly KW_DATA = 70; + public static readonly KW_DATE = 71; + public static readonly KW_DATABASE = 72; + public static readonly KW_DATABASES = 73; + public static readonly KW_DATEADD = 74; + public static readonly KW_DATE_ADD = 75; + public static readonly KW_DATEDIFF = 76; + public static readonly KW_DATE_DIFF = 77; + public static readonly KW_DBPROPERTIES = 78; + public static readonly KW_DEC = 79; + public static readonly KW_DECIMAL = 80; + public static readonly KW_DECLARE = 81; + public static readonly KW_DEFAULT = 82; + public static readonly KW_DEFINED = 83; + public static readonly KW_DELETE = 84; + public static readonly KW_DELIMITED = 85; + public static readonly KW_DESC = 86; + public static readonly KW_DESCRIBE = 87; + public static readonly KW_DFS = 88; + public static readonly KW_DIRECTORIES = 89; + public static readonly KW_DIRECTORY = 90; + public static readonly KW_DISTINCT = 91; + public static readonly KW_DISTRIBUTE = 92; + public static readonly KW_DIV = 93; + public static readonly KW_DOUBLE = 94; + public static readonly KW_DROP = 95; + public static readonly KW_ELSE = 96; + public static readonly KW_END = 97; + public static readonly KW_ESCAPE = 98; + public static readonly KW_ESCAPED = 99; + public static readonly KW_EXCEPT = 100; + public static readonly KW_EXCHANGE = 101; + public static readonly KW_EXCLUDE = 102; + public static readonly KW_EXISTS = 103; + public static readonly KW_EXPLAIN = 104; + public static readonly KW_EXPORT = 105; + public static readonly KW_EXTENDED = 106; + public static readonly KW_EXTERNAL = 107; + public static readonly KW_EXTRACT = 108; + public static readonly KW_FALSE = 109; + public static readonly KW_FETCH = 110; + public static readonly KW_FIELDS = 111; + public static readonly KW_FILTER = 112; + public static readonly KW_FILEFORMAT = 113; + public static readonly KW_FIRST = 114; + public static readonly KW_FLOAT = 115; + public static readonly KW_FOLLOWING = 116; + public static readonly KW_FOR = 117; + public static readonly KW_FOREIGN = 118; + public static readonly KW_FORMAT = 119; + public static readonly KW_FORMATTED = 120; + public static readonly KW_FROM = 121; + public static readonly KW_FULL = 122; + public static readonly KW_FUNCTION = 123; + public static readonly KW_FUNCTIONS = 124; + public static readonly KW_GENERATED = 125; + public static readonly KW_GLOBAL = 126; + public static readonly KW_GRANT = 127; + public static readonly KW_GROUP = 128; + public static readonly KW_GROUPING = 129; + public static readonly KW_HAVING = 130; + public static readonly KW_BINARY_HEX = 131; + public static readonly KW_HOUR = 132; + public static readonly KW_HOURS = 133; + public static readonly KW_IDENTIFIER_KW = 134; + public static readonly KW_IF = 135; + public static readonly KW_IGNORE = 136; + public static readonly KW_IMPORT = 137; + public static readonly KW_IN = 138; + public static readonly KW_INCLUDE = 139; + public static readonly KW_INDEX = 140; + public static readonly KW_INDEXES = 141; + public static readonly KW_INNER = 142; + public static readonly KW_INPATH = 143; + public static readonly KW_INPUTFORMAT = 144; + public static readonly KW_INSERT = 145; + public static readonly KW_INTERSECT = 146; + public static readonly KW_INTERVAL = 147; + public static readonly KW_INT = 148; + public static readonly KW_INTEGER = 149; + public static readonly KW_INTO = 150; + public static readonly KW_IS = 151; + public static readonly KW_ITEMS = 152; + public static readonly KW_JOIN = 153; + public static readonly KW_KEYS = 154; + public static readonly KW_LAST = 155; + public static readonly KW_LATERAL = 156; + public static readonly KW_LAZY = 157; + public static readonly KW_LEADING = 158; + public static readonly KW_LEFT = 159; + public static readonly KW_LIKE = 160; + public static readonly KW_ILIKE = 161; + public static readonly KW_LIMIT = 162; + public static readonly KW_LINES = 163; + public static readonly KW_LIST = 164; + public static readonly KW_LOAD = 165; + public static readonly KW_LOCAL = 166; + public static readonly KW_LOCATION = 167; + public static readonly KW_LOCK = 168; + public static readonly KW_LOCKS = 169; + public static readonly KW_LOGICAL = 170; + public static readonly KW_LONG = 171; + public static readonly KW_MACRO = 172; + public static readonly KW_MAP = 173; + public static readonly KW_MATCHED = 174; + public static readonly KW_MERGE = 175; + public static readonly KW_MICROSECOND = 176; + public static readonly KW_MICROSECONDS = 177; + public static readonly KW_MILLISECOND = 178; + public static readonly KW_MILLISECONDS = 179; + public static readonly KW_MINUTE = 180; + public static readonly KW_MINUTES = 181; + public static readonly KW_MONTH = 182; + public static readonly KW_MONTHS = 183; + public static readonly KW_MSCK = 184; + public static readonly KW_NAME = 185; + public static readonly KW_NAMESPACE = 186; + public static readonly KW_NAMESPACES = 187; + public static readonly KW_NANOSECOND = 188; + public static readonly KW_NANOSECONDS = 189; + public static readonly KW_NATURAL = 190; + public static readonly KW_NO = 191; + public static readonly KW_NOT = 192; + public static readonly KW_NULL = 193; + public static readonly KW_NULLS = 194; + public static readonly KW_NUMERIC = 195; + public static readonly KW_OF = 196; + public static readonly KW_OFFSET = 197; + public static readonly KW_ON = 198; + public static readonly KW_ONLY = 199; + public static readonly KW_OPTION = 200; + public static readonly KW_OPTIONS = 201; + public static readonly KW_OR = 202; + public static readonly KW_ORDER = 203; + public static readonly KW_OUT = 204; + public static readonly KW_OUTER = 205; + public static readonly KW_OUTPUTFORMAT = 206; + public static readonly KW_OVER = 207; + public static readonly KW_OVERLAPS = 208; + public static readonly KW_OVERLAY = 209; + public static readonly KW_OVERWRITE = 210; + public static readonly KW_PARTITION = 211; + public static readonly KW_PARTITIONED = 212; + public static readonly KW_PARTITIONS = 213; + public static readonly KW_PERCENTILE_CONT = 214; + public static readonly KW_PERCENTILE_DISC = 215; + public static readonly KW_PERCENTLIT = 216; + public static readonly KW_PIVOT = 217; + public static readonly KW_PLACING = 218; + public static readonly KW_POSITION = 219; + public static readonly KW_PRECEDING = 220; + public static readonly KW_PRIMARY = 221; + public static readonly KW_PRINCIPALS = 222; + public static readonly KW_PROPERTIES = 223; + public static readonly KW_PURGE = 224; + public static readonly KW_QUARTER = 225; + public static readonly KW_QUERY = 226; + public static readonly KW_RANGE = 227; + public static readonly KW_REAL = 228; + public static readonly KW_RECORDREADER = 229; + public static readonly KW_RECORDWRITER = 230; + public static readonly KW_RECOVER = 231; + public static readonly KW_REDUCE = 232; + public static readonly KW_REFERENCES = 233; + public static readonly KW_REFRESH = 234; + public static readonly KW_RENAME = 235; + public static readonly KW_REPAIR = 236; + public static readonly KW_REPEATABLE = 237; + public static readonly KW_REPLACE = 238; + public static readonly KW_RESET = 239; + public static readonly KW_RESPECT = 240; + public static readonly KW_RESTRICT = 241; + public static readonly KW_REVOKE = 242; + public static readonly KW_RIGHT = 243; + public static readonly KW_RLIKE = 244; + public static readonly KW_ROLE = 245; + public static readonly KW_ROLES = 246; + public static readonly KW_ROLLBACK = 247; + public static readonly KW_ROLLUP = 248; + public static readonly KW_ROW = 249; + public static readonly KW_ROWS = 250; + public static readonly KW_SECOND = 251; + public static readonly KW_SECONDS = 252; + public static readonly KW_SCHEMA = 253; + public static readonly KW_SCHEMAS = 254; + public static readonly KW_SELECT = 255; + public static readonly KW_SEMI = 256; + public static readonly KW_SEPARATED = 257; + public static readonly KW_SERDE = 258; + public static readonly KW_SERDEPROPERTIES = 259; + public static readonly KW_SESSION_USER = 260; + public static readonly KW_SET = 261; + public static readonly KW_SETMINUS = 262; + public static readonly KW_SETS = 263; + public static readonly KW_SHORT = 264; + public static readonly KW_SHOW = 265; + public static readonly KW_SINGLE = 266; + public static readonly KW_SKEWED = 267; + public static readonly KW_SMALLINT = 268; + public static readonly KW_SOME = 269; + public static readonly KW_SORT = 270; + public static readonly KW_SORTED = 271; + public static readonly KW_SOURCE = 272; + public static readonly KW_START = 273; + public static readonly KW_STATISTICS = 274; + public static readonly KW_STORED = 275; + public static readonly KW_STRATIFY = 276; + public static readonly KW_STRING = 277; + public static readonly KW_STRUCT = 278; + public static readonly KW_SUBSTR = 279; + public static readonly KW_SUBSTRING = 280; + public static readonly KW_SYNC = 281; + public static readonly KW_SYSTEM_TIME = 282; + public static readonly KW_SYSTEM_VERSION = 283; + public static readonly KW_TABLE = 284; + public static readonly KW_TABLES = 285; + public static readonly KW_TABLESAMPLE = 286; + public static readonly KW_TARGET = 287; + public static readonly KW_TBLPROPERTIES = 288; + public static readonly KW_TEMPORARY = 289; + public static readonly KW_TERMINATED = 290; + public static readonly KW_THEN = 291; + public static readonly KW_TIME = 292; + public static readonly KW_TIMEDIFF = 293; + public static readonly KW_TIMESTAMP = 294; + public static readonly KW_TIMESTAMP_LTZ = 295; + public static readonly KW_TIMESTAMP_NTZ = 296; + public static readonly KW_TIMESTAMPADD = 297; + public static readonly KW_TIMESTAMPDIFF = 298; + public static readonly KW_TINYINT = 299; + public static readonly KW_TO = 300; + public static readonly KW_TOUCH = 301; + public static readonly KW_TRAILING = 302; + public static readonly KW_TRANSACTION = 303; + public static readonly KW_TRANSACTIONS = 304; + public static readonly KW_TRANSFORM = 305; + public static readonly KW_TRIM = 306; + public static readonly KW_TRUE = 307; + public static readonly KW_TRUNCATE = 308; + public static readonly KW_TRY_CAST = 309; + public static readonly KW_TYPE = 310; + public static readonly KW_UNARCHIVE = 311; + public static readonly KW_UNBOUNDED = 312; + public static readonly KW_UNCACHE = 313; + public static readonly KW_UNION = 314; + public static readonly KW_UNIQUE = 315; + public static readonly KW_UNKNOWN = 316; + public static readonly KW_UNLOCK = 317; + public static readonly KW_UNPIVOT = 318; + public static readonly KW_UNSET = 319; + public static readonly KW_UPDATE = 320; + public static readonly KW_USE = 321; + public static readonly KW_USER = 322; + public static readonly KW_USING = 323; + public static readonly KW_VALUES = 324; + public static readonly KW_VARCHAR = 325; + public static readonly KW_VAR = 326; + public static readonly KW_VARIABLE = 327; + public static readonly KW_VERSION = 328; + public static readonly KW_VIEW = 329; + public static readonly KW_VIEWS = 330; + public static readonly KW_VOID = 331; + public static readonly KW_WEEK = 332; + public static readonly KW_WEEKS = 333; + public static readonly KW_WHEN = 334; + public static readonly KW_WHERE = 335; + public static readonly KW_WINDOW = 336; + public static readonly KW_WITH = 337; + public static readonly KW_WITHIN = 338; + public static readonly KW_YEAR = 339; + public static readonly KW_YEARS = 340; + public static readonly KW_ZONE = 341; + public static readonly EQ = 342; + public static readonly NSEQ = 343; + public static readonly NEQ = 344; + public static readonly NEQJ = 345; + public static readonly LT = 346; + public static readonly LTE = 347; + public static readonly GT = 348; + public static readonly GTE = 349; + public static readonly PLUS = 350; + public static readonly MINUS = 351; + public static readonly ASTERISK = 352; + public static readonly SLASH = 353; + public static readonly PERCENT = 354; + public static readonly TILDE = 355; + public static readonly AMPERSAND = 356; + public static readonly PIPE = 357; + public static readonly CONCAT_PIPE = 358; + public static readonly HAT = 359; + public static readonly COLON = 360; + public static readonly ARROW = 361; + public static readonly FAT_ARROW = 362; + public static readonly HENT_START = 363; + public static readonly HENT_END = 364; + public static readonly QUESTION = 365; + public static readonly STRING_LITERAL = 366; + public static readonly DOUBLEQUOTED_STRING = 367; + public static readonly BIGINT_LITERAL = 368; + public static readonly SMALLINT_LITERAL = 369; + public static readonly TINYINT_LITERAL = 370; + public static readonly INTEGER_VALUE = 371; + public static readonly EXPONENT_VALUE = 372; + public static readonly DECIMAL_VALUE = 373; + public static readonly FLOAT_LITERAL = 374; + public static readonly DOUBLE_LITERAL = 375; + public static readonly BIGDECIMAL_LITERAL = 376; + public static readonly IDENTIFIER = 377; + public static readonly BACKQUOTED_IDENTIFIER = 378; + public static readonly SIMPLE_COMMENT = 379; + public static readonly BRACKETED_COMMENT = 380; + public static readonly WS = 381; + public static readonly UNRECOGNIZED = 382; public static readonly RULE_program = 0; public static readonly RULE_singleStatement = 1; - public static readonly RULE_emptyStatement = 2; - public static readonly RULE_singleExpression = 3; - public static readonly RULE_singleTableIdentifier = 4; - public static readonly RULE_singleMultipartIdentifier = 5; - public static readonly RULE_singleDataType = 6; - public static readonly RULE_singleTableSchema = 7; - public static readonly RULE_statement = 8; - public static readonly RULE_configKey = 9; + public static readonly RULE_tableIdentifierReference = 2; + public static readonly RULE_viewIdentifierReference = 3; + public static readonly RULE_functionIdentifierReference = 4; + public static readonly RULE_namespaceIdentifierReference = 5; + public static readonly RULE_statement = 6; + public static readonly RULE_timezone = 7; + public static readonly RULE_configKey = 8; + public static readonly RULE_configValue = 9; public static readonly RULE_unsupportedHiveNativeCommands = 10; public static readonly RULE_createTableHeader = 11; public static readonly RULE_replaceTableHeader = 12; @@ -346,245 +433,348 @@ export class SparkSqlParser extends Parser { public static readonly RULE_partitionSpec = 20; public static readonly RULE_partitionVal = 21; public static readonly RULE_namespace = 22; - public static readonly RULE_describeFuncName = 23; - public static readonly RULE_describeColName = 24; - public static readonly RULE_ctes = 25; - public static readonly RULE_namedQuery = 26; - public static readonly RULE_tableProvider = 27; - public static readonly RULE_createTableClauses = 28; - public static readonly RULE_tablePropertyList = 29; - public static readonly RULE_tableProperty = 30; - public static readonly RULE_tablePropertyKey = 31; - public static readonly RULE_tablePropertyValue = 32; - public static readonly RULE_constantList = 33; - public static readonly RULE_nestedConstantList = 34; - public static readonly RULE_createFileFormat = 35; - public static readonly RULE_fileFormat = 36; - public static readonly RULE_storageHandler = 37; - public static readonly RULE_resource = 38; - public static readonly RULE_dmlStatementNoWith = 39; - public static readonly RULE_queryOrganization = 40; - public static readonly RULE_multiInsertQueryBody = 41; - public static readonly RULE_queryTerm = 42; - public static readonly RULE_queryPrimary = 43; - public static readonly RULE_sortItem = 44; - public static readonly RULE_fromStatement = 45; - public static readonly RULE_fromStatementBody = 46; - public static readonly RULE_querySpecification = 47; - public static readonly RULE_transformClause = 48; - public static readonly RULE_selectClause = 49; - public static readonly RULE_setClause = 50; - public static readonly RULE_matchedClause = 51; - public static readonly RULE_notMatchedClause = 52; - public static readonly RULE_matchedAction = 53; - public static readonly RULE_notMatchedAction = 54; - public static readonly RULE_assignmentList = 55; - public static readonly RULE_assignment = 56; - public static readonly RULE_whereClause = 57; - public static readonly RULE_havingClause = 58; - public static readonly RULE_hint = 59; - public static readonly RULE_hintStatement = 60; - public static readonly RULE_fromClause = 61; - public static readonly RULE_aggregationClause = 62; - public static readonly RULE_groupingSet = 63; - public static readonly RULE_pivotClause = 64; - public static readonly RULE_pivotColumn = 65; - public static readonly RULE_pivotValue = 66; - public static readonly RULE_lateralView = 67; - public static readonly RULE_setQuantifier = 68; - public static readonly RULE_relation = 69; - public static readonly RULE_joinRelation = 70; - public static readonly RULE_joinType = 71; - public static readonly RULE_joinCriteria = 72; - public static readonly RULE_sample = 73; - public static readonly RULE_sampleMethod = 74; - public static readonly RULE_identifierList = 75; - public static readonly RULE_identifierSeq = 76; - public static readonly RULE_orderedIdentifierList = 77; - public static readonly RULE_orderedIdentifier = 78; - public static readonly RULE_identifierCommentList = 79; - public static readonly RULE_identifierComment = 80; - public static readonly RULE_relationPrimary = 81; - public static readonly RULE_inlineTable = 82; - public static readonly RULE_functionTable = 83; - public static readonly RULE_tableAlias = 84; - public static readonly RULE_rowFormat = 85; - public static readonly RULE_multipartIdentifierList = 86; - public static readonly RULE_multipartIdentifier = 87; - public static readonly RULE_tableIdentifier = 88; - public static readonly RULE_namedExpression = 89; - public static readonly RULE_namedExpressionSeq = 90; - public static readonly RULE_transformList = 91; - public static readonly RULE_transform = 92; - public static readonly RULE_transformArgument = 93; - public static readonly RULE_expression = 94; - public static readonly RULE_booleanExpression = 95; - public static readonly RULE_predicate = 96; - public static readonly RULE_valueExpression = 97; - public static readonly RULE_primaryExpression = 98; - public static readonly RULE_constant = 99; - public static readonly RULE_comparisonOperator = 100; - public static readonly RULE_arithmeticOperator = 101; - public static readonly RULE_predicateOperator = 102; - public static readonly RULE_booleanValue = 103; - public static readonly RULE_interval = 104; - public static readonly RULE_errorCapturingMultiUnitsInterval = 105; - public static readonly RULE_multiUnitsInterval = 106; - public static readonly RULE_errorCapturingUnitToUnitInterval = 107; - public static readonly RULE_unitToUnitInterval = 108; - public static readonly RULE_intervalValue = 109; - public static readonly RULE_colPosition = 110; - public static readonly RULE_dataType = 111; - public static readonly RULE_qualifiedColTypeWithPositionList = 112; - public static readonly RULE_qualifiedColTypeWithPosition = 113; - public static readonly RULE_colTypeList = 114; - public static readonly RULE_colType = 115; - public static readonly RULE_complexColTypeList = 116; - public static readonly RULE_complexColType = 117; - public static readonly RULE_whenClause = 118; - public static readonly RULE_windowClause = 119; - public static readonly RULE_namedWindow = 120; - public static readonly RULE_windowSpec = 121; - public static readonly RULE_windowFrame = 122; - public static readonly RULE_frameBound = 123; - public static readonly RULE_qualifiedNameList = 124; - public static readonly RULE_functionName = 125; - public static readonly RULE_qualifiedName = 126; - public static readonly RULE_errorCapturingIdentifier = 127; - public static readonly RULE_errorCapturingIdentifierExtra = 128; - public static readonly RULE_identifier = 129; - public static readonly RULE_strictIdentifier = 130; - public static readonly RULE_quotedIdentifier = 131; - public static readonly RULE_number = 132; - public static readonly RULE_alterColumnAction = 133; - public static readonly RULE_ansiNonReserved = 134; - public static readonly RULE_strictNonReserved = 135; - public static readonly RULE_nonReserved = 136; + public static readonly RULE_namespaces = 23; + public static readonly RULE_describeFuncName = 24; + public static readonly RULE_describeColName = 25; + public static readonly RULE_ctes = 26; + public static readonly RULE_namedQuery = 27; + public static readonly RULE_tableProvider = 28; + public static readonly RULE_createTableClauses = 29; + public static readonly RULE_propertyList = 30; + public static readonly RULE_property = 31; + public static readonly RULE_propertyKey = 32; + public static readonly RULE_propertyValue = 33; + public static readonly RULE_expressionPropertyList = 34; + public static readonly RULE_expressionProperty = 35; + public static readonly RULE_constantList = 36; + public static readonly RULE_nestedConstantList = 37; + public static readonly RULE_createFileFormat = 38; + public static readonly RULE_fileFormat = 39; + public static readonly RULE_storageHandler = 40; + public static readonly RULE_resource = 41; + public static readonly RULE_dmlStatementNoWith = 42; + public static readonly RULE_identifierReference = 43; + public static readonly RULE_queryOrganization = 44; + public static readonly RULE_multiInsertQueryBody = 45; + public static readonly RULE_queryTerm = 46; + public static readonly RULE_queryPrimary = 47; + public static readonly RULE_sortItem = 48; + public static readonly RULE_fromStatement = 49; + public static readonly RULE_fromStatementBody = 50; + public static readonly RULE_querySpecification = 51; + public static readonly RULE_transformClause = 52; + public static readonly RULE_selectClause = 53; + public static readonly RULE_setClause = 54; + public static readonly RULE_matchedClause = 55; + public static readonly RULE_notMatchedClause = 56; + public static readonly RULE_notMatchedBySourceClause = 57; + public static readonly RULE_matchedAction = 58; + public static readonly RULE_notMatchedAction = 59; + public static readonly RULE_notMatchedBySourceAction = 60; + public static readonly RULE_assignmentList = 61; + public static readonly RULE_assignment = 62; + public static readonly RULE_whereClause = 63; + public static readonly RULE_havingClause = 64; + public static readonly RULE_hint = 65; + public static readonly RULE_hintStatement = 66; + public static readonly RULE_fromClause = 67; + public static readonly RULE_temporalClause = 68; + public static readonly RULE_aggregationClause = 69; + public static readonly RULE_groupByClause = 70; + public static readonly RULE_groupingAnalytics = 71; + public static readonly RULE_groupingElement = 72; + public static readonly RULE_groupingSet = 73; + public static readonly RULE_pivotClause = 74; + public static readonly RULE_pivotColumn = 75; + public static readonly RULE_pivotValue = 76; + public static readonly RULE_unpivotClause = 77; + public static readonly RULE_unpivotNullClause = 78; + public static readonly RULE_unpivotOperator = 79; + public static readonly RULE_unpivotSingleValueColumnClause = 80; + public static readonly RULE_unpivotMultiValueColumnClause = 81; + public static readonly RULE_unpivotColumnSet = 82; + public static readonly RULE_unpivotValueColumn = 83; + public static readonly RULE_unpivotNameColumn = 84; + public static readonly RULE_unpivotColumnAndAlias = 85; + public static readonly RULE_unpivotColumn = 86; + public static readonly RULE_unpivotAlias = 87; + public static readonly RULE_lateralView = 88; + public static readonly RULE_setQuantifier = 89; + public static readonly RULE_relation = 90; + public static readonly RULE_relationExtension = 91; + public static readonly RULE_joinRelation = 92; + public static readonly RULE_joinType = 93; + public static readonly RULE_joinCriteria = 94; + public static readonly RULE_sample = 95; + public static readonly RULE_sampleMethod = 96; + public static readonly RULE_identifierList = 97; + public static readonly RULE_identifierSeq = 98; + public static readonly RULE_orderedIdentifierList = 99; + public static readonly RULE_orderedIdentifier = 100; + public static readonly RULE_identifierCommentList = 101; + public static readonly RULE_identifierComment = 102; + public static readonly RULE_relationPrimary = 103; + public static readonly RULE_inlineTable = 104; + public static readonly RULE_functionTableSubqueryArgument = 105; + public static readonly RULE_tableArgumentPartitioning = 106; + public static readonly RULE_functionTableNamedArgumentExpression = 107; + public static readonly RULE_functionTableReferenceArgument = 108; + public static readonly RULE_functionTableArgument = 109; + public static readonly RULE_functionTable = 110; + public static readonly RULE_tableAlias = 111; + public static readonly RULE_rowFormat = 112; + public static readonly RULE_multipartIdentifierList = 113; + public static readonly RULE_multipartIdentifier = 114; + public static readonly RULE_multipartIdentifierPropertyList = 115; + public static readonly RULE_multipartIdentifierProperty = 116; + public static readonly RULE_tableIdentifier = 117; + public static readonly RULE_functionIdentifier = 118; + public static readonly RULE_namedExpression = 119; + public static readonly RULE_namedExpressionSeq = 120; + public static readonly RULE_partitionFieldList = 121; + public static readonly RULE_partitionField = 122; + public static readonly RULE_transform = 123; + public static readonly RULE_transformArgument = 124; + public static readonly RULE_expression = 125; + public static readonly RULE_namedArgumentExpression = 126; + public static readonly RULE_functionArgument = 127; + public static readonly RULE_expressionSeq = 128; + public static readonly RULE_booleanExpression = 129; + public static readonly RULE_predicate = 130; + public static readonly RULE_valueExpression = 131; + public static readonly RULE_datetimeUnit = 132; + public static readonly RULE_primaryExpression = 133; + public static readonly RULE_literalType = 134; + public static readonly RULE_constant = 135; + public static readonly RULE_comparisonOperator = 136; + public static readonly RULE_arithmeticOperator = 137; + public static readonly RULE_predicateOperator = 138; + public static readonly RULE_booleanValue = 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_unitInMultiUnits = 146; + public static readonly RULE_unitInUnitToUnit = 147; + public static readonly RULE_colPosition = 148; + public static readonly RULE_type = 149; + public static readonly RULE_dataType = 150; + public static readonly RULE_qualifiedColTypeWithPositionList = 151; + public static readonly RULE_qualifiedColTypeWithPosition = 152; + public static readonly RULE_colDefinitionDescriptorWithPosition = 153; + public static readonly RULE_defaultExpression = 154; + public static readonly RULE_variableDefaultExpression = 155; + public static readonly RULE_colTypeList = 156; + public static readonly RULE_colType = 157; + public static readonly RULE_createOrReplaceTableColTypeList = 158; + public static readonly RULE_createOrReplaceTableColType = 159; + public static readonly RULE_colDefinitionOption = 160; + public static readonly RULE_generationExpression = 161; + public static readonly RULE_complexColTypeList = 162; + public static readonly RULE_complexColType = 163; + public static readonly RULE_whenClause = 164; + public static readonly RULE_windowClause = 165; + public static readonly RULE_namedWindow = 166; + public static readonly RULE_windowSpec = 167; + public static readonly RULE_windowFrame = 168; + public static readonly RULE_frameBound = 169; + public static readonly RULE_qualifiedNameList = 170; + public static readonly RULE_functionName = 171; + public static readonly RULE_qualifiedName = 172; + public static readonly RULE_errorCapturingIdentifier = 173; + public static readonly RULE_errorCapturingIdentifierExtra = 174; + public static readonly RULE_identifier = 175; + public static readonly RULE_strictIdentifier = 176; + public static readonly RULE_quotedIdentifier = 177; + public static readonly RULE_backQuotedIdentifier = 178; + public static readonly RULE_number = 179; + public static readonly RULE_alterColumnAction = 180; + public static readonly RULE_stringLit = 181; + public static readonly RULE_comment = 182; + public static readonly RULE_version = 183; + public static readonly RULE_ansiNonReserved = 184; + public static readonly RULE_strictNonReserved = 185; + public static readonly RULE_nonReserved = 186; // tslint:disable:no-trailing-whitespace public static readonly ruleNames: string[] = [ - "program", "singleStatement", "emptyStatement", "singleExpression", "singleTableIdentifier", - "singleMultipartIdentifier", "singleDataType", "singleTableSchema", "statement", - "configKey", "unsupportedHiveNativeCommands", "createTableHeader", "replaceTableHeader", - "bucketSpec", "skewSpec", "locationSpec", "commentSpec", "query", "insertInto", - "partitionSpecLocation", "partitionSpec", "partitionVal", "namespace", - "describeFuncName", "describeColName", "ctes", "namedQuery", "tableProvider", - "createTableClauses", "tablePropertyList", "tableProperty", "tablePropertyKey", - "tablePropertyValue", "constantList", "nestedConstantList", "createFileFormat", - "fileFormat", "storageHandler", "resource", "dmlStatementNoWith", "queryOrganization", - "multiInsertQueryBody", "queryTerm", "queryPrimary", "sortItem", "fromStatement", - "fromStatementBody", "querySpecification", "transformClause", "selectClause", - "setClause", "matchedClause", "notMatchedClause", "matchedAction", "notMatchedAction", + "program", "singleStatement", "tableIdentifierReference", "viewIdentifierReference", + "functionIdentifierReference", "namespaceIdentifierReference", "statement", + "timezone", "configKey", "configValue", "unsupportedHiveNativeCommands", + "createTableHeader", "replaceTableHeader", "bucketSpec", "skewSpec", "locationSpec", + "commentSpec", "query", "insertInto", "partitionSpecLocation", "partitionSpec", + "partitionVal", "namespace", "namespaces", "describeFuncName", "describeColName", + "ctes", "namedQuery", "tableProvider", "createTableClauses", "propertyList", + "property", "propertyKey", "propertyValue", "expressionPropertyList", + "expressionProperty", "constantList", "nestedConstantList", "createFileFormat", + "fileFormat", "storageHandler", "resource", "dmlStatementNoWith", "identifierReference", + "queryOrganization", "multiInsertQueryBody", "queryTerm", "queryPrimary", + "sortItem", "fromStatement", "fromStatementBody", "querySpecification", + "transformClause", "selectClause", "setClause", "matchedClause", "notMatchedClause", + "notMatchedBySourceClause", "matchedAction", "notMatchedAction", "notMatchedBySourceAction", "assignmentList", "assignment", "whereClause", "havingClause", "hint", - "hintStatement", "fromClause", "aggregationClause", "groupingSet", "pivotClause", - "pivotColumn", "pivotValue", "lateralView", "setQuantifier", "relation", - "joinRelation", "joinType", "joinCriteria", "sample", "sampleMethod", - "identifierList", "identifierSeq", "orderedIdentifierList", "orderedIdentifier", - "identifierCommentList", "identifierComment", "relationPrimary", "inlineTable", - "functionTable", "tableAlias", "rowFormat", "multipartIdentifierList", - "multipartIdentifier", "tableIdentifier", "namedExpression", "namedExpressionSeq", - "transformList", "transform", "transformArgument", "expression", "booleanExpression", - "predicate", "valueExpression", "primaryExpression", "constant", "comparisonOperator", - "arithmeticOperator", "predicateOperator", "booleanValue", "interval", - "errorCapturingMultiUnitsInterval", "multiUnitsInterval", "errorCapturingUnitToUnitInterval", - "unitToUnitInterval", "intervalValue", "colPosition", "dataType", "qualifiedColTypeWithPositionList", - "qualifiedColTypeWithPosition", "colTypeList", "colType", "complexColTypeList", - "complexColType", "whenClause", "windowClause", "namedWindow", "windowSpec", - "windowFrame", "frameBound", "qualifiedNameList", "functionName", "qualifiedName", - "errorCapturingIdentifier", "errorCapturingIdentifierExtra", "identifier", - "strictIdentifier", "quotedIdentifier", "number", "alterColumnAction", - "ansiNonReserved", "strictNonReserved", "nonReserved", + "hintStatement", "fromClause", "temporalClause", "aggregationClause", + "groupByClause", "groupingAnalytics", "groupingElement", "groupingSet", + "pivotClause", "pivotColumn", "pivotValue", "unpivotClause", "unpivotNullClause", + "unpivotOperator", "unpivotSingleValueColumnClause", "unpivotMultiValueColumnClause", + "unpivotColumnSet", "unpivotValueColumn", "unpivotNameColumn", "unpivotColumnAndAlias", + "unpivotColumn", "unpivotAlias", "lateralView", "setQuantifier", "relation", + "relationExtension", "joinRelation", "joinType", "joinCriteria", "sample", + "sampleMethod", "identifierList", "identifierSeq", "orderedIdentifierList", + "orderedIdentifier", "identifierCommentList", "identifierComment", "relationPrimary", + "inlineTable", "functionTableSubqueryArgument", "tableArgumentPartitioning", + "functionTableNamedArgumentExpression", "functionTableReferenceArgument", + "functionTableArgument", "functionTable", "tableAlias", "rowFormat", "multipartIdentifierList", + "multipartIdentifier", "multipartIdentifierPropertyList", "multipartIdentifierProperty", + "tableIdentifier", "functionIdentifier", "namedExpression", "namedExpressionSeq", + "partitionFieldList", "partitionField", "transform", "transformArgument", + "expression", "namedArgumentExpression", "functionArgument", "expressionSeq", + "booleanExpression", "predicate", "valueExpression", "datetimeUnit", "primaryExpression", + "literalType", "constant", "comparisonOperator", "arithmeticOperator", + "predicateOperator", "booleanValue", "interval", "errorCapturingMultiUnitsInterval", + "multiUnitsInterval", "errorCapturingUnitToUnitInterval", "unitToUnitInterval", + "intervalValue", "unitInMultiUnits", "unitInUnitToUnit", "colPosition", + "type", "dataType", "qualifiedColTypeWithPositionList", "qualifiedColTypeWithPosition", + "colDefinitionDescriptorWithPosition", "defaultExpression", "variableDefaultExpression", + "colTypeList", "colType", "createOrReplaceTableColTypeList", "createOrReplaceTableColType", + "colDefinitionOption", "generationExpression", "complexColTypeList", "complexColType", + "whenClause", "windowClause", "namedWindow", "windowSpec", "windowFrame", + "frameBound", "qualifiedNameList", "functionName", "qualifiedName", "errorCapturingIdentifier", + "errorCapturingIdentifierExtra", "identifier", "strictIdentifier", "quotedIdentifier", + "backQuotedIdentifier", "number", "alterColumnAction", "stringLit", "comment", + "version", "ansiNonReserved", "strictNonReserved", "nonReserved", ]; private static readonly _LITERAL_NAMES: Array = [ - undefined, "'('", "')'", "','", "'.'", "'/*+'", "'*/'", "'->'", "'['", - "']'", "':'", "'ADD'", "'AFTER'", "'ALL'", "'ALTER'", "'ANALYZE'", "'AND'", - "'ANTI'", "'ANY'", "'ARCHIVE'", "'ARRAY'", "'AS'", "'ASC'", "'AT'", "'AUTHORIZATION'", - "'BETWEEN'", "'BOTH'", "'BUCKET'", "'BUCKETS'", "'BY'", "'CACHE'", "'CASCADE'", - "'CASE'", "'CAST'", "'CHANGE'", "'CHECK'", "'CLEAR'", "'CLUSTER'", "'CLUSTERED'", - "'CODEGEN'", "'COLLATE'", "'COLLECTION'", "'COLUMN'", "'COLUMNS'", "'COMMENT'", - "'COMMIT'", "'COMPACT'", "'COMPACTIONS'", "'COMPUTE'", "'CONCATENATE'", - "'CONSTRAINT'", "'COST'", "'CREATE'", "'CROSS'", "'CUBE'", "'CURRENT'", - "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", "'CURRENT_USER'", - "'DATA'", "'DATABASE'", undefined, "'DBPROPERTIES'", "'DEFINED'", "'DELETE'", - "'DELIMITED'", "'DESC'", "'DESCRIBE'", "'DFS'", "'DIRECTORIES'", "'DIRECTORY'", - "'DISTINCT'", "'DISTRIBUTE'", "'DIV'", "'DROP'", "'ELSE'", "'END'", "'ESCAPE'", - "'ESCAPED'", "'EXCEPT'", "'EXCHANGE'", "'EXISTS'", "'EXPLAIN'", "'EXPORT'", - "'EXTENDED'", "'EXTERNAL'", "'EXTRACT'", "'FALSE'", "'FETCH'", "'FIELDS'", - "'FILTER'", "'FILEFORMAT'", "'FIRST'", "'FOLLOWING'", "'FOR'", "'FOREIGN'", + undefined, "';'", "'('", "')'", "','", "'.'", "'['", "']'", "'ADD'", "'AFTER'", + "'ALL'", "'ALTER'", "'ALWAYS'", "'ANALYZE'", "'AND'", "'ANTI'", "'ANY'", + "'ANY_VALUE'", "'ARCHIVE'", "'ARRAY'", "'AS'", "'ASC'", "'AT'", "'AUTHORIZATION'", + "'BETWEEN'", "'BIGINT'", "'BINARY'", "'BOOLEAN'", "'BOTH'", "'BUCKET'", + "'BUCKETS'", "'BY'", "'BYTE'", "'CACHE'", "'CASCADE'", "'CASE'", "'CAST'", + "'CATALOG'", "'CATALOGS'", "'CHANGE'", "'CHAR'", "'CHARACTER'", "'CHECK'", + "'CLEAR'", "'CLUSTER'", "'CLUSTERED'", "'CODEGEN'", "'COLLATE'", "'COLLECTION'", + "'COLUMN'", "'COLUMNS'", "'COMMENT'", "'COMMIT'", "'COMPACT'", "'COMPACTIONS'", + "'COMPUTE'", "'CONCATENATE'", "'CONSTRAINT'", "'COST'", "'CREATE'", "'CROSS'", + "'CUBE'", "'CURRENT'", "'CURRENT_DATE'", "'CURRENT_TIME'", "'CURRENT_TIMESTAMP'", + "'CURRENT_USER'", "'DAY'", "'DAYS'", "'DAYOFYEAR'", "'DATA'", "'DATE'", + "'DATABASE'", "'DATABASES'", "'DATEADD'", "'DATE_ADD'", "'DATEDIFF'", + "'DATE_DIFF'", "'DBPROPERTIES'", "'DEC'", "'DECIMAL'", "'DECLARE'", "'DEFAULT'", + "'DEFINED'", "'DELETE'", "'DELIMITED'", "'DESC'", "'DESCRIBE'", "'DFS'", + "'DIRECTORIES'", "'DIRECTORY'", "'DISTINCT'", "'DISTRIBUTE'", "'DIV'", + "'DOUBLE'", "'DROP'", "'ELSE'", "'END'", "'ESCAPE'", "'ESCAPED'", "'EXCEPT'", + "'EXCHANGE'", "'EXCLUDE'", "'EXISTS'", "'EXPLAIN'", "'EXPORT'", "'EXTENDED'", + "'EXTERNAL'", "'EXTRACT'", "'FALSE'", "'FETCH'", "'FIELDS'", "'FILTER'", + "'FILEFORMAT'", "'FIRST'", "'FLOAT'", "'FOLLOWING'", "'FOR'", "'FOREIGN'", "'FORMAT'", "'FORMATTED'", "'FROM'", "'FULL'", "'FUNCTION'", "'FUNCTIONS'", - "'GLOBAL'", "'GRANT'", "'GROUP'", "'GROUPING'", "'HAVING'", "'IF'", "'IGNORE'", - "'IMPORT'", "'IN'", "'INDEX'", "'INDEXES'", "'INNER'", "'INPATH'", "'INPUTFORMAT'", - "'INSERT'", "'INTERSECT'", "'INTERVAL'", "'INTO'", "'IS'", "'ITEMS'", - "'JOIN'", "'KEYS'", "'LAST'", "'LATERAL'", "'LAZY'", "'LEADING'", "'LEFT'", - "'LIKE'", "'LIMIT'", "'LINES'", "'LIST'", "'LOAD'", "'LOCAL'", "'LOCATION'", - "'LOCK'", "'LOCKS'", "'LOGICAL'", "'MACRO'", "'MAP'", "'MATCHED'", "'MERGE'", - "'MSCK'", "'NAMESPACE'", "'NAMESPACES'", "'NATURAL'", "'NO'", undefined, - "'NULL'", "'NULLS'", "'OF'", "'ON'", "'ONLY'", "'OPTION'", "'OPTIONS'", + "'GENERATED'", "'GLOBAL'", "'GRANT'", "'GROUP'", "'GROUPING'", "'HAVING'", + "'X'", "'HOUR'", "'HOURS'", "'IDENTIFIER'", "'IF'", "'IGNORE'", "'IMPORT'", + "'IN'", "'INCLUDE'", "'INDEX'", "'INDEXES'", "'INNER'", "'INPATH'", "'INPUTFORMAT'", + "'INSERT'", "'INTERSECT'", "'INTERVAL'", "'INT'", "'INTEGER'", "'INTO'", + "'IS'", "'ITEMS'", "'JOIN'", "'KEYS'", "'LAST'", "'LATERAL'", "'LAZY'", + "'LEADING'", "'LEFT'", "'LIKE'", "'ILIKE'", "'LIMIT'", "'LINES'", "'LIST'", + "'LOAD'", "'LOCAL'", "'LOCATION'", "'LOCK'", "'LOCKS'", "'LOGICAL'", "'LONG'", + "'MACRO'", "'MAP'", "'MATCHED'", "'MERGE'", "'MICROSECOND'", "'MICROSECONDS'", + "'MILLISECOND'", "'MILLISECONDS'", "'MINUTE'", "'MINUTES'", "'MONTH'", + "'MONTHS'", "'MSCK'", "'NAME'", "'NAMESPACE'", "'NAMESPACES'", "'NANOSECOND'", + "'NANOSECONDS'", "'NATURAL'", "'NO'", undefined, "'NULL'", "'NULLS'", + "'NUMERIC'", "'OF'", "'OFFSET'", "'ON'", "'ONLY'", "'OPTION'", "'OPTIONS'", "'OR'", "'ORDER'", "'OUT'", "'OUTER'", "'OUTPUTFORMAT'", "'OVER'", "'OVERLAPS'", "'OVERLAY'", "'OVERWRITE'", "'PARTITION'", "'PARTITIONED'", "'PARTITIONS'", - "'PERCENT'", "'PIVOT'", "'PLACING'", "'POSITION'", "'PRECEDING'", "'PRIMARY'", - "'PRINCIPALS'", "'PROPERTIES'", "'PURGE'", "'QUERY'", "'RANGE'", "'RECORDREADER'", + "'PERCENTILE_CONT'", "'PERCENTILE_DISC'", "'PERCENT'", "'PIVOT'", "'PLACING'", + "'POSITION'", "'PRECEDING'", "'PRIMARY'", "'PRINCIPALS'", "'PROPERTIES'", + "'PURGE'", "'QUARTER'", "'QUERY'", "'RANGE'", "'REAL'", "'RECORDREADER'", "'RECORDWRITER'", "'RECOVER'", "'REDUCE'", "'REFERENCES'", "'REFRESH'", - "'RENAME'", "'REPAIR'", "'REPLACE'", "'RESET'", "'RESTRICT'", "'REVOKE'", - "'RIGHT'", undefined, "'ROLE'", "'ROLES'", "'ROLLBACK'", "'ROLLUP'", "'ROW'", - "'ROWS'", "'SCHEMA'", "'SELECT'", "'SEMI'", "'SEPARATED'", "'SERDE'", - "'SERDEPROPERTIES'", "'SESSION_USER'", "'SET'", "'MINUS'", "'SETS'", "'SHOW'", - "'SKEWED'", "'SOME'", "'SORT'", "'SORTED'", "'START'", "'STATISTICS'", - "'STORED'", "'STRATIFY'", "'STRUCT'", "'SUBSTR'", "'SUBSTRING'", "'TABLE'", - "'TABLES'", "'TABLESAMPLE'", "'TBLPROPERTIES'", undefined, "'TERMINATED'", - "'THEN'", "'TIME'", "'TO'", "'TOUCH'", "'TRAILING'", "'TRANSACTION'", - "'TRANSACTIONS'", "'TRANSFORM'", "'TRIM'", "'TRUE'", "'TRUNCATE'", "'TYPE'", - "'UNARCHIVE'", "'UNBOUNDED'", "'UNCACHE'", "'UNION'", "'UNIQUE'", "'UNKNOWN'", - "'UNLOCK'", "'UNSET'", "'UPDATE'", "'USE'", "'USER'", "'USING'", "'VALUES'", - "'VIEW'", "'VIEWS'", "'WHEN'", "'WHERE'", "'WINDOW'", "'WITH'", "'ZONE'", - undefined, "'<=>'", "'<>'", "'!='", "'<'", undefined, "'>'", undefined, - "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "'&'", "'|'", "'||'", "'^'", - "';'", + "'RENAME'", "'REPAIR'", "'REPEATABLE'", "'REPLACE'", "'RESET'", "'RESPECT'", + "'RESTRICT'", "'REVOKE'", "'RIGHT'", undefined, "'ROLE'", "'ROLES'", "'ROLLBACK'", + "'ROLLUP'", "'ROW'", "'ROWS'", "'SECOND'", "'SECONDS'", "'SCHEMA'", "'SCHEMAS'", + "'SELECT'", "'SEMI'", "'SEPARATED'", "'SERDE'", "'SERDEPROPERTIES'", "'SESSION_USER'", + "'SET'", "'MINUS'", "'SETS'", "'SHORT'", "'SHOW'", "'SINGLE'", "'SKEWED'", + "'SMALLINT'", "'SOME'", "'SORT'", "'SORTED'", "'SOURCE'", "'START'", "'STATISTICS'", + "'STORED'", "'STRATIFY'", "'STRING'", "'STRUCT'", "'SUBSTR'", "'SUBSTRING'", + "'SYNC'", "'SYSTEM_TIME'", "'SYSTEM_VERSION'", "'TABLE'", "'TABLES'", + "'TABLESAMPLE'", "'TARGET'", "'TBLPROPERTIES'", undefined, "'TERMINATED'", + "'THEN'", "'TIME'", "'TIMEDIFF'", "'TIMESTAMP'", "'TIMESTAMP_LTZ'", "'TIMESTAMP_NTZ'", + "'TIMESTAMPADD'", "'TIMESTAMPDIFF'", "'TINYINT'", "'TO'", "'TOUCH'", "'TRAILING'", + "'TRANSACTION'", "'TRANSACTIONS'", "'TRANSFORM'", "'TRIM'", "'TRUE'", + "'TRUNCATE'", "'TRY_CAST'", "'TYPE'", "'UNARCHIVE'", "'UNBOUNDED'", "'UNCACHE'", + "'UNION'", "'UNIQUE'", "'UNKNOWN'", "'UNLOCK'", "'UNPIVOT'", "'UNSET'", + "'UPDATE'", "'USE'", "'USER'", "'USING'", "'VALUES'", "'VARCHAR'", "'VAR'", + "'VARIABLE'", "'VERSION'", "'VIEW'", "'VIEWS'", "'VOID'", "'WEEK'", "'WEEKS'", + "'WHEN'", "'WHERE'", "'WINDOW'", "'WITH'", "'WITHIN'", "'YEAR'", "'YEARS'", + "'ZONE'", undefined, "'<=>'", "'<>'", "'!='", "'<'", undefined, "'>'", + undefined, "'+'", "'-'", "'*'", "'/'", "'%'", "'~'", "'&'", "'|'", "'||'", + "'^'", "':'", "'->'", "'=>'", "'/*+'", "'*/'", "'?'", ]; private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, "ADD", "AFTER", "ALL", "ALTER", - "ANALYZE", "AND", "ANTI", "ANY", "ARCHIVE", "ARRAY", "AS", "ASC", "AT", - "AUTHORIZATION", "BETWEEN", "BOTH", "BUCKET", "BUCKETS", "BY", "CACHE", - "CASCADE", "CASE", "CAST", "CHANGE", "CHECK", "CLEAR", "CLUSTER", "CLUSTERED", - "CODEGEN", "COLLATE", "COLLECTION", "COLUMN", "COLUMNS", "COMMENT", "COMMIT", - "COMPACT", "COMPACTIONS", "COMPUTE", "CONCATENATE", "CONSTRAINT", "COST", - "CREATE", "CROSS", "CUBE", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", - "CURRENT_TIMESTAMP", "CURRENT_USER", "DATA", "DATABASE", "DATABASES", - "DBPROPERTIES", "DEFINED", "DELETE", "DELIMITED", "DESC", "DESCRIBE", - "DFS", "DIRECTORIES", "DIRECTORY", "DISTINCT", "DISTRIBUTE", "DIV", "DROP", - "ELSE", "END", "ESCAPE", "ESCAPED", "EXCEPT", "EXCHANGE", "EXISTS", "EXPLAIN", - "EXPORT", "EXTENDED", "EXTERNAL", "EXTRACT", "FALSE", "FETCH", "FIELDS", - "FILTER", "FILEFORMAT", "FIRST", "FOLLOWING", "FOR", "FOREIGN", "FORMAT", - "FORMATTED", "FROM", "FULL", "FUNCTION", "FUNCTIONS", "GLOBAL", "GRANT", - "GROUP", "GROUPING", "HAVING", "IF", "IGNORE", "IMPORT", "IN", "INDEX", - "INDEXES", "INNER", "INPATH", "INPUTFORMAT", "INSERT", "INTERSECT", "INTERVAL", - "INTO", "IS", "ITEMS", "JOIN", "KEYS", "LAST", "LATERAL", "LAZY", "LEADING", - "LEFT", "LIKE", "LIMIT", "LINES", "LIST", "LOAD", "LOCAL", "LOCATION", - "LOCK", "LOCKS", "LOGICAL", "MACRO", "MAP", "MATCHED", "MERGE", "MSCK", - "NAMESPACE", "NAMESPACES", "NATURAL", "NO", "NOT", "NULL", "NULLS", "OF", - "ON", "ONLY", "OPTION", "OPTIONS", "OR", "ORDER", "OUT", "OUTER", "OUTPUTFORMAT", - "OVER", "OVERLAPS", "OVERLAY", "OVERWRITE", "PARTITION", "PARTITIONED", - "PARTITIONS", "PERCENTLIT", "PIVOT", "PLACING", "POSITION", "PRECEDING", - "PRIMARY", "PRINCIPALS", "PROPERTIES", "PURGE", "QUERY", "RANGE", "RECORDREADER", - "RECORDWRITER", "RECOVER", "REDUCE", "REFERENCES", "REFRESH", "RENAME", - "REPAIR", "REPLACE", "RESET", "RESTRICT", "REVOKE", "RIGHT", "RLIKE", - "ROLE", "ROLES", "ROLLBACK", "ROLLUP", "ROW", "ROWS", "SCHEMA", "SELECT", - "SEMI", "SEPARATED", "SERDE", "SERDEPROPERTIES", "SESSION_USER", "SET", - "SETMINUS", "SETS", "SHOW", "SKEWED", "SOME", "SORT", "SORTED", "START", - "STATISTICS", "STORED", "STRATIFY", "STRUCT", "SUBSTR", "SUBSTRING", "TABLE", - "TABLES", "TABLESAMPLE", "TBLPROPERTIES", "TEMPORARY", "TERMINATED", "THEN", - "TIME", "TO", "TOUCH", "TRAILING", "TRANSACTION", "TRANSACTIONS", "TRANSFORM", - "TRIM", "TRUE", "TRUNCATE", "TYPE", "UNARCHIVE", "UNBOUNDED", "UNCACHE", - "UNION", "UNIQUE", "UNKNOWN", "UNLOCK", "UNSET", "UPDATE", "USE", "USER", - "USING", "VALUES", "VIEW", "VIEWS", "WHEN", "WHERE", "WINDOW", "WITH", - "ZONE", "EQ", "NSEQ", "NEQ", "NEQJ", "LT", "LTE", "GT", "GTE", "PLUS", - "MINUS", "ASTERISK", "SLASH", "PERCENT", "TILDE", "AMPERSAND", "PIPE", - "CONCAT_PIPE", "HAT", "SEMICOLON", "STRING", "BIGINT_LITERAL", "SMALLINT_LITERAL", - "TINYINT_LITERAL", "INTEGER_VALUE", "EXPONENT_VALUE", "DECIMAL_VALUE", - "FLOAT_LITERAL", "DOUBLE_LITERAL", "BIGDECIMAL_LITERAL", "IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "CUSTOM_VARS", "SIMPLE_COMMENT", "BRACKETED_COMMENT", - "WS", "UNRECOGNIZED", + undefined, "SEMICOLON", "LEFT_PAREN", "RIGHT_PAREN", "COMMA", "DOT", "LEFT_BRACKET", + "RIGHT_BRACKET", "KW_ADD", "KW_AFTER", "KW_ALL", "KW_ALTER", "KW_ALWAYS", + "KW_ANALYZE", "KW_AND", "KW_ANTI", "KW_ANY", "KW_ANY_VALUE", "KW_ARCHIVE", + "KW_ARRAY", "KW_AS", "KW_ASC", "KW_AT", "KW_AUTHORIZATION", "KW_BETWEEN", + "KW_BIGINT", "KW_BINARY", "KW_BOOLEAN", "KW_BOTH", "KW_BUCKET", "KW_BUCKETS", + "KW_BY", "KW_BYTE", "KW_CACHE", "KW_CASCADE", "KW_CASE", "KW_CAST", "KW_CATALOG", + "KW_CATALOGS", "KW_CHANGE", "KW_CHAR", "KW_CHARACTER", "KW_CHECK", "KW_CLEAR", + "KW_CLUSTER", "KW_CLUSTERED", "KW_CODEGEN", "KW_COLLATE", "KW_COLLECTION", + "KW_COLUMN", "KW_COLUMNS", "KW_COMMENT", "KW_COMMIT", "KW_COMPACT", "KW_COMPACTIONS", + "KW_COMPUTE", "KW_CONCATENATE", "KW_CONSTRAINT", "KW_COST", "KW_CREATE", + "KW_CROSS", "KW_CUBE", "KW_CURRENT", "KW_CURRENT_DATE", "KW_CURRENT_TIME", + "KW_CURRENT_TIMESTAMP", "KW_CURRENT_USER", "KW_DAY", "KW_DAYS", "KW_DAYOFYEAR", + "KW_DATA", "KW_DATE", "KW_DATABASE", "KW_DATABASES", "KW_DATEADD", "KW_DATE_ADD", + "KW_DATEDIFF", "KW_DATE_DIFF", "KW_DBPROPERTIES", "KW_DEC", "KW_DECIMAL", + "KW_DECLARE", "KW_DEFAULT", "KW_DEFINED", "KW_DELETE", "KW_DELIMITED", + "KW_DESC", "KW_DESCRIBE", "KW_DFS", "KW_DIRECTORIES", "KW_DIRECTORY", + "KW_DISTINCT", "KW_DISTRIBUTE", "KW_DIV", "KW_DOUBLE", "KW_DROP", "KW_ELSE", + "KW_END", "KW_ESCAPE", "KW_ESCAPED", "KW_EXCEPT", "KW_EXCHANGE", "KW_EXCLUDE", + "KW_EXISTS", "KW_EXPLAIN", "KW_EXPORT", "KW_EXTENDED", "KW_EXTERNAL", + "KW_EXTRACT", "KW_FALSE", "KW_FETCH", "KW_FIELDS", "KW_FILTER", "KW_FILEFORMAT", + "KW_FIRST", "KW_FLOAT", "KW_FOLLOWING", "KW_FOR", "KW_FOREIGN", "KW_FORMAT", + "KW_FORMATTED", "KW_FROM", "KW_FULL", "KW_FUNCTION", "KW_FUNCTIONS", "KW_GENERATED", + "KW_GLOBAL", "KW_GRANT", "KW_GROUP", "KW_GROUPING", "KW_HAVING", "KW_BINARY_HEX", + "KW_HOUR", "KW_HOURS", "KW_IDENTIFIER_KW", "KW_IF", "KW_IGNORE", "KW_IMPORT", + "KW_IN", "KW_INCLUDE", "KW_INDEX", "KW_INDEXES", "KW_INNER", "KW_INPATH", + "KW_INPUTFORMAT", "KW_INSERT", "KW_INTERSECT", "KW_INTERVAL", "KW_INT", + "KW_INTEGER", "KW_INTO", "KW_IS", "KW_ITEMS", "KW_JOIN", "KW_KEYS", "KW_LAST", + "KW_LATERAL", "KW_LAZY", "KW_LEADING", "KW_LEFT", "KW_LIKE", "KW_ILIKE", + "KW_LIMIT", "KW_LINES", "KW_LIST", "KW_LOAD", "KW_LOCAL", "KW_LOCATION", + "KW_LOCK", "KW_LOCKS", "KW_LOGICAL", "KW_LONG", "KW_MACRO", "KW_MAP", + "KW_MATCHED", "KW_MERGE", "KW_MICROSECOND", "KW_MICROSECONDS", "KW_MILLISECOND", + "KW_MILLISECONDS", "KW_MINUTE", "KW_MINUTES", "KW_MONTH", "KW_MONTHS", + "KW_MSCK", "KW_NAME", "KW_NAMESPACE", "KW_NAMESPACES", "KW_NANOSECOND", + "KW_NANOSECONDS", "KW_NATURAL", "KW_NO", "KW_NOT", "KW_NULL", "KW_NULLS", + "KW_NUMERIC", "KW_OF", "KW_OFFSET", "KW_ON", "KW_ONLY", "KW_OPTION", "KW_OPTIONS", + "KW_OR", "KW_ORDER", "KW_OUT", "KW_OUTER", "KW_OUTPUTFORMAT", "KW_OVER", + "KW_OVERLAPS", "KW_OVERLAY", "KW_OVERWRITE", "KW_PARTITION", "KW_PARTITIONED", + "KW_PARTITIONS", "KW_PERCENTILE_CONT", "KW_PERCENTILE_DISC", "KW_PERCENTLIT", + "KW_PIVOT", "KW_PLACING", "KW_POSITION", "KW_PRECEDING", "KW_PRIMARY", + "KW_PRINCIPALS", "KW_PROPERTIES", "KW_PURGE", "KW_QUARTER", "KW_QUERY", + "KW_RANGE", "KW_REAL", "KW_RECORDREADER", "KW_RECORDWRITER", "KW_RECOVER", + "KW_REDUCE", "KW_REFERENCES", "KW_REFRESH", "KW_RENAME", "KW_REPAIR", + "KW_REPEATABLE", "KW_REPLACE", "KW_RESET", "KW_RESPECT", "KW_RESTRICT", + "KW_REVOKE", "KW_RIGHT", "KW_RLIKE", "KW_ROLE", "KW_ROLES", "KW_ROLLBACK", + "KW_ROLLUP", "KW_ROW", "KW_ROWS", "KW_SECOND", "KW_SECONDS", "KW_SCHEMA", + "KW_SCHEMAS", "KW_SELECT", "KW_SEMI", "KW_SEPARATED", "KW_SERDE", "KW_SERDEPROPERTIES", + "KW_SESSION_USER", "KW_SET", "KW_SETMINUS", "KW_SETS", "KW_SHORT", "KW_SHOW", + "KW_SINGLE", "KW_SKEWED", "KW_SMALLINT", "KW_SOME", "KW_SORT", "KW_SORTED", + "KW_SOURCE", "KW_START", "KW_STATISTICS", "KW_STORED", "KW_STRATIFY", + "KW_STRING", "KW_STRUCT", "KW_SUBSTR", "KW_SUBSTRING", "KW_SYNC", "KW_SYSTEM_TIME", + "KW_SYSTEM_VERSION", "KW_TABLE", "KW_TABLES", "KW_TABLESAMPLE", "KW_TARGET", + "KW_TBLPROPERTIES", "KW_TEMPORARY", "KW_TERMINATED", "KW_THEN", "KW_TIME", + "KW_TIMEDIFF", "KW_TIMESTAMP", "KW_TIMESTAMP_LTZ", "KW_TIMESTAMP_NTZ", + "KW_TIMESTAMPADD", "KW_TIMESTAMPDIFF", "KW_TINYINT", "KW_TO", "KW_TOUCH", + "KW_TRAILING", "KW_TRANSACTION", "KW_TRANSACTIONS", "KW_TRANSFORM", "KW_TRIM", + "KW_TRUE", "KW_TRUNCATE", "KW_TRY_CAST", "KW_TYPE", "KW_UNARCHIVE", "KW_UNBOUNDED", + "KW_UNCACHE", "KW_UNION", "KW_UNIQUE", "KW_UNKNOWN", "KW_UNLOCK", "KW_UNPIVOT", + "KW_UNSET", "KW_UPDATE", "KW_USE", "KW_USER", "KW_USING", "KW_VALUES", + "KW_VARCHAR", "KW_VAR", "KW_VARIABLE", "KW_VERSION", "KW_VIEW", "KW_VIEWS", + "KW_VOID", "KW_WEEK", "KW_WEEKS", "KW_WHEN", "KW_WHERE", "KW_WINDOW", + "KW_WITH", "KW_WITHIN", "KW_YEAR", "KW_YEARS", "KW_ZONE", "EQ", "NSEQ", + "NEQ", "NEQJ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", "TILDE", "AMPERSAND", "PIPE", "CONCAT_PIPE", "HAT", + "COLON", "ARROW", "FAT_ARROW", "HENT_START", "HENT_END", "QUESTION", "STRING_LITERAL", + "DOUBLEQUOTED_STRING", "BIGINT_LITERAL", "SMALLINT_LITERAL", "TINYINT_LITERAL", + "INTEGER_VALUE", "EXPONENT_VALUE", "DECIMAL_VALUE", "FLOAT_LITERAL", "DOUBLE_LITERAL", + "BIGDECIMAL_LITERAL", "IDENTIFIER", "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", + "BRACKETED_COMMENT", "WS", "UNRECOGNIZED", ]; public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(SparkSqlParser._LITERAL_NAMES, SparkSqlParser._SYMBOLIC_NAMES, []); @@ -596,7 +786,7 @@ export class SparkSqlParser extends Parser { // tslint:enable:no-trailing-whitespace // @Override - public get grammarFileName(): string { return "SparkSql.g4"; } + public get grammarFileName(): string { return "SparkSqlParser.g4"; } // @Override public get ruleNames(): string[] { return SparkSqlParser.ruleNames; } @@ -609,20 +799,27 @@ export class SparkSqlParser extends Parser { } - /** - * When false, INTERSECT is given the greater precedence over the other set - * operations (UNION, EXCEPT and MINUS) as per the SQL standard. - */ - public legacy_setops_precedence_enbled = false; - /** - * When false, a literal with an exponent would be converted into - * double type rather than decimal type. - */ - public legacy_exponent_literal_as_decimal_enabled = false; - /** - * When true, the behavior of keywords follows ANSI SQL standard. - */ - public SQL_standard_keyword_behavior = false; + /** + * When false, KW_INTERSECT is given the greater precedence over the other set + * operations (KW_UNION, KW_EXCEPT and MINUS) as per the SQL standard. + */ + public legacy_setops_precedence_enabled = false; + + /** + * When false, a literal with an exponent would be converted into + * double type rather than decimal type. + */ + public legacy_exponent_literal_as_decimal_enabled = false; + + /** + * When true, the behavior of keywords follows ANSI SQL standard. + */ + public SQL_standard_keyword_behavior = false; + + /** + * When true, double quoted literals are identifiers rather than STRINGs. + */ + public double_quoted_identifiers = false; constructor(input: TokenStream) { super(input); @@ -632,118 +829,26 @@ export class SparkSqlParser extends Parser { public program(): ProgramContext { let _localctx: ProgramContext = new ProgramContext(this._ctx, this.state); this.enterRule(_localctx, 0, SparkSqlParser.RULE_program); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 274; - this.singleStatement(); - this.state = 275; - this.match(SparkSqlParser.EOF); - } - } - 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 singleStatement(): SingleStatementContext { - let _localctx: SingleStatementContext = new SingleStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 2, SparkSqlParser.RULE_singleStatement); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 284; + this.state = 377; this._errHandler.sync(this); _la = this._input.LA(1); - while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << SparkSqlParser.T__0) | (1 << SparkSqlParser.ADD) | (1 << SparkSqlParser.ALTER) | (1 << SparkSqlParser.ANALYZE) | (1 << SparkSqlParser.CACHE))) !== 0) || ((((_la - 36)) & ~0x1F) === 0 && ((1 << (_la - 36)) & ((1 << (SparkSqlParser.CLEAR - 36)) | (1 << (SparkSqlParser.COMMENT - 36)) | (1 << (SparkSqlParser.COMMIT - 36)) | (1 << (SparkSqlParser.CREATE - 36)) | (1 << (SparkSqlParser.DELETE - 36)) | (1 << (SparkSqlParser.DESC - 36)))) !== 0) || ((((_la - 68)) & ~0x1F) === 0 && ((1 << (_la - 68)) & ((1 << (SparkSqlParser.DESCRIBE - 68)) | (1 << (SparkSqlParser.DFS - 68)) | (1 << (SparkSqlParser.DROP - 68)) | (1 << (SparkSqlParser.EXPLAIN - 68)) | (1 << (SparkSqlParser.EXPORT - 68)) | (1 << (SparkSqlParser.FROM - 68)))) !== 0) || ((((_la - 104)) & ~0x1F) === 0 && ((1 << (_la - 104)) & ((1 << (SparkSqlParser.GRANT - 104)) | (1 << (SparkSqlParser.IMPORT - 104)) | (1 << (SparkSqlParser.INSERT - 104)) | (1 << (SparkSqlParser.LIST - 104)) | (1 << (SparkSqlParser.LOAD - 104)))) !== 0) || ((((_la - 137)) & ~0x1F) === 0 && ((1 << (_la - 137)) & ((1 << (SparkSqlParser.LOCK - 137)) | (1 << (SparkSqlParser.MAP - 137)) | (1 << (SparkSqlParser.MERGE - 137)) | (1 << (SparkSqlParser.MSCK - 137)))) !== 0) || ((((_la - 183)) & ~0x1F) === 0 && ((1 << (_la - 183)) & ((1 << (SparkSqlParser.REDUCE - 183)) | (1 << (SparkSqlParser.REFRESH - 183)) | (1 << (SparkSqlParser.REPLACE - 183)) | (1 << (SparkSqlParser.RESET - 183)) | (1 << (SparkSqlParser.REVOKE - 183)) | (1 << (SparkSqlParser.ROLLBACK - 183)) | (1 << (SparkSqlParser.SELECT - 183)) | (1 << (SparkSqlParser.SET - 183)) | (1 << (SparkSqlParser.SHOW - 183)))) !== 0) || ((((_la - 215)) & ~0x1F) === 0 && ((1 << (_la - 215)) & ((1 << (SparkSqlParser.START - 215)) | (1 << (SparkSqlParser.TABLE - 215)) | (1 << (SparkSqlParser.TRUNCATE - 215)) | (1 << (SparkSqlParser.UNCACHE - 215)) | (1 << (SparkSqlParser.UNLOCK - 215)))) !== 0) || ((((_la - 248)) & ~0x1F) === 0 && ((1 << (_la - 248)) & ((1 << (SparkSqlParser.UPDATE - 248)) | (1 << (SparkSqlParser.USE - 248)) | (1 << (SparkSqlParser.VALUES - 248)) | (1 << (SparkSqlParser.WITH - 248)) | (1 << (SparkSqlParser.SEMICOLON - 248)))) !== 0)) { + while ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << SparkSqlParser.LEFT_PAREN) | (1 << SparkSqlParser.KW_ADD) | (1 << SparkSqlParser.KW_ALTER) | (1 << SparkSqlParser.KW_ANALYZE))) !== 0) || ((((_la - 33)) & ~0x1F) === 0 && ((1 << (_la - 33)) & ((1 << (SparkSqlParser.KW_CACHE - 33)) | (1 << (SparkSqlParser.KW_CLEAR - 33)) | (1 << (SparkSqlParser.KW_COMMENT - 33)) | (1 << (SparkSqlParser.KW_COMMIT - 33)) | (1 << (SparkSqlParser.KW_CREATE - 33)))) !== 0) || ((((_la - 81)) & ~0x1F) === 0 && ((1 << (_la - 81)) & ((1 << (SparkSqlParser.KW_DECLARE - 81)) | (1 << (SparkSqlParser.KW_DELETE - 81)) | (1 << (SparkSqlParser.KW_DESC - 81)) | (1 << (SparkSqlParser.KW_DESCRIBE - 81)) | (1 << (SparkSqlParser.KW_DFS - 81)) | (1 << (SparkSqlParser.KW_DROP - 81)) | (1 << (SparkSqlParser.KW_EXPLAIN - 81)) | (1 << (SparkSqlParser.KW_EXPORT - 81)))) !== 0) || ((((_la - 121)) & ~0x1F) === 0 && ((1 << (_la - 121)) & ((1 << (SparkSqlParser.KW_FROM - 121)) | (1 << (SparkSqlParser.KW_GRANT - 121)) | (1 << (SparkSqlParser.KW_IMPORT - 121)) | (1 << (SparkSqlParser.KW_INSERT - 121)))) !== 0) || ((((_la - 164)) & ~0x1F) === 0 && ((1 << (_la - 164)) & ((1 << (SparkSqlParser.KW_LIST - 164)) | (1 << (SparkSqlParser.KW_LOAD - 164)) | (1 << (SparkSqlParser.KW_LOCK - 164)) | (1 << (SparkSqlParser.KW_MAP - 164)) | (1 << (SparkSqlParser.KW_MERGE - 164)) | (1 << (SparkSqlParser.KW_MSCK - 164)))) !== 0) || ((((_la - 232)) & ~0x1F) === 0 && ((1 << (_la - 232)) & ((1 << (SparkSqlParser.KW_REDUCE - 232)) | (1 << (SparkSqlParser.KW_REFRESH - 232)) | (1 << (SparkSqlParser.KW_REPAIR - 232)) | (1 << (SparkSqlParser.KW_REPLACE - 232)) | (1 << (SparkSqlParser.KW_RESET - 232)) | (1 << (SparkSqlParser.KW_REVOKE - 232)) | (1 << (SparkSqlParser.KW_ROLLBACK - 232)) | (1 << (SparkSqlParser.KW_SELECT - 232)) | (1 << (SparkSqlParser.KW_SET - 232)))) !== 0) || ((((_la - 265)) & ~0x1F) === 0 && ((1 << (_la - 265)) & ((1 << (SparkSqlParser.KW_SHOW - 265)) | (1 << (SparkSqlParser.KW_START - 265)) | (1 << (SparkSqlParser.KW_TABLE - 265)))) !== 0) || ((((_la - 308)) & ~0x1F) === 0 && ((1 << (_la - 308)) & ((1 << (SparkSqlParser.KW_TRUNCATE - 308)) | (1 << (SparkSqlParser.KW_UNCACHE - 308)) | (1 << (SparkSqlParser.KW_UNLOCK - 308)) | (1 << (SparkSqlParser.KW_UPDATE - 308)) | (1 << (SparkSqlParser.KW_USE - 308)) | (1 << (SparkSqlParser.KW_VALUES - 308)) | (1 << (SparkSqlParser.KW_WITH - 308)))) !== 0)) { { - this.state = 282; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.T__0: - case SparkSqlParser.ADD: - case SparkSqlParser.ALTER: - case SparkSqlParser.ANALYZE: - case SparkSqlParser.CACHE: - case SparkSqlParser.CLEAR: - case SparkSqlParser.COMMENT: - case SparkSqlParser.COMMIT: - case SparkSqlParser.CREATE: - case SparkSqlParser.DELETE: - case SparkSqlParser.DESC: - case SparkSqlParser.DESCRIBE: - case SparkSqlParser.DFS: - case SparkSqlParser.DROP: - case SparkSqlParser.EXPLAIN: - case SparkSqlParser.EXPORT: - case SparkSqlParser.FROM: - case SparkSqlParser.GRANT: - case SparkSqlParser.IMPORT: - case SparkSqlParser.INSERT: - case SparkSqlParser.LIST: - case SparkSqlParser.LOAD: - case SparkSqlParser.LOCK: - case SparkSqlParser.MAP: - case SparkSqlParser.MERGE: - case SparkSqlParser.MSCK: - case SparkSqlParser.REDUCE: - case SparkSqlParser.REFRESH: - case SparkSqlParser.REPLACE: - case SparkSqlParser.RESET: - case SparkSqlParser.REVOKE: - case SparkSqlParser.ROLLBACK: - case SparkSqlParser.SELECT: - case SparkSqlParser.SET: - case SparkSqlParser.SHOW: - case SparkSqlParser.START: - case SparkSqlParser.TABLE: - case SparkSqlParser.TRUNCATE: - case SparkSqlParser.UNCACHE: - case SparkSqlParser.UNLOCK: - case SparkSqlParser.UPDATE: - case SparkSqlParser.USE: - case SparkSqlParser.VALUES: - case SparkSqlParser.WITH: - { - this.state = 277; - this.statement(); - this.state = 279; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 0, this._ctx) ) { - case 1: - { - this.state = 278; - this.match(SparkSqlParser.SEMICOLON); - } - break; - } - } - break; - case SparkSqlParser.SEMICOLON: - { - this.state = 281; - this.emptyStatement(); - } - break; - default: - throw new NoViableAltException(this); + { + this.state = 374; + this.singleStatement(); } } - this.state = 286; + this.state = 379; this._errHandler.sync(this); _la = this._input.LA(1); } + this.state = 380; + this.match(SparkSqlParser.EOF); } } catch (re) { @@ -761,41 +866,25 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public emptyStatement(): EmptyStatementContext { - let _localctx: EmptyStatementContext = new EmptyStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 4, SparkSqlParser.RULE_emptyStatement); + public singleStatement(): SingleStatementContext { + let _localctx: SingleStatementContext = new SingleStatementContext(this._ctx, this.state); + this.enterRule(_localctx, 2, SparkSqlParser.RULE_singleStatement); + let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 287; - this.match(SparkSqlParser.SEMICOLON); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; + this.state = 382; + this.statement(); + this.state = 384; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.SEMICOLON) { + { + this.state = 383; + this.match(SparkSqlParser.SEMICOLON); + } } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public singleExpression(): SingleExpressionContext { - let _localctx: SingleExpressionContext = new SingleExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 6, SparkSqlParser.RULE_singleExpression); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 289; - this.namedExpression(); - this.state = 290; - this.match(SparkSqlParser.EOF); + } } catch (re) { @@ -813,16 +902,14 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public singleTableIdentifier(): SingleTableIdentifierContext { - let _localctx: SingleTableIdentifierContext = new SingleTableIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 8, SparkSqlParser.RULE_singleTableIdentifier); + public tableIdentifierReference(): TableIdentifierReferenceContext { + let _localctx: TableIdentifierReferenceContext = new TableIdentifierReferenceContext(this._ctx, this.state); + this.enterRule(_localctx, 4, SparkSqlParser.RULE_tableIdentifierReference); try { this.enterOuterAlt(_localctx, 1); { - this.state = 292; - this.tableIdentifier(); - this.state = 293; - this.match(SparkSqlParser.EOF); + this.state = 386; + this.identifierReference(); } } catch (re) { @@ -840,16 +927,14 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public singleMultipartIdentifier(): SingleMultipartIdentifierContext { - let _localctx: SingleMultipartIdentifierContext = new SingleMultipartIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 10, SparkSqlParser.RULE_singleMultipartIdentifier); + public viewIdentifierReference(): ViewIdentifierReferenceContext { + let _localctx: ViewIdentifierReferenceContext = new ViewIdentifierReferenceContext(this._ctx, this.state); + this.enterRule(_localctx, 6, SparkSqlParser.RULE_viewIdentifierReference); try { this.enterOuterAlt(_localctx, 1); { - this.state = 295; - this.multipartIdentifier(); - this.state = 296; - this.match(SparkSqlParser.EOF); + this.state = 388; + this.identifierReference(); } } catch (re) { @@ -867,16 +952,14 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public singleDataType(): SingleDataTypeContext { - let _localctx: SingleDataTypeContext = new SingleDataTypeContext(this._ctx, this.state); - this.enterRule(_localctx, 12, SparkSqlParser.RULE_singleDataType); + public functionIdentifierReference(): FunctionIdentifierReferenceContext { + let _localctx: FunctionIdentifierReferenceContext = new FunctionIdentifierReferenceContext(this._ctx, this.state); + this.enterRule(_localctx, 8, SparkSqlParser.RULE_functionIdentifierReference); try { this.enterOuterAlt(_localctx, 1); { - this.state = 298; - this.dataType(); - this.state = 299; - this.match(SparkSqlParser.EOF); + this.state = 390; + this.identifierReference(); } } catch (re) { @@ -894,16 +977,14 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public singleTableSchema(): SingleTableSchemaContext { - let _localctx: SingleTableSchemaContext = new SingleTableSchemaContext(this._ctx, this.state); - this.enterRule(_localctx, 14, SparkSqlParser.RULE_singleTableSchema); + public namespaceIdentifierReference(): NamespaceIdentifierReferenceContext { + let _localctx: NamespaceIdentifierReferenceContext = new NamespaceIdentifierReferenceContext(this._ctx, this.state); + this.enterRule(_localctx, 10, SparkSqlParser.RULE_namespaceIdentifierReference); try { this.enterOuterAlt(_localctx, 1); { - this.state = 301; - this.colTypeList(); - this.state = 302; - this.match(SparkSqlParser.EOF); + this.state = 392; + this.identifierReference(); } } catch (re) { @@ -923,115 +1004,140 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public statement(): StatementContext { let _localctx: StatementContext = new StatementContext(this._ctx, this.state); - this.enterRule(_localctx, 16, SparkSqlParser.RULE_statement); + this.enterRule(_localctx, 12, SparkSqlParser.RULE_statement); let _la: number; try { let _alt: number; - this.state = 1048; + this.state = 1248; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 112, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 132, this._ctx) ) { case 1: - _localctx = new StatementDefaultContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 304; + this.state = 394; this.query(); } break; case 2: - _localctx = new DmlStatementContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 306; + this.state = 396; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.WITH) { + if (_la === SparkSqlParser.KW_WITH) { { - this.state = 305; + this.state = 395; this.ctes(); } } - this.state = 308; + this.state = 398; this.dmlStatementNoWith(); } break; case 3: - _localctx = new UseContext(_localctx); this.enterOuterAlt(_localctx, 3); { - this.state = 309; - this.match(SparkSqlParser.USE); - this.state = 311; + this.state = 399; + this.match(SparkSqlParser.KW_USE); + this.state = 400; + this.identifierReference(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 401; + this.match(SparkSqlParser.KW_USE); + this.state = 402; + this.namespace(); + this.state = 403; + this.namespaceIdentifierReference(); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 405; + this.match(SparkSqlParser.KW_SET); + this.state = 406; + this.match(SparkSqlParser.KW_CATALOG); + this.state = 409; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 3, this._ctx) ) { case 1: { - this.state = 310; - this.match(SparkSqlParser.NAMESPACE); + this.state = 407; + this.identifier(); + } + break; + + case 2: + { + this.state = 408; + this.stringLit(); } break; } - this.state = 313; - this.multipartIdentifier(); } break; - case 4: - _localctx = new CreateNamespaceContext(_localctx); - this.enterOuterAlt(_localctx, 4); + case 6: + this.enterOuterAlt(_localctx, 6); { - this.state = 314; - this.match(SparkSqlParser.CREATE); - this.state = 315; + this.state = 411; + this.match(SparkSqlParser.KW_CREATE); + this.state = 412; this.namespace(); - this.state = 319; + this.state = 416; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 5, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 4, this._ctx) ) { case 1: { - this.state = 316; - this.match(SparkSqlParser.IF); - this.state = 317; - this.match(SparkSqlParser.NOT); - this.state = 318; - this.match(SparkSqlParser.EXISTS); + this.state = 413; + this.match(SparkSqlParser.KW_IF); + this.state = 414; + this.match(SparkSqlParser.KW_NOT); + this.state = 415; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 321; - this.multipartIdentifier(); - this.state = 329; + this.state = 418; + this.namespaceIdentifierReference(); + this.state = 426; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 7, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 6, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { - this.state = 327; + this.state = 424; this._errHandler.sync(this); switch (this._input.LA(1)) { - case SparkSqlParser.COMMENT: + case SparkSqlParser.KW_COMMENT: { - this.state = 322; + this.state = 419; this.commentSpec(); } break; - case SparkSqlParser.LOCATION: + case SparkSqlParser.KW_LOCATION: { - this.state = 323; + this.state = 420; this.locationSpec(); } break; - case SparkSqlParser.WITH: + case SparkSqlParser.KW_WITH: { { - this.state = 324; - this.match(SparkSqlParser.WITH); - this.state = 325; + this.state = 421; + this.match(SparkSqlParser.KW_WITH); + this.state = 422; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DBPROPERTIES || _la === SparkSqlParser.PROPERTIES)) { + if (!(_la === SparkSqlParser.KW_DBPROPERTIES || _la === SparkSqlParser.KW_PROPERTIES)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1041,8 +1147,8 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 326; - this.tablePropertyList(); + this.state = 423; + this.propertyList(); } } break; @@ -1051,28 +1157,27 @@ export class SparkSqlParser extends Parser { } } } - this.state = 331; + this.state = 428; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 7, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 6, this._ctx); } } break; - case 5: - _localctx = new SetNamespacePropertiesContext(_localctx); - this.enterOuterAlt(_localctx, 5); + case 7: + this.enterOuterAlt(_localctx, 7); { - this.state = 332; - this.match(SparkSqlParser.ALTER); - this.state = 333; + this.state = 429; + this.match(SparkSqlParser.KW_ALTER); + this.state = 430; this.namespace(); - this.state = 334; - this.multipartIdentifier(); - this.state = 335; - this.match(SparkSqlParser.SET); - this.state = 336; + this.state = 431; + this.namespaceIdentifierReference(); + this.state = 432; + this.match(SparkSqlParser.KW_SET); + this.state = 433; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DBPROPERTIES || _la === SparkSqlParser.PROPERTIES)) { + if (!(_la === SparkSqlParser.KW_DBPROPERTIES || _la === SparkSqlParser.KW_PROPERTIES)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1082,58 +1187,56 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 337; - this.tablePropertyList(); + this.state = 434; + this.propertyList(); } break; - case 6: - _localctx = new SetNamespaceLocationContext(_localctx); - this.enterOuterAlt(_localctx, 6); + case 8: + this.enterOuterAlt(_localctx, 8); { - this.state = 339; - this.match(SparkSqlParser.ALTER); - this.state = 340; + this.state = 436; + this.match(SparkSqlParser.KW_ALTER); + this.state = 437; this.namespace(); - this.state = 341; - this.multipartIdentifier(); - this.state = 342; - this.match(SparkSqlParser.SET); - this.state = 343; + this.state = 438; + this.namespaceIdentifierReference(); + this.state = 439; + this.match(SparkSqlParser.KW_SET); + this.state = 440; this.locationSpec(); } break; - case 7: - _localctx = new DropNamespaceContext(_localctx); - this.enterOuterAlt(_localctx, 7); + case 9: + this.enterOuterAlt(_localctx, 9); { - this.state = 345; - this.match(SparkSqlParser.DROP); - this.state = 346; + this.state = 442; + this.match(SparkSqlParser.KW_DROP); + this.state = 443; this.namespace(); - this.state = 349; + this.state = 446; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 8, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 7, this._ctx) ) { case 1: { - this.state = 347; - this.match(SparkSqlParser.IF); - this.state = 348; - this.match(SparkSqlParser.EXISTS); + this.state = 444; + this.match(SparkSqlParser.KW_IF); + this.state = 445; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 351; - this.multipartIdentifier(); - this.state = 353; + this.state = 448; + this.namespaceIdentifierReference(); + this.state = 450; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.CASCADE || _la === SparkSqlParser.RESTRICT) { + if (_la === SparkSqlParser.KW_CASCADE || _la === SparkSqlParser.KW_RESTRICT) { { - this.state = 352; + this.state = 449; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.CASCADE || _la === SparkSqlParser.RESTRICT)) { + if (!(_la === SparkSqlParser.KW_CASCADE || _la === SparkSqlParser.KW_RESTRICT)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1149,32 +1252,21 @@ export class SparkSqlParser extends Parser { } break; - case 8: - _localctx = new ShowNamespacesContext(_localctx); - this.enterOuterAlt(_localctx, 8); + case 10: + this.enterOuterAlt(_localctx, 10); { - this.state = 355; - this.match(SparkSqlParser.SHOW); - this.state = 356; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DATABASES || _la === SparkSqlParser.NAMESPACES)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 359; + this.state = 452; + this.match(SparkSqlParser.KW_SHOW); + this.state = 453; + this.namespaces(); + this.state = 456; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 9, this._ctx) ) { case 1: { - this.state = 357; + this.state = 454; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FROM || _la === SparkSqlParser.IN)) { + if (!(_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1184,214 +1276,81 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 358; + this.state = 455; this.multipartIdentifier(); } break; } - this.state = 365; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.LIKE || _la === SparkSqlParser.STRING) { - { - this.state = 362; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.LIKE) { - { - this.state = 361; - this.match(SparkSqlParser.LIKE); - } - } - - this.state = 364; - (_localctx as ShowNamespacesContext)._pattern = this.match(SparkSqlParser.STRING); - } - } - - } - break; - - case 9: - _localctx = new CreateTableContext(_localctx); - this.enterOuterAlt(_localctx, 9); - { - this.state = 367; - this.createTableHeader(); - this.state = 372; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.T__0) { - { - this.state = 368; - this.match(SparkSqlParser.T__0); - this.state = 369; - this.colTypeList(); - this.state = 370; - this.match(SparkSqlParser.T__1); - } - } - - this.state = 374; - this.tableProvider(); - this.state = 375; - this.createTableClauses(); - this.state = 380; + this.state = 462; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 15, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 11, this._ctx) ) { case 1: { - this.state = 377; + this.state = 459; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.AS) { + switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { + case 1: { - this.state = 376; - this.match(SparkSqlParser.AS); + this.state = 458; + this.match(SparkSqlParser.KW_LIKE); } + break; } - - this.state = 379; - this.query(); + this.state = 461; + _localctx._pattern = this.stringLit(); } break; } } break; - case 10: - _localctx = new CreateHiveTableContext(_localctx); - this.enterOuterAlt(_localctx, 10); + case 11: + this.enterOuterAlt(_localctx, 11); { - this.state = 382; + this.state = 464; this.createTableHeader(); - this.state = 387; + this.state = 469; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 16, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 12, this._ctx) ) { case 1: { - this.state = 383; - this.match(SparkSqlParser.T__0); - this.state = 384; - (_localctx as CreateHiveTableContext)._columns = this.colTypeList(); - this.state = 385; - this.match(SparkSqlParser.T__1); + this.state = 465; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 466; + this.createOrReplaceTableColTypeList(); + this.state = 467; + this.match(SparkSqlParser.RIGHT_PAREN); } break; } - this.state = 410; + this.state = 472; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 19, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - this.state = 408; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.COMMENT: - { - this.state = 389; - this.commentSpec(); - } - break; - case SparkSqlParser.PARTITIONED: - { - this.state = 399; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 17, this._ctx) ) { - case 1: - { - this.state = 390; - this.match(SparkSqlParser.PARTITIONED); - this.state = 391; - this.match(SparkSqlParser.BY); - this.state = 392; - this.match(SparkSqlParser.T__0); - this.state = 393; - (_localctx as CreateHiveTableContext)._partitionColumns = this.colTypeList(); - this.state = 394; - this.match(SparkSqlParser.T__1); - } - break; - - case 2: - { - this.state = 396; - this.match(SparkSqlParser.PARTITIONED); - this.state = 397; - this.match(SparkSqlParser.BY); - this.state = 398; - (_localctx as CreateHiveTableContext)._partitionColumnNames = this.identifierList(); - } - break; - } - } - break; - case SparkSqlParser.CLUSTERED: - { - this.state = 401; - this.bucketSpec(); - } - break; - case SparkSqlParser.SKEWED: - { - this.state = 402; - this.skewSpec(); - } - break; - case SparkSqlParser.ROW: - { - this.state = 403; - this.rowFormat(); - } - break; - case SparkSqlParser.STORED: - { - this.state = 404; - this.createFileFormat(); - } - break; - case SparkSqlParser.LOCATION: - { - this.state = 405; - this.locationSpec(); - } - break; - case SparkSqlParser.TBLPROPERTIES: - { - { - this.state = 406; - this.match(SparkSqlParser.TBLPROPERTIES); - this.state = 407; - (_localctx as CreateHiveTableContext)._tableProps = this.tablePropertyList(); - } - } - break; - default: - throw new NoViableAltException(this); - } - } + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_USING) { + { + this.state = 471; + this.tableProvider(); } - this.state = 412; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 19, this._ctx); } - this.state = 417; + + this.state = 474; + this.createTableClauses(); + this.state = 479; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 21, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 15, this._ctx) ) { case 1: { - this.state = 414; + this.state = 476; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AS) { + if (_la === SparkSqlParser.KW_AS) { { - this.state = 413; - this.match(SparkSqlParser.AS); + this.state = 475; + this.match(SparkSqlParser.KW_AS); } } - this.state = 416; + this.state = 478; this.query(); } break; @@ -1399,73 +1358,72 @@ export class SparkSqlParser extends Parser { } break; - case 11: - _localctx = new CreateTableLikeContext(_localctx); - this.enterOuterAlt(_localctx, 11); + case 12: + this.enterOuterAlt(_localctx, 12); { - this.state = 419; - this.match(SparkSqlParser.CREATE); - this.state = 420; - this.match(SparkSqlParser.TABLE); - this.state = 424; + this.state = 481; + this.match(SparkSqlParser.KW_CREATE); + this.state = 482; + this.match(SparkSqlParser.KW_TABLE); + this.state = 486; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 22, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 16, this._ctx) ) { case 1: { - this.state = 421; - this.match(SparkSqlParser.IF); - this.state = 422; - this.match(SparkSqlParser.NOT); - this.state = 423; - this.match(SparkSqlParser.EXISTS); + this.state = 483; + this.match(SparkSqlParser.KW_IF); + this.state = 484; + this.match(SparkSqlParser.KW_NOT); + this.state = 485; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 426; - (_localctx as CreateTableLikeContext)._target = this.tableIdentifier(); - this.state = 427; - this.match(SparkSqlParser.LIKE); - this.state = 428; - (_localctx as CreateTableLikeContext)._source = this.tableIdentifier(); - this.state = 437; + this.state = 488; + _localctx._target = this.tableIdentifier(); + this.state = 489; + this.match(SparkSqlParser.KW_LIKE); + this.state = 490; + _localctx._source = this.tableIdentifier(); + this.state = 499; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.LOCATION || ((((_la - 198)) & ~0x1F) === 0 && ((1 << (_la - 198)) & ((1 << (SparkSqlParser.ROW - 198)) | (1 << (SparkSqlParser.STORED - 198)) | (1 << (SparkSqlParser.TBLPROPERTIES - 198)))) !== 0) || _la === SparkSqlParser.USING) { + while (_la === SparkSqlParser.KW_LOCATION || _la === SparkSqlParser.KW_ROW || _la === SparkSqlParser.KW_STORED || _la === SparkSqlParser.KW_TBLPROPERTIES || _la === SparkSqlParser.KW_USING) { { - this.state = 435; + this.state = 497; this._errHandler.sync(this); switch (this._input.LA(1)) { - case SparkSqlParser.USING: + case SparkSqlParser.KW_USING: { - this.state = 429; + this.state = 491; this.tableProvider(); } break; - case SparkSqlParser.ROW: + case SparkSqlParser.KW_ROW: { - this.state = 430; + this.state = 492; this.rowFormat(); } break; - case SparkSqlParser.STORED: + case SparkSqlParser.KW_STORED: { - this.state = 431; + this.state = 493; this.createFileFormat(); } break; - case SparkSqlParser.LOCATION: + case SparkSqlParser.KW_LOCATION: { - this.state = 432; + this.state = 494; this.locationSpec(); } break; - case SparkSqlParser.TBLPROPERTIES: + case SparkSqlParser.KW_TBLPROPERTIES: { { - this.state = 433; - this.match(SparkSqlParser.TBLPROPERTIES); - this.state = 434; - (_localctx as CreateTableLikeContext)._tableProps = this.tablePropertyList(); + this.state = 495; + this.match(SparkSqlParser.KW_TBLPROPERTIES); + this.state = 496; + _localctx._tableProps = this.propertyList(); } } break; @@ -1473,53 +1431,60 @@ export class SparkSqlParser extends Parser { throw new NoViableAltException(this); } } - this.state = 439; + this.state = 501; this._errHandler.sync(this); _la = this._input.LA(1); } } break; - case 12: - _localctx = new ReplaceTableContext(_localctx); - this.enterOuterAlt(_localctx, 12); + case 13: + this.enterOuterAlt(_localctx, 13); { - this.state = 440; + this.state = 502; this.replaceTableHeader(); - this.state = 445; + this.state = 507; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 19, this._ctx) ) { + case 1: + { + this.state = 503; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 504; + this.createOrReplaceTableColTypeList(); + this.state = 505; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + } + this.state = 510; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.T__0) { + if (_la === SparkSqlParser.KW_USING) { { - this.state = 441; - this.match(SparkSqlParser.T__0); - this.state = 442; - this.colTypeList(); - this.state = 443; - this.match(SparkSqlParser.T__1); + this.state = 509; + this.tableProvider(); } } - this.state = 447; - this.tableProvider(); - this.state = 448; + this.state = 512; this.createTableClauses(); - this.state = 453; + this.state = 517; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 27, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 22, this._ctx) ) { case 1: { - this.state = 450; + this.state = 514; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AS) { + if (_la === SparkSqlParser.KW_AS) { { - this.state = 449; - this.match(SparkSqlParser.AS); + this.state = 513; + this.match(SparkSqlParser.KW_AS); } } - this.state = 452; + this.state = 516; this.query(); } break; @@ -1527,109 +1492,124 @@ export class SparkSqlParser extends Parser { } break; - case 13: - _localctx = new AnalyzeContext(_localctx); - this.enterOuterAlt(_localctx, 13); + case 14: + this.enterOuterAlt(_localctx, 14); { - this.state = 455; - this.match(SparkSqlParser.ANALYZE); - this.state = 456; - this.match(SparkSqlParser.TABLE); - this.state = 457; - this.multipartIdentifier(); - this.state = 459; + this.state = 519; + this.match(SparkSqlParser.KW_ANALYZE); + this.state = 520; + this.match(SparkSqlParser.KW_TABLE); + this.state = 521; + this.tableIdentifierReference(); + this.state = 523; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 458; + this.state = 522; this.partitionSpec(); } } - this.state = 461; - this.match(SparkSqlParser.COMPUTE); - this.state = 462; - this.match(SparkSqlParser.STATISTICS); - this.state = 470; + this.state = 525; + this.match(SparkSqlParser.KW_COMPUTE); + this.state = 526; + this.match(SparkSqlParser.KW_STATISTICS); + this.state = 534; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 29, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 24, this._ctx) ) { case 1: { - this.state = 463; + this.state = 527; this.identifier(); } break; case 2: { - this.state = 464; - this.match(SparkSqlParser.FOR); - this.state = 465; - this.match(SparkSqlParser.COLUMNS); - this.state = 466; + this.state = 528; + this.match(SparkSqlParser.KW_FOR); + this.state = 529; + this.match(SparkSqlParser.KW_COLUMNS); + this.state = 530; this.identifierSeq(); } break; case 3: { - this.state = 467; - this.match(SparkSqlParser.FOR); - this.state = 468; - this.match(SparkSqlParser.ALL); - this.state = 469; - this.match(SparkSqlParser.COLUMNS); + this.state = 531; + this.match(SparkSqlParser.KW_FOR); + this.state = 532; + this.match(SparkSqlParser.KW_ALL); + this.state = 533; + this.match(SparkSqlParser.KW_COLUMNS); } break; } } break; - case 14: - _localctx = new AddTableColumnsContext(_localctx); - this.enterOuterAlt(_localctx, 14); + case 15: + this.enterOuterAlt(_localctx, 15); { - this.state = 472; - this.match(SparkSqlParser.ALTER); - this.state = 473; - this.match(SparkSqlParser.TABLE); - this.state = 474; - this.multipartIdentifier(); - this.state = 475; - this.match(SparkSqlParser.ADD); - this.state = 476; + this.state = 536; + this.match(SparkSqlParser.KW_ANALYZE); + this.state = 537; + this.match(SparkSqlParser.KW_TABLES); + this.state = 540; + this._errHandler.sync(this); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.COLUMN || _la === SparkSqlParser.COLUMNS)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + if (_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN) { + { + this.state = 538; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); } + this.state = 539; + this.tableIdentifierReference(); + } + } - this._errHandler.reportMatch(this); - this.consume(); + this.state = 542; + this.match(SparkSqlParser.KW_COMPUTE); + this.state = 543; + this.match(SparkSqlParser.KW_STATISTICS); + this.state = 545; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 26, this._ctx) ) { + case 1: + { + this.state = 544; + this.identifier(); + } + break; } - this.state = 477; - (_localctx as AddTableColumnsContext)._columns = this.qualifiedColTypeWithPositionList(); } break; - case 15: - _localctx = new AddTableColumnsContext(_localctx); - this.enterOuterAlt(_localctx, 15); + case 16: + this.enterOuterAlt(_localctx, 16); { - this.state = 479; - this.match(SparkSqlParser.ALTER); - this.state = 480; - this.match(SparkSqlParser.TABLE); - this.state = 481; - this.multipartIdentifier(); - this.state = 482; - this.match(SparkSqlParser.ADD); - this.state = 483; + this.state = 547; + this.match(SparkSqlParser.KW_ALTER); + this.state = 548; + this.match(SparkSqlParser.KW_TABLE); + this.state = 549; + this.tableIdentifierReference(); + this.state = 550; + this.match(SparkSqlParser.KW_ADD); + this.state = 551; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.COLUMN || _la === SparkSqlParser.COLUMNS)) { + if (!(_la === SparkSqlParser.KW_COLUMN || _la === SparkSqlParser.KW_COLUMNS)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1639,53 +1619,25 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 484; - this.match(SparkSqlParser.T__0); - this.state = 485; - (_localctx as AddTableColumnsContext)._columns = this.qualifiedColTypeWithPositionList(); - this.state = 486; - this.match(SparkSqlParser.T__1); - } - break; - - case 16: - _localctx = new RenameTableColumnContext(_localctx); - this.enterOuterAlt(_localctx, 16); - { - this.state = 488; - this.match(SparkSqlParser.ALTER); - this.state = 489; - this.match(SparkSqlParser.TABLE); - this.state = 490; - (_localctx as RenameTableColumnContext)._table = this.multipartIdentifier(); - this.state = 491; - this.match(SparkSqlParser.RENAME); - this.state = 492; - this.match(SparkSqlParser.COLUMN); - this.state = 493; - (_localctx as RenameTableColumnContext)._from = this.multipartIdentifier(); - this.state = 494; - this.match(SparkSqlParser.TO); - this.state = 495; - (_localctx as RenameTableColumnContext)._to = this.errorCapturingIdentifier(); + this.state = 552; + this.qualifiedColTypeWithPositionList(); } break; case 17: - _localctx = new DropTableColumnsContext(_localctx); this.enterOuterAlt(_localctx, 17); { - this.state = 497; - this.match(SparkSqlParser.ALTER); - this.state = 498; - this.match(SparkSqlParser.TABLE); - this.state = 499; - this.multipartIdentifier(); - this.state = 500; - this.match(SparkSqlParser.DROP); - this.state = 501; + this.state = 554; + this.match(SparkSqlParser.KW_ALTER); + this.state = 555; + this.match(SparkSqlParser.KW_TABLE); + this.state = 556; + this.tableIdentifierReference(); + this.state = 557; + this.match(SparkSqlParser.KW_ADD); + this.state = 558; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.COLUMN || _la === SparkSqlParser.COLUMNS)) { + if (!(_la === SparkSqlParser.KW_COLUMN || _la === SparkSqlParser.KW_COLUMNS)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1695,53 +1647,51 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 502; - this.match(SparkSqlParser.T__0); - this.state = 503; - (_localctx as DropTableColumnsContext)._columns = this.multipartIdentifierList(); - this.state = 504; - this.match(SparkSqlParser.T__1); + this.state = 559; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 560; + this.qualifiedColTypeWithPositionList(); + this.state = 561; + this.match(SparkSqlParser.RIGHT_PAREN); } break; case 18: - _localctx = new DropTableColumnsContext(_localctx); this.enterOuterAlt(_localctx, 18); { - this.state = 506; - this.match(SparkSqlParser.ALTER); - this.state = 507; - this.match(SparkSqlParser.TABLE); - this.state = 508; + this.state = 563; + this.match(SparkSqlParser.KW_ALTER); + this.state = 564; + this.match(SparkSqlParser.KW_TABLE); + this.state = 565; + _localctx._table = this.tableIdentifierReference(); + this.state = 566; + this.match(SparkSqlParser.KW_RENAME); + this.state = 567; + this.match(SparkSqlParser.KW_COLUMN); + this.state = 568; this.multipartIdentifier(); - this.state = 509; - this.match(SparkSqlParser.DROP); - this.state = 510; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.COLUMN || _la === SparkSqlParser.COLUMNS)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 511; - (_localctx as DropTableColumnsContext)._columns = this.multipartIdentifierList(); + this.state = 569; + this.match(SparkSqlParser.KW_TO); + this.state = 570; + this.errorCapturingIdentifier(); } break; case 19: - _localctx = new RenameTableContext(_localctx); this.enterOuterAlt(_localctx, 19); { - this.state = 513; - this.match(SparkSqlParser.ALTER); - this.state = 514; + this.state = 572; + this.match(SparkSqlParser.KW_ALTER); + this.state = 573; + this.match(SparkSqlParser.KW_TABLE); + this.state = 574; + this.tableIdentifierReference(); + this.state = 575; + this.match(SparkSqlParser.KW_DROP); + this.state = 576; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.TABLE || _la === SparkSqlParser.VIEW)) { + if (!(_la === SparkSqlParser.KW_COLUMN || _la === SparkSqlParser.KW_COLUMNS)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1751,26 +1701,41 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 515; - (_localctx as RenameTableContext)._from = this.multipartIdentifier(); - this.state = 516; - this.match(SparkSqlParser.RENAME); - this.state = 517; - this.match(SparkSqlParser.TO); - this.state = 518; - (_localctx as RenameTableContext)._to = this.multipartIdentifier(); + this.state = 579; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_IF) { + { + this.state = 577; + this.match(SparkSqlParser.KW_IF); + this.state = 578; + this.match(SparkSqlParser.KW_EXISTS); + } + } + + this.state = 581; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 582; + this.multipartIdentifierList(); + this.state = 583; + this.match(SparkSqlParser.RIGHT_PAREN); } break; case 20: - _localctx = new SetTablePropertiesContext(_localctx); this.enterOuterAlt(_localctx, 20); { - this.state = 520; - this.match(SparkSqlParser.ALTER); - this.state = 521; + this.state = 585; + this.match(SparkSqlParser.KW_ALTER); + this.state = 586; + this.match(SparkSqlParser.KW_TABLE); + this.state = 587; + this.tableIdentifierReference(); + this.state = 588; + this.match(SparkSqlParser.KW_DROP); + this.state = 589; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.TABLE || _la === SparkSqlParser.VIEW)) { + if (!(_la === SparkSqlParser.KW_COLUMN || _la === SparkSqlParser.KW_COLUMNS)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1780,26 +1745,31 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 522; - this.multipartIdentifier(); - this.state = 523; - this.match(SparkSqlParser.SET); - this.state = 524; - this.match(SparkSqlParser.TBLPROPERTIES); - this.state = 525; - this.tablePropertyList(); + this.state = 592; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 28, this._ctx) ) { + case 1: + { + this.state = 590; + this.match(SparkSqlParser.KW_IF); + this.state = 591; + this.match(SparkSqlParser.KW_EXISTS); + } + break; + } + this.state = 594; + this.multipartIdentifierList(); } break; case 21: - _localctx = new UnsetTablePropertiesContext(_localctx); this.enterOuterAlt(_localctx, 21); { - this.state = 527; - this.match(SparkSqlParser.ALTER); - this.state = 528; + this.state = 596; + this.match(SparkSqlParser.KW_ALTER); + this.state = 597; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.TABLE || _la === SparkSqlParser.VIEW)) { + if (!(_la === SparkSqlParser.KW_TABLE || _la === SparkSqlParser.KW_VIEW)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1809,42 +1779,40 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 529; - this.multipartIdentifier(); - this.state = 530; - this.match(SparkSqlParser.UNSET); - this.state = 531; - this.match(SparkSqlParser.TBLPROPERTIES); - this.state = 534; + this.state = 600; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.IF) { + switch ( this.interpreter.adaptivePredict(this._input, 29, this._ctx) ) { + case 1: { - this.state = 532; - this.match(SparkSqlParser.IF); - this.state = 533; - this.match(SparkSqlParser.EXISTS); + this.state = 598; + this.tableIdentifierReference(); } - } + break; - this.state = 536; - this.tablePropertyList(); + case 2: + { + this.state = 599; + this.viewIdentifierReference(); + } + break; + } + this.state = 602; + this.match(SparkSqlParser.KW_RENAME); + this.state = 603; + this.match(SparkSqlParser.KW_TO); + this.state = 604; + this.multipartIdentifier(); } break; case 22: - _localctx = new AlterTableAlterColumnContext(_localctx); this.enterOuterAlt(_localctx, 22); { - this.state = 538; - this.match(SparkSqlParser.ALTER); - this.state = 539; - this.match(SparkSqlParser.TABLE); - this.state = 540; - (_localctx as AlterTableAlterColumnContext)._table = this.multipartIdentifier(); - this.state = 541; + this.state = 606; + this.match(SparkSqlParser.KW_ALTER); + this.state = 607; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.ALTER || _la === SparkSqlParser.CHANGE)) { + if (!(_la === SparkSqlParser.KW_TABLE || _la === SparkSqlParser.KW_VIEW)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -1854,194 +1822,291 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 543; + this.state = 610; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 31, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 30, this._ctx) ) { case 1: { - this.state = 542; - this.match(SparkSqlParser.COLUMN); + this.state = 608; + this.tableIdentifierReference(); } break; - } - this.state = 545; - (_localctx as AlterTableAlterColumnContext)._column = this.multipartIdentifier(); - this.state = 547; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 32, this._ctx) ) { - case 1: + + case 2: { - this.state = 546; - this.alterColumnAction(); + this.state = 609; + this.viewIdentifierReference(); } break; } + this.state = 612; + this.match(SparkSqlParser.KW_SET); + this.state = 613; + this.match(SparkSqlParser.KW_TBLPROPERTIES); + this.state = 614; + this.propertyList(); } break; case 23: - _localctx = new HiveChangeColumnContext(_localctx); this.enterOuterAlt(_localctx, 23); { - this.state = 549; - this.match(SparkSqlParser.ALTER); - this.state = 550; - this.match(SparkSqlParser.TABLE); - this.state = 551; - (_localctx as HiveChangeColumnContext)._table = this.multipartIdentifier(); - this.state = 553; - this._errHandler.sync(this); + this.state = 616; + this.match(SparkSqlParser.KW_ALTER); + this.state = 617; _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { - { - this.state = 552; - this.partitionSpec(); + if (!(_la === SparkSqlParser.KW_TABLE || _la === SparkSqlParser.KW_VIEW)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - } - this.state = 555; - this.match(SparkSqlParser.CHANGE); - this.state = 557; + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 620; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 34, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 31, this._ctx) ) { case 1: { - this.state = 556; - this.match(SparkSqlParser.COLUMN); + this.state = 618; + this.tableIdentifierReference(); + } + break; + + case 2: + { + this.state = 619; + this.viewIdentifierReference(); } break; } - this.state = 559; - (_localctx as HiveChangeColumnContext)._colName = this.multipartIdentifier(); - this.state = 560; - this.colType(); - this.state = 562; + this.state = 622; + this.match(SparkSqlParser.KW_UNSET); + this.state = 623; + this.match(SparkSqlParser.KW_TBLPROPERTIES); + this.state = 626; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AFTER || _la === SparkSqlParser.FIRST) { + if (_la === SparkSqlParser.KW_IF) { { - this.state = 561; - this.colPosition(); + this.state = 624; + this.match(SparkSqlParser.KW_IF); + this.state = 625; + this.match(SparkSqlParser.KW_EXISTS); } } + this.state = 628; + this.propertyList(); } break; case 24: - _localctx = new HiveReplaceColumnsContext(_localctx); this.enterOuterAlt(_localctx, 24); { - this.state = 564; - this.match(SparkSqlParser.ALTER); - this.state = 565; - this.match(SparkSqlParser.TABLE); - this.state = 566; - (_localctx as HiveReplaceColumnsContext)._table = this.multipartIdentifier(); - this.state = 568; - this._errHandler.sync(this); + this.state = 630; + this.match(SparkSqlParser.KW_ALTER); + this.state = 631; + this.match(SparkSqlParser.KW_TABLE); + this.state = 632; + _localctx._table = this.tableIdentifierReference(); + this.state = 633; _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { - { - this.state = 567; - this.partitionSpec(); + if (!(_la === SparkSqlParser.KW_ALTER || _la === SparkSqlParser.KW_CHANGE)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - } - this.state = 570; - this.match(SparkSqlParser.REPLACE); - this.state = 571; - this.match(SparkSqlParser.COLUMNS); - this.state = 572; - this.match(SparkSqlParser.T__0); - this.state = 573; - (_localctx as HiveReplaceColumnsContext)._columns = this.qualifiedColTypeWithPositionList(); - this.state = 574; - this.match(SparkSqlParser.T__1); + this._errHandler.reportMatch(this); + this.consume(); } - break; - - case 25: - _localctx = new SetTableSerDeContext(_localctx); - this.enterOuterAlt(_localctx, 25); - { - this.state = 576; - this.match(SparkSqlParser.ALTER); - this.state = 577; - this.match(SparkSqlParser.TABLE); - this.state = 578; - this.multipartIdentifier(); - this.state = 580; + this.state = 635; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + switch ( this.interpreter.adaptivePredict(this._input, 33, this._ctx) ) { + case 1: { - this.state = 579; - this.partitionSpec(); + this.state = 634; + this.match(SparkSqlParser.KW_COLUMN); } + break; } - - this.state = 582; - this.match(SparkSqlParser.SET); - this.state = 583; - this.match(SparkSqlParser.SERDE); - this.state = 584; - this.match(SparkSqlParser.STRING); - this.state = 588; + this.state = 637; + _localctx._column = this.multipartIdentifier(); + this.state = 639; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 38, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 34, this._ctx) ) { case 1: { - this.state = 585; - this.match(SparkSqlParser.WITH); - this.state = 586; - this.match(SparkSqlParser.SERDEPROPERTIES); - this.state = 587; - this.tablePropertyList(); + this.state = 638; + this.alterColumnAction(); } break; } } break; - case 26: - _localctx = new SetTableSerDeContext(_localctx); - this.enterOuterAlt(_localctx, 26); - { - this.state = 590; - this.match(SparkSqlParser.ALTER); - this.state = 591; - this.match(SparkSqlParser.TABLE); - this.state = 592; - this.multipartIdentifier(); - this.state = 594; + case 25: + this.enterOuterAlt(_localctx, 25); + { + this.state = 641; + this.match(SparkSqlParser.KW_ALTER); + this.state = 642; + this.match(SparkSqlParser.KW_TABLE); + this.state = 643; + _localctx._table = this.tableIdentifierReference(); + this.state = 645; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 593; + this.state = 644; this.partitionSpec(); } } - this.state = 596; - this.match(SparkSqlParser.SET); - this.state = 597; - this.match(SparkSqlParser.SERDEPROPERTIES); - this.state = 598; - this.tablePropertyList(); + this.state = 647; + this.match(SparkSqlParser.KW_CHANGE); + this.state = 649; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 36, this._ctx) ) { + case 1: + { + this.state = 648; + this.match(SparkSqlParser.KW_COLUMN); + } + break; + } + this.state = 651; + _localctx._colName = this.multipartIdentifier(); + this.state = 652; + this.colType(); + this.state = 654; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_AFTER || _la === SparkSqlParser.KW_FIRST) { + { + this.state = 653; + this.colPosition(); + } + } + + } + break; + + case 26: + this.enterOuterAlt(_localctx, 26); + { + this.state = 656; + this.match(SparkSqlParser.KW_ALTER); + this.state = 657; + this.match(SparkSqlParser.KW_TABLE); + this.state = 658; + _localctx._table = this.tableIdentifierReference(); + this.state = 660; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_PARTITION) { + { + this.state = 659; + this.partitionSpec(); + } + } + + this.state = 662; + this.match(SparkSqlParser.KW_REPLACE); + this.state = 663; + this.match(SparkSqlParser.KW_COLUMNS); + this.state = 664; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 665; + this.qualifiedColTypeWithPositionList(); + this.state = 666; + this.match(SparkSqlParser.RIGHT_PAREN); } break; case 27: - _localctx = new AddTablePartitionContext(_localctx); this.enterOuterAlt(_localctx, 27); { - this.state = 600; - this.match(SparkSqlParser.ALTER); - this.state = 601; + this.state = 668; + this.match(SparkSqlParser.KW_ALTER); + this.state = 669; + this.match(SparkSqlParser.KW_TABLE); + this.state = 670; + this.tableIdentifierReference(); + this.state = 672; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_PARTITION) { + { + this.state = 671; + this.partitionSpec(); + } + } + + this.state = 674; + this.match(SparkSqlParser.KW_SET); + this.state = 675; + this.match(SparkSqlParser.KW_SERDE); + this.state = 676; + this.stringLit(); + this.state = 680; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 40, this._ctx) ) { + case 1: + { + this.state = 677; + this.match(SparkSqlParser.KW_WITH); + this.state = 678; + this.match(SparkSqlParser.KW_SERDEPROPERTIES); + this.state = 679; + this.propertyList(); + } + break; + } + } + break; + + case 28: + this.enterOuterAlt(_localctx, 28); + { + this.state = 682; + this.match(SparkSqlParser.KW_ALTER); + this.state = 683; + this.match(SparkSqlParser.KW_TABLE); + this.state = 684; + this.tableIdentifierReference(); + this.state = 686; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_PARTITION) { + { + this.state = 685; + this.partitionSpec(); + } + } + + this.state = 688; + this.match(SparkSqlParser.KW_SET); + this.state = 689; + this.match(SparkSqlParser.KW_SERDEPROPERTIES); + this.state = 690; + this.propertyList(); + } + break; + + case 29: + this.enterOuterAlt(_localctx, 29); + { + this.state = 692; + this.match(SparkSqlParser.KW_ALTER); + this.state = 693; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.TABLE || _la === SparkSqlParser.VIEW)) { + if (!(_la === SparkSqlParser.KW_TABLE || _la === SparkSqlParser.KW_VIEW)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2051,71 +2116,84 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 602; - this.multipartIdentifier(); - this.state = 603; - this.match(SparkSqlParser.ADD); - this.state = 607; + this.state = 696; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 42, this._ctx) ) { + case 1: + { + this.state = 694; + this.tableIdentifierReference(); + } + break; + + case 2: + { + this.state = 695; + this.viewIdentifierReference(); + } + break; + } + this.state = 698; + this.match(SparkSqlParser.KW_ADD); + this.state = 702; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.IF) { + if (_la === SparkSqlParser.KW_IF) { { - this.state = 604; - this.match(SparkSqlParser.IF); - this.state = 605; - this.match(SparkSqlParser.NOT); - this.state = 606; - this.match(SparkSqlParser.EXISTS); + this.state = 699; + this.match(SparkSqlParser.KW_IF); + this.state = 700; + this.match(SparkSqlParser.KW_NOT); + this.state = 701; + this.match(SparkSqlParser.KW_EXISTS); } } - this.state = 610; + this.state = 705; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 609; + this.state = 704; this.partitionSpecLocation(); } } - this.state = 612; + this.state = 707; this._errHandler.sync(this); _la = this._input.LA(1); - } while (_la === SparkSqlParser.PARTITION); + } while (_la === SparkSqlParser.KW_PARTITION); } break; - case 28: - _localctx = new RenameTablePartitionContext(_localctx); - this.enterOuterAlt(_localctx, 28); + case 30: + this.enterOuterAlt(_localctx, 30); { - this.state = 614; - this.match(SparkSqlParser.ALTER); - this.state = 615; - this.match(SparkSqlParser.TABLE); - this.state = 616; - this.multipartIdentifier(); - this.state = 617; - (_localctx as RenameTablePartitionContext)._from = this.partitionSpec(); - this.state = 618; - this.match(SparkSqlParser.RENAME); - this.state = 619; - this.match(SparkSqlParser.TO); - this.state = 620; - (_localctx as RenameTablePartitionContext)._to = this.partitionSpec(); + this.state = 709; + this.match(SparkSqlParser.KW_ALTER); + this.state = 710; + this.match(SparkSqlParser.KW_TABLE); + this.state = 711; + this.tableIdentifierReference(); + this.state = 712; + this.partitionSpec(); + this.state = 713; + this.match(SparkSqlParser.KW_RENAME); + this.state = 714; + this.match(SparkSqlParser.KW_TO); + this.state = 715; + this.partitionSpec(); } break; - case 29: - _localctx = new DropTablePartitionsContext(_localctx); - this.enterOuterAlt(_localctx, 29); + case 31: + this.enterOuterAlt(_localctx, 31); { - this.state = 622; - this.match(SparkSqlParser.ALTER); - this.state = 623; + this.state = 717; + this.match(SparkSqlParser.KW_ALTER); + this.state = 718; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.TABLE || _la === SparkSqlParser.VIEW)) { + if (!(_la === SparkSqlParser.KW_TABLE || _la === SparkSqlParser.KW_VIEW)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2125,256 +2203,266 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 624; - this.multipartIdentifier(); - this.state = 625; - this.match(SparkSqlParser.DROP); - this.state = 628; + this.state = 721; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 45, this._ctx) ) { + case 1: + { + this.state = 719; + this.tableIdentifierReference(); + } + break; + + case 2: + { + this.state = 720; + this.viewIdentifierReference(); + } + break; + } + this.state = 723; + this.match(SparkSqlParser.KW_DROP); + this.state = 726; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.IF) { + if (_la === SparkSqlParser.KW_IF) { { - this.state = 626; - this.match(SparkSqlParser.IF); - this.state = 627; - this.match(SparkSqlParser.EXISTS); + this.state = 724; + this.match(SparkSqlParser.KW_IF); + this.state = 725; + this.match(SparkSqlParser.KW_EXISTS); } } - this.state = 630; + this.state = 728; this.partitionSpec(); - this.state = 635; + this.state = 733; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 631; - this.match(SparkSqlParser.T__2); - this.state = 632; + this.state = 729; + this.match(SparkSqlParser.COMMA); + this.state = 730; this.partitionSpec(); } } - this.state = 637; + this.state = 735; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 639; + this.state = 737; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PURGE) { + if (_la === SparkSqlParser.KW_PURGE) { { - this.state = 638; - this.match(SparkSqlParser.PURGE); + this.state = 736; + this.match(SparkSqlParser.KW_PURGE); } } } break; - case 30: - _localctx = new SetTableLocationContext(_localctx); - this.enterOuterAlt(_localctx, 30); + case 32: + this.enterOuterAlt(_localctx, 32); { - this.state = 641; - this.match(SparkSqlParser.ALTER); - this.state = 642; - this.match(SparkSqlParser.TABLE); - this.state = 643; - this.multipartIdentifier(); - this.state = 645; + this.state = 739; + this.match(SparkSqlParser.KW_ALTER); + this.state = 740; + this.match(SparkSqlParser.KW_TABLE); + this.state = 741; + this.tableIdentifierReference(); + this.state = 743; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 644; + this.state = 742; this.partitionSpec(); } } - this.state = 647; - this.match(SparkSqlParser.SET); - this.state = 648; + this.state = 745; + this.match(SparkSqlParser.KW_SET); + this.state = 746; this.locationSpec(); } break; - case 31: - _localctx = new RecoverPartitionsContext(_localctx); - this.enterOuterAlt(_localctx, 31); + case 33: + this.enterOuterAlt(_localctx, 33); { - this.state = 650; - this.match(SparkSqlParser.ALTER); - this.state = 651; - this.match(SparkSqlParser.TABLE); - this.state = 652; - this.multipartIdentifier(); - this.state = 653; - this.match(SparkSqlParser.RECOVER); - this.state = 654; - this.match(SparkSqlParser.PARTITIONS); + this.state = 748; + this.match(SparkSqlParser.KW_ALTER); + this.state = 749; + this.match(SparkSqlParser.KW_TABLE); + this.state = 750; + this.tableIdentifierReference(); + this.state = 751; + this.match(SparkSqlParser.KW_RECOVER); + this.state = 752; + this.match(SparkSqlParser.KW_PARTITIONS); } break; - case 32: - _localctx = new DropTableContext(_localctx); - this.enterOuterAlt(_localctx, 32); + case 34: + this.enterOuterAlt(_localctx, 34); { - this.state = 656; - this.match(SparkSqlParser.DROP); - this.state = 657; - this.match(SparkSqlParser.TABLE); - this.state = 660; + this.state = 754; + this.match(SparkSqlParser.KW_DROP); + this.state = 755; + this.match(SparkSqlParser.KW_TABLE); + this.state = 758; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 46, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 50, this._ctx) ) { case 1: { - this.state = 658; - this.match(SparkSqlParser.IF); - this.state = 659; - this.match(SparkSqlParser.EXISTS); + this.state = 756; + this.match(SparkSqlParser.KW_IF); + this.state = 757; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 662; - this.multipartIdentifier(); - this.state = 664; + this.state = 760; + this.tableIdentifierReference(); + this.state = 762; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PURGE) { + if (_la === SparkSqlParser.KW_PURGE) { { - this.state = 663; - this.match(SparkSqlParser.PURGE); + this.state = 761; + this.match(SparkSqlParser.KW_PURGE); } } } break; - case 33: - _localctx = new DropViewContext(_localctx); - this.enterOuterAlt(_localctx, 33); + case 35: + this.enterOuterAlt(_localctx, 35); { - this.state = 666; - this.match(SparkSqlParser.DROP); - this.state = 667; - this.match(SparkSqlParser.VIEW); - this.state = 670; + this.state = 764; + this.match(SparkSqlParser.KW_DROP); + this.state = 765; + this.match(SparkSqlParser.KW_VIEW); + this.state = 768; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 48, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 52, this._ctx) ) { case 1: { - this.state = 668; - this.match(SparkSqlParser.IF); - this.state = 669; - this.match(SparkSqlParser.EXISTS); + this.state = 766; + this.match(SparkSqlParser.KW_IF); + this.state = 767; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 672; - this.multipartIdentifier(); + this.state = 770; + this.viewIdentifierReference(); } break; - case 34: - _localctx = new CreateViewContext(_localctx); - this.enterOuterAlt(_localctx, 34); + case 36: + this.enterOuterAlt(_localctx, 36); { - this.state = 673; - this.match(SparkSqlParser.CREATE); - this.state = 676; + this.state = 771; + this.match(SparkSqlParser.KW_CREATE); + this.state = 774; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.OR) { + if (_la === SparkSqlParser.KW_OR) { { - this.state = 674; - this.match(SparkSqlParser.OR); - this.state = 675; - this.match(SparkSqlParser.REPLACE); + this.state = 772; + this.match(SparkSqlParser.KW_OR); + this.state = 773; + this.match(SparkSqlParser.KW_REPLACE); } } - this.state = 682; + this.state = 780; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.GLOBAL || _la === SparkSqlParser.TEMPORARY) { + if (_la === SparkSqlParser.KW_GLOBAL || _la === SparkSqlParser.KW_TEMPORARY) { { - this.state = 679; + this.state = 777; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.GLOBAL) { + if (_la === SparkSqlParser.KW_GLOBAL) { { - this.state = 678; - this.match(SparkSqlParser.GLOBAL); + this.state = 776; + this.match(SparkSqlParser.KW_GLOBAL); } } - this.state = 681; - this.match(SparkSqlParser.TEMPORARY); + this.state = 779; + this.match(SparkSqlParser.KW_TEMPORARY); } } - this.state = 684; - this.match(SparkSqlParser.VIEW); - this.state = 688; + this.state = 782; + this.match(SparkSqlParser.KW_VIEW); + this.state = 786; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 52, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 56, this._ctx) ) { case 1: { - this.state = 685; - this.match(SparkSqlParser.IF); - this.state = 686; - this.match(SparkSqlParser.NOT); - this.state = 687; - this.match(SparkSqlParser.EXISTS); + this.state = 783; + this.match(SparkSqlParser.KW_IF); + this.state = 784; + this.match(SparkSqlParser.KW_NOT); + this.state = 785; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 690; - this.multipartIdentifier(); - this.state = 692; + this.state = 788; + this.viewIdentifierReference(); + this.state = 790; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.T__0) { + if (_la === SparkSqlParser.LEFT_PAREN) { { - this.state = 691; + this.state = 789; this.identifierCommentList(); } } - this.state = 702; + this.state = 800; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.COMMENT || _la === SparkSqlParser.PARTITIONED || _la === SparkSqlParser.TBLPROPERTIES) { + while (_la === SparkSqlParser.KW_COMMENT || _la === SparkSqlParser.KW_PARTITIONED || _la === SparkSqlParser.KW_TBLPROPERTIES) { { - this.state = 700; + this.state = 798; this._errHandler.sync(this); switch (this._input.LA(1)) { - case SparkSqlParser.COMMENT: + case SparkSqlParser.KW_COMMENT: { - this.state = 694; + this.state = 792; this.commentSpec(); } break; - case SparkSqlParser.PARTITIONED: + case SparkSqlParser.KW_PARTITIONED: { { - this.state = 695; - this.match(SparkSqlParser.PARTITIONED); - this.state = 696; - this.match(SparkSqlParser.ON); - this.state = 697; + this.state = 793; + this.match(SparkSqlParser.KW_PARTITIONED); + this.state = 794; + this.match(SparkSqlParser.KW_ON); + this.state = 795; this.identifierList(); } } break; - case SparkSqlParser.TBLPROPERTIES: + case SparkSqlParser.KW_TBLPROPERTIES: { { - this.state = 698; - this.match(SparkSqlParser.TBLPROPERTIES); - this.state = 699; - this.tablePropertyList(); + this.state = 796; + this.match(SparkSqlParser.KW_TBLPROPERTIES); + this.state = 797; + this.propertyList(); } } break; @@ -2382,179 +2470,176 @@ export class SparkSqlParser extends Parser { throw new NoViableAltException(this); } } - this.state = 704; + this.state = 802; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 705; - this.match(SparkSqlParser.AS); - this.state = 706; + this.state = 803; + this.match(SparkSqlParser.KW_AS); + this.state = 804; this.query(); } break; - case 35: - _localctx = new CreateTempViewUsingContext(_localctx); - this.enterOuterAlt(_localctx, 35); + case 37: + this.enterOuterAlt(_localctx, 37); { - this.state = 708; - this.match(SparkSqlParser.CREATE); - this.state = 711; + this.state = 806; + this.match(SparkSqlParser.KW_CREATE); + this.state = 809; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.OR) { + if (_la === SparkSqlParser.KW_OR) { { - this.state = 709; - this.match(SparkSqlParser.OR); - this.state = 710; - this.match(SparkSqlParser.REPLACE); + this.state = 807; + this.match(SparkSqlParser.KW_OR); + this.state = 808; + this.match(SparkSqlParser.KW_REPLACE); } } - this.state = 714; + this.state = 812; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.GLOBAL) { + if (_la === SparkSqlParser.KW_GLOBAL) { { - this.state = 713; - this.match(SparkSqlParser.GLOBAL); + this.state = 811; + this.match(SparkSqlParser.KW_GLOBAL); } } - this.state = 716; - this.match(SparkSqlParser.TEMPORARY); - this.state = 717; - this.match(SparkSqlParser.VIEW); - this.state = 718; + this.state = 814; + this.match(SparkSqlParser.KW_TEMPORARY); + this.state = 815; + this.match(SparkSqlParser.KW_VIEW); + this.state = 816; this.tableIdentifier(); - this.state = 723; + this.state = 821; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.T__0) { + if (_la === SparkSqlParser.LEFT_PAREN) { { - this.state = 719; - this.match(SparkSqlParser.T__0); - this.state = 720; + this.state = 817; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 818; this.colTypeList(); - this.state = 721; - this.match(SparkSqlParser.T__1); + this.state = 819; + this.match(SparkSqlParser.RIGHT_PAREN); } } - this.state = 725; + this.state = 823; this.tableProvider(); - this.state = 728; + this.state = 826; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.OPTIONS) { + if (_la === SparkSqlParser.KW_OPTIONS) { { - this.state = 726; - this.match(SparkSqlParser.OPTIONS); - this.state = 727; - this.tablePropertyList(); + this.state = 824; + this.match(SparkSqlParser.KW_OPTIONS); + this.state = 825; + this.propertyList(); } } } break; - case 36: - _localctx = new AlterViewQueryContext(_localctx); - this.enterOuterAlt(_localctx, 36); + case 38: + this.enterOuterAlt(_localctx, 38); { - this.state = 730; - this.match(SparkSqlParser.ALTER); - this.state = 731; - this.match(SparkSqlParser.VIEW); - this.state = 732; - this.multipartIdentifier(); - this.state = 734; + this.state = 828; + this.match(SparkSqlParser.KW_ALTER); + this.state = 829; + this.match(SparkSqlParser.KW_VIEW); + this.state = 830; + this.viewIdentifierReference(); + this.state = 832; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AS) { + if (_la === SparkSqlParser.KW_AS) { { - this.state = 733; - this.match(SparkSqlParser.AS); + this.state = 831; + this.match(SparkSqlParser.KW_AS); } } - this.state = 736; + this.state = 834; this.query(); } break; - case 37: - _localctx = new CreateFunctionContext(_localctx); - this.enterOuterAlt(_localctx, 37); + case 39: + this.enterOuterAlt(_localctx, 39); { - this.state = 738; - this.match(SparkSqlParser.CREATE); - this.state = 741; + this.state = 836; + this.match(SparkSqlParser.KW_CREATE); + this.state = 839; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.OR) { + if (_la === SparkSqlParser.KW_OR) { { - this.state = 739; - this.match(SparkSqlParser.OR); - this.state = 740; - this.match(SparkSqlParser.REPLACE); + this.state = 837; + this.match(SparkSqlParser.KW_OR); + this.state = 838; + this.match(SparkSqlParser.KW_REPLACE); } } - this.state = 744; + this.state = 842; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.TEMPORARY) { + if (_la === SparkSqlParser.KW_TEMPORARY) { { - this.state = 743; - this.match(SparkSqlParser.TEMPORARY); + this.state = 841; + this.match(SparkSqlParser.KW_TEMPORARY); } } - this.state = 746; - this.match(SparkSqlParser.FUNCTION); - this.state = 750; + this.state = 844; + this.match(SparkSqlParser.KW_FUNCTION); + this.state = 848; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 63, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 67, this._ctx) ) { case 1: { - this.state = 747; - this.match(SparkSqlParser.IF); - this.state = 748; - this.match(SparkSqlParser.NOT); - this.state = 749; - this.match(SparkSqlParser.EXISTS); + this.state = 845; + this.match(SparkSqlParser.KW_IF); + this.state = 846; + this.match(SparkSqlParser.KW_NOT); + this.state = 847; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 752; - this.multipartIdentifier(); - this.state = 753; - this.match(SparkSqlParser.AS); - this.state = 754; - (_localctx as CreateFunctionContext)._className = this.match(SparkSqlParser.STRING); - this.state = 764; + this.state = 850; + this.functionIdentifierReference(); + this.state = 851; + this.match(SparkSqlParser.KW_AS); + this.state = 852; + _localctx._className = this.stringLit(); + this.state = 862; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.USING) { + if (_la === SparkSqlParser.KW_USING) { { - this.state = 755; - this.match(SparkSqlParser.USING); - this.state = 756; + this.state = 853; + this.match(SparkSqlParser.KW_USING); + this.state = 854; this.resource(); - this.state = 761; + this.state = 859; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 757; - this.match(SparkSqlParser.T__2); - this.state = 758; + this.state = 855; + this.match(SparkSqlParser.COMMA); + this.state = 856; this.resource(); } } - this.state = 763; + this.state = 861; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -2564,55 +2649,131 @@ export class SparkSqlParser extends Parser { } break; - case 38: - _localctx = new DropFunctionContext(_localctx); - this.enterOuterAlt(_localctx, 38); + case 40: + this.enterOuterAlt(_localctx, 40); { - this.state = 766; - this.match(SparkSqlParser.DROP); - this.state = 768; + this.state = 864; + this.match(SparkSqlParser.KW_DROP); + this.state = 866; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.TEMPORARY) { + if (_la === SparkSqlParser.KW_TEMPORARY) { { - this.state = 767; - this.match(SparkSqlParser.TEMPORARY); + this.state = 865; + this.match(SparkSqlParser.KW_TEMPORARY); } } - this.state = 770; - this.match(SparkSqlParser.FUNCTION); - this.state = 773; + this.state = 868; + this.match(SparkSqlParser.KW_FUNCTION); + this.state = 871; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 67, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 71, this._ctx) ) { case 1: { - this.state = 771; - this.match(SparkSqlParser.IF); - this.state = 772; - this.match(SparkSqlParser.EXISTS); + this.state = 869; + this.match(SparkSqlParser.KW_IF); + this.state = 870; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 775; - this.multipartIdentifier(); + this.state = 873; + this.functionIdentifierReference(); } break; - case 39: - _localctx = new ExplainContext(_localctx); - this.enterOuterAlt(_localctx, 39); + case 41: + this.enterOuterAlt(_localctx, 41); + { + this.state = 874; + this.match(SparkSqlParser.KW_DECLARE); + this.state = 877; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 72, this._ctx) ) { + case 1: + { + this.state = 875; + this.match(SparkSqlParser.KW_OR); + this.state = 876; + this.match(SparkSqlParser.KW_REPLACE); + } + break; + } + this.state = 880; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 73, this._ctx) ) { + case 1: + { + this.state = 879; + this.match(SparkSqlParser.KW_VARIABLE); + } + break; + } + this.state = 882; + this.functionIdentifierReference(); + this.state = 884; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 74, this._ctx) ) { + case 1: + { + this.state = 883; + this.dataType(); + } + break; + } + this.state = 887; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_DEFAULT || _la === SparkSqlParser.EQ) { + { + this.state = 886; + this.variableDefaultExpression(); + } + } + + } + break; + + case 42: + this.enterOuterAlt(_localctx, 42); + { + this.state = 889; + this.match(SparkSqlParser.KW_DROP); + this.state = 890; + this.match(SparkSqlParser.KW_TEMPORARY); + this.state = 891; + this.match(SparkSqlParser.KW_VARIABLE); + this.state = 894; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 76, this._ctx) ) { + case 1: + { + this.state = 892; + this.match(SparkSqlParser.KW_IF); + this.state = 893; + this.match(SparkSqlParser.KW_EXISTS); + } + break; + } + this.state = 896; + this.identifierReference(); + } + break; + + case 43: + this.enterOuterAlt(_localctx, 43); { - this.state = 776; - this.match(SparkSqlParser.EXPLAIN); - this.state = 778; + this.state = 897; + this.match(SparkSqlParser.KW_EXPLAIN); + this.state = 899; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.CODEGEN || _la === SparkSqlParser.COST || _la === SparkSqlParser.EXTENDED || _la === SparkSqlParser.FORMATTED || _la === SparkSqlParser.LOGICAL) { + if (_la === SparkSqlParser.KW_CODEGEN || _la === SparkSqlParser.KW_COST || _la === SparkSqlParser.KW_EXTENDED || _la === SparkSqlParser.KW_FORMATTED || _la === SparkSqlParser.KW_LOGICAL) { { - this.state = 777; + this.state = 898; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.CODEGEN || _la === SparkSqlParser.COST || _la === SparkSqlParser.EXTENDED || _la === SparkSqlParser.FORMATTED || _la === SparkSqlParser.LOGICAL)) { + if (!(_la === SparkSqlParser.KW_CODEGEN || _la === SparkSqlParser.KW_COST || _la === SparkSqlParser.KW_EXTENDED || _la === SparkSqlParser.KW_FORMATTED || _la === SparkSqlParser.KW_LOGICAL)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2625,27 +2786,26 @@ export class SparkSqlParser extends Parser { } } - this.state = 780; + this.state = 901; this.statement(); } break; - case 40: - _localctx = new ShowTablesContext(_localctx); - this.enterOuterAlt(_localctx, 40); + case 44: + this.enterOuterAlt(_localctx, 44); { - this.state = 781; - this.match(SparkSqlParser.SHOW); - this.state = 782; - this.match(SparkSqlParser.TABLES); - this.state = 785; + this.state = 902; + this.match(SparkSqlParser.KW_SHOW); + this.state = 903; + this.match(SparkSqlParser.KW_TABLES); + this.state = 906; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 69, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 78, this._ctx) ) { case 1: { - this.state = 783; + this.state = 904; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FROM || _la === SparkSqlParser.IN)) { + if (!(_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2655,52 +2815,51 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 784; - this.multipartIdentifier(); + this.state = 905; + this.tableIdentifierReference(); } break; } - this.state = 791; + this.state = 912; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.LIKE || _la === SparkSqlParser.STRING) { + switch ( this.interpreter.adaptivePredict(this._input, 80, this._ctx) ) { + case 1: { - this.state = 788; + this.state = 909; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.LIKE) { + switch ( this.interpreter.adaptivePredict(this._input, 79, this._ctx) ) { + case 1: { - this.state = 787; - this.match(SparkSqlParser.LIKE); + this.state = 908; + this.match(SparkSqlParser.KW_LIKE); } + break; } - - this.state = 790; - (_localctx as ShowTablesContext)._pattern = this.match(SparkSqlParser.STRING); + this.state = 911; + _localctx._pattern = this.stringLit(); } + break; } - } break; - case 41: - _localctx = new ShowTableContext(_localctx); - this.enterOuterAlt(_localctx, 41); + case 45: + this.enterOuterAlt(_localctx, 45); { - this.state = 793; - this.match(SparkSqlParser.SHOW); - this.state = 794; - this.match(SparkSqlParser.TABLE); - this.state = 795; - this.match(SparkSqlParser.EXTENDED); - this.state = 798; + this.state = 914; + this.match(SparkSqlParser.KW_SHOW); + this.state = 915; + this.match(SparkSqlParser.KW_TABLE); + this.state = 916; + this.match(SparkSqlParser.KW_EXTENDED); + this.state = 919; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.FROM || _la === SparkSqlParser.IN) { + if (_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN) { { - this.state = 796; + this.state = 917; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FROM || _la === SparkSqlParser.IN)) { + if (!(_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2710,21 +2869,21 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 797; - (_localctx as ShowTableContext)._ns = this.multipartIdentifier(); + this.state = 918; + _localctx._ns = this.tableIdentifierReference(); } } - this.state = 800; - this.match(SparkSqlParser.LIKE); - this.state = 801; - (_localctx as ShowTableContext)._pattern = this.match(SparkSqlParser.STRING); - this.state = 803; + this.state = 921; + this.match(SparkSqlParser.KW_LIKE); + this.state = 922; + _localctx._pattern = this.stringLit(); + this.state = 924; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 802; + this.state = 923; this.partitionSpec(); } } @@ -2732,44 +2891,42 @@ export class SparkSqlParser extends Parser { } break; - case 42: - _localctx = new ShowTblPropertiesContext(_localctx); - this.enterOuterAlt(_localctx, 42); + case 46: + this.enterOuterAlt(_localctx, 46); { - this.state = 805; - this.match(SparkSqlParser.SHOW); - this.state = 806; - this.match(SparkSqlParser.TBLPROPERTIES); - this.state = 807; - (_localctx as ShowTblPropertiesContext)._table = this.multipartIdentifier(); - this.state = 812; + this.state = 926; + this.match(SparkSqlParser.KW_SHOW); + this.state = 927; + this.match(SparkSqlParser.KW_TBLPROPERTIES); + this.state = 928; + _localctx._table = this.tableIdentifierReference(); + this.state = 933; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 74, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 83, this._ctx) ) { case 1: { - this.state = 808; - this.match(SparkSqlParser.T__0); - this.state = 809; - (_localctx as ShowTblPropertiesContext)._key = this.tablePropertyKey(); - this.state = 810; - this.match(SparkSqlParser.T__1); + this.state = 929; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 930; + _localctx._key = this.propertyKey(); + this.state = 931; + this.match(SparkSqlParser.RIGHT_PAREN); } break; } } break; - case 43: - _localctx = new ShowColumnsContext(_localctx); - this.enterOuterAlt(_localctx, 43); + case 47: + this.enterOuterAlt(_localctx, 47); { - this.state = 814; - this.match(SparkSqlParser.SHOW); - this.state = 815; - this.match(SparkSqlParser.COLUMNS); - this.state = 816; + this.state = 935; + this.match(SparkSqlParser.KW_SHOW); + this.state = 936; + this.match(SparkSqlParser.KW_COLUMNS); + this.state = 937; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FROM || _la === SparkSqlParser.IN)) { + if (!(_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2779,16 +2936,16 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 817; - (_localctx as ShowColumnsContext)._table = this.multipartIdentifier(); - this.state = 820; + this.state = 938; + _localctx._table = this.tableIdentifierReference(); + this.state = 941; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 75, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 84, this._ctx) ) { case 1: { - this.state = 818; + this.state = 939; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FROM || _la === SparkSqlParser.IN)) { + if (!(_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2798,30 +2955,29 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 819; - (_localctx as ShowColumnsContext)._ns = this.multipartIdentifier(); + this.state = 940; + this.multipartIdentifier(); } break; } } break; - case 44: - _localctx = new ShowViewsContext(_localctx); - this.enterOuterAlt(_localctx, 44); + case 48: + this.enterOuterAlt(_localctx, 48); { - this.state = 822; - this.match(SparkSqlParser.SHOW); - this.state = 823; - this.match(SparkSqlParser.VIEWS); - this.state = 826; + this.state = 943; + this.match(SparkSqlParser.KW_SHOW); + this.state = 944; + this.match(SparkSqlParser.KW_VIEWS); + this.state = 947; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 76, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 85, this._ctx) ) { case 1: { - this.state = 824; + this.state = 945; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FROM || _la === SparkSqlParser.IN)) { + if (!(_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2831,50 +2987,49 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 825; - this.multipartIdentifier(); + this.state = 946; + this.viewIdentifierReference(); } break; } - this.state = 832; + this.state = 953; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.LIKE || _la === SparkSqlParser.STRING) { + switch ( this.interpreter.adaptivePredict(this._input, 87, this._ctx) ) { + case 1: { - this.state = 829; + this.state = 950; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.LIKE) { + switch ( this.interpreter.adaptivePredict(this._input, 86, this._ctx) ) { + case 1: { - this.state = 828; - this.match(SparkSqlParser.LIKE); + this.state = 949; + this.match(SparkSqlParser.KW_LIKE); } + break; } - - this.state = 831; - (_localctx as ShowViewsContext)._pattern = this.match(SparkSqlParser.STRING); + this.state = 952; + _localctx._pattern = this.stringLit(); } + break; } - } break; - case 45: - _localctx = new ShowPartitionsContext(_localctx); - this.enterOuterAlt(_localctx, 45); + case 49: + this.enterOuterAlt(_localctx, 49); { - this.state = 834; - this.match(SparkSqlParser.SHOW); - this.state = 835; - this.match(SparkSqlParser.PARTITIONS); - this.state = 836; - this.multipartIdentifier(); - this.state = 838; + this.state = 955; + this.match(SparkSqlParser.KW_SHOW); + this.state = 956; + this.match(SparkSqlParser.KW_PARTITIONS); + this.state = 957; + this.identifierReference(); + this.state = 959; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 837; + this.state = 958; this.partitionSpec(); } } @@ -2882,53 +3037,74 @@ export class SparkSqlParser extends Parser { } break; - case 46: - _localctx = new ShowFunctionsContext(_localctx); - this.enterOuterAlt(_localctx, 46); + case 50: + this.enterOuterAlt(_localctx, 50); { - this.state = 840; - this.match(SparkSqlParser.SHOW); - this.state = 842; + this.state = 961; + this.match(SparkSqlParser.KW_SHOW); + this.state = 963; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 80, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 89, this._ctx) ) { case 1: { - this.state = 841; + this.state = 962; this.identifier(); } break; } - this.state = 844; - this.match(SparkSqlParser.FUNCTIONS); - this.state = 852; + this.state = 965; + this.match(SparkSqlParser.KW_FUNCTIONS); + this.state = 968; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 83, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 90, this._ctx) ) { case 1: { - this.state = 846; + this.state = 966; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_FROM || _la === SparkSqlParser.KW_IN)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 967; + _localctx._ns = this.tableIdentifierReference(); + } + break; + } + this.state = 977; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 93, this._ctx) ) { + case 1: + { + this.state = 971; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 81, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 91, this._ctx) ) { case 1: { - this.state = 845; - this.match(SparkSqlParser.LIKE); + this.state = 970; + this.match(SparkSqlParser.KW_LIKE); } break; } - this.state = 850; + this.state = 975; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 82, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 92, this._ctx) ) { case 1: { - this.state = 848; - this.multipartIdentifier(); + this.state = 973; + _localctx._legacy = this.multipartIdentifier(); } break; case 2: { - this.state = 849; - (_localctx as ShowFunctionsContext)._pattern = this.match(SparkSqlParser.STRING); + this.state = 974; + _localctx._pattern = this.stringLit(); } break; } @@ -2938,53 +3114,80 @@ export class SparkSqlParser extends Parser { } break; - case 47: - _localctx = new ShowCreateTableContext(_localctx); - this.enterOuterAlt(_localctx, 47); + case 51: + this.enterOuterAlt(_localctx, 51); { - this.state = 854; - this.match(SparkSqlParser.SHOW); - this.state = 855; - this.match(SparkSqlParser.CREATE); - this.state = 856; - this.match(SparkSqlParser.TABLE); - this.state = 857; - this.multipartIdentifier(); - this.state = 860; + this.state = 979; + this.match(SparkSqlParser.KW_SHOW); + this.state = 980; + this.match(SparkSqlParser.KW_CREATE); + this.state = 981; + this.match(SparkSqlParser.KW_TABLE); + this.state = 982; + this.tableIdentifierReference(); + this.state = 985; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AS) { + if (_la === SparkSqlParser.KW_AS) { { - this.state = 858; - this.match(SparkSqlParser.AS); - this.state = 859; - this.match(SparkSqlParser.SERDE); + this.state = 983; + this.match(SparkSqlParser.KW_AS); + this.state = 984; + this.match(SparkSqlParser.KW_SERDE); } } } break; - case 48: - _localctx = new ShowCurrentNamespaceContext(_localctx); - this.enterOuterAlt(_localctx, 48); + case 52: + this.enterOuterAlt(_localctx, 52); { - this.state = 862; - this.match(SparkSqlParser.SHOW); - this.state = 863; - this.match(SparkSqlParser.CURRENT); - this.state = 864; - this.match(SparkSqlParser.NAMESPACE); + this.state = 987; + this.match(SparkSqlParser.KW_SHOW); + this.state = 988; + this.match(SparkSqlParser.KW_CURRENT); + this.state = 989; + this.namespace(); } break; - case 49: - _localctx = new DescribeFunctionContext(_localctx); - this.enterOuterAlt(_localctx, 49); + case 53: + this.enterOuterAlt(_localctx, 53); { - this.state = 865; + this.state = 990; + this.match(SparkSqlParser.KW_SHOW); + this.state = 991; + this.match(SparkSqlParser.KW_CATALOGS); + this.state = 996; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 96, this._ctx) ) { + case 1: + { + this.state = 993; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 95, this._ctx) ) { + case 1: + { + this.state = 992; + this.match(SparkSqlParser.KW_LIKE); + } + break; + } + this.state = 995; + _localctx._pattern = this.stringLit(); + } + break; + } + } + break; + + case 54: + this.enterOuterAlt(_localctx, 54); + { + this.state = 998; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DESC || _la === SparkSqlParser.DESCRIBE)) { + if (!(_la === SparkSqlParser.KW_DESC || _la === SparkSqlParser.KW_DESCRIBE)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -2994,30 +3197,29 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 866; - this.match(SparkSqlParser.FUNCTION); - this.state = 868; + this.state = 999; + this.match(SparkSqlParser.KW_FUNCTION); + this.state = 1001; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 85, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 97, this._ctx) ) { case 1: { - this.state = 867; - this.match(SparkSqlParser.EXTENDED); + this.state = 1000; + this.match(SparkSqlParser.KW_EXTENDED); } break; } - this.state = 870; + this.state = 1003; this.describeFuncName(); } break; - case 50: - _localctx = new DescribeNamespaceContext(_localctx); - this.enterOuterAlt(_localctx, 50); + case 55: + this.enterOuterAlt(_localctx, 55); { - this.state = 871; + this.state = 1004; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DESC || _la === SparkSqlParser.DESCRIBE)) { + if (!(_la === SparkSqlParser.KW_DESC || _la === SparkSqlParser.KW_DESCRIBE)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -3027,30 +3229,29 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 872; + this.state = 1005; this.namespace(); - this.state = 874; + this.state = 1007; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 86, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 98, this._ctx) ) { case 1: { - this.state = 873; - this.match(SparkSqlParser.EXTENDED); + this.state = 1006; + this.match(SparkSqlParser.KW_EXTENDED); } break; } - this.state = 876; - this.multipartIdentifier(); + this.state = 1009; + this.namespaceIdentifierReference(); } break; - case 51: - _localctx = new DescribeRelationContext(_localctx); - this.enterOuterAlt(_localctx, 51); + case 56: + this.enterOuterAlt(_localctx, 56); { - this.state = 878; + this.state = 1011; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DESC || _la === SparkSqlParser.DESCRIBE)) { + if (!(_la === SparkSqlParser.KW_DESC || _la === SparkSqlParser.KW_DESCRIBE)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -3060,26 +3261,26 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 880; + this.state = 1013; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 87, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 99, this._ctx) ) { case 1: { - this.state = 879; - this.match(SparkSqlParser.TABLE); + this.state = 1012; + this.match(SparkSqlParser.KW_TABLE); } break; } - this.state = 883; + this.state = 1016; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 88, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 100, this._ctx) ) { case 1: { - this.state = 882; - (_localctx as DescribeRelationContext)._option = this._input.LT(1); + this.state = 1015; + _localctx._option = this._input.LT(1); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.EXTENDED || _la === SparkSqlParser.FORMATTED)) { - (_localctx as DescribeRelationContext)._option = this._errHandler.recoverInline(this); + if (!(_la === SparkSqlParser.KW_EXTENDED || _la === SparkSqlParser.KW_FORMATTED)) { + _localctx._option = this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { this.matchedEOF = true; @@ -3091,24 +3292,24 @@ export class SparkSqlParser extends Parser { } break; } - this.state = 885; - this.multipartIdentifier(); - this.state = 887; + this.state = 1018; + this.tableIdentifierReference(); + this.state = 1020; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 89, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 101, this._ctx) ) { case 1: { - this.state = 886; + this.state = 1019; this.partitionSpec(); } break; } - this.state = 890; + this.state = 1023; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 90, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 102, this._ctx) ) { case 1: { - this.state = 889; + this.state = 1022; this.describeColName(); } break; @@ -3116,13 +3317,12 @@ export class SparkSqlParser extends Parser { } break; - case 52: - _localctx = new DescribeQueryContext(_localctx); - this.enterOuterAlt(_localctx, 52); + case 57: + this.enterOuterAlt(_localctx, 57); { - this.state = 892; + this.state = 1025; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DESC || _la === SparkSqlParser.DESCRIBE)) { + if (!(_la === SparkSqlParser.KW_DESC || _la === SparkSqlParser.KW_DESCRIBE)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -3132,140 +3332,113 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 894; + this.state = 1027; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.QUERY) { + if (_la === SparkSqlParser.KW_QUERY) { { - this.state = 893; - this.match(SparkSqlParser.QUERY); + this.state = 1026; + this.match(SparkSqlParser.KW_QUERY); } } - this.state = 896; + this.state = 1029; this.query(); } break; - case 53: - _localctx = new CommentNamespaceContext(_localctx); - this.enterOuterAlt(_localctx, 53); + case 58: + this.enterOuterAlt(_localctx, 58); { - this.state = 897; - this.match(SparkSqlParser.COMMENT); - this.state = 898; - this.match(SparkSqlParser.ON); - this.state = 899; + this.state = 1030; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 1031; + this.match(SparkSqlParser.KW_ON); + this.state = 1032; this.namespace(); - this.state = 900; - this.multipartIdentifier(); - this.state = 901; - this.match(SparkSqlParser.IS); - this.state = 902; - (_localctx as CommentNamespaceContext)._comment = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.NULL || _la === SparkSqlParser.STRING)) { - (_localctx as CommentNamespaceContext)._comment = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } + this.state = 1033; + this.namespaceIdentifierReference(); + this.state = 1034; + this.match(SparkSqlParser.KW_IS); + this.state = 1035; + this.comment(); } break; - case 54: - _localctx = new CommentTableContext(_localctx); - this.enterOuterAlt(_localctx, 54); + case 59: + this.enterOuterAlt(_localctx, 59); { - this.state = 904; - this.match(SparkSqlParser.COMMENT); - this.state = 905; - this.match(SparkSqlParser.ON); - this.state = 906; - this.match(SparkSqlParser.TABLE); - this.state = 907; - this.multipartIdentifier(); - this.state = 908; - this.match(SparkSqlParser.IS); - this.state = 909; - (_localctx as CommentTableContext)._comment = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.NULL || _la === SparkSqlParser.STRING)) { - (_localctx as CommentTableContext)._comment = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } + this.state = 1037; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 1038; + this.match(SparkSqlParser.KW_ON); + this.state = 1039; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1040; + this.tableIdentifierReference(); + this.state = 1041; + this.match(SparkSqlParser.KW_IS); + this.state = 1042; + this.comment(); } break; - case 55: - _localctx = new RefreshTableContext(_localctx); - this.enterOuterAlt(_localctx, 55); + case 60: + this.enterOuterAlt(_localctx, 60); { - this.state = 911; - this.match(SparkSqlParser.REFRESH); - this.state = 912; - this.match(SparkSqlParser.TABLE); - this.state = 913; - this.multipartIdentifier(); + this.state = 1044; + this.match(SparkSqlParser.KW_REFRESH); + this.state = 1045; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1046; + this.tableIdentifierReference(); } break; - case 56: - _localctx = new RefreshFunctionContext(_localctx); - this.enterOuterAlt(_localctx, 56); + case 61: + this.enterOuterAlt(_localctx, 61); { - this.state = 914; - this.match(SparkSqlParser.REFRESH); - this.state = 915; - this.match(SparkSqlParser.FUNCTION); - this.state = 916; - this.multipartIdentifier(); + this.state = 1047; + this.match(SparkSqlParser.KW_REFRESH); + this.state = 1048; + this.match(SparkSqlParser.KW_FUNCTION); + this.state = 1049; + this.functionIdentifierReference(); } break; - case 57: - _localctx = new RefreshResourceContext(_localctx); - this.enterOuterAlt(_localctx, 57); + case 62: + this.enterOuterAlt(_localctx, 62); { - this.state = 917; - this.match(SparkSqlParser.REFRESH); - this.state = 925; + this.state = 1050; + this.match(SparkSqlParser.KW_REFRESH); + this.state = 1058; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 93, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 105, this._ctx) ) { case 1: { - this.state = 918; - this.match(SparkSqlParser.STRING); + this.state = 1051; + this.stringLit(); } break; case 2: { - this.state = 922; + this.state = 1055; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 92, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 104, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 919; + this.state = 1052; this.matchWildcard(); } } } - this.state = 924; + this.state = 1057; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 92, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 104, this._ctx); } } break; @@ -3273,54 +3446,53 @@ export class SparkSqlParser extends Parser { } break; - case 58: - _localctx = new CacheTableContext(_localctx); - this.enterOuterAlt(_localctx, 58); + case 63: + this.enterOuterAlt(_localctx, 63); { - this.state = 927; - this.match(SparkSqlParser.CACHE); - this.state = 929; + this.state = 1060; + this.match(SparkSqlParser.KW_CACHE); + this.state = 1062; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.LAZY) { + if (_la === SparkSqlParser.KW_LAZY) { { - this.state = 928; - this.match(SparkSqlParser.LAZY); + this.state = 1061; + this.match(SparkSqlParser.KW_LAZY); } } - this.state = 931; - this.match(SparkSqlParser.TABLE); - this.state = 932; - this.multipartIdentifier(); - this.state = 935; + this.state = 1064; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1065; + this.tableIdentifierReference(); + this.state = 1068; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.OPTIONS) { + if (_la === SparkSqlParser.KW_OPTIONS) { { - this.state = 933; - this.match(SparkSqlParser.OPTIONS); - this.state = 934; - this.tablePropertyList(); + this.state = 1066; + this.match(SparkSqlParser.KW_OPTIONS); + this.state = 1067; + _localctx._options = this.propertyList(); } } - this.state = 941; + this.state = 1074; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 97, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 109, this._ctx) ) { case 1: { - this.state = 938; + this.state = 1071; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AS) { + if (_la === SparkSqlParser.KW_AS) { { - this.state = 937; - this.match(SparkSqlParser.AS); + this.state = 1070; + this.match(SparkSqlParser.KW_AS); } } - this.state = 940; + this.state = 1073; this.query(); } break; @@ -3328,86 +3500,83 @@ export class SparkSqlParser extends Parser { } break; - case 59: - _localctx = new UncacheTableContext(_localctx); - this.enterOuterAlt(_localctx, 59); + case 64: + this.enterOuterAlt(_localctx, 64); { - this.state = 943; - this.match(SparkSqlParser.UNCACHE); - this.state = 944; - this.match(SparkSqlParser.TABLE); - this.state = 947; + this.state = 1076; + this.match(SparkSqlParser.KW_UNCACHE); + this.state = 1077; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1080; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 98, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 110, this._ctx) ) { case 1: { - this.state = 945; - this.match(SparkSqlParser.IF); - this.state = 946; - this.match(SparkSqlParser.EXISTS); + this.state = 1078; + this.match(SparkSqlParser.KW_IF); + this.state = 1079; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 949; - this.multipartIdentifier(); + this.state = 1082; + this.tableIdentifierReference(); } break; - case 60: - _localctx = new ClearCacheContext(_localctx); - this.enterOuterAlt(_localctx, 60); + case 65: + this.enterOuterAlt(_localctx, 65); { - this.state = 950; - this.match(SparkSqlParser.CLEAR); - this.state = 951; - this.match(SparkSqlParser.CACHE); + this.state = 1083; + this.match(SparkSqlParser.KW_CLEAR); + this.state = 1084; + this.match(SparkSqlParser.KW_CACHE); } break; - case 61: - _localctx = new LoadDataContext(_localctx); - this.enterOuterAlt(_localctx, 61); + case 66: + this.enterOuterAlt(_localctx, 66); { - this.state = 952; - this.match(SparkSqlParser.LOAD); - this.state = 953; - this.match(SparkSqlParser.DATA); - this.state = 955; + this.state = 1085; + this.match(SparkSqlParser.KW_LOAD); + this.state = 1086; + this.match(SparkSqlParser.KW_DATA); + this.state = 1088; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.LOCAL) { + if (_la === SparkSqlParser.KW_LOCAL) { { - this.state = 954; - this.match(SparkSqlParser.LOCAL); + this.state = 1087; + this.match(SparkSqlParser.KW_LOCAL); } } - this.state = 957; - this.match(SparkSqlParser.INPATH); - this.state = 958; - (_localctx as LoadDataContext)._path = this.match(SparkSqlParser.STRING); - this.state = 960; + this.state = 1090; + this.match(SparkSqlParser.KW_INPATH); + this.state = 1091; + _localctx._path = this.stringLit(); + this.state = 1093; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.OVERWRITE) { + if (_la === SparkSqlParser.KW_OVERWRITE) { { - this.state = 959; - this.match(SparkSqlParser.OVERWRITE); + this.state = 1092; + this.match(SparkSqlParser.KW_OVERWRITE); } } - this.state = 962; - this.match(SparkSqlParser.INTO); - this.state = 963; - this.match(SparkSqlParser.TABLE); - this.state = 964; - this.multipartIdentifier(); - this.state = 966; + this.state = 1095; + this.match(SparkSqlParser.KW_INTO); + this.state = 1096; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1097; + this.tableIdentifierReference(); + this.state = 1099; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 965; + this.state = 1098; this.partitionSpec(); } } @@ -3415,22 +3584,21 @@ export class SparkSqlParser extends Parser { } break; - case 62: - _localctx = new TruncateTableContext(_localctx); - this.enterOuterAlt(_localctx, 62); + case 67: + this.enterOuterAlt(_localctx, 67); { - this.state = 968; - this.match(SparkSqlParser.TRUNCATE); - this.state = 969; - this.match(SparkSqlParser.TABLE); - this.state = 970; - this.multipartIdentifier(); - this.state = 972; + this.state = 1101; + this.match(SparkSqlParser.KW_TRUNCATE); + this.state = 1102; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1103; + this.tableIdentifierReference(); + this.state = 1105; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 971; + this.state = 1104; this.partitionSpec(); } } @@ -3438,30 +3606,59 @@ export class SparkSqlParser extends Parser { } break; - case 63: - _localctx = new RepairTableContext(_localctx); - this.enterOuterAlt(_localctx, 63); + case 68: + this.enterOuterAlt(_localctx, 68); { - this.state = 974; - this.match(SparkSqlParser.MSCK); - this.state = 975; - this.match(SparkSqlParser.REPAIR); - this.state = 976; - this.match(SparkSqlParser.TABLE); - this.state = 977; - this.multipartIdentifier(); + this.state = 1108; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_MSCK) { + { + this.state = 1107; + this.match(SparkSqlParser.KW_MSCK); + } + } + + this.state = 1110; + this.match(SparkSqlParser.KW_REPAIR); + this.state = 1111; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1112; + this.tableIdentifierReference(); + this.state = 1115; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 116, this._ctx) ) { + case 1: + { + this.state = 1113; + _localctx._option = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_ADD || _la === SparkSqlParser.KW_DROP || _la === SparkSqlParser.KW_SYNC)) { + _localctx._option = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1114; + this.match(SparkSqlParser.KW_PARTITIONS); + } + break; + } } break; - case 64: - _localctx = new ManageResourceContext(_localctx); - this.enterOuterAlt(_localctx, 64); + case 69: + this.enterOuterAlt(_localctx, 69); { - this.state = 978; - (_localctx as ManageResourceContext)._op = this._input.LT(1); + this.state = 1117; + _localctx._op = this._input.LT(1); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.ADD || _la === SparkSqlParser.LIST)) { - (_localctx as ManageResourceContext)._op = this._errHandler.recoverInline(this); + if (!(_la === SparkSqlParser.KW_ADD || _la === SparkSqlParser.KW_LIST)) { + _localctx._op = this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { this.matchedEOF = true; @@ -3470,169 +3667,208 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 979; + this.state = 1118; this.identifier(); - this.state = 987; + this.state = 1122; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 104, this._ctx) ) { - case 1: - { - this.state = 980; - this.match(SparkSqlParser.STRING); - } - break; - - case 2: - { - this.state = 984; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 103, this._ctx); - while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1 + 1) { - { - { - this.state = 981; - this.matchWildcard(); - } - } + _alt = this.interpreter.adaptivePredict(this._input, 117, this._ctx); + while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1 + 1) { + { + { + this.state = 1119; + this.matchWildcard(); + } } - this.state = 986; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 103, this._ctx); - } } - break; + this.state = 1124; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 117, this._ctx); } } break; - case 65: - _localctx = new FailNativeCommandContext(_localctx); - this.enterOuterAlt(_localctx, 65); + case 70: + this.enterOuterAlt(_localctx, 70); { - this.state = 989; - this.match(SparkSqlParser.SET); - this.state = 990; - this.match(SparkSqlParser.ROLE); - this.state = 994; + this.state = 1125; + this.match(SparkSqlParser.KW_SET); + this.state = 1126; + this.match(SparkSqlParser.KW_ROLE); + this.state = 1130; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 105, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 118, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 991; + this.state = 1127; this.matchWildcard(); } } } - this.state = 996; + this.state = 1132; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 105, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 118, this._ctx); } } break; - case 66: - _localctx = new SetTimeZoneContext(_localctx); - this.enterOuterAlt(_localctx, 66); + case 71: + this.enterOuterAlt(_localctx, 71); { - this.state = 997; - this.match(SparkSqlParser.SET); - this.state = 998; - this.match(SparkSqlParser.TIME); - this.state = 999; - this.match(SparkSqlParser.ZONE); - this.state = 1000; + this.state = 1133; + this.match(SparkSqlParser.KW_SET); + this.state = 1134; + this.match(SparkSqlParser.KW_TIME); + this.state = 1135; + this.match(SparkSqlParser.KW_ZONE); + this.state = 1136; this.interval(); } break; - case 67: - _localctx = new SetTimeZoneContext(_localctx); - this.enterOuterAlt(_localctx, 67); + case 72: + this.enterOuterAlt(_localctx, 72); { - this.state = 1001; - this.match(SparkSqlParser.SET); - this.state = 1002; - this.match(SparkSqlParser.TIME); - this.state = 1003; - this.match(SparkSqlParser.ZONE); - this.state = 1004; - (_localctx as SetTimeZoneContext)._timezone = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.LOCAL || _la === SparkSqlParser.STRING)) { - (_localctx as SetTimeZoneContext)._timezone = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } + this.state = 1137; + this.match(SparkSqlParser.KW_SET); + this.state = 1138; + this.match(SparkSqlParser.KW_TIME); + this.state = 1139; + this.match(SparkSqlParser.KW_ZONE); + this.state = 1140; + this.timezone(); } break; - case 68: - _localctx = new SetTimeZoneContext(_localctx); - this.enterOuterAlt(_localctx, 68); + case 73: + this.enterOuterAlt(_localctx, 73); { - this.state = 1005; - this.match(SparkSqlParser.SET); - this.state = 1006; - this.match(SparkSqlParser.TIME); - this.state = 1007; - this.match(SparkSqlParser.ZONE); - this.state = 1011; + this.state = 1141; + this.match(SparkSqlParser.KW_SET); + this.state = 1142; + this.match(SparkSqlParser.KW_TIME); + this.state = 1143; + this.match(SparkSqlParser.KW_ZONE); + this.state = 1147; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 106, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 119, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 1008; + this.state = 1144; this.matchWildcard(); } } } - this.state = 1013; + this.state = 1149; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 106, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 119, this._ctx); } } break; - case 69: - _localctx = new SetQuotedConfigurationContext(_localctx); - this.enterOuterAlt(_localctx, 69); + case 74: + this.enterOuterAlt(_localctx, 74); + { + this.state = 1150; + this.match(SparkSqlParser.KW_SET); + this.state = 1151; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_VAR || _la === SparkSqlParser.KW_VARIABLE)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1152; + this.assignmentList(); + } + break; + + case 75: + this.enterOuterAlt(_localctx, 75); + { + this.state = 1153; + this.match(SparkSqlParser.KW_SET); + this.state = 1154; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_VAR || _la === SparkSqlParser.KW_VARIABLE)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 1155; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1156; + this.multipartIdentifierList(); + this.state = 1157; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 1158; + this.match(SparkSqlParser.EQ); + this.state = 1159; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1160; + this.query(); + this.state = 1161; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 76: + this.enterOuterAlt(_localctx, 76); { - this.state = 1014; - this.match(SparkSqlParser.SET); - this.state = 1015; + this.state = 1163; + this.match(SparkSqlParser.KW_SET); + this.state = 1164; this.configKey(); - this.state = 1023; + this.state = 1165; + this.match(SparkSqlParser.EQ); + this.state = 1166; + this.configValue(); + } + break; + + case 77: + this.enterOuterAlt(_localctx, 77); + { + this.state = 1168; + this.match(SparkSqlParser.KW_SET); + this.state = 1169; + this.configKey(); + this.state = 1177; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === SparkSqlParser.EQ) { { - this.state = 1016; + this.state = 1170; this.match(SparkSqlParser.EQ); - this.state = 1020; + this.state = 1174; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 107, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 120, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 1017; + this.state = 1171; this.matchWildcard(); } } } - this.state = 1022; + this.state = 1176; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 107, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 120, this._ctx); } } } @@ -3640,89 +3876,260 @@ export class SparkSqlParser extends Parser { } break; - case 70: - _localctx = new SetConfigurationContext(_localctx); - this.enterOuterAlt(_localctx, 70); + case 78: + this.enterOuterAlt(_localctx, 78); { - this.state = 1025; - this.match(SparkSqlParser.SET); - this.state = 1029; + this.state = 1179; + this.match(SparkSqlParser.KW_SET); + this.state = 1183; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 109, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 122, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 1026; + this.state = 1180; this.matchWildcard(); } } } - this.state = 1031; + this.state = 1185; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 109, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 122, this._ctx); } + this.state = 1186; + this.match(SparkSqlParser.EQ); + this.state = 1187; + this.configValue(); } break; - case 71: - _localctx = new ResetQuotedConfigurationContext(_localctx); - this.enterOuterAlt(_localctx, 71); + case 79: + this.enterOuterAlt(_localctx, 79); { - this.state = 1032; - this.match(SparkSqlParser.RESET); - this.state = 1033; + this.state = 1188; + this.match(SparkSqlParser.KW_SET); + this.state = 1192; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 123, this._ctx); + while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1 + 1) { + { + { + this.state = 1189; + this.matchWildcard(); + } + } + } + this.state = 1194; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 123, this._ctx); + } + } + break; + + case 80: + this.enterOuterAlt(_localctx, 80); + { + this.state = 1195; + this.match(SparkSqlParser.KW_RESET); + this.state = 1196; this.configKey(); } break; - case 72: - _localctx = new ResetConfigurationContext(_localctx); - this.enterOuterAlt(_localctx, 72); + case 81: + this.enterOuterAlt(_localctx, 81); { - this.state = 1034; - this.match(SparkSqlParser.RESET); - this.state = 1038; + this.state = 1197; + this.match(SparkSqlParser.KW_RESET); + this.state = 1201; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 110, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 124, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 1035; + this.state = 1198; this.matchWildcard(); } } } - this.state = 1040; + this.state = 1203; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 110, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 124, this._ctx); } } break; - case 73: - _localctx = new FailNativeCommandContext(_localctx); - this.enterOuterAlt(_localctx, 73); + case 82: + this.enterOuterAlt(_localctx, 82); { - this.state = 1041; + this.state = 1204; + this.match(SparkSqlParser.KW_CREATE); + this.state = 1205; + this.match(SparkSqlParser.KW_INDEX); + this.state = 1209; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 125, this._ctx) ) { + case 1: + { + this.state = 1206; + this.match(SparkSqlParser.KW_IF); + this.state = 1207; + this.match(SparkSqlParser.KW_NOT); + this.state = 1208; + this.match(SparkSqlParser.KW_EXISTS); + } + break; + } + this.state = 1211; + this.identifier(); + this.state = 1212; + this.match(SparkSqlParser.KW_ON); + this.state = 1214; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 126, this._ctx) ) { + case 1: + { + this.state = 1213; + this.match(SparkSqlParser.KW_TABLE); + } + break; + } + this.state = 1216; + this.tableIdentifierReference(); + this.state = 1219; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_USING) { + { + this.state = 1217; + this.match(SparkSqlParser.KW_USING); + this.state = 1218; + _localctx._indexType = this.identifier(); + } + } + + this.state = 1221; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1222; + this.multipartIdentifierPropertyList(); + this.state = 1223; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 1226; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_OPTIONS) { + { + this.state = 1224; + this.match(SparkSqlParser.KW_OPTIONS); + this.state = 1225; + _localctx._options = this.propertyList(); + } + } + + } + break; + + case 83: + this.enterOuterAlt(_localctx, 83); + { + this.state = 1228; + this.match(SparkSqlParser.KW_DROP); + this.state = 1229; + this.match(SparkSqlParser.KW_INDEX); + this.state = 1232; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 129, this._ctx) ) { + case 1: + { + this.state = 1230; + this.match(SparkSqlParser.KW_IF); + this.state = 1231; + this.match(SparkSqlParser.KW_EXISTS); + } + break; + } + this.state = 1234; + this.identifier(); + this.state = 1235; + this.match(SparkSqlParser.KW_ON); + this.state = 1237; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 130, this._ctx) ) { + case 1: + { + this.state = 1236; + this.match(SparkSqlParser.KW_TABLE); + } + break; + } + this.state = 1239; + this.tableIdentifierReference(); + } + break; + + case 84: + this.enterOuterAlt(_localctx, 84); + { + this.state = 1241; this.unsupportedHiveNativeCommands(); - this.state = 1045; + this.state = 1245; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 111, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 131, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 1042; + this.state = 1242; this.matchWildcard(); } } } - this.state = 1047; + this.state = 1247; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 111, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 131, this._ctx); + } + } + 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 timezone(): TimezoneContext { + let _localctx: TimezoneContext = new TimezoneContext(this._ctx, this.state); + this.enterRule(_localctx, 14, SparkSqlParser.RULE_timezone); + try { + this.state = 1252; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 133, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 1250; + this.stringLit(); } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 1251; + this.match(SparkSqlParser.KW_LOCAL); } break; } @@ -3744,11 +4151,11 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public configKey(): ConfigKeyContext { let _localctx: ConfigKeyContext = new ConfigKeyContext(this._ctx, this.state); - this.enterRule(_localctx, 18, SparkSqlParser.RULE_configKey); + this.enterRule(_localctx, 16, SparkSqlParser.RULE_configKey); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1050; + this.state = 1254; this.quotedIdentifier(); } } @@ -3767,46 +4174,71 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) + public configValue(): ConfigValueContext { + let _localctx: ConfigValueContext = new ConfigValueContext(this._ctx, this.state); + this.enterRule(_localctx, 18, SparkSqlParser.RULE_configValue); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 1256; + this.backQuotedIdentifier(); + } + } + 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 unsupportedHiveNativeCommands(): UnsupportedHiveNativeCommandsContext { let _localctx: UnsupportedHiveNativeCommandsContext = new UnsupportedHiveNativeCommandsContext(this._ctx, this.state); this.enterRule(_localctx, 20, SparkSqlParser.RULE_unsupportedHiveNativeCommands); let _la: number; try { - this.state = 1220; + this.state = 1426; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 120, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 141, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1052; - _localctx._kw1 = this.match(SparkSqlParser.CREATE); - this.state = 1053; - _localctx._kw2 = this.match(SparkSqlParser.ROLE); + this.state = 1258; + _localctx._kw1 = this.match(SparkSqlParser.KW_CREATE); + this.state = 1259; + _localctx._kw2 = this.match(SparkSqlParser.KW_ROLE); } break; case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1054; - _localctx._kw1 = this.match(SparkSqlParser.DROP); - this.state = 1055; - _localctx._kw2 = this.match(SparkSqlParser.ROLE); + this.state = 1260; + _localctx._kw1 = this.match(SparkSqlParser.KW_DROP); + this.state = 1261; + _localctx._kw2 = this.match(SparkSqlParser.KW_ROLE); } break; case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1056; - _localctx._kw1 = this.match(SparkSqlParser.GRANT); - this.state = 1058; + this.state = 1262; + _localctx._kw1 = this.match(SparkSqlParser.KW_GRANT); + this.state = 1264; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 113, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 134, this._ctx) ) { case 1: { - this.state = 1057; - _localctx._kw2 = this.match(SparkSqlParser.ROLE); + this.state = 1263; + _localctx._kw2 = this.match(SparkSqlParser.KW_ROLE); } break; } @@ -3816,15 +4248,15 @@ export class SparkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 1060; - _localctx._kw1 = this.match(SparkSqlParser.REVOKE); - this.state = 1062; + this.state = 1266; + _localctx._kw1 = this.match(SparkSqlParser.KW_REVOKE); + this.state = 1268; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 114, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 135, this._ctx) ) { case 1: { - this.state = 1061; - _localctx._kw2 = this.match(SparkSqlParser.ROLE); + this.state = 1267; + _localctx._kw2 = this.match(SparkSqlParser.KW_ROLE); } break; } @@ -3834,27 +4266,27 @@ export class SparkSqlParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 1064; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1065; - _localctx._kw2 = this.match(SparkSqlParser.GRANT); + this.state = 1270; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1271; + _localctx._kw2 = this.match(SparkSqlParser.KW_GRANT); } break; case 6: this.enterOuterAlt(_localctx, 6); { - this.state = 1066; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1067; - _localctx._kw2 = this.match(SparkSqlParser.ROLE); - this.state = 1069; + this.state = 1272; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1273; + _localctx._kw2 = this.match(SparkSqlParser.KW_ROLE); + this.state = 1275; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 115, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 136, this._ctx) ) { case 1: { - this.state = 1068; - _localctx._kw3 = this.match(SparkSqlParser.GRANT); + this.state = 1274; + _localctx._kw3 = this.match(SparkSqlParser.KW_GRANT); } break; } @@ -3864,512 +4296,512 @@ export class SparkSqlParser extends Parser { case 7: this.enterOuterAlt(_localctx, 7); { - this.state = 1071; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1072; - _localctx._kw2 = this.match(SparkSqlParser.PRINCIPALS); + this.state = 1277; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1278; + _localctx._kw2 = this.match(SparkSqlParser.KW_PRINCIPALS); } break; case 8: this.enterOuterAlt(_localctx, 8); { - this.state = 1073; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1074; - _localctx._kw2 = this.match(SparkSqlParser.ROLES); + this.state = 1279; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1280; + _localctx._kw2 = this.match(SparkSqlParser.KW_ROLES); } break; case 9: this.enterOuterAlt(_localctx, 9); { - this.state = 1075; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1076; - _localctx._kw2 = this.match(SparkSqlParser.CURRENT); - this.state = 1077; - _localctx._kw3 = this.match(SparkSqlParser.ROLES); + this.state = 1281; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1282; + _localctx._kw2 = this.match(SparkSqlParser.KW_CURRENT); + this.state = 1283; + _localctx._kw3 = this.match(SparkSqlParser.KW_ROLES); } break; case 10: this.enterOuterAlt(_localctx, 10); { - this.state = 1078; - _localctx._kw1 = this.match(SparkSqlParser.EXPORT); - this.state = 1079; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); + this.state = 1284; + _localctx._kw1 = this.match(SparkSqlParser.KW_EXPORT); + this.state = 1285; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); } break; case 11: this.enterOuterAlt(_localctx, 11); { - this.state = 1080; - _localctx._kw1 = this.match(SparkSqlParser.IMPORT); - this.state = 1081; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); + this.state = 1286; + _localctx._kw1 = this.match(SparkSqlParser.KW_IMPORT); + this.state = 1287; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); } break; case 12: this.enterOuterAlt(_localctx, 12); { - this.state = 1082; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1083; - _localctx._kw2 = this.match(SparkSqlParser.COMPACTIONS); + this.state = 1288; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1289; + _localctx._kw2 = this.match(SparkSqlParser.KW_COMPACTIONS); } break; case 13: this.enterOuterAlt(_localctx, 13); { - this.state = 1084; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1085; - _localctx._kw2 = this.match(SparkSqlParser.CREATE); - this.state = 1086; - _localctx._kw3 = this.match(SparkSqlParser.TABLE); + this.state = 1290; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1291; + _localctx._kw2 = this.match(SparkSqlParser.KW_CREATE); + this.state = 1292; + _localctx._kw3 = this.match(SparkSqlParser.KW_TABLE); } break; case 14: this.enterOuterAlt(_localctx, 14); { - this.state = 1087; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1088; - _localctx._kw2 = this.match(SparkSqlParser.TRANSACTIONS); + this.state = 1293; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1294; + _localctx._kw2 = this.match(SparkSqlParser.KW_TRANSACTIONS); } break; case 15: this.enterOuterAlt(_localctx, 15); { - this.state = 1089; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1090; - _localctx._kw2 = this.match(SparkSqlParser.INDEXES); + this.state = 1295; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1296; + _localctx._kw2 = this.match(SparkSqlParser.KW_INDEXES); } break; case 16: this.enterOuterAlt(_localctx, 16); { - this.state = 1091; - _localctx._kw1 = this.match(SparkSqlParser.SHOW); - this.state = 1092; - _localctx._kw2 = this.match(SparkSqlParser.LOCKS); + this.state = 1297; + _localctx._kw1 = this.match(SparkSqlParser.KW_SHOW); + this.state = 1298; + _localctx._kw2 = this.match(SparkSqlParser.KW_LOCKS); } break; case 17: this.enterOuterAlt(_localctx, 17); { - this.state = 1093; - _localctx._kw1 = this.match(SparkSqlParser.CREATE); - this.state = 1094; - _localctx._kw2 = this.match(SparkSqlParser.INDEX); + this.state = 1299; + _localctx._kw1 = this.match(SparkSqlParser.KW_CREATE); + this.state = 1300; + _localctx._kw2 = this.match(SparkSqlParser.KW_INDEX); } break; case 18: this.enterOuterAlt(_localctx, 18); { - this.state = 1095; - _localctx._kw1 = this.match(SparkSqlParser.DROP); - this.state = 1096; - _localctx._kw2 = this.match(SparkSqlParser.INDEX); + this.state = 1301; + _localctx._kw1 = this.match(SparkSqlParser.KW_DROP); + this.state = 1302; + _localctx._kw2 = this.match(SparkSqlParser.KW_INDEX); } break; case 19: this.enterOuterAlt(_localctx, 19); { - this.state = 1097; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1098; - _localctx._kw2 = this.match(SparkSqlParser.INDEX); + this.state = 1303; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1304; + _localctx._kw2 = this.match(SparkSqlParser.KW_INDEX); } break; case 20: this.enterOuterAlt(_localctx, 20); { - this.state = 1099; - _localctx._kw1 = this.match(SparkSqlParser.LOCK); - this.state = 1100; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); + this.state = 1305; + _localctx._kw1 = this.match(SparkSqlParser.KW_LOCK); + this.state = 1306; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); } break; case 21: this.enterOuterAlt(_localctx, 21); { - this.state = 1101; - _localctx._kw1 = this.match(SparkSqlParser.LOCK); - this.state = 1102; - _localctx._kw2 = this.match(SparkSqlParser.DATABASE); + this.state = 1307; + _localctx._kw1 = this.match(SparkSqlParser.KW_LOCK); + this.state = 1308; + _localctx._kw2 = this.match(SparkSqlParser.KW_DATABASE); } break; case 22: this.enterOuterAlt(_localctx, 22); { - this.state = 1103; - _localctx._kw1 = this.match(SparkSqlParser.UNLOCK); - this.state = 1104; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); + this.state = 1309; + _localctx._kw1 = this.match(SparkSqlParser.KW_UNLOCK); + this.state = 1310; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); } break; case 23: this.enterOuterAlt(_localctx, 23); { - this.state = 1105; - _localctx._kw1 = this.match(SparkSqlParser.UNLOCK); - this.state = 1106; - _localctx._kw2 = this.match(SparkSqlParser.DATABASE); + this.state = 1311; + _localctx._kw1 = this.match(SparkSqlParser.KW_UNLOCK); + this.state = 1312; + _localctx._kw2 = this.match(SparkSqlParser.KW_DATABASE); } break; case 24: this.enterOuterAlt(_localctx, 24); { - this.state = 1107; - _localctx._kw1 = this.match(SparkSqlParser.CREATE); - this.state = 1108; - _localctx._kw2 = this.match(SparkSqlParser.TEMPORARY); - this.state = 1109; - _localctx._kw3 = this.match(SparkSqlParser.MACRO); + this.state = 1313; + _localctx._kw1 = this.match(SparkSqlParser.KW_CREATE); + this.state = 1314; + _localctx._kw2 = this.match(SparkSqlParser.KW_TEMPORARY); + this.state = 1315; + _localctx._kw3 = this.match(SparkSqlParser.KW_MACRO); } break; case 25: this.enterOuterAlt(_localctx, 25); { - this.state = 1110; - _localctx._kw1 = this.match(SparkSqlParser.DROP); - this.state = 1111; - _localctx._kw2 = this.match(SparkSqlParser.TEMPORARY); - this.state = 1112; - _localctx._kw3 = this.match(SparkSqlParser.MACRO); + this.state = 1316; + _localctx._kw1 = this.match(SparkSqlParser.KW_DROP); + this.state = 1317; + _localctx._kw2 = this.match(SparkSqlParser.KW_TEMPORARY); + this.state = 1318; + _localctx._kw3 = this.match(SparkSqlParser.KW_MACRO); } break; case 26: this.enterOuterAlt(_localctx, 26); { - this.state = 1113; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1114; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1115; + this.state = 1319; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1320; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1321; this.tableIdentifier(); - this.state = 1116; - _localctx._kw3 = this.match(SparkSqlParser.NOT); - this.state = 1117; - _localctx._kw4 = this.match(SparkSqlParser.CLUSTERED); + this.state = 1322; + _localctx._kw3 = this.match(SparkSqlParser.KW_NOT); + this.state = 1323; + _localctx._kw4 = this.match(SparkSqlParser.KW_CLUSTERED); } break; case 27: this.enterOuterAlt(_localctx, 27); { - this.state = 1119; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1120; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1121; + this.state = 1325; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1326; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1327; this.tableIdentifier(); - this.state = 1122; - _localctx._kw3 = this.match(SparkSqlParser.CLUSTERED); - this.state = 1123; - _localctx._kw4 = this.match(SparkSqlParser.BY); + this.state = 1328; + _localctx._kw3 = this.match(SparkSqlParser.KW_CLUSTERED); + this.state = 1329; + _localctx._kw4 = this.match(SparkSqlParser.KW_BY); } break; case 28: this.enterOuterAlt(_localctx, 28); { - this.state = 1125; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1126; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1127; + this.state = 1331; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1332; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1333; this.tableIdentifier(); - this.state = 1128; - _localctx._kw3 = this.match(SparkSqlParser.NOT); - this.state = 1129; - _localctx._kw4 = this.match(SparkSqlParser.SORTED); + this.state = 1334; + _localctx._kw3 = this.match(SparkSqlParser.KW_NOT); + this.state = 1335; + _localctx._kw4 = this.match(SparkSqlParser.KW_SORTED); } break; case 29: this.enterOuterAlt(_localctx, 29); { - this.state = 1131; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1132; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1133; + this.state = 1337; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1338; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1339; this.tableIdentifier(); - this.state = 1134; - _localctx._kw3 = this.match(SparkSqlParser.SKEWED); - this.state = 1135; - _localctx._kw4 = this.match(SparkSqlParser.BY); + this.state = 1340; + _localctx._kw3 = this.match(SparkSqlParser.KW_SKEWED); + this.state = 1341; + _localctx._kw4 = this.match(SparkSqlParser.KW_BY); } break; case 30: this.enterOuterAlt(_localctx, 30); { - this.state = 1137; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1138; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1139; + this.state = 1343; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1344; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1345; this.tableIdentifier(); - this.state = 1140; - _localctx._kw3 = this.match(SparkSqlParser.NOT); - this.state = 1141; - _localctx._kw4 = this.match(SparkSqlParser.SKEWED); + this.state = 1346; + _localctx._kw3 = this.match(SparkSqlParser.KW_NOT); + this.state = 1347; + _localctx._kw4 = this.match(SparkSqlParser.KW_SKEWED); } break; case 31: this.enterOuterAlt(_localctx, 31); { - this.state = 1143; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1144; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1145; + this.state = 1349; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1350; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1351; this.tableIdentifier(); - this.state = 1146; - _localctx._kw3 = this.match(SparkSqlParser.NOT); - this.state = 1147; - _localctx._kw4 = this.match(SparkSqlParser.STORED); - this.state = 1148; - _localctx._kw5 = this.match(SparkSqlParser.AS); - this.state = 1149; - _localctx._kw6 = this.match(SparkSqlParser.DIRECTORIES); + this.state = 1352; + _localctx._kw3 = this.match(SparkSqlParser.KW_NOT); + this.state = 1353; + _localctx._kw4 = this.match(SparkSqlParser.KW_STORED); + this.state = 1354; + _localctx._kw5 = this.match(SparkSqlParser.KW_AS); + this.state = 1355; + _localctx._kw6 = this.match(SparkSqlParser.KW_DIRECTORIES); } break; case 32: this.enterOuterAlt(_localctx, 32); { - this.state = 1151; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1152; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1153; + this.state = 1357; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1358; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1359; this.tableIdentifier(); - this.state = 1154; - _localctx._kw3 = this.match(SparkSqlParser.SET); - this.state = 1155; - _localctx._kw4 = this.match(SparkSqlParser.SKEWED); - this.state = 1156; - _localctx._kw5 = this.match(SparkSqlParser.LOCATION); + this.state = 1360; + _localctx._kw3 = this.match(SparkSqlParser.KW_SET); + this.state = 1361; + _localctx._kw4 = this.match(SparkSqlParser.KW_SKEWED); + this.state = 1362; + _localctx._kw5 = this.match(SparkSqlParser.KW_LOCATION); } break; case 33: this.enterOuterAlt(_localctx, 33); { - this.state = 1158; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1159; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1160; + this.state = 1364; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1365; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1366; this.tableIdentifier(); - this.state = 1161; - _localctx._kw3 = this.match(SparkSqlParser.EXCHANGE); - this.state = 1162; - _localctx._kw4 = this.match(SparkSqlParser.PARTITION); + this.state = 1367; + _localctx._kw3 = this.match(SparkSqlParser.KW_EXCHANGE); + this.state = 1368; + _localctx._kw4 = this.match(SparkSqlParser.KW_PARTITION); } break; case 34: this.enterOuterAlt(_localctx, 34); { - this.state = 1164; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1165; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1166; + this.state = 1370; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1371; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1372; this.tableIdentifier(); - this.state = 1167; - _localctx._kw3 = this.match(SparkSqlParser.ARCHIVE); - this.state = 1168; - _localctx._kw4 = this.match(SparkSqlParser.PARTITION); + this.state = 1373; + _localctx._kw3 = this.match(SparkSqlParser.KW_ARCHIVE); + this.state = 1374; + _localctx._kw4 = this.match(SparkSqlParser.KW_PARTITION); } break; case 35: this.enterOuterAlt(_localctx, 35); { - this.state = 1170; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1171; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1172; + this.state = 1376; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1377; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1378; this.tableIdentifier(); - this.state = 1173; - _localctx._kw3 = this.match(SparkSqlParser.UNARCHIVE); - this.state = 1174; - _localctx._kw4 = this.match(SparkSqlParser.PARTITION); + this.state = 1379; + _localctx._kw3 = this.match(SparkSqlParser.KW_UNARCHIVE); + this.state = 1380; + _localctx._kw4 = this.match(SparkSqlParser.KW_PARTITION); } break; case 36: this.enterOuterAlt(_localctx, 36); { - this.state = 1176; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1177; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1178; + this.state = 1382; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1383; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1384; this.tableIdentifier(); - this.state = 1179; - _localctx._kw3 = this.match(SparkSqlParser.TOUCH); + this.state = 1385; + _localctx._kw3 = this.match(SparkSqlParser.KW_TOUCH); } break; case 37: this.enterOuterAlt(_localctx, 37); { - this.state = 1181; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1182; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1183; + this.state = 1387; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1388; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1389; this.tableIdentifier(); - this.state = 1185; + this.state = 1391; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 1184; + this.state = 1390; this.partitionSpec(); } } - this.state = 1187; - _localctx._kw3 = this.match(SparkSqlParser.COMPACT); + this.state = 1393; + _localctx._kw3 = this.match(SparkSqlParser.KW_COMPACT); } break; case 38: this.enterOuterAlt(_localctx, 38); { - this.state = 1189; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1190; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1191; + this.state = 1395; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1396; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1397; this.tableIdentifier(); - this.state = 1193; + this.state = 1399; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 1192; + this.state = 1398; this.partitionSpec(); } } - this.state = 1195; - _localctx._kw3 = this.match(SparkSqlParser.CONCATENATE); + this.state = 1401; + _localctx._kw3 = this.match(SparkSqlParser.KW_CONCATENATE); } break; case 39: this.enterOuterAlt(_localctx, 39); { - this.state = 1197; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1198; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1199; + this.state = 1403; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1404; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1405; this.tableIdentifier(); - this.state = 1201; + this.state = 1407; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 1200; + this.state = 1406; this.partitionSpec(); } } - this.state = 1203; - _localctx._kw3 = this.match(SparkSqlParser.SET); - this.state = 1204; - _localctx._kw4 = this.match(SparkSqlParser.FILEFORMAT); + this.state = 1409; + _localctx._kw3 = this.match(SparkSqlParser.KW_SET); + this.state = 1410; + _localctx._kw4 = this.match(SparkSqlParser.KW_FILEFORMAT); } break; case 40: this.enterOuterAlt(_localctx, 40); { - this.state = 1206; - _localctx._kw1 = this.match(SparkSqlParser.ALTER); - this.state = 1207; - _localctx._kw2 = this.match(SparkSqlParser.TABLE); - this.state = 1208; + this.state = 1412; + _localctx._kw1 = this.match(SparkSqlParser.KW_ALTER); + this.state = 1413; + _localctx._kw2 = this.match(SparkSqlParser.KW_TABLE); + this.state = 1414; this.tableIdentifier(); - this.state = 1210; + this.state = 1416; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 1209; + this.state = 1415; this.partitionSpec(); } } - this.state = 1212; - _localctx._kw3 = this.match(SparkSqlParser.REPLACE); - this.state = 1213; - _localctx._kw4 = this.match(SparkSqlParser.COLUMNS); + this.state = 1418; + _localctx._kw3 = this.match(SparkSqlParser.KW_REPLACE); + this.state = 1419; + _localctx._kw4 = this.match(SparkSqlParser.KW_COLUMNS); } break; case 41: this.enterOuterAlt(_localctx, 41); { - this.state = 1215; - _localctx._kw1 = this.match(SparkSqlParser.START); - this.state = 1216; - _localctx._kw2 = this.match(SparkSqlParser.TRANSACTION); + this.state = 1421; + _localctx._kw1 = this.match(SparkSqlParser.KW_START); + this.state = 1422; + _localctx._kw2 = this.match(SparkSqlParser.KW_TRANSACTION); } break; case 42: this.enterOuterAlt(_localctx, 42); { - this.state = 1217; - _localctx._kw1 = this.match(SparkSqlParser.COMMIT); + this.state = 1423; + _localctx._kw1 = this.match(SparkSqlParser.KW_COMMIT); } break; case 43: this.enterOuterAlt(_localctx, 43); { - this.state = 1218; - _localctx._kw1 = this.match(SparkSqlParser.ROLLBACK); + this.state = 1424; + _localctx._kw1 = this.match(SparkSqlParser.KW_ROLLBACK); } break; case 44: this.enterOuterAlt(_localctx, 44); { - this.state = 1219; - _localctx._kw1 = this.match(SparkSqlParser.DFS); + this.state = 1425; + _localctx._kw1 = this.match(SparkSqlParser.KW_DFS); } break; } @@ -4396,46 +4828,46 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1222; - this.match(SparkSqlParser.CREATE); - this.state = 1224; + this.state = 1428; + this.match(SparkSqlParser.KW_CREATE); + this.state = 1430; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.TEMPORARY) { + if (_la === SparkSqlParser.KW_TEMPORARY) { { - this.state = 1223; - this.match(SparkSqlParser.TEMPORARY); + this.state = 1429; + this.match(SparkSqlParser.KW_TEMPORARY); } } - this.state = 1227; + this.state = 1433; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.EXTERNAL) { + if (_la === SparkSqlParser.KW_EXTERNAL) { { - this.state = 1226; - this.match(SparkSqlParser.EXTERNAL); + this.state = 1432; + this.match(SparkSqlParser.KW_EXTERNAL); } } - this.state = 1229; - this.match(SparkSqlParser.TABLE); - this.state = 1233; + this.state = 1435; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1439; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 123, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 144, this._ctx) ) { case 1: { - this.state = 1230; - this.match(SparkSqlParser.IF); - this.state = 1231; - this.match(SparkSqlParser.NOT); - this.state = 1232; - this.match(SparkSqlParser.EXISTS); + this.state = 1436; + this.match(SparkSqlParser.KW_IF); + this.state = 1437; + this.match(SparkSqlParser.KW_NOT); + this.state = 1438; + this.match(SparkSqlParser.KW_EXISTS); } break; } - this.state = 1235; - this.multipartIdentifier(); + this.state = 1441; + this.tableIdentifierReference(); } } catch (re) { @@ -4460,24 +4892,24 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1239; + this.state = 1445; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.CREATE) { + if (_la === SparkSqlParser.KW_CREATE) { { - this.state = 1237; - this.match(SparkSqlParser.CREATE); - this.state = 1238; - this.match(SparkSqlParser.OR); + this.state = 1443; + this.match(SparkSqlParser.KW_CREATE); + this.state = 1444; + this.match(SparkSqlParser.KW_OR); } } - this.state = 1241; - this.match(SparkSqlParser.REPLACE); - this.state = 1242; - this.match(SparkSqlParser.TABLE); - this.state = 1243; - this.multipartIdentifier(); + this.state = 1447; + this.match(SparkSqlParser.KW_REPLACE); + this.state = 1448; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1449; + this.tableIdentifierReference(); } } catch (re) { @@ -4502,32 +4934,32 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1245; - this.match(SparkSqlParser.CLUSTERED); - this.state = 1246; - this.match(SparkSqlParser.BY); - this.state = 1247; + this.state = 1451; + this.match(SparkSqlParser.KW_CLUSTERED); + this.state = 1452; + this.match(SparkSqlParser.KW_BY); + this.state = 1453; this.identifierList(); - this.state = 1251; + this.state = 1457; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.SORTED) { + if (_la === SparkSqlParser.KW_SORTED) { { - this.state = 1248; - this.match(SparkSqlParser.SORTED); - this.state = 1249; - this.match(SparkSqlParser.BY); - this.state = 1250; + this.state = 1454; + this.match(SparkSqlParser.KW_SORTED); + this.state = 1455; + this.match(SparkSqlParser.KW_BY); + this.state = 1456; this.orderedIdentifierList(); } } - this.state = 1253; - this.match(SparkSqlParser.INTO); - this.state = 1254; + this.state = 1459; + this.match(SparkSqlParser.KW_INTO); + this.state = 1460; this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 1255; - this.match(SparkSqlParser.BUCKETS); + this.state = 1461; + this.match(SparkSqlParser.KW_BUCKETS); } } catch (re) { @@ -4551,42 +4983,42 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1257; - this.match(SparkSqlParser.SKEWED); - this.state = 1258; - this.match(SparkSqlParser.BY); - this.state = 1259; + this.state = 1463; + this.match(SparkSqlParser.KW_SKEWED); + this.state = 1464; + this.match(SparkSqlParser.KW_BY); + this.state = 1465; this.identifierList(); - this.state = 1260; - this.match(SparkSqlParser.ON); - this.state = 1263; + this.state = 1466; + this.match(SparkSqlParser.KW_ON); + this.state = 1469; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 126, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 147, this._ctx) ) { case 1: { - this.state = 1261; + this.state = 1467; this.constantList(); } break; case 2: { - this.state = 1262; + this.state = 1468; this.nestedConstantList(); } break; } - this.state = 1268; + this.state = 1474; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 127, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 148, this._ctx) ) { case 1: { - this.state = 1265; - this.match(SparkSqlParser.STORED); - this.state = 1266; - this.match(SparkSqlParser.AS); - this.state = 1267; - this.match(SparkSqlParser.DIRECTORIES); + this.state = 1471; + this.match(SparkSqlParser.KW_STORED); + this.state = 1472; + this.match(SparkSqlParser.KW_AS); + this.state = 1473; + this.match(SparkSqlParser.KW_DIRECTORIES); } break; } @@ -4613,10 +5045,10 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1270; - this.match(SparkSqlParser.LOCATION); - this.state = 1271; - this.match(SparkSqlParser.STRING); + this.state = 1476; + this.match(SparkSqlParser.KW_LOCATION); + this.state = 1477; + this.stringLit(); } } catch (re) { @@ -4640,10 +5072,10 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1273; - this.match(SparkSqlParser.COMMENT); - this.state = 1274; - this.match(SparkSqlParser.STRING); + this.state = 1479; + this.match(SparkSqlParser.KW_COMMENT); + this.state = 1480; + this.stringLit(); } } catch (re) { @@ -4668,19 +5100,19 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1277; + this.state = 1483; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.WITH) { + if (_la === SparkSqlParser.KW_WITH) { { - this.state = 1276; + this.state = 1482; this.ctes(); } } - this.state = 1279; + this.state = 1485; this.queryTerm(0); - this.state = 1280; + this.state = 1486; this.queryOrganization(); } } @@ -4704,141 +5136,206 @@ export class SparkSqlParser extends Parser { this.enterRule(_localctx, 36, SparkSqlParser.RULE_insertInto); let _la: number; try { - this.state = 1337; + this.state = 1562; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 141, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 165, this._ctx) ) { case 1: - _localctx = new InsertOverwriteTableContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 1282; - this.match(SparkSqlParser.INSERT); - this.state = 1283; - this.match(SparkSqlParser.OVERWRITE); - this.state = 1285; + this.state = 1488; + this.match(SparkSqlParser.KW_INSERT); + this.state = 1489; + this.match(SparkSqlParser.KW_OVERWRITE); + this.state = 1491; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 129, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 150, this._ctx) ) { case 1: { - this.state = 1284; - this.match(SparkSqlParser.TABLE); + this.state = 1490; + this.match(SparkSqlParser.KW_TABLE); } break; } - this.state = 1287; - this.multipartIdentifier(); - this.state = 1294; + this.state = 1493; + this.tableIdentifierReference(); + this.state = 1500; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 1288; + this.state = 1494; this.partitionSpec(); - this.state = 1292; + this.state = 1498; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.IF) { + if (_la === SparkSqlParser.KW_IF) { { - this.state = 1289; - this.match(SparkSqlParser.IF); - this.state = 1290; - this.match(SparkSqlParser.NOT); - this.state = 1291; - this.match(SparkSqlParser.EXISTS); + this.state = 1495; + this.match(SparkSqlParser.KW_IF); + this.state = 1496; + this.match(SparkSqlParser.KW_NOT); + this.state = 1497; + this.match(SparkSqlParser.KW_EXISTS); } } } } + this.state = 1505; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 153, this._ctx) ) { + case 1: + { + { + this.state = 1502; + this.match(SparkSqlParser.KW_BY); + this.state = 1503; + this.match(SparkSqlParser.KW_NAME); + } + } + break; + + case 2: + { + this.state = 1504; + this.identifierList(); + } + break; + } } break; case 2: - _localctx = new InsertIntoTableContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 1296; - this.match(SparkSqlParser.INSERT); - this.state = 1297; - this.match(SparkSqlParser.INTO); - this.state = 1299; + this.state = 1507; + this.match(SparkSqlParser.KW_INSERT); + this.state = 1508; + this.match(SparkSqlParser.KW_INTO); + this.state = 1510; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 132, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 154, this._ctx) ) { case 1: { - this.state = 1298; - this.match(SparkSqlParser.TABLE); + this.state = 1509; + this.match(SparkSqlParser.KW_TABLE); } break; } - this.state = 1301; - this.multipartIdentifier(); - this.state = 1303; + this.state = 1512; + this.tableIdentifierReference(); + this.state = 1514; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.PARTITION) { + if (_la === SparkSqlParser.KW_PARTITION) { { - this.state = 1302; + this.state = 1513; this.partitionSpec(); } } - this.state = 1308; + this.state = 1519; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.IF) { + if (_la === SparkSqlParser.KW_IF) { { - this.state = 1305; - this.match(SparkSqlParser.IF); - this.state = 1306; - this.match(SparkSqlParser.NOT); - this.state = 1307; - this.match(SparkSqlParser.EXISTS); + this.state = 1516; + this.match(SparkSqlParser.KW_IF); + this.state = 1517; + this.match(SparkSqlParser.KW_NOT); + this.state = 1518; + this.match(SparkSqlParser.KW_EXISTS); } } + this.state = 1524; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 157, this._ctx) ) { + case 1: + { + { + this.state = 1521; + this.match(SparkSqlParser.KW_BY); + this.state = 1522; + this.match(SparkSqlParser.KW_NAME); + } + } + break; + + case 2: + { + this.state = 1523; + this.identifierList(); + } + break; + } } break; case 3: - _localctx = new InsertOverwriteHiveDirContext(_localctx); this.enterOuterAlt(_localctx, 3); { - this.state = 1310; - this.match(SparkSqlParser.INSERT); - this.state = 1311; - this.match(SparkSqlParser.OVERWRITE); - this.state = 1313; + this.state = 1526; + this.match(SparkSqlParser.KW_INSERT); + this.state = 1527; + this.match(SparkSqlParser.KW_INTO); + this.state = 1529; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 158, this._ctx) ) { + case 1: + { + this.state = 1528; + this.match(SparkSqlParser.KW_TABLE); + } + break; + } + this.state = 1531; + this.tableIdentifierReference(); + this.state = 1532; + this.match(SparkSqlParser.KW_REPLACE); + this.state = 1533; + this.whereClause(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 1535; + this.match(SparkSqlParser.KW_INSERT); + this.state = 1536; + this.match(SparkSqlParser.KW_OVERWRITE); + this.state = 1538; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.LOCAL) { + if (_la === SparkSqlParser.KW_LOCAL) { { - this.state = 1312; - this.match(SparkSqlParser.LOCAL); + this.state = 1537; + this.match(SparkSqlParser.KW_LOCAL); } } - this.state = 1315; - this.match(SparkSqlParser.DIRECTORY); - this.state = 1316; - (_localctx as InsertOverwriteHiveDirContext)._path = this.match(SparkSqlParser.STRING); - this.state = 1318; + this.state = 1540; + this.match(SparkSqlParser.KW_DIRECTORY); + this.state = 1541; + _localctx._path = this.stringLit(); + this.state = 1543; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.ROW) { + if (_la === SparkSqlParser.KW_ROW) { { - this.state = 1317; + this.state = 1542; this.rowFormat(); } } - this.state = 1321; + this.state = 1546; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.STORED) { + if (_la === SparkSqlParser.KW_STORED) { { - this.state = 1320; + this.state = 1545; this.createFileFormat(); } } @@ -4846,47 +5343,46 @@ export class SparkSqlParser extends Parser { } break; - case 4: - _localctx = new InsertOverwriteDirContext(_localctx); - this.enterOuterAlt(_localctx, 4); + case 5: + this.enterOuterAlt(_localctx, 5); { - this.state = 1323; - this.match(SparkSqlParser.INSERT); - this.state = 1324; - this.match(SparkSqlParser.OVERWRITE); - this.state = 1326; + this.state = 1548; + this.match(SparkSqlParser.KW_INSERT); + this.state = 1549; + this.match(SparkSqlParser.KW_OVERWRITE); + this.state = 1551; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.LOCAL) { + if (_la === SparkSqlParser.KW_LOCAL) { { - this.state = 1325; - this.match(SparkSqlParser.LOCAL); + this.state = 1550; + this.match(SparkSqlParser.KW_LOCAL); } } - this.state = 1328; - this.match(SparkSqlParser.DIRECTORY); - this.state = 1330; + this.state = 1553; + this.match(SparkSqlParser.KW_DIRECTORY); + this.state = 1555; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.STRING) { + switch ( this.interpreter.adaptivePredict(this._input, 163, this._ctx) ) { + case 1: { - this.state = 1329; - (_localctx as InsertOverwriteDirContext)._path = this.match(SparkSqlParser.STRING); + this.state = 1554; + _localctx._path = this.stringLit(); } + break; } - - this.state = 1332; + this.state = 1557; this.tableProvider(); - this.state = 1335; + this.state = 1560; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.OPTIONS) { + if (_la === SparkSqlParser.KW_OPTIONS) { { - this.state = 1333; - this.match(SparkSqlParser.OPTIONS); - this.state = 1334; - this.tablePropertyList(); + this.state = 1558; + this.match(SparkSqlParser.KW_OPTIONS); + this.state = 1559; + _localctx._options = this.propertyList(); } } @@ -4916,14 +5412,14 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1339; + this.state = 1564; this.partitionSpec(); - this.state = 1341; + this.state = 1566; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.LOCATION) { + if (_la === SparkSqlParser.KW_LOCATION) { { - this.state = 1340; + this.state = 1565; this.locationSpec(); } } @@ -4952,30 +5448,30 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1343; - this.match(SparkSqlParser.PARTITION); - this.state = 1344; - this.match(SparkSqlParser.T__0); - this.state = 1345; + this.state = 1568; + this.match(SparkSqlParser.KW_PARTITION); + this.state = 1569; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1570; this.partitionVal(); - this.state = 1350; + this.state = 1575; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1346; - this.match(SparkSqlParser.T__2); - this.state = 1347; + this.state = 1571; + this.match(SparkSqlParser.COMMA); + this.state = 1572; this.partitionVal(); } } - this.state = 1352; + this.state = 1577; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1353; - this.match(SparkSqlParser.T__1); + this.state = 1578; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -4998,22 +5494,40 @@ export class SparkSqlParser extends Parser { this.enterRule(_localctx, 42, SparkSqlParser.RULE_partitionVal); let _la: number; try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 1355; - this.identifier(); - this.state = 1358; + this.state = 1589; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.EQ) { + switch ( this.interpreter.adaptivePredict(this._input, 169, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 1580; + this.identifier(); + this.state = 1583; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.EQ) { + { + this.state = 1581; + this.match(SparkSqlParser.EQ); + this.state = 1582; + this.constant(); + } + } + + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); { - this.state = 1356; + this.state = 1585; + this.identifier(); + this.state = 1586; this.match(SparkSqlParser.EQ); - this.state = 1357; - this.constant(); + this.state = 1587; + this.match(SparkSqlParser.KW_DEFAULT); } - } - + break; } } catch (re) { @@ -5038,9 +5552,45 @@ export class SparkSqlParser extends Parser { try { this.enterOuterAlt(_localctx, 1); { - this.state = 1360; + this.state = 1591; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DATABASE || _la === SparkSqlParser.KW_NAMESPACE || _la === SparkSqlParser.KW_SCHEMA)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + 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 namespaces(): NamespacesContext { + let _localctx: NamespacesContext = new NamespacesContext(this._ctx, this.state); + this.enterRule(_localctx, 46, SparkSqlParser.RULE_namespaces); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 1593; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DATABASE || _la === SparkSqlParser.NAMESPACE || _la === SparkSqlParser.SCHEMA)) { + if (!(_la === SparkSqlParser.KW_DATABASES || _la === SparkSqlParser.KW_NAMESPACES || _la === SparkSqlParser.KW_SCHEMAS)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -5069,31 +5619,31 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public describeFuncName(): DescribeFuncNameContext { let _localctx: DescribeFuncNameContext = new DescribeFuncNameContext(this._ctx, this.state); - this.enterRule(_localctx, 46, SparkSqlParser.RULE_describeFuncName); + this.enterRule(_localctx, 48, SparkSqlParser.RULE_describeFuncName); try { - this.state = 1367; + this.state = 1600; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 145, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 170, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1362; - this.qualifiedName(); + this.state = 1595; + this.identifierReference(); } break; case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1363; - this.match(SparkSqlParser.STRING); + this.state = 1596; + this.stringLit(); } break; case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1364; + this.state = 1597; this.comparisonOperator(); } break; @@ -5101,7 +5651,7 @@ export class SparkSqlParser extends Parser { case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 1365; + this.state = 1598; this.arithmeticOperator(); } break; @@ -5109,7 +5659,7 @@ export class SparkSqlParser extends Parser { case 5: this.enterOuterAlt(_localctx, 5); { - this.state = 1366; + this.state = 1599; this.predicateOperator(); } break; @@ -5132,28 +5682,28 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public describeColName(): DescribeColNameContext { let _localctx: DescribeColNameContext = new DescribeColNameContext(this._ctx, this.state); - this.enterRule(_localctx, 48, SparkSqlParser.RULE_describeColName); + this.enterRule(_localctx, 50, SparkSqlParser.RULE_describeColName); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1369; + this.state = 1602; _localctx._identifier = this.identifier(); _localctx._nameParts.push(_localctx._identifier); - this.state = 1374; + this.state = 1607; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__3) { + while (_la === SparkSqlParser.DOT) { { { - this.state = 1370; - this.match(SparkSqlParser.T__3); - this.state = 1371; + this.state = 1603; + this.match(SparkSqlParser.DOT); + this.state = 1604; _localctx._identifier = this.identifier(); _localctx._nameParts.push(_localctx._identifier); } } - this.state = 1376; + this.state = 1609; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5176,28 +5726,28 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public ctes(): CtesContext { let _localctx: CtesContext = new CtesContext(this._ctx, this.state); - this.enterRule(_localctx, 50, SparkSqlParser.RULE_ctes); + this.enterRule(_localctx, 52, SparkSqlParser.RULE_ctes); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1377; - this.match(SparkSqlParser.WITH); - this.state = 1378; + this.state = 1610; + this.match(SparkSqlParser.KW_WITH); + this.state = 1611; this.namedQuery(); - this.state = 1383; + this.state = 1616; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1379; - this.match(SparkSqlParser.T__2); - this.state = 1380; + this.state = 1612; + this.match(SparkSqlParser.COMMA); + this.state = 1613; this.namedQuery(); } } - this.state = 1385; + this.state = 1618; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5220,39 +5770,39 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public namedQuery(): NamedQueryContext { let _localctx: NamedQueryContext = new NamedQueryContext(this._ctx, this.state); - this.enterRule(_localctx, 52, SparkSqlParser.RULE_namedQuery); + this.enterRule(_localctx, 54, SparkSqlParser.RULE_namedQuery); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1386; + this.state = 1619; _localctx._name = this.errorCapturingIdentifier(); - this.state = 1388; + this.state = 1621; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 148, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 173, this._ctx) ) { case 1: { - this.state = 1387; + this.state = 1620; _localctx._columnAliases = this.identifierList(); } break; } - this.state = 1391; + this.state = 1624; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AS) { + if (_la === SparkSqlParser.KW_AS) { { - this.state = 1390; - this.match(SparkSqlParser.AS); + this.state = 1623; + this.match(SparkSqlParser.KW_AS); } } - this.state = 1393; - this.match(SparkSqlParser.T__0); - this.state = 1394; + this.state = 1626; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1627; this.query(); - this.state = 1395; - this.match(SparkSqlParser.T__1); + this.state = 1628; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -5272,13 +5822,13 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public tableProvider(): TableProviderContext { let _localctx: TableProviderContext = new TableProviderContext(this._ctx, this.state); - this.enterRule(_localctx, 54, SparkSqlParser.RULE_tableProvider); + this.enterRule(_localctx, 56, SparkSqlParser.RULE_tableProvider); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1397; - this.match(SparkSqlParser.USING); - this.state = 1398; + this.state = 1630; + this.match(SparkSqlParser.KW_USING); + this.state = 1631; this.multipartIdentifier(); } } @@ -5299,67 +5849,85 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public createTableClauses(): CreateTableClausesContext { let _localctx: CreateTableClausesContext = new CreateTableClausesContext(this._ctx, this.state); - this.enterRule(_localctx, 56, SparkSqlParser.RULE_createTableClauses); + this.enterRule(_localctx, 58, SparkSqlParser.RULE_createTableClauses); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1412; + this.state = 1648; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 151, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 176, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { - this.state = 1410; + this.state = 1646; this._errHandler.sync(this); switch (this._input.LA(1)) { - case SparkSqlParser.OPTIONS: + case SparkSqlParser.KW_OPTIONS: { { - this.state = 1400; - this.match(SparkSqlParser.OPTIONS); - this.state = 1401; - this.tablePropertyList(); + this.state = 1633; + this.match(SparkSqlParser.KW_OPTIONS); + this.state = 1634; + _localctx._options = this.expressionPropertyList(); } } break; - case SparkSqlParser.PARTITIONED: + case SparkSqlParser.KW_PARTITIONED: { { - this.state = 1402; - this.match(SparkSqlParser.PARTITIONED); - this.state = 1403; - this.match(SparkSqlParser.BY); - this.state = 1404; - _localctx._partitioning = this.transformList(); + this.state = 1635; + this.match(SparkSqlParser.KW_PARTITIONED); + this.state = 1636; + this.match(SparkSqlParser.KW_BY); + this.state = 1637; + _localctx._partitioning = this.partitionFieldList(); } } break; - case SparkSqlParser.CLUSTERED: + case SparkSqlParser.KW_SKEWED: { - this.state = 1405; + this.state = 1638; + this.skewSpec(); + } + break; + case SparkSqlParser.KW_CLUSTERED: + { + this.state = 1639; this.bucketSpec(); } break; - case SparkSqlParser.LOCATION: + case SparkSqlParser.KW_ROW: + { + this.state = 1640; + this.rowFormat(); + } + break; + case SparkSqlParser.KW_STORED: + { + this.state = 1641; + this.createFileFormat(); + } + break; + case SparkSqlParser.KW_LOCATION: { - this.state = 1406; + this.state = 1642; this.locationSpec(); } break; - case SparkSqlParser.COMMENT: + case SparkSqlParser.KW_COMMENT: { - this.state = 1407; + this.state = 1643; this.commentSpec(); } break; - case SparkSqlParser.TBLPROPERTIES: + case SparkSqlParser.KW_TBLPROPERTIES: { { - this.state = 1408; - this.match(SparkSqlParser.TBLPROPERTIES); - this.state = 1409; - _localctx._tableProps = this.tablePropertyList(); + this.state = 1644; + this.match(SparkSqlParser.KW_TBLPROPERTIES); + this.state = 1645; + _localctx._tableProps = this.propertyList(); } } break; @@ -5368,9 +5936,9 @@ export class SparkSqlParser extends Parser { } } } - this.state = 1414; + this.state = 1650; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 151, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 176, this._ctx); } } } @@ -5389,35 +5957,35 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public tablePropertyList(): TablePropertyListContext { - let _localctx: TablePropertyListContext = new TablePropertyListContext(this._ctx, this.state); - this.enterRule(_localctx, 58, SparkSqlParser.RULE_tablePropertyList); + public propertyList(): PropertyListContext { + let _localctx: PropertyListContext = new PropertyListContext(this._ctx, this.state); + this.enterRule(_localctx, 60, SparkSqlParser.RULE_propertyList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1415; - this.match(SparkSqlParser.T__0); - this.state = 1416; - this.tableProperty(); - this.state = 1421; + this.state = 1651; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1652; + this.property(); + this.state = 1657; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1417; - this.match(SparkSqlParser.T__2); - this.state = 1418; - this.tableProperty(); + this.state = 1653; + this.match(SparkSqlParser.COMMA); + this.state = 1654; + this.property(); } } - this.state = 1423; + this.state = 1659; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1424; - this.match(SparkSqlParser.T__1); + this.state = 1660; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -5435,35 +6003,34 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public tableProperty(): TablePropertyContext { - let _localctx: TablePropertyContext = new TablePropertyContext(this._ctx, this.state); - this.enterRule(_localctx, 60, SparkSqlParser.RULE_tableProperty); - let _la: number; + public property(): PropertyContext { + let _localctx: PropertyContext = new PropertyContext(this._ctx, this.state); + this.enterRule(_localctx, 62, SparkSqlParser.RULE_property); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1426; - _localctx._key = this.tablePropertyKey(); - this.state = 1431; + this.state = 1662; + _localctx._key = this.propertyKey(); + this.state = 1667; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.FALSE || _la === SparkSqlParser.TRUE || _la === SparkSqlParser.EQ || ((((_la - 279)) & ~0x1F) === 0 && ((1 << (_la - 279)) & ((1 << (SparkSqlParser.STRING - 279)) | (1 << (SparkSqlParser.INTEGER_VALUE - 279)) | (1 << (SparkSqlParser.DECIMAL_VALUE - 279)))) !== 0)) { + switch ( this.interpreter.adaptivePredict(this._input, 179, this._ctx) ) { + case 1: { - this.state = 1428; + this.state = 1664; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.EQ) { + switch ( this.interpreter.adaptivePredict(this._input, 178, this._ctx) ) { + case 1: { - this.state = 1427; + this.state = 1663; this.match(SparkSqlParser.EQ); } + break; } - - this.state = 1430; - _localctx._value = this.tablePropertyValue(); + this.state = 1666; + _localctx._value = this.propertyValue(); } + break; } - } } catch (re) { @@ -5481,34 +6048,36 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public tablePropertyKey(): TablePropertyKeyContext { - let _localctx: TablePropertyKeyContext = new TablePropertyKeyContext(this._ctx, this.state); - this.enterRule(_localctx, 62, SparkSqlParser.RULE_tablePropertyKey); - let _la: number; + public propertyKey(): PropertyKeyContext { + let _localctx: PropertyKeyContext = new PropertyKeyContext(this._ctx, this.state); + this.enterRule(_localctx, 64, SparkSqlParser.RULE_propertyKey); try { - this.state = 1442; + let _alt: number; + this.state = 1678; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 156, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 181, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1433; + this.state = 1669; this.identifier(); - this.state = 1438; + this.state = 1674; this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__3) { - { - { - this.state = 1434; - this.match(SparkSqlParser.T__3); - this.state = 1435; - this.identifier(); - } + _alt = this.interpreter.adaptivePredict(this._input, 180, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1670; + this.match(SparkSqlParser.DOT); + this.state = 1671; + this.identifier(); + } + } } - this.state = 1440; + this.state = 1676; this._errHandler.sync(this); - _la = this._input.LA(1); + _alt = this.interpreter.adaptivePredict(this._input, 180, this._ctx); } } break; @@ -5516,8 +6085,8 @@ export class SparkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1441; - this.match(SparkSqlParser.STRING); + this.state = 1677; + this.stringLit(); } break; } @@ -5537,44 +6106,135 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public tablePropertyValue(): TablePropertyValueContext { - let _localctx: TablePropertyValueContext = new TablePropertyValueContext(this._ctx, this.state); - this.enterRule(_localctx, 64, SparkSqlParser.RULE_tablePropertyValue); + public propertyValue(): PropertyValueContext { + let _localctx: PropertyValueContext = new PropertyValueContext(this._ctx, this.state); + this.enterRule(_localctx, 66, SparkSqlParser.RULE_propertyValue); try { - this.state = 1448; + this.state = 1684; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.INTEGER_VALUE: + switch ( this.interpreter.adaptivePredict(this._input, 182, this._ctx) ) { + case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1444; + this.state = 1680; this.match(SparkSqlParser.INTEGER_VALUE); } break; - case SparkSqlParser.DECIMAL_VALUE: + + case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1445; + this.state = 1681; this.match(SparkSqlParser.DECIMAL_VALUE); } break; - case SparkSqlParser.FALSE: - case SparkSqlParser.TRUE: + + case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1446; + this.state = 1682; this.booleanValue(); } break; - case SparkSqlParser.STRING: + + case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 1447; - this.match(SparkSqlParser.STRING); + this.state = 1683; + this.stringLit(); + } + 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 expressionPropertyList(): ExpressionPropertyListContext { + let _localctx: ExpressionPropertyListContext = new ExpressionPropertyListContext(this._ctx, this.state); + this.enterRule(_localctx, 68, SparkSqlParser.RULE_expressionPropertyList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 1686; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1687; + this.expressionProperty(); + this.state = 1692; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 1688; + this.match(SparkSqlParser.COMMA); + this.state = 1689; + this.expressionProperty(); + } + } + this.state = 1694; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 1695; + this.match(SparkSqlParser.RIGHT_PAREN); + } + } + 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 expressionProperty(): ExpressionPropertyContext { + let _localctx: ExpressionPropertyContext = new ExpressionPropertyContext(this._ctx, this.state); + this.enterRule(_localctx, 70, SparkSqlParser.RULE_expressionProperty); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 1697; + _localctx._key = this.propertyKey(); + this.state = 1702; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 185, this._ctx) ) { + case 1: + { + this.state = 1699; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 184, this._ctx) ) { + case 1: + { + this.state = 1698; + this.match(SparkSqlParser.EQ); + } + break; + } + this.state = 1701; + _localctx._value = this.expression(); } break; - default: - throw new NoViableAltException(this); + } } } catch (re) { @@ -5594,33 +6254,33 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public constantList(): ConstantListContext { let _localctx: ConstantListContext = new ConstantListContext(this._ctx, this.state); - this.enterRule(_localctx, 66, SparkSqlParser.RULE_constantList); + this.enterRule(_localctx, 72, SparkSqlParser.RULE_constantList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1450; - this.match(SparkSqlParser.T__0); - this.state = 1451; + this.state = 1704; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1705; this.constant(); - this.state = 1456; + this.state = 1710; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1452; - this.match(SparkSqlParser.T__2); - this.state = 1453; + this.state = 1706; + this.match(SparkSqlParser.COMMA); + this.state = 1707; this.constant(); } } - this.state = 1458; + this.state = 1712; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1459; - this.match(SparkSqlParser.T__1); + this.state = 1713; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -5640,33 +6300,33 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public nestedConstantList(): NestedConstantListContext { let _localctx: NestedConstantListContext = new NestedConstantListContext(this._ctx, this.state); - this.enterRule(_localctx, 68, SparkSqlParser.RULE_nestedConstantList); + this.enterRule(_localctx, 74, SparkSqlParser.RULE_nestedConstantList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1461; - this.match(SparkSqlParser.T__0); - this.state = 1462; + this.state = 1715; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1716; this.constantList(); - this.state = 1467; + this.state = 1721; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1463; - this.match(SparkSqlParser.T__2); - this.state = 1464; + this.state = 1717; + this.match(SparkSqlParser.COMMA); + this.state = 1718; this.constantList(); } } - this.state = 1469; + this.state = 1723; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1470; - this.match(SparkSqlParser.T__1); + this.state = 1724; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -5686,19 +6346,19 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public createFileFormat(): CreateFileFormatContext { let _localctx: CreateFileFormatContext = new CreateFileFormatContext(this._ctx, this.state); - this.enterRule(_localctx, 70, SparkSqlParser.RULE_createFileFormat); + this.enterRule(_localctx, 76, SparkSqlParser.RULE_createFileFormat); try { - this.state = 1478; + this.state = 1732; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 160, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 188, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1472; - this.match(SparkSqlParser.STORED); - this.state = 1473; - this.match(SparkSqlParser.AS); - this.state = 1474; + this.state = 1726; + this.match(SparkSqlParser.KW_STORED); + this.state = 1727; + this.match(SparkSqlParser.KW_AS); + this.state = 1728; this.fileFormat(); } break; @@ -5706,11 +6366,11 @@ export class SparkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1475; - this.match(SparkSqlParser.STORED); - this.state = 1476; - this.match(SparkSqlParser.BY); - this.state = 1477; + this.state = 1729; + this.match(SparkSqlParser.KW_STORED); + this.state = 1730; + this.match(SparkSqlParser.KW_BY); + this.state = 1731; this.storageHandler(); } break; @@ -5733,31 +6393,29 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public fileFormat(): FileFormatContext { let _localctx: FileFormatContext = new FileFormatContext(this._ctx, this.state); - this.enterRule(_localctx, 72, SparkSqlParser.RULE_fileFormat); + this.enterRule(_localctx, 78, SparkSqlParser.RULE_fileFormat); try { - this.state = 1485; + this.state = 1740; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 161, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 189, this._ctx) ) { case 1: - _localctx = new TableFileFormatContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 1480; - this.match(SparkSqlParser.INPUTFORMAT); - this.state = 1481; - (_localctx as TableFileFormatContext)._inFmt = this.match(SparkSqlParser.STRING); - this.state = 1482; - this.match(SparkSqlParser.OUTPUTFORMAT); - this.state = 1483; - (_localctx as TableFileFormatContext)._outFmt = this.match(SparkSqlParser.STRING); + this.state = 1734; + this.match(SparkSqlParser.KW_INPUTFORMAT); + this.state = 1735; + _localctx._inFmt = this.stringLit(); + this.state = 1736; + this.match(SparkSqlParser.KW_OUTPUTFORMAT); + this.state = 1737; + _localctx._outFmt = this.stringLit(); } break; case 2: - _localctx = new GenericFileFormatContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 1484; + this.state = 1739; this.identifier(); } break; @@ -5780,23 +6438,23 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public storageHandler(): StorageHandlerContext { let _localctx: StorageHandlerContext = new StorageHandlerContext(this._ctx, this.state); - this.enterRule(_localctx, 74, SparkSqlParser.RULE_storageHandler); + this.enterRule(_localctx, 80, SparkSqlParser.RULE_storageHandler); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1487; - this.match(SparkSqlParser.STRING); - this.state = 1491; + this.state = 1742; + this.stringLit(); + this.state = 1746; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 162, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 190, this._ctx) ) { case 1: { - this.state = 1488; - this.match(SparkSqlParser.WITH); - this.state = 1489; - this.match(SparkSqlParser.SERDEPROPERTIES); - this.state = 1490; - this.tablePropertyList(); + this.state = 1743; + this.match(SparkSqlParser.KW_WITH); + this.state = 1744; + this.match(SparkSqlParser.KW_SERDEPROPERTIES); + this.state = 1745; + this.propertyList(); } break; } @@ -5819,14 +6477,14 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public resource(): ResourceContext { let _localctx: ResourceContext = new ResourceContext(this._ctx, this.state); - this.enterRule(_localctx, 76, SparkSqlParser.RULE_resource); + this.enterRule(_localctx, 82, SparkSqlParser.RULE_resource); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1493; + this.state = 1748; this.identifier(); - this.state = 1494; - this.match(SparkSqlParser.STRING); + this.state = 1749; + this.stringLit(); } } catch (re) { @@ -5846,32 +6504,28 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public dmlStatementNoWith(): DmlStatementNoWithContext { let _localctx: DmlStatementNoWithContext = new DmlStatementNoWithContext(this._ctx, this.state); - this.enterRule(_localctx, 78, SparkSqlParser.RULE_dmlStatementNoWith); + this.enterRule(_localctx, 84, SparkSqlParser.RULE_dmlStatementNoWith); let _la: number; try { let _alt: number; - this.state = 1547; + this.state = 1807; this._errHandler.sync(this); switch (this._input.LA(1)) { - case SparkSqlParser.INSERT: - _localctx = new SingleInsertQueryContext(_localctx); + case SparkSqlParser.KW_INSERT: this.enterOuterAlt(_localctx, 1); { - this.state = 1496; + this.state = 1751; this.insertInto(); - this.state = 1497; - this.queryTerm(0); - this.state = 1498; - this.queryOrganization(); + this.state = 1752; + this.query(); } break; - case SparkSqlParser.FROM: - _localctx = new MultiInsertQueryContext(_localctx); + case SparkSqlParser.KW_FROM: this.enterOuterAlt(_localctx, 2); { - this.state = 1500; + this.state = 1754; this.fromClause(); - this.state = 1502; + this.state = 1756; this._errHandler.sync(this); _alt = 1; do { @@ -5879,7 +6533,7 @@ export class SparkSqlParser extends Parser { case 1: { { - this.state = 1501; + this.state = 1755; this.multiInsertQueryBody(); } } @@ -5887,128 +6541,141 @@ export class SparkSqlParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 1504; + this.state = 1758; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 163, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 191, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } break; - case SparkSqlParser.DELETE: - _localctx = new DeleteFromTableContext(_localctx); + case SparkSqlParser.KW_DELETE: this.enterOuterAlt(_localctx, 3); { - this.state = 1506; - this.match(SparkSqlParser.DELETE); - this.state = 1507; - this.match(SparkSqlParser.FROM); - this.state = 1508; - this.multipartIdentifier(); - this.state = 1509; + this.state = 1760; + this.match(SparkSqlParser.KW_DELETE); + this.state = 1761; + this.match(SparkSqlParser.KW_FROM); + this.state = 1762; + this.identifierReference(); + this.state = 1763; this.tableAlias(); - this.state = 1511; + this.state = 1765; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.WHERE) { + if (_la === SparkSqlParser.KW_WHERE) { { - this.state = 1510; + this.state = 1764; this.whereClause(); } } } break; - case SparkSqlParser.UPDATE: - _localctx = new UpdateTableContext(_localctx); + case SparkSqlParser.KW_UPDATE: this.enterOuterAlt(_localctx, 4); { - this.state = 1513; - this.match(SparkSqlParser.UPDATE); - this.state = 1514; - this.multipartIdentifier(); - this.state = 1515; + this.state = 1767; + this.match(SparkSqlParser.KW_UPDATE); + this.state = 1768; + this.identifierReference(); + this.state = 1769; this.tableAlias(); - this.state = 1516; + this.state = 1770; this.setClause(); - this.state = 1518; + this.state = 1772; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.WHERE) { + if (_la === SparkSqlParser.KW_WHERE) { { - this.state = 1517; + this.state = 1771; this.whereClause(); } } } break; - case SparkSqlParser.MERGE: - _localctx = new MergeIntoTableContext(_localctx); + case SparkSqlParser.KW_MERGE: this.enterOuterAlt(_localctx, 5); { - this.state = 1520; - this.match(SparkSqlParser.MERGE); - this.state = 1521; - this.match(SparkSqlParser.INTO); - this.state = 1522; - (_localctx as MergeIntoTableContext)._target = this.multipartIdentifier(); - this.state = 1523; - (_localctx as MergeIntoTableContext)._targetAlias = this.tableAlias(); - this.state = 1524; - this.match(SparkSqlParser.USING); - this.state = 1530; + this.state = 1774; + this.match(SparkSqlParser.KW_MERGE); + this.state = 1775; + this.match(SparkSqlParser.KW_INTO); + this.state = 1776; + _localctx._target = this.identifierReference(); + this.state = 1777; + _localctx._targetAlias = this.tableAlias(); + this.state = 1778; + this.match(SparkSqlParser.KW_USING); + this.state = 1784; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 166, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 194, this._ctx) ) { case 1: { - this.state = 1525; - (_localctx as MergeIntoTableContext)._source = this.multipartIdentifier(); + this.state = 1779; + _localctx._source = this.identifierReference(); } break; case 2: { - this.state = 1526; - this.match(SparkSqlParser.T__0); - this.state = 1527; - (_localctx as MergeIntoTableContext)._sourceQuery = this.query(); - this.state = 1528; - this.match(SparkSqlParser.T__1); + this.state = 1780; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1781; + _localctx._sourceQuery = this.query(); + this.state = 1782; + this.match(SparkSqlParser.RIGHT_PAREN); } break; } - this.state = 1532; - (_localctx as MergeIntoTableContext)._sourceAlias = this.tableAlias(); - this.state = 1533; - this.match(SparkSqlParser.ON); - this.state = 1534; - (_localctx as MergeIntoTableContext)._mergeCondition = this.booleanExpression(0); - this.state = 1538; + this.state = 1786; + _localctx._sourceAlias = this.tableAlias(); + this.state = 1787; + this.match(SparkSqlParser.KW_ON); + this.state = 1788; + _localctx._mergeCondition = this.booleanExpression(0); + this.state = 1792; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 167, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 195, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1535; + this.state = 1789; this.matchedClause(); } } } - this.state = 1540; + this.state = 1794; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 195, this._ctx); + } + this.state = 1798; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 196, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1795; + this.notMatchedClause(); + } + } + } + this.state = 1800; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 167, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 196, this._ctx); } - this.state = 1544; + this.state = 1804; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.WHEN) { + while (_la === SparkSqlParser.KW_WHEN) { { { - this.state = 1541; - this.notMatchedClause(); + this.state = 1801; + this.notMatchedBySourceClause(); } } - this.state = 1546; + this.state = 1806; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -6033,179 +6700,224 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public queryOrganization(): QueryOrganizationContext { - let _localctx: QueryOrganizationContext = new QueryOrganizationContext(this._ctx, this.state); - this.enterRule(_localctx, 80, SparkSqlParser.RULE_queryOrganization); + public identifierReference(): IdentifierReferenceContext { + let _localctx: IdentifierReferenceContext = new IdentifierReferenceContext(this._ctx, this.state); + this.enterRule(_localctx, 86, SparkSqlParser.RULE_identifierReference); try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 1559; + this.state = 1815; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 171, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 199, this._ctx) ) { case 1: + this.enterOuterAlt(_localctx, 1); { - this.state = 1549; - this.match(SparkSqlParser.ORDER); - this.state = 1550; - this.match(SparkSqlParser.BY); - this.state = 1551; - _localctx._sortItem = this.sortItem(); - _localctx._order.push(_localctx._sortItem); - this.state = 1556; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 170, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 1552; - this.match(SparkSqlParser.T__2); - this.state = 1553; - _localctx._sortItem = this.sortItem(); - _localctx._order.push(_localctx._sortItem); - } - } - } - this.state = 1558; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 170, this._ctx); - } - } + this.state = 1809; + this.match(SparkSqlParser.KW_IDENTIFIER_KW); + this.state = 1810; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1811; + this.expression(); + this.state = 1812; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 1814; + this.multipartIdentifier(); + } + 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 queryOrganization(): QueryOrganizationContext { + let _localctx: QueryOrganizationContext = new QueryOrganizationContext(this._ctx, this.state); + this.enterRule(_localctx, 88, SparkSqlParser.RULE_queryOrganization); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 1827; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 201, this._ctx) ) { + case 1: + { + this.state = 1817; + this.match(SparkSqlParser.KW_ORDER); + this.state = 1818; + this.match(SparkSqlParser.KW_BY); + this.state = 1819; + _localctx._sortItem = this.sortItem(); + _localctx._order.push(_localctx._sortItem); + this.state = 1824; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 200, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1820; + this.match(SparkSqlParser.COMMA); + this.state = 1821; + _localctx._sortItem = this.sortItem(); + _localctx._order.push(_localctx._sortItem); + } + } + } + this.state = 1826; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 200, this._ctx); + } + } break; } - this.state = 1571; + this.state = 1839; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 173, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 203, this._ctx) ) { case 1: { - this.state = 1561; - this.match(SparkSqlParser.CLUSTER); - this.state = 1562; - this.match(SparkSqlParser.BY); - this.state = 1563; + this.state = 1829; + this.match(SparkSqlParser.KW_CLUSTER); + this.state = 1830; + this.match(SparkSqlParser.KW_BY); + this.state = 1831; _localctx._expression = this.expression(); _localctx._clusterBy.push(_localctx._expression); - this.state = 1568; + this.state = 1836; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 172, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 202, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1564; - this.match(SparkSqlParser.T__2); - this.state = 1565; + this.state = 1832; + this.match(SparkSqlParser.COMMA); + this.state = 1833; _localctx._expression = this.expression(); _localctx._clusterBy.push(_localctx._expression); } } } - this.state = 1570; + this.state = 1838; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 172, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 202, this._ctx); } } break; } - this.state = 1583; + this.state = 1851; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 175, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 205, this._ctx) ) { case 1: { - this.state = 1573; - this.match(SparkSqlParser.DISTRIBUTE); - this.state = 1574; - this.match(SparkSqlParser.BY); - this.state = 1575; + this.state = 1841; + this.match(SparkSqlParser.KW_DISTRIBUTE); + this.state = 1842; + this.match(SparkSqlParser.KW_BY); + this.state = 1843; _localctx._expression = this.expression(); _localctx._distributeBy.push(_localctx._expression); - this.state = 1580; + this.state = 1848; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 174, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 204, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1576; - this.match(SparkSqlParser.T__2); - this.state = 1577; + this.state = 1844; + this.match(SparkSqlParser.COMMA); + this.state = 1845; _localctx._expression = this.expression(); _localctx._distributeBy.push(_localctx._expression); } } } - this.state = 1582; + this.state = 1850; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 174, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 204, this._ctx); } } break; } - this.state = 1595; + this.state = 1863; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 177, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 207, this._ctx) ) { case 1: { - this.state = 1585; - this.match(SparkSqlParser.SORT); - this.state = 1586; - this.match(SparkSqlParser.BY); - this.state = 1587; + this.state = 1853; + this.match(SparkSqlParser.KW_SORT); + this.state = 1854; + this.match(SparkSqlParser.KW_BY); + this.state = 1855; _localctx._sortItem = this.sortItem(); _localctx._sort.push(_localctx._sortItem); - this.state = 1592; + this.state = 1860; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 176, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 206, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1588; - this.match(SparkSqlParser.T__2); - this.state = 1589; + this.state = 1856; + this.match(SparkSqlParser.COMMA); + this.state = 1857; _localctx._sortItem = this.sortItem(); _localctx._sort.push(_localctx._sortItem); } } } - this.state = 1594; + this.state = 1862; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 176, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 206, this._ctx); } } break; } - this.state = 1598; + this.state = 1866; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 178, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 208, this._ctx) ) { case 1: { - this.state = 1597; + this.state = 1865; this.windowClause(); } break; } - this.state = 1605; + this.state = 1873; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 180, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 210, this._ctx) ) { case 1: { - this.state = 1600; - this.match(SparkSqlParser.LIMIT); - this.state = 1603; + this.state = 1868; + this.match(SparkSqlParser.KW_LIMIT); + this.state = 1871; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 179, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 209, this._ctx) ) { case 1: { - this.state = 1601; - this.match(SparkSqlParser.ALL); + this.state = 1869; + this.match(SparkSqlParser.KW_ALL); } break; case 2: { - this.state = 1602; + this.state = 1870; _localctx._limit = this.expression(); } break; @@ -6213,6 +6925,18 @@ export class SparkSqlParser extends Parser { } break; } + this.state = 1877; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 211, this._ctx) ) { + case 1: + { + this.state = 1875; + this.match(SparkSqlParser.KW_OFFSET); + this.state = 1876; + _localctx._offset = this.expression(); + } + break; + } } } catch (re) { @@ -6232,13 +6956,13 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public multiInsertQueryBody(): MultiInsertQueryBodyContext { let _localctx: MultiInsertQueryBodyContext = new MultiInsertQueryBodyContext(this._ctx, this.state); - this.enterRule(_localctx, 82, SparkSqlParser.RULE_multiInsertQueryBody); + this.enterRule(_localctx, 90, SparkSqlParser.RULE_multiInsertQueryBody); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1607; + this.state = 1879; this.insertInto(); - this.state = 1608; + this.state = 1880; this.fromStatementBody(); } } @@ -6269,25 +6993,21 @@ export class SparkSqlParser extends Parser { let _parentState: number = this.state; let _localctx: QueryTermContext = new QueryTermContext(this._ctx, _parentState); let _prevctx: QueryTermContext = _localctx; - let _startState: number = 84; - this.enterRecursionRule(_localctx, 84, SparkSqlParser.RULE_queryTerm, _p); + let _startState: number = 92; + this.enterRecursionRule(_localctx, 92, SparkSqlParser.RULE_queryTerm, _p); let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { { - _localctx = new QueryTermDefaultContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 1611; + this.state = 1883; this.queryPrimary(); } this._ctx._stop = this._input.tryLT(-1); - this.state = 1636; + this.state = 1908; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 185, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 216, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -6295,27 +7015,27 @@ export class SparkSqlParser extends Parser { } _prevctx = _localctx; { - this.state = 1634; + this.state = 1906; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 184, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 215, this._ctx) ) { case 1: { - _localctx = new SetOperationContext(new QueryTermContext(_parentctx, _parentState)); - (_localctx as SetOperationContext)._left = _prevctx; + _localctx = new QueryTermContext(_parentctx, _parentState); + _localctx._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_queryTerm); - this.state = 1613; + this.state = 1885; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1614; - if (!(this.legacy_setops_precedence_enbled)) { - throw this.createFailedPredicateException("this.legacy_setops_precedence_enbled"); + this.state = 1886; + if (!(this.legacy_setops_precedence_enabled)) { + throw this.createFailedPredicateException("this.legacy_setops_precedence_enabled"); } - this.state = 1615; - (_localctx as SetOperationContext)._operator = this._input.LT(1); + this.state = 1887; + _localctx._operator = this._input.LT(1); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.EXCEPT || _la === SparkSqlParser.INTERSECT || _la === SparkSqlParser.SETMINUS || _la === SparkSqlParser.UNION)) { - (_localctx as SetOperationContext)._operator = this._errHandler.recoverInline(this); + if (!(_la === SparkSqlParser.KW_EXCEPT || _la === SparkSqlParser.KW_INTERSECT || _la === SparkSqlParser.KW_SETMINUS || _la === SparkSqlParser.KW_UNION)) { + _localctx._operator = this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { this.matchedEOF = true; @@ -6324,69 +7044,69 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1617; + this.state = 1889; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.ALL || _la === SparkSqlParser.DISTINCT) { + if (_la === SparkSqlParser.KW_ALL || _la === SparkSqlParser.KW_DISTINCT) { { - this.state = 1616; + this.state = 1888; this.setQuantifier(); } } - this.state = 1619; - (_localctx as SetOperationContext)._right = this.queryTerm(4); + this.state = 1891; + _localctx._right = this.queryTerm(4); } break; case 2: { - _localctx = new SetOperationContext(new QueryTermContext(_parentctx, _parentState)); - (_localctx as SetOperationContext)._left = _prevctx; + _localctx = new QueryTermContext(_parentctx, _parentState); + _localctx._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_queryTerm); - this.state = 1620; + this.state = 1892; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1621; - if (!(!this.legacy_setops_precedence_enbled)) { - throw this.createFailedPredicateException("!this.legacy_setops_precedence_enbled"); + this.state = 1893; + if (!(!this.legacy_setops_precedence_enabled)) { + throw this.createFailedPredicateException("!this.legacy_setops_precedence_enabled"); } - this.state = 1622; - (_localctx as SetOperationContext)._operator = this.match(SparkSqlParser.INTERSECT); - this.state = 1624; + this.state = 1894; + _localctx._operator = this.match(SparkSqlParser.KW_INTERSECT); + this.state = 1896; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.ALL || _la === SparkSqlParser.DISTINCT) { + if (_la === SparkSqlParser.KW_ALL || _la === SparkSqlParser.KW_DISTINCT) { { - this.state = 1623; + this.state = 1895; this.setQuantifier(); } } - this.state = 1626; - (_localctx as SetOperationContext)._right = this.queryTerm(3); + this.state = 1898; + _localctx._right = this.queryTerm(3); } break; case 3: { - _localctx = new SetOperationContext(new QueryTermContext(_parentctx, _parentState)); - (_localctx as SetOperationContext)._left = _prevctx; + _localctx = new QueryTermContext(_parentctx, _parentState); + _localctx._left = _prevctx; this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_queryTerm); - this.state = 1627; + this.state = 1899; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1628; - if (!(!this.legacy_setops_precedence_enbled)) { - throw this.createFailedPredicateException("!this.legacy_setops_precedence_enbled"); + this.state = 1900; + if (!(!this.legacy_setops_precedence_enabled)) { + throw this.createFailedPredicateException("!this.legacy_setops_precedence_enabled"); } - this.state = 1629; - (_localctx as SetOperationContext)._operator = this._input.LT(1); + this.state = 1901; + _localctx._operator = this._input.LT(1); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.EXCEPT || _la === SparkSqlParser.SETMINUS || _la === SparkSqlParser.UNION)) { - (_localctx as SetOperationContext)._operator = this._errHandler.recoverInline(this); + if (!(_la === SparkSqlParser.KW_EXCEPT || _la === SparkSqlParser.KW_SETMINUS || _la === SparkSqlParser.KW_UNION)) { + _localctx._operator = this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { this.matchedEOF = true; @@ -6395,26 +7115,26 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1631; + this.state = 1903; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.ALL || _la === SparkSqlParser.DISTINCT) { + if (_la === SparkSqlParser.KW_ALL || _la === SparkSqlParser.KW_DISTINCT) { { - this.state = 1630; + this.state = 1902; this.setQuantifier(); } } - this.state = 1633; - (_localctx as SetOperationContext)._right = this.queryTerm(2); + this.state = 1905; + _localctx._right = this.queryTerm(2); } break; } } } - this.state = 1638; + this.state = 1910; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 185, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 216, this._ctx); } } } @@ -6435,57 +7155,52 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public queryPrimary(): QueryPrimaryContext { let _localctx: QueryPrimaryContext = new QueryPrimaryContext(this._ctx, this.state); - this.enterRule(_localctx, 86, SparkSqlParser.RULE_queryPrimary); + this.enterRule(_localctx, 94, SparkSqlParser.RULE_queryPrimary); try { - this.state = 1648; + this.state = 1920; this._errHandler.sync(this); switch (this._input.LA(1)) { - case SparkSqlParser.MAP: - case SparkSqlParser.REDUCE: - case SparkSqlParser.SELECT: - _localctx = new QueryPrimaryDefaultContext(_localctx); + case SparkSqlParser.KW_MAP: + case SparkSqlParser.KW_REDUCE: + case SparkSqlParser.KW_SELECT: this.enterOuterAlt(_localctx, 1); { - this.state = 1639; + this.state = 1911; this.querySpecification(); } break; - case SparkSqlParser.FROM: - _localctx = new FromStmtContext(_localctx); + case SparkSqlParser.KW_FROM: this.enterOuterAlt(_localctx, 2); { - this.state = 1640; + this.state = 1912; this.fromStatement(); } break; - case SparkSqlParser.TABLE: - _localctx = new TableContext(_localctx); + case SparkSqlParser.KW_TABLE: this.enterOuterAlt(_localctx, 3); { - this.state = 1641; - this.match(SparkSqlParser.TABLE); - this.state = 1642; - this.multipartIdentifier(); + this.state = 1913; + this.match(SparkSqlParser.KW_TABLE); + this.state = 1914; + this.tableIdentifierReference(); } break; - case SparkSqlParser.VALUES: - _localctx = new InlineTableDefault1Context(_localctx); + case SparkSqlParser.KW_VALUES: this.enterOuterAlt(_localctx, 4); { - this.state = 1643; + this.state = 1915; this.inlineTable(); } break; - case SparkSqlParser.T__0: - _localctx = new SubqueryContext(_localctx); + case SparkSqlParser.LEFT_PAREN: this.enterOuterAlt(_localctx, 5); { - this.state = 1644; - this.match(SparkSqlParser.T__0); - this.state = 1645; + this.state = 1916; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 1917; this.query(); - this.state = 1646; - this.match(SparkSqlParser.T__1); + this.state = 1918; + this.match(SparkSqlParser.RIGHT_PAREN); } break; default: @@ -6509,22 +7224,22 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public sortItem(): SortItemContext { let _localctx: SortItemContext = new SortItemContext(this._ctx, this.state); - this.enterRule(_localctx, 88, SparkSqlParser.RULE_sortItem); + this.enterRule(_localctx, 96, SparkSqlParser.RULE_sortItem); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1650; + this.state = 1922; this.expression(); - this.state = 1652; + this.state = 1924; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 187, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 218, this._ctx) ) { case 1: { - this.state = 1651; + this.state = 1923; _localctx._ordering = this._input.LT(1); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.ASC || _la === SparkSqlParser.DESC)) { + if (!(_la === SparkSqlParser.KW_ASC || _la === SparkSqlParser.KW_DESC)) { _localctx._ordering = this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -6537,17 +7252,17 @@ export class SparkSqlParser extends Parser { } break; } - this.state = 1656; + this.state = 1928; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 188, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 219, this._ctx) ) { case 1: { - this.state = 1654; - this.match(SparkSqlParser.NULLS); - this.state = 1655; + this.state = 1926; + this.match(SparkSqlParser.KW_NULLS); + this.state = 1927; _localctx._nullOrder = this._input.LT(1); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FIRST || _la === SparkSqlParser.LAST)) { + if (!(_la === SparkSqlParser.KW_FIRST || _la === SparkSqlParser.KW_LAST)) { _localctx._nullOrder = this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { @@ -6579,14 +7294,14 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public fromStatement(): FromStatementContext { let _localctx: FromStatementContext = new FromStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 90, SparkSqlParser.RULE_fromStatement); + this.enterRule(_localctx, 98, SparkSqlParser.RULE_fromStatement); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1658; + this.state = 1930; this.fromClause(); - this.state = 1660; + this.state = 1932; this._errHandler.sync(this); _alt = 1; do { @@ -6594,7 +7309,7 @@ export class SparkSqlParser extends Parser { case 1: { { - this.state = 1659; + this.state = 1931; this.fromStatementBody(); } } @@ -6602,9 +7317,9 @@ export class SparkSqlParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 1662; + this.state = 1934; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 189, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 220, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } } @@ -6625,28 +7340,28 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public fromStatementBody(): FromStatementBodyContext { let _localctx: FromStatementBodyContext = new FromStatementBodyContext(this._ctx, this.state); - this.enterRule(_localctx, 92, SparkSqlParser.RULE_fromStatementBody); + this.enterRule(_localctx, 100, SparkSqlParser.RULE_fromStatementBody); try { let _alt: number; - this.state = 1691; + this.state = 1963; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 196, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 227, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1664; + this.state = 1936; this.transformClause(); - this.state = 1666; + this.state = 1938; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 190, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 221, this._ctx) ) { case 1: { - this.state = 1665; + this.state = 1937; this.whereClause(); } break; } - this.state = 1668; + this.state = 1940; this.queryOrganization(); } break; @@ -6654,65 +7369,65 @@ export class SparkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1670; + this.state = 1942; this.selectClause(); - this.state = 1674; + this.state = 1946; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 191, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 222, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1671; + this.state = 1943; this.lateralView(); } } } - this.state = 1676; + this.state = 1948; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 191, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 222, this._ctx); } - this.state = 1678; + this.state = 1950; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 192, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 223, this._ctx) ) { case 1: { - this.state = 1677; + this.state = 1949; this.whereClause(); } break; } - this.state = 1681; + this.state = 1953; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 193, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 224, this._ctx) ) { case 1: { - this.state = 1680; + this.state = 1952; this.aggregationClause(); } break; } - this.state = 1684; + this.state = 1956; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 194, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 225, this._ctx) ) { case 1: { - this.state = 1683; + this.state = 1955; this.havingClause(); } break; } - this.state = 1687; + this.state = 1959; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 195, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 226, this._ctx) ) { case 1: { - this.state = 1686; + this.state = 1958; this.windowClause(); } break; } - this.state = 1689; + this.state = 1961; this.queryOrganization(); } break; @@ -6735,109 +7450,153 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public querySpecification(): QuerySpecificationContext { let _localctx: QuerySpecificationContext = new QuerySpecificationContext(this._ctx, this.state); - this.enterRule(_localctx, 94, SparkSqlParser.RULE_querySpecification); + this.enterRule(_localctx, 102, SparkSqlParser.RULE_querySpecification); try { let _alt: number; - this.state = 1722; + this.state = 2009; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 205, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 240, this._ctx) ) { case 1: - _localctx = new TransformQuerySpecificationContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 1693; + this.state = 1965; this.transformClause(); - this.state = 1695; + this.state = 1967; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 197, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 228, this._ctx) ) { case 1: { - this.state = 1694; + this.state = 1966; this.fromClause(); } break; } - this.state = 1698; + this.state = 1972; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 229, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 1969; + this.lateralView(); + } + } + } + this.state = 1974; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 229, this._ctx); + } + this.state = 1976; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 198, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 230, this._ctx) ) { case 1: { - this.state = 1697; + this.state = 1975; this.whereClause(); } break; } + this.state = 1979; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 231, this._ctx) ) { + case 1: + { + this.state = 1978; + this.aggregationClause(); + } + break; + } + this.state = 1982; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 232, this._ctx) ) { + case 1: + { + this.state = 1981; + this.havingClause(); + } + break; + } + this.state = 1985; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 233, this._ctx) ) { + case 1: + { + this.state = 1984; + this.windowClause(); + } + break; + } } break; case 2: - _localctx = new RegularQuerySpecificationContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 1700; + this.state = 1987; this.selectClause(); - this.state = 1702; + this.state = 1989; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 199, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 234, this._ctx) ) { case 1: { - this.state = 1701; + this.state = 1988; this.fromClause(); } break; } - this.state = 1707; + this.state = 1994; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 200, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 235, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1704; + this.state = 1991; this.lateralView(); } } } - this.state = 1709; + this.state = 1996; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 200, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 235, this._ctx); } - this.state = 1711; + this.state = 1998; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 201, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 236, this._ctx) ) { case 1: { - this.state = 1710; + this.state = 1997; this.whereClause(); } break; } - this.state = 1714; + this.state = 2001; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 202, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 237, this._ctx) ) { case 1: { - this.state = 1713; + this.state = 2000; this.aggregationClause(); } break; } - this.state = 1717; + this.state = 2004; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 203, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 238, this._ctx) ) { case 1: { - this.state = 1716; + this.state = 2003; this.havingClause(); } break; } - this.state = 1720; + this.state = 2007; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 204, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 239, this._ctx) ) { case 1: { - this.state = 1719; + this.state = 2006; this.windowClause(); } break; @@ -6863,93 +7622,123 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public transformClause(): TransformClauseContext { let _localctx: TransformClauseContext = new TransformClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 96, SparkSqlParser.RULE_transformClause); + this.enterRule(_localctx, 104, SparkSqlParser.RULE_transformClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1734; + this.state = 2030; this._errHandler.sync(this); switch (this._input.LA(1)) { - case SparkSqlParser.SELECT: + case SparkSqlParser.KW_SELECT: { - this.state = 1724; - this.match(SparkSqlParser.SELECT); - this.state = 1725; - _localctx._kind = this.match(SparkSqlParser.TRANSFORM); - this.state = 1726; - this.match(SparkSqlParser.T__0); - this.state = 1727; - this.namedExpressionSeq(); - this.state = 1728; - this.match(SparkSqlParser.T__1); + this.state = 2011; + this.match(SparkSqlParser.KW_SELECT); + this.state = 2012; + _localctx._kind = this.match(SparkSqlParser.KW_TRANSFORM); + this.state = 2013; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2015; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 241, this._ctx) ) { + case 1: + { + this.state = 2014; + this.setQuantifier(); + } + break; + } + this.state = 2017; + this.expressionSeq(); + this.state = 2018; + this.match(SparkSqlParser.RIGHT_PAREN); } break; - case SparkSqlParser.MAP: + case SparkSqlParser.KW_MAP: { - this.state = 1730; - _localctx._kind = this.match(SparkSqlParser.MAP); - this.state = 1731; - this.namedExpressionSeq(); + this.state = 2020; + _localctx._kind = this.match(SparkSqlParser.KW_MAP); + this.state = 2022; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 242, this._ctx) ) { + case 1: + { + this.state = 2021; + this.setQuantifier(); + } + break; + } + this.state = 2024; + this.expressionSeq(); } break; - case SparkSqlParser.REDUCE: + case SparkSqlParser.KW_REDUCE: { - this.state = 1732; - _localctx._kind = this.match(SparkSqlParser.REDUCE); - this.state = 1733; - this.namedExpressionSeq(); + this.state = 2025; + _localctx._kind = this.match(SparkSqlParser.KW_REDUCE); + this.state = 2027; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 243, this._ctx) ) { + case 1: + { + this.state = 2026; + this.setQuantifier(); + } + break; + } + this.state = 2029; + this.expressionSeq(); } break; default: throw new NoViableAltException(this); } - this.state = 1737; + this.state = 2033; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.ROW) { + if (_la === SparkSqlParser.KW_ROW) { { - this.state = 1736; + this.state = 2032; _localctx._inRowFormat = this.rowFormat(); } } - this.state = 1741; + this.state = 2037; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.RECORDWRITER) { + if (_la === SparkSqlParser.KW_RECORDWRITER) { { - this.state = 1739; - this.match(SparkSqlParser.RECORDWRITER); - this.state = 1740; - _localctx._recordWriter = this.match(SparkSqlParser.STRING); + this.state = 2035; + this.match(SparkSqlParser.KW_RECORDWRITER); + this.state = 2036; + _localctx._recordWriter = this.stringLit(); } } - this.state = 1743; - this.match(SparkSqlParser.USING); - this.state = 1744; - _localctx._script = this.match(SparkSqlParser.STRING); - this.state = 1757; + this.state = 2039; + this.match(SparkSqlParser.KW_USING); + this.state = 2040; + _localctx._script = this.stringLit(); + this.state = 2053; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 211, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 249, this._ctx) ) { case 1: { - this.state = 1745; - this.match(SparkSqlParser.AS); - this.state = 1755; + this.state = 2041; + this.match(SparkSqlParser.KW_AS); + this.state = 2051; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 210, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 248, this._ctx) ) { case 1: { - this.state = 1746; + this.state = 2042; this.identifierSeq(); } break; case 2: { - this.state = 1747; + this.state = 2043; this.colTypeList(); } break; @@ -6957,27 +7746,27 @@ export class SparkSqlParser extends Parser { case 3: { { - this.state = 1748; - this.match(SparkSqlParser.T__0); - this.state = 1751; + this.state = 2044; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2047; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 209, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 247, this._ctx) ) { case 1: { - this.state = 1749; + this.state = 2045; this.identifierSeq(); } break; case 2: { - this.state = 1750; + this.state = 2046; this.colTypeList(); } break; } - this.state = 1753; - this.match(SparkSqlParser.T__1); + this.state = 2049; + this.match(SparkSqlParser.RIGHT_PAREN); } } break; @@ -6985,25 +7774,25 @@ export class SparkSqlParser extends Parser { } break; } - this.state = 1760; + this.state = 2056; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 212, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 250, this._ctx) ) { case 1: { - this.state = 1759; + this.state = 2055; _localctx._outRowFormat = this.rowFormat(); } break; } - this.state = 1764; + this.state = 2060; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 213, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 251, this._ctx) ) { case 1: { - this.state = 1762; - this.match(SparkSqlParser.RECORDREADER); - this.state = 1763; - _localctx._recordReader = this.match(SparkSqlParser.STRING); + this.state = 2058; + this.match(SparkSqlParser.KW_RECORDREADER); + this.state = 2059; + _localctx._recordReader = this.stringLit(); } break; } @@ -7026,41 +7815,41 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public selectClause(): SelectClauseContext { let _localctx: SelectClauseContext = new SelectClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 98, SparkSqlParser.RULE_selectClause); + this.enterRule(_localctx, 106, SparkSqlParser.RULE_selectClause); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1766; - this.match(SparkSqlParser.SELECT); - this.state = 1770; + this.state = 2062; + this.match(SparkSqlParser.KW_SELECT); + this.state = 2066; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 214, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 252, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1767; + this.state = 2063; _localctx._hint = this.hint(); _localctx._hints.push(_localctx._hint); } } } - this.state = 1772; + this.state = 2068; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 214, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 252, this._ctx); } - this.state = 1774; + this.state = 2070; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 215, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 253, this._ctx) ) { case 1: { - this.state = 1773; + this.state = 2069; this.setQuantifier(); } break; } - this.state = 1776; + this.state = 2072; this.namedExpressionSeq(); } } @@ -7081,13 +7870,13 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public setClause(): SetClauseContext { let _localctx: SetClauseContext = new SetClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 100, SparkSqlParser.RULE_setClause); + this.enterRule(_localctx, 108, SparkSqlParser.RULE_setClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1778; - this.match(SparkSqlParser.SET); - this.state = 1779; + this.state = 2074; + this.match(SparkSqlParser.KW_SET); + this.state = 2075; this.assignmentList(); } } @@ -7108,30 +7897,30 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public matchedClause(): MatchedClauseContext { let _localctx: MatchedClauseContext = new MatchedClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 102, SparkSqlParser.RULE_matchedClause); + this.enterRule(_localctx, 110, SparkSqlParser.RULE_matchedClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1781; - this.match(SparkSqlParser.WHEN); - this.state = 1782; - this.match(SparkSqlParser.MATCHED); - this.state = 1785; + this.state = 2077; + this.match(SparkSqlParser.KW_WHEN); + this.state = 2078; + this.match(SparkSqlParser.KW_MATCHED); + this.state = 2081; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AND) { + if (_la === SparkSqlParser.KW_AND) { { - this.state = 1783; - this.match(SparkSqlParser.AND); - this.state = 1784; + this.state = 2079; + this.match(SparkSqlParser.KW_AND); + this.state = 2080; _localctx._matchedCond = this.booleanExpression(0); } } - this.state = 1787; - this.match(SparkSqlParser.THEN); - this.state = 1788; + this.state = 2083; + this.match(SparkSqlParser.KW_THEN); + this.state = 2084; this.matchedAction(); } } @@ -7152,32 +7941,44 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public notMatchedClause(): NotMatchedClauseContext { let _localctx: NotMatchedClauseContext = new NotMatchedClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 104, SparkSqlParser.RULE_notMatchedClause); + this.enterRule(_localctx, 112, SparkSqlParser.RULE_notMatchedClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1790; - this.match(SparkSqlParser.WHEN); - this.state = 1791; - this.match(SparkSqlParser.NOT); - this.state = 1792; - this.match(SparkSqlParser.MATCHED); - this.state = 1795; + this.state = 2086; + this.match(SparkSqlParser.KW_WHEN); + this.state = 2087; + this.match(SparkSqlParser.KW_NOT); + this.state = 2088; + this.match(SparkSqlParser.KW_MATCHED); + this.state = 2091; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_BY) { + { + this.state = 2089; + this.match(SparkSqlParser.KW_BY); + this.state = 2090; + this.match(SparkSqlParser.KW_TARGET); + } + } + + this.state = 2095; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.AND) { + if (_la === SparkSqlParser.KW_AND) { { - this.state = 1793; - this.match(SparkSqlParser.AND); - this.state = 1794; + this.state = 2093; + this.match(SparkSqlParser.KW_AND); + this.state = 2094; _localctx._notMatchedCond = this.booleanExpression(0); } } - this.state = 1797; - this.match(SparkSqlParser.THEN); - this.state = 1798; + this.state = 2097; + this.match(SparkSqlParser.KW_THEN); + this.state = 2098; this.notMatchedAction(); } } @@ -7196,29 +7997,79 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) + public notMatchedBySourceClause(): NotMatchedBySourceClauseContext { + let _localctx: NotMatchedBySourceClauseContext = new NotMatchedBySourceClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 114, SparkSqlParser.RULE_notMatchedBySourceClause); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2100; + this.match(SparkSqlParser.KW_WHEN); + this.state = 2101; + this.match(SparkSqlParser.KW_NOT); + this.state = 2102; + this.match(SparkSqlParser.KW_MATCHED); + this.state = 2103; + this.match(SparkSqlParser.KW_BY); + this.state = 2104; + this.match(SparkSqlParser.KW_SOURCE); + this.state = 2107; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_AND) { + { + this.state = 2105; + this.match(SparkSqlParser.KW_AND); + this.state = 2106; + _localctx._notMatchedBySourceCond = this.booleanExpression(0); + } + } + + this.state = 2109; + this.match(SparkSqlParser.KW_THEN); + this.state = 2110; + this.notMatchedBySourceAction(); + } + } + 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 matchedAction(): MatchedActionContext { let _localctx: MatchedActionContext = new MatchedActionContext(this._ctx, this.state); - this.enterRule(_localctx, 106, SparkSqlParser.RULE_matchedAction); + this.enterRule(_localctx, 116, SparkSqlParser.RULE_matchedAction); try { - this.state = 1807; + this.state = 2119; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 218, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 258, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1800; - this.match(SparkSqlParser.DELETE); + this.state = 2112; + this.match(SparkSqlParser.KW_DELETE); } break; case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1801; - this.match(SparkSqlParser.UPDATE); - this.state = 1802; - this.match(SparkSqlParser.SET); - this.state = 1803; + this.state = 2113; + this.match(SparkSqlParser.KW_UPDATE); + this.state = 2114; + this.match(SparkSqlParser.KW_SET); + this.state = 2115; this.match(SparkSqlParser.ASTERISK); } break; @@ -7226,11 +8077,11 @@ export class SparkSqlParser extends Parser { case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 1804; - this.match(SparkSqlParser.UPDATE); - this.state = 1805; - this.match(SparkSqlParser.SET); - this.state = 1806; + this.state = 2116; + this.match(SparkSqlParser.KW_UPDATE); + this.state = 2117; + this.match(SparkSqlParser.KW_SET); + this.state = 2118; this.assignmentList(); } break; @@ -7253,18 +8104,18 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public notMatchedAction(): NotMatchedActionContext { let _localctx: NotMatchedActionContext = new NotMatchedActionContext(this._ctx, this.state); - this.enterRule(_localctx, 108, SparkSqlParser.RULE_notMatchedAction); + this.enterRule(_localctx, 118, SparkSqlParser.RULE_notMatchedAction); let _la: number; try { - this.state = 1827; + this.state = 2139; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 220, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 260, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1809; - this.match(SparkSqlParser.INSERT); - this.state = 1810; + this.state = 2121; + this.match(SparkSqlParser.KW_INSERT); + this.state = 2122; this.match(SparkSqlParser.ASTERISK); } break; @@ -7272,38 +8123,38 @@ export class SparkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1811; - this.match(SparkSqlParser.INSERT); - this.state = 1812; - this.match(SparkSqlParser.T__0); - this.state = 1813; - _localctx._columns = this.multipartIdentifierList(); - this.state = 1814; - this.match(SparkSqlParser.T__1); - this.state = 1815; - this.match(SparkSqlParser.VALUES); - this.state = 1816; - this.match(SparkSqlParser.T__0); - this.state = 1817; + this.state = 2123; + this.match(SparkSqlParser.KW_INSERT); + this.state = 2124; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2125; + this.multipartIdentifierList(); + this.state = 2126; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2127; + this.match(SparkSqlParser.KW_VALUES); + this.state = 2128; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2129; this.expression(); - this.state = 1822; + this.state = 2134; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1818; - this.match(SparkSqlParser.T__2); - this.state = 1819; + this.state = 2130; + this.match(SparkSqlParser.COMMA); + this.state = 2131; this.expression(); } } - this.state = 1824; + this.state = 2136; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1825; - this.match(SparkSqlParser.T__1); + this.state = 2137; + this.match(SparkSqlParser.RIGHT_PAREN); } break; } @@ -7323,28 +8174,72 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public assignmentList(): AssignmentListContext { - let _localctx: AssignmentListContext = new AssignmentListContext(this._ctx, this.state); - this.enterRule(_localctx, 110, SparkSqlParser.RULE_assignmentList); - let _la: number; + public notMatchedBySourceAction(): NotMatchedBySourceActionContext { + let _localctx: NotMatchedBySourceActionContext = new NotMatchedBySourceActionContext(this._ctx, this.state); + this.enterRule(_localctx, 120, SparkSqlParser.RULE_notMatchedBySourceAction); + try { + this.state = 2145; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case SparkSqlParser.KW_DELETE: + this.enterOuterAlt(_localctx, 1); + { + this.state = 2141; + this.match(SparkSqlParser.KW_DELETE); + } + break; + case SparkSqlParser.KW_UPDATE: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2142; + this.match(SparkSqlParser.KW_UPDATE); + this.state = 2143; + this.match(SparkSqlParser.KW_SET); + this.state = 2144; + this.assignmentList(); + } + 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 assignmentList(): AssignmentListContext { + let _localctx: AssignmentListContext = new AssignmentListContext(this._ctx, this.state); + this.enterRule(_localctx, 122, SparkSqlParser.RULE_assignmentList); + let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 1829; + this.state = 2147; this.assignment(); - this.state = 1834; + this.state = 2152; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1830; - this.match(SparkSqlParser.T__2); - this.state = 1831; + this.state = 2148; + this.match(SparkSqlParser.COMMA); + this.state = 2149; this.assignment(); } } - this.state = 1836; + this.state = 2154; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7367,15 +8262,15 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public assignment(): AssignmentContext { let _localctx: AssignmentContext = new AssignmentContext(this._ctx, this.state); - this.enterRule(_localctx, 112, SparkSqlParser.RULE_assignment); + this.enterRule(_localctx, 124, SparkSqlParser.RULE_assignment); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1837; + this.state = 2155; _localctx._key = this.multipartIdentifier(); - this.state = 1838; + this.state = 2156; this.match(SparkSqlParser.EQ); - this.state = 1839; + this.state = 2157; _localctx._value = this.expression(); } } @@ -7396,13 +8291,13 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public whereClause(): WhereClauseContext { let _localctx: WhereClauseContext = new WhereClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 114, SparkSqlParser.RULE_whereClause); + this.enterRule(_localctx, 126, SparkSqlParser.RULE_whereClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1841; - this.match(SparkSqlParser.WHERE); - this.state = 1842; + this.state = 2159; + this.match(SparkSqlParser.KW_WHERE); + this.state = 2160; this.booleanExpression(0); } } @@ -7423,13 +8318,13 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public havingClause(): HavingClauseContext { let _localctx: HavingClauseContext = new HavingClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 116, SparkSqlParser.RULE_havingClause); + this.enterRule(_localctx, 128, SparkSqlParser.RULE_havingClause); try { this.enterOuterAlt(_localctx, 1); { - this.state = 1844; - this.match(SparkSqlParser.HAVING); - this.state = 1845; + this.state = 2162; + this.match(SparkSqlParser.KW_HAVING); + this.state = 2163; this.booleanExpression(0); } } @@ -7450,45 +8345,45 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public hint(): HintContext { let _localctx: HintContext = new HintContext(this._ctx, this.state); - this.enterRule(_localctx, 118, SparkSqlParser.RULE_hint); + this.enterRule(_localctx, 130, SparkSqlParser.RULE_hint); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1847; - this.match(SparkSqlParser.T__4); - this.state = 1848; + this.state = 2165; + this.match(SparkSqlParser.HENT_START); + this.state = 2166; _localctx._hintStatement = this.hintStatement(); _localctx._hintStatements.push(_localctx._hintStatement); - this.state = 1855; + this.state = 2173; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 223, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 264, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1850; + this.state = 2168; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 222, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 263, this._ctx) ) { case 1: { - this.state = 1849; - this.match(SparkSqlParser.T__2); + this.state = 2167; + this.match(SparkSqlParser.COMMA); } break; } - this.state = 1852; + this.state = 2170; _localctx._hintStatement = this.hintStatement(); _localctx._hintStatements.push(_localctx._hintStatement); } } } - this.state = 1857; + this.state = 2175; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 223, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 264, this._ctx); } - this.state = 1858; - this.match(SparkSqlParser.T__5); + this.state = 2176; + this.match(SparkSqlParser.HENT_END); } } catch (re) { @@ -7508,16 +8403,16 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public hintStatement(): HintStatementContext { let _localctx: HintStatementContext = new HintStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 120, SparkSqlParser.RULE_hintStatement); + this.enterRule(_localctx, 132, SparkSqlParser.RULE_hintStatement); let _la: number; try { - this.state = 1873; + this.state = 2191; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 225, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 266, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1860; + this.state = 2178; _localctx._hintName = this.identifier(); } break; @@ -7525,32 +8420,32 @@ export class SparkSqlParser extends Parser { case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1861; + this.state = 2179; _localctx._hintName = this.identifier(); - this.state = 1862; - this.match(SparkSqlParser.T__0); - this.state = 1863; + this.state = 2180; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2181; _localctx._primaryExpression = this.primaryExpression(0); _localctx._parameters.push(_localctx._primaryExpression); - this.state = 1868; + this.state = 2186; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1864; - this.match(SparkSqlParser.T__2); - this.state = 1865; + this.state = 2182; + this.match(SparkSqlParser.COMMA); + this.state = 2183; _localctx._primaryExpression = this.primaryExpression(0); _localctx._parameters.push(_localctx._primaryExpression); } } - this.state = 1870; + this.state = 2188; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1871; - this.match(SparkSqlParser.T__1); + this.state = 2189; + this.match(SparkSqlParser.RIGHT_PAREN); } break; } @@ -7572,59 +8467,69 @@ export class SparkSqlParser extends Parser { // @RuleVersion(0) public fromClause(): FromClauseContext { let _localctx: FromClauseContext = new FromClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 122, SparkSqlParser.RULE_fromClause); + this.enterRule(_localctx, 134, SparkSqlParser.RULE_fromClause); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 1875; - this.match(SparkSqlParser.FROM); - this.state = 1876; + this.state = 2193; + this.match(SparkSqlParser.KW_FROM); + this.state = 2194; this.relation(); - this.state = 1881; + this.state = 2199; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 226, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 267, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1877; - this.match(SparkSqlParser.T__2); - this.state = 1878; + this.state = 2195; + this.match(SparkSqlParser.COMMA); + this.state = 2196; this.relation(); } } } - this.state = 1883; + this.state = 2201; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 226, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 267, this._ctx); } - this.state = 1887; + this.state = 2205; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 227, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 268, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1884; + this.state = 2202; this.lateralView(); } } } - this.state = 1889; + this.state = 2207; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 227, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 268, this._ctx); } - this.state = 1891; + this.state = 2209; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 228, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 269, this._ctx) ) { case 1: { - this.state = 1890; + this.state = 2208; this.pivotClause(); } break; } + this.state = 2212; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 270, this._ctx) ) { + case 1: + { + this.state = 2211; + this.unpivotClause(); + } + break; + } } } catch (re) { @@ -7642,132 +8547,79 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public aggregationClause(): AggregationClauseContext { - let _localctx: AggregationClauseContext = new AggregationClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 124, SparkSqlParser.RULE_aggregationClause); + public temporalClause(): TemporalClauseContext { + let _localctx: TemporalClauseContext = new TemporalClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 136, SparkSqlParser.RULE_temporalClause); let _la: number; try { - let _alt: number; - this.state = 1937; + this.state = 2228; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 233, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 273, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1893; - this.match(SparkSqlParser.GROUP); - this.state = 1894; - this.match(SparkSqlParser.BY); - this.state = 1895; - _localctx._expression = this.expression(); - _localctx._groupingExpressions.push(_localctx._expression); - this.state = 1900; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 229, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 1896; - this.match(SparkSqlParser.T__2); - this.state = 1897; - _localctx._expression = this.expression(); - _localctx._groupingExpressions.push(_localctx._expression); - } - } - } - this.state = 1902; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 229, this._ctx); - } - this.state = 1920; + this.state = 2215; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 231, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_FOR) { { - this.state = 1903; - this.match(SparkSqlParser.WITH); - this.state = 1904; - _localctx._kind = this.match(SparkSqlParser.ROLLUP); + this.state = 2214; + this.match(SparkSqlParser.KW_FOR); } - break; + } - case 2: - { - this.state = 1905; - this.match(SparkSqlParser.WITH); - this.state = 1906; - _localctx._kind = this.match(SparkSqlParser.CUBE); + this.state = 2217; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_SYSTEM_VERSION || _la === SparkSqlParser.KW_VERSION)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - break; - case 3: - { - this.state = 1907; - _localctx._kind = this.match(SparkSqlParser.GROUPING); - this.state = 1908; - this.match(SparkSqlParser.SETS); - this.state = 1909; - this.match(SparkSqlParser.T__0); - this.state = 1910; - this.groupingSet(); - this.state = 1915; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 1911; - this.match(SparkSqlParser.T__2); - this.state = 1912; - this.groupingSet(); - } - } - this.state = 1917; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 1918; - this.match(SparkSqlParser.T__1); - } - break; + this._errHandler.reportMatch(this); + this.consume(); } + this.state = 2218; + this.match(SparkSqlParser.KW_AS); + this.state = 2219; + this.match(SparkSqlParser.KW_OF); + this.state = 2220; + this.version(); } break; case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 1922; - this.match(SparkSqlParser.GROUP); - this.state = 1923; - this.match(SparkSqlParser.BY); - this.state = 1924; - _localctx._kind = this.match(SparkSqlParser.GROUPING); - this.state = 1925; - this.match(SparkSqlParser.SETS); - this.state = 1926; - this.match(SparkSqlParser.T__0); - this.state = 1927; - this.groupingSet(); - this.state = 1932; + this.state = 2222; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + if (_la === SparkSqlParser.KW_FOR) { { - { - this.state = 1928; - this.match(SparkSqlParser.T__2); - this.state = 1929; - this.groupingSet(); + this.state = 2221; + this.match(SparkSqlParser.KW_FOR); } + } + + this.state = 2224; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_SYSTEM_TIME || _la === SparkSqlParser.KW_TIMESTAMP)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - this.state = 1934; - this._errHandler.sync(this); - _la = this._input.LA(1); + + this._errHandler.reportMatch(this); + this.consume(); } - this.state = 1935; - this.match(SparkSqlParser.T__1); + this.state = 2225; + this.match(SparkSqlParser.KW_AS); + this.state = 2226; + this.match(SparkSqlParser.KW_OF); + this.state = 2227; + _localctx._timestamp = this.valueExpression(0); } break; } @@ -7787,55 +8639,128 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public groupingSet(): GroupingSetContext { - let _localctx: GroupingSetContext = new GroupingSetContext(this._ctx, this.state); - this.enterRule(_localctx, 126, SparkSqlParser.RULE_groupingSet); + public aggregationClause(): AggregationClauseContext { + let _localctx: AggregationClauseContext = new AggregationClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 138, SparkSqlParser.RULE_aggregationClause); let _la: number; try { - this.state = 1952; + let _alt: number; + this.state = 2269; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 236, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 278, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 1939; - this.match(SparkSqlParser.T__0); - this.state = 1948; + this.state = 2230; + this.match(SparkSqlParser.KW_GROUP); + this.state = 2231; + this.match(SparkSqlParser.KW_BY); + this.state = 2232; + _localctx._groupByClause = this.groupByClause(); + _localctx._groupingExpressionsWithGroupingAnalytics.push(_localctx._groupByClause); + this.state = 2237; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 274, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 2233; + this.match(SparkSqlParser.COMMA); + this.state = 2234; + _localctx._groupByClause = this.groupByClause(); + _localctx._groupingExpressionsWithGroupingAnalytics.push(_localctx._groupByClause); + } + } + } + this.state = 2239; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 274, this._ctx); + } + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2240; + this.match(SparkSqlParser.KW_GROUP); + this.state = 2241; + this.match(SparkSqlParser.KW_BY); + this.state = 2242; + _localctx._expression = this.expression(); + _localctx._groupingExpressions.push(_localctx._expression); + this.state = 2247; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 275, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 2243; + this.match(SparkSqlParser.COMMA); + this.state = 2244; + _localctx._expression = this.expression(); + _localctx._groupingExpressions.push(_localctx._expression); + } + } + } + this.state = 2249; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 275, this._ctx); + } + this.state = 2267; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 235, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 277, this._ctx) ) { case 1: { - this.state = 1940; - this.expression(); - this.state = 1945; + this.state = 2250; + this.match(SparkSqlParser.KW_WITH); + this.state = 2251; + _localctx._kind = this.match(SparkSqlParser.KW_ROLLUP); + } + break; + + case 2: + { + this.state = 2252; + this.match(SparkSqlParser.KW_WITH); + this.state = 2253; + _localctx._kind = this.match(SparkSqlParser.KW_CUBE); + } + break; + + case 3: + { + this.state = 2254; + _localctx._kind = this.match(SparkSqlParser.KW_GROUPING); + this.state = 2255; + this.match(SparkSqlParser.KW_SETS); + this.state = 2256; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2257; + this.groupingSet(); + this.state = 2262; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 1941; - this.match(SparkSqlParser.T__2); - this.state = 1942; - this.expression(); + this.state = 2258; + this.match(SparkSqlParser.COMMA); + this.state = 2259; + this.groupingSet(); } } - this.state = 1947; + this.state = 2264; this._errHandler.sync(this); _la = this._input.LA(1); } + this.state = 2265; + this.match(SparkSqlParser.RIGHT_PAREN); } break; } - this.state = 1950; - this.match(SparkSqlParser.T__1); - } - break; - - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 1951; - this.expression(); } break; } @@ -7855,51 +8780,28 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public pivotClause(): PivotClauseContext { - let _localctx: PivotClauseContext = new PivotClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 128, SparkSqlParser.RULE_pivotClause); - let _la: number; + public groupByClause(): GroupByClauseContext { + let _localctx: GroupByClauseContext = new GroupByClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 140, SparkSqlParser.RULE_groupByClause); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 1954; - this.match(SparkSqlParser.PIVOT); - this.state = 1955; - this.match(SparkSqlParser.T__0); - this.state = 1956; - _localctx._aggregates = this.namedExpressionSeq(); - this.state = 1957; - this.match(SparkSqlParser.FOR); - this.state = 1958; - this.pivotColumn(); - this.state = 1959; - this.match(SparkSqlParser.IN); - this.state = 1960; - this.match(SparkSqlParser.T__0); - this.state = 1961; - _localctx._pivotValue = this.pivotValue(); - _localctx._pivotValues.push(_localctx._pivotValue); - this.state = 1966; + this.state = 2273; this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { + switch ( this.interpreter.adaptivePredict(this._input, 279, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); { - this.state = 1962; - this.match(SparkSqlParser.T__2); - this.state = 1963; - _localctx._pivotValue = this.pivotValue(); - _localctx._pivotValues.push(_localctx._pivotValue); + this.state = 2271; + this.groupingAnalytics(); } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2272; + this.expression(); } - this.state = 1968; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 1969; - this.match(SparkSqlParser.T__1); - this.state = 1970; - this.match(SparkSqlParser.T__1); + break; } } catch (re) { @@ -7917,52 +8819,87 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public pivotColumn(): PivotColumnContext { - let _localctx: PivotColumnContext = new PivotColumnContext(this._ctx, this.state); - this.enterRule(_localctx, 130, SparkSqlParser.RULE_pivotColumn); + public groupingAnalytics(): GroupingAnalyticsContext { + let _localctx: GroupingAnalyticsContext = new GroupingAnalyticsContext(this._ctx, this.state); + this.enterRule(_localctx, 142, SparkSqlParser.RULE_groupingAnalytics); let _la: number; try { - this.state = 1984; + this.state = 2300; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 239, this._ctx) ) { - case 1: + switch (this._input.LA(1)) { + case SparkSqlParser.KW_CUBE: + case SparkSqlParser.KW_ROLLUP: this.enterOuterAlt(_localctx, 1); { - this.state = 1972; - _localctx._identifier = this.identifier(); - _localctx._identifiers.push(_localctx._identifier); - } - break; - - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 1973; - this.match(SparkSqlParser.T__0); - this.state = 1974; - _localctx._identifier = this.identifier(); - _localctx._identifiers.push(_localctx._identifier); - this.state = 1979; - this._errHandler.sync(this); + this.state = 2275; _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 1975; - this.match(SparkSqlParser.T__2); - this.state = 1976; - _localctx._identifier = this.identifier(); - _localctx._identifiers.push(_localctx._identifier); - } - } - this.state = 1981; + if (!(_la === SparkSqlParser.KW_CUBE || _la === SparkSqlParser.KW_ROLLUP)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 2276; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2277; + this.groupingSet(); + this.state = 2282; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2278; + this.match(SparkSqlParser.COMMA); + this.state = 2279; + this.groupingSet(); + } + } + this.state = 2284; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1982; - this.match(SparkSqlParser.T__1); + this.state = 2285; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + case SparkSqlParser.KW_GROUPING: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2287; + this.match(SparkSqlParser.KW_GROUPING); + this.state = 2288; + this.match(SparkSqlParser.KW_SETS); + this.state = 2289; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2290; + this.groupingElement(); + this.state = 2295; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2291; + this.match(SparkSqlParser.COMMA); + this.state = 2292; + this.groupingElement(); + } + } + this.state = 2297; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2298; + this.match(SparkSqlParser.RIGHT_PAREN); } break; + default: + throw new NoViableAltException(this); } } catch (re) { @@ -7980,35 +8917,29 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public pivotValue(): PivotValueContext { - let _localctx: PivotValueContext = new PivotValueContext(this._ctx, this.state); - this.enterRule(_localctx, 132, SparkSqlParser.RULE_pivotValue); + public groupingElement(): GroupingElementContext { + let _localctx: GroupingElementContext = new GroupingElementContext(this._ctx, this.state); + this.enterRule(_localctx, 144, SparkSqlParser.RULE_groupingElement); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 1986; - this.expression(); - this.state = 1991; + this.state = 2304; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 241, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 283, this._ctx) ) { case 1: + this.enterOuterAlt(_localctx, 1); { - this.state = 1988; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 240, this._ctx) ) { - case 1: - { - this.state = 1987; - this.match(SparkSqlParser.AS); - } - break; + this.state = 2302; + this.groupingAnalytics(); } - this.state = 1990; - this.identifier(); + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2303; + this.groupingSet(); } break; } - } } catch (re) { if (re instanceof RecognitionException) { @@ -8025,102 +8956,57 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public lateralView(): LateralViewContext { - let _localctx: LateralViewContext = new LateralViewContext(this._ctx, this.state); - this.enterRule(_localctx, 134, SparkSqlParser.RULE_lateralView); + public groupingSet(): GroupingSetContext { + let _localctx: GroupingSetContext = new GroupingSetContext(this._ctx, this.state); + this.enterRule(_localctx, 146, SparkSqlParser.RULE_groupingSet); let _la: number; try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 1993; - this.match(SparkSqlParser.LATERAL); - this.state = 1994; - this.match(SparkSqlParser.VIEW); - this.state = 1996; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 242, this._ctx) ) { - case 1: - { - this.state = 1995; - this.match(SparkSqlParser.OUTER); - } - break; - } - this.state = 1998; - this.qualifiedName(); - this.state = 1999; - this.match(SparkSqlParser.T__0); - this.state = 2008; + this.state = 2319; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 244, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 286, this._ctx) ) { case 1: + this.enterOuterAlt(_localctx, 1); { - this.state = 2000; - this.expression(); - this.state = 2005; + this.state = 2306; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2315; this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { + switch ( this.interpreter.adaptivePredict(this._input, 285, this._ctx) ) { + case 1: { - this.state = 2001; - this.match(SparkSqlParser.T__2); - this.state = 2002; + this.state = 2307; this.expression(); - } - } - this.state = 2007; + this.state = 2312; this._errHandler.sync(this); _la = this._input.LA(1); - } - } - break; - } - this.state = 2010; - this.match(SparkSqlParser.T__1); - this.state = 2011; - _localctx._tblName = this.identifier(); - this.state = 2023; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 247, this._ctx) ) { - case 1: - { - this.state = 2013; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 245, this._ctx) ) { - case 1: - { - this.state = 2012; - this.match(SparkSqlParser.AS); - } - break; - } - this.state = 2015; - _localctx._identifier = this.identifier(); - _localctx._colName.push(_localctx._identifier); - this.state = 2020; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 246, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 2016; - this.match(SparkSqlParser.T__2); - this.state = 2017; - _localctx._identifier = this.identifier(); - _localctx._colName.push(_localctx._identifier); + this.state = 2308; + this.match(SparkSqlParser.COMMA); + this.state = 2309; + this.expression(); } } + this.state = 2314; + this._errHandler.sync(this); + _la = this._input.LA(1); } - this.state = 2022; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 246, this._ctx); + } + break; } + this.state = 2317; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2318; + this.expression(); } break; - } } } catch (re) { @@ -8138,25 +9024,51 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public setQuantifier(): SetQuantifierContext { - let _localctx: SetQuantifierContext = new SetQuantifierContext(this._ctx, this.state); - this.enterRule(_localctx, 136, SparkSqlParser.RULE_setQuantifier); + public pivotClause(): PivotClauseContext { + let _localctx: PivotClauseContext = new PivotClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 148, SparkSqlParser.RULE_pivotClause); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2025; + this.state = 2321; + this.match(SparkSqlParser.KW_PIVOT); + this.state = 2322; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2323; + _localctx._aggregates = this.namedExpressionSeq(); + this.state = 2324; + this.match(SparkSqlParser.KW_FOR); + this.state = 2325; + this.pivotColumn(); + this.state = 2326; + this.match(SparkSqlParser.KW_IN); + this.state = 2327; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2328; + _localctx._pivotValue = this.pivotValue(); + _localctx._pivotValues.push(_localctx._pivotValue); + this.state = 2333; + this._errHandler.sync(this); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.ALL || _la === SparkSqlParser.DISTINCT)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2329; + this.match(SparkSqlParser.COMMA); + this.state = 2330; + _localctx._pivotValue = this.pivotValue(); + _localctx._pivotValues.push(_localctx._pivotValue); } - - this._errHandler.reportMatch(this); - this.consume(); + } + this.state = 2335; + this._errHandler.sync(this); + _la = this._input.LA(1); } + this.state = 2336; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2337; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -8174,31 +9086,52 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public relation(): RelationContext { - let _localctx: RelationContext = new RelationContext(this._ctx, this.state); - this.enterRule(_localctx, 138, SparkSqlParser.RULE_relation); + public pivotColumn(): PivotColumnContext { + let _localctx: PivotColumnContext = new PivotColumnContext(this._ctx, this.state); + this.enterRule(_localctx, 150, SparkSqlParser.RULE_pivotColumn); + let _la: number; try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 2027; - this.relationPrimary(); - this.state = 2031; + this.state = 2351; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 248, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { + switch ( this.interpreter.adaptivePredict(this._input, 289, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 2339; + _localctx._identifier = this.identifier(); + _localctx._identifiers.push(_localctx._identifier); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2340; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2341; + _localctx._identifier = this.identifier(); + _localctx._identifiers.push(_localctx._identifier); + this.state = 2346; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { { { - this.state = 2028; - this.joinRelation(); + this.state = 2342; + this.match(SparkSqlParser.COMMA); + this.state = 2343; + _localctx._identifier = this.identifier(); + _localctx._identifiers.push(_localctx._identifier); } } + this.state = 2348; + this._errHandler.sync(this); + _la = this._input.LA(1); } - this.state = 2033; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 248, this._ctx); - } + this.state = 2349; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; } } catch (re) { @@ -8216,58 +9149,34 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public joinRelation(): JoinRelationContext { - let _localctx: JoinRelationContext = new JoinRelationContext(this._ctx, this.state); - this.enterRule(_localctx, 140, SparkSqlParser.RULE_joinRelation); + public pivotValue(): PivotValueContext { + let _localctx: PivotValueContext = new PivotValueContext(this._ctx, this.state); + this.enterRule(_localctx, 152, SparkSqlParser.RULE_pivotValue); try { - this.state = 2045; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2353; + this.expression(); + this.state = 2358; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.ANTI: - case SparkSqlParser.CROSS: - case SparkSqlParser.FULL: - case SparkSqlParser.INNER: - case SparkSqlParser.JOIN: - case SparkSqlParser.LEFT: - case SparkSqlParser.RIGHT: - case SparkSqlParser.SEMI: - this.enterOuterAlt(_localctx, 1); - { + switch ( this.interpreter.adaptivePredict(this._input, 291, this._ctx) ) { + case 1: { - this.state = 2034; - this.joinType(); - } - this.state = 2035; - this.match(SparkSqlParser.JOIN); - this.state = 2036; - _localctx._right = this.relationPrimary(); - this.state = 2038; + this.state = 2355; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 249, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 290, this._ctx) ) { case 1: { - this.state = 2037; - this.joinCriteria(); + this.state = 2354; + this.match(SparkSqlParser.KW_AS); } break; } + this.state = 2357; + this.identifier(); } break; - case SparkSqlParser.NATURAL: - this.enterOuterAlt(_localctx, 2); - { - this.state = 2040; - this.match(SparkSqlParser.NATURAL); - this.state = 2041; - this.joinType(); - this.state = 2042; - this.match(SparkSqlParser.JOIN); - this.state = 2043; - _localctx._right = this.relationPrimary(); - } - break; - default: - throw new NoViableAltException(this); + } } } catch (re) { @@ -8285,127 +9194,89 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public joinType(): JoinTypeContext { - let _localctx: JoinTypeContext = new JoinTypeContext(this._ctx, this.state); - this.enterRule(_localctx, 142, SparkSqlParser.RULE_joinType); + public unpivotClause(): UnpivotClauseContext { + let _localctx: UnpivotClauseContext = new UnpivotClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 154, SparkSqlParser.RULE_unpivotClause); let _la: number; try { - this.state = 2071; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2360; + this.match(SparkSqlParser.KW_UNPIVOT); + this.state = 2362; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 257, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 2048; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.INNER) { - { - this.state = 2047; - this.match(SparkSqlParser.INNER); - } - } - - } - break; - - case 2: - this.enterOuterAlt(_localctx, 2); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_EXCLUDE || _la === SparkSqlParser.KW_INCLUDE) { { - this.state = 2050; - this.match(SparkSqlParser.CROSS); + this.state = 2361; + _localctx._nullOperator = this.unpivotNullClause(); } - break; + } - case 3: - this.enterOuterAlt(_localctx, 3); + this.state = 2364; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2365; + _localctx._operator = this.unpivotOperator(); + this.state = 2366; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2371; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 294, this._ctx) ) { + case 1: { - this.state = 2051; - this.match(SparkSqlParser.LEFT); - this.state = 2053; + this.state = 2368; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.OUTER) { + switch ( this.interpreter.adaptivePredict(this._input, 293, this._ctx) ) { + case 1: { - this.state = 2052; - this.match(SparkSqlParser.OUTER); + this.state = 2367; + this.match(SparkSqlParser.KW_AS); } + break; } - + this.state = 2370; + this.identifier(); } break; - - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 2056; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.LEFT) { - { - this.state = 2055; - this.match(SparkSqlParser.LEFT); - } - } - - this.state = 2058; - this.match(SparkSqlParser.SEMI); - } - break; - - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 2059; - this.match(SparkSqlParser.RIGHT); - this.state = 2061; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.OUTER) { - { - this.state = 2060; - this.match(SparkSqlParser.OUTER); - } - } - - } - break; - - case 6: - this.enterOuterAlt(_localctx, 6); - { - this.state = 2063; - this.match(SparkSqlParser.FULL); - this.state = 2065; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.OUTER) { - { - this.state = 2064; - this.match(SparkSqlParser.OUTER); - } - } - - } - break; - - case 7: - this.enterOuterAlt(_localctx, 7); - { - this.state = 2068; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.LEFT) { - { - this.state = 2067; - this.match(SparkSqlParser.LEFT); - } + } + } + } + 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 unpivotNullClause(): UnpivotNullClauseContext { + let _localctx: UnpivotNullClauseContext = new UnpivotNullClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 156, SparkSqlParser.RULE_unpivotNullClause); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2373; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_EXCLUDE || _la === SparkSqlParser.KW_INCLUDE)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - this.state = 2070; - this.match(SparkSqlParser.ANTI); - } - break; + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 2374; + this.match(SparkSqlParser.KW_NULLS); } } catch (re) { @@ -8423,33 +9294,29 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public joinCriteria(): JoinCriteriaContext { - let _localctx: JoinCriteriaContext = new JoinCriteriaContext(this._ctx, this.state); - this.enterRule(_localctx, 144, SparkSqlParser.RULE_joinCriteria); + public unpivotOperator(): UnpivotOperatorContext { + let _localctx: UnpivotOperatorContext = new UnpivotOperatorContext(this._ctx, this.state); + this.enterRule(_localctx, 158, SparkSqlParser.RULE_unpivotOperator); try { - this.state = 2077; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2378; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.ON: - this.enterOuterAlt(_localctx, 1); + switch ( this.interpreter.adaptivePredict(this._input, 295, this._ctx) ) { + case 1: { - this.state = 2073; - this.match(SparkSqlParser.ON); - this.state = 2074; - this.booleanExpression(0); + this.state = 2376; + this.unpivotSingleValueColumnClause(); } break; - case SparkSqlParser.USING: - this.enterOuterAlt(_localctx, 2); + + case 2: { - this.state = 2075; - this.match(SparkSqlParser.USING); - this.state = 2076; - this.identifierList(); + this.state = 2377; + this.unpivotMultiValueColumnClause(); } break; - default: - throw new NoViableAltException(this); + } } } catch (re) { @@ -8467,28 +9334,45 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public sample(): SampleContext { - let _localctx: SampleContext = new SampleContext(this._ctx, this.state); - this.enterRule(_localctx, 146, SparkSqlParser.RULE_sample); + public unpivotSingleValueColumnClause(): UnpivotSingleValueColumnClauseContext { + let _localctx: UnpivotSingleValueColumnClauseContext = new UnpivotSingleValueColumnClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 160, SparkSqlParser.RULE_unpivotSingleValueColumnClause); + let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2079; - this.match(SparkSqlParser.TABLESAMPLE); - this.state = 2080; - this.match(SparkSqlParser.T__0); - this.state = 2082; + this.state = 2380; + this.unpivotValueColumn(); + this.state = 2381; + this.match(SparkSqlParser.KW_FOR); + this.state = 2382; + this.unpivotNameColumn(); + this.state = 2383; + this.match(SparkSqlParser.KW_IN); + this.state = 2384; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2385; + _localctx._unpivotColumnAndAlias = this.unpivotColumnAndAlias(); + _localctx._unpivotColumns.push(_localctx._unpivotColumnAndAlias); + this.state = 2390; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 259, this._ctx) ) { - case 1: + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { { - this.state = 2081; - this.sampleMethod(); + { + this.state = 2386; + this.match(SparkSqlParser.COMMA); + this.state = 2387; + _localctx._unpivotColumnAndAlias = this.unpivotColumnAndAlias(); + _localctx._unpivotColumns.push(_localctx._unpivotColumnAndAlias); } - break; + } + this.state = 2392; + this._errHandler.sync(this); + _la = this._input.LA(1); } - this.state = 2084; - this.match(SparkSqlParser.T__1); + this.state = 2393; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -8506,113 +9390,67 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public sampleMethod(): SampleMethodContext { - let _localctx: SampleMethodContext = new SampleMethodContext(this._ctx, this.state); - this.enterRule(_localctx, 148, SparkSqlParser.RULE_sampleMethod); + public unpivotMultiValueColumnClause(): UnpivotMultiValueColumnClauseContext { + let _localctx: UnpivotMultiValueColumnClauseContext = new UnpivotMultiValueColumnClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 162, SparkSqlParser.RULE_unpivotMultiValueColumnClause); let _la: number; try { - this.state = 2110; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2395; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2396; + _localctx._unpivotValueColumn = this.unpivotValueColumn(); + _localctx._unpivotValueColumns.push(_localctx._unpivotValueColumn); + this.state = 2401; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 263, this._ctx) ) { - case 1: - _localctx = new SampleByPercentileContext(_localctx); - this.enterOuterAlt(_localctx, 1); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { { - this.state = 2087; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 2086; - (_localctx as SampleByPercentileContext)._negativeSign = this.match(SparkSqlParser.MINUS); - } - } - - this.state = 2089; - (_localctx as SampleByPercentileContext)._percentage = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.INTEGER_VALUE || _la === SparkSqlParser.DECIMAL_VALUE)) { - (_localctx as SampleByPercentileContext)._percentage = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2090; - this.match(SparkSqlParser.PERCENTLIT); - } - break; - - case 2: - _localctx = new SampleByRowsContext(_localctx); - this.enterOuterAlt(_localctx, 2); { - this.state = 2091; - this.expression(); - this.state = 2092; - this.match(SparkSqlParser.ROWS); + this.state = 2397; + this.match(SparkSqlParser.COMMA); + this.state = 2398; + _localctx._unpivotValueColumn = this.unpivotValueColumn(); + _localctx._unpivotValueColumns.push(_localctx._unpivotValueColumn); } - break; - - case 3: - _localctx = new SampleByBucketContext(_localctx); - this.enterOuterAlt(_localctx, 3); - { - this.state = 2094; - (_localctx as SampleByBucketContext)._sampleType = this.match(SparkSqlParser.BUCKET); - this.state = 2095; - (_localctx as SampleByBucketContext)._numerator = this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 2096; - this.match(SparkSqlParser.OUT); - this.state = 2097; - this.match(SparkSqlParser.OF); - this.state = 2098; - (_localctx as SampleByBucketContext)._denominator = this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 2107; + } + this.state = 2403; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.ON) { - { - this.state = 2099; - this.match(SparkSqlParser.ON); - this.state = 2105; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 261, this._ctx) ) { - case 1: - { - this.state = 2100; - this.identifier(); - } - break; - - case 2: - { - this.state = 2101; - this.qualifiedName(); - this.state = 2102; - this.match(SparkSqlParser.T__0); - this.state = 2103; - this.match(SparkSqlParser.T__1); - } - break; - } - } - } - - } - break; - - case 4: - _localctx = new SampleByBytesContext(_localctx); - this.enterOuterAlt(_localctx, 4); + } + this.state = 2404; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2405; + this.match(SparkSqlParser.KW_FOR); + this.state = 2406; + this.unpivotNameColumn(); + this.state = 2407; + this.match(SparkSqlParser.KW_IN); + this.state = 2408; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2409; + _localctx._unpivotColumnSet = this.unpivotColumnSet(); + _localctx._unpivotColumnSets.push(_localctx._unpivotColumnSet); + this.state = 2414; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { { - this.state = 2109; - (_localctx as SampleByBytesContext)._bytes = this.expression(); + this.state = 2410; + this.match(SparkSqlParser.COMMA); + this.state = 2411; + _localctx._unpivotColumnSet = this.unpivotColumnSet(); + _localctx._unpivotColumnSets.push(_localctx._unpivotColumnSet); } - break; + } + this.state = 2416; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2417; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -8630,18 +9468,47 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public identifierList(): IdentifierListContext { - let _localctx: IdentifierListContext = new IdentifierListContext(this._ctx, this.state); - this.enterRule(_localctx, 150, SparkSqlParser.RULE_identifierList); + public unpivotColumnSet(): UnpivotColumnSetContext { + let _localctx: UnpivotColumnSetContext = new UnpivotColumnSetContext(this._ctx, this.state); + this.enterRule(_localctx, 164, SparkSqlParser.RULE_unpivotColumnSet); + let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2112; - this.match(SparkSqlParser.T__0); - this.state = 2113; - this.identifierSeq(); - this.state = 2114; - this.match(SparkSqlParser.T__1); + this.state = 2419; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2420; + _localctx._unpivotColumn = this.unpivotColumn(); + _localctx._unpivotColumns.push(_localctx._unpivotColumn); + this.state = 2425; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2421; + this.match(SparkSqlParser.COMMA); + this.state = 2422; + _localctx._unpivotColumn = this.unpivotColumn(); + _localctx._unpivotColumns.push(_localctx._unpivotColumn); + } + } + this.state = 2427; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2428; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2430; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 300, this._ctx) ) { + case 1: + { + this.state = 2429; + this.unpivotAlias(); + } + break; + } } } catch (re) { @@ -8659,35 +9526,14 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public identifierSeq(): IdentifierSeqContext { - let _localctx: IdentifierSeqContext = new IdentifierSeqContext(this._ctx, this.state); - this.enterRule(_localctx, 152, SparkSqlParser.RULE_identifierSeq); + public unpivotValueColumn(): UnpivotValueColumnContext { + let _localctx: UnpivotValueColumnContext = new UnpivotValueColumnContext(this._ctx, this.state); + this.enterRule(_localctx, 166, SparkSqlParser.RULE_unpivotValueColumn); try { - let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2116; - _localctx._errorCapturingIdentifier = this.errorCapturingIdentifier(); - _localctx._ident.push(_localctx._errorCapturingIdentifier); - this.state = 2121; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 264, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 2117; - this.match(SparkSqlParser.T__2); - this.state = 2118; - _localctx._errorCapturingIdentifier = this.errorCapturingIdentifier(); - _localctx._ident.push(_localctx._errorCapturingIdentifier); - } - } - } - this.state = 2123; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 264, this._ctx); - } + this.state = 2432; + this.identifier(); } } catch (re) { @@ -8705,35 +9551,14 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public orderedIdentifierList(): OrderedIdentifierListContext { - let _localctx: OrderedIdentifierListContext = new OrderedIdentifierListContext(this._ctx, this.state); - this.enterRule(_localctx, 154, SparkSqlParser.RULE_orderedIdentifierList); - let _la: number; + public unpivotNameColumn(): UnpivotNameColumnContext { + let _localctx: UnpivotNameColumnContext = new UnpivotNameColumnContext(this._ctx, this.state); + this.enterRule(_localctx, 168, SparkSqlParser.RULE_unpivotNameColumn); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2124; - this.match(SparkSqlParser.T__0); - this.state = 2125; - this.orderedIdentifier(); - this.state = 2130; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 2126; - this.match(SparkSqlParser.T__2); - this.state = 2127; - this.orderedIdentifier(); - } - } - this.state = 2132; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 2133; - this.match(SparkSqlParser.T__1); + this.state = 2434; + this.identifier(); } } catch (re) { @@ -8751,36 +9576,24 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public orderedIdentifier(): OrderedIdentifierContext { - let _localctx: OrderedIdentifierContext = new OrderedIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 156, SparkSqlParser.RULE_orderedIdentifier); - let _la: number; + public unpivotColumnAndAlias(): UnpivotColumnAndAliasContext { + let _localctx: UnpivotColumnAndAliasContext = new UnpivotColumnAndAliasContext(this._ctx, this.state); + this.enterRule(_localctx, 170, SparkSqlParser.RULE_unpivotColumnAndAlias); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2135; - _localctx._ident = this.errorCapturingIdentifier(); - this.state = 2137; + this.state = 2436; + this.unpivotColumn(); + this.state = 2438; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.ASC || _la === SparkSqlParser.DESC) { + switch ( this.interpreter.adaptivePredict(this._input, 301, this._ctx) ) { + case 1: { - this.state = 2136; - _localctx._ordering = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.ASC || _la === SparkSqlParser.DESC)) { - _localctx._ordering = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } + this.state = 2437; + this.unpivotAlias(); } + break; } - } } catch (re) { @@ -8798,35 +9611,14 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public identifierCommentList(): IdentifierCommentListContext { - let _localctx: IdentifierCommentListContext = new IdentifierCommentListContext(this._ctx, this.state); - this.enterRule(_localctx, 158, SparkSqlParser.RULE_identifierCommentList); - let _la: number; + public unpivotColumn(): UnpivotColumnContext { + let _localctx: UnpivotColumnContext = new UnpivotColumnContext(this._ctx, this.state); + this.enterRule(_localctx, 172, SparkSqlParser.RULE_unpivotColumn); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2139; - this.match(SparkSqlParser.T__0); - this.state = 2140; - this.identifierComment(); - this.state = 2145; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 2141; - this.match(SparkSqlParser.T__2); - this.state = 2142; - this.identifierComment(); - } - } - this.state = 2147; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 2148; - this.match(SparkSqlParser.T__1); + this.state = 2440; + this.multipartIdentifier(); } } catch (re) { @@ -8844,25 +9636,24 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public identifierComment(): IdentifierCommentContext { - let _localctx: IdentifierCommentContext = new IdentifierCommentContext(this._ctx, this.state); - this.enterRule(_localctx, 160, SparkSqlParser.RULE_identifierComment); - let _la: number; + public unpivotAlias(): UnpivotAliasContext { + let _localctx: UnpivotAliasContext = new UnpivotAliasContext(this._ctx, this.state); + this.enterRule(_localctx, 174, SparkSqlParser.RULE_unpivotAlias); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2150; - this.identifier(); - this.state = 2152; + this.state = 2443; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.COMMENT) { + switch ( this.interpreter.adaptivePredict(this._input, 302, this._ctx) ) { + case 1: { - this.state = 2151; - this.commentSpec(); + this.state = 2442; + this.match(SparkSqlParser.KW_AS); } + break; } - + this.state = 2445; + this.identifier(); } } catch (re) { @@ -8880,101 +9671,138 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public relationPrimary(): RelationPrimaryContext { - let _localctx: RelationPrimaryContext = new RelationPrimaryContext(this._ctx, this.state); - this.enterRule(_localctx, 162, SparkSqlParser.RULE_relationPrimary); + public lateralView(): LateralViewContext { + let _localctx: LateralViewContext = new LateralViewContext(this._ctx, this.state); + this.enterRule(_localctx, 176, SparkSqlParser.RULE_lateralView); + let _la: number; try { - this.state = 2178; + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2447; + this.match(SparkSqlParser.KW_LATERAL); + this.state = 2448; + this.match(SparkSqlParser.KW_VIEW); + this.state = 2450; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 272, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 303, this._ctx) ) { case 1: - _localctx = new TableNameContext(_localctx); - this.enterOuterAlt(_localctx, 1); { - this.state = 2154; - this.multipartIdentifier(); - this.state = 2156; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 269, this._ctx) ) { - case 1: - { - this.state = 2155; - this.sample(); - } - break; - } - this.state = 2158; - this.tableAlias(); + this.state = 2449; + this.match(SparkSqlParser.KW_OUTER); } break; - - case 2: - _localctx = new AliasedQueryContext(_localctx); - this.enterOuterAlt(_localctx, 2); + } + this.state = 2452; + this.qualifiedName(); + this.state = 2453; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2462; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 305, this._ctx) ) { + case 1: { - this.state = 2160; - this.match(SparkSqlParser.T__0); - this.state = 2161; - this.query(); - this.state = 2162; - this.match(SparkSqlParser.T__1); - this.state = 2164; + this.state = 2454; + this.expression(); + this.state = 2459; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 270, this._ctx) ) { - case 1: + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { { - this.state = 2163; - this.sample(); + { + this.state = 2455; + this.match(SparkSqlParser.COMMA); + this.state = 2456; + this.expression(); } - break; + } + this.state = 2461; + this._errHandler.sync(this); + _la = this._input.LA(1); } - this.state = 2166; - this.tableAlias(); } break; - - case 3: - _localctx = new AliasedRelationContext(_localctx); - this.enterOuterAlt(_localctx, 3); + } + this.state = 2464; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2465; + _localctx._tblName = this.identifier(); + this.state = 2477; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 308, this._ctx) ) { + case 1: { - this.state = 2168; - this.match(SparkSqlParser.T__0); - this.state = 2169; - this.relation(); - this.state = 2170; - this.match(SparkSqlParser.T__1); - this.state = 2172; + this.state = 2467; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 271, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 306, this._ctx) ) { case 1: { - this.state = 2171; - this.sample(); + this.state = 2466; + this.match(SparkSqlParser.KW_AS); } break; } - this.state = 2174; - this.tableAlias(); + this.state = 2469; + _localctx._identifier = this.identifier(); + _localctx._colName.push(_localctx._identifier); + this.state = 2474; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 307, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 2470; + this.match(SparkSqlParser.COMMA); + this.state = 2471; + _localctx._identifier = this.identifier(); + _localctx._colName.push(_localctx._identifier); + } + } + } + this.state = 2476; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 307, this._ctx); } - break; - - case 4: - _localctx = new InlineTableDefault2Context(_localctx); - this.enterOuterAlt(_localctx, 4); - { - this.state = 2176; - this.inlineTable(); } break; - - case 5: - _localctx = new TableValuedFunctionContext(_localctx); - this.enterOuterAlt(_localctx, 5); - { - this.state = 2177; - this.functionTable(); + } + } + } + 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 setQuantifier(): SetQuantifierContext { + let _localctx: SetQuantifierContext = new SetQuantifierContext(this._ctx, this.state); + this.enterRule(_localctx, 178, SparkSqlParser.RULE_setQuantifier); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2479; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_ALL || _la === SparkSqlParser.KW_DISTINCT)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - break; + + this._errHandler.reportMatch(this); + this.consume(); + } } } catch (re) { @@ -8992,37 +9820,41 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public inlineTable(): InlineTableContext { - let _localctx: InlineTableContext = new InlineTableContext(this._ctx, this.state); - this.enterRule(_localctx, 164, SparkSqlParser.RULE_inlineTable); + public relation(): RelationContext { + let _localctx: RelationContext = new RelationContext(this._ctx, this.state); + this.enterRule(_localctx, 180, SparkSqlParser.RULE_relation); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2180; - this.match(SparkSqlParser.VALUES); - this.state = 2181; - this.expression(); - this.state = 2186; + this.state = 2482; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 309, this._ctx) ) { + case 1: + { + this.state = 2481; + this.match(SparkSqlParser.KW_LATERAL); + } + break; + } + this.state = 2484; + this.relationPrimary(); + this.state = 2488; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 273, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 310, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 2182; - this.match(SparkSqlParser.T__2); - this.state = 2183; - this.expression(); + this.state = 2485; + this.relationExtension(); } } } - this.state = 2188; + this.state = 2490; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 273, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 310, this._ctx); } - this.state = 2189; - this.tableAlias(); } } catch (re) { @@ -9040,47 +9872,44 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public functionTable(): FunctionTableContext { - let _localctx: FunctionTableContext = new FunctionTableContext(this._ctx, this.state); - this.enterRule(_localctx, 166, SparkSqlParser.RULE_functionTable); - let _la: number; + public relationExtension(): RelationExtensionContext { + let _localctx: RelationExtensionContext = new RelationExtensionContext(this._ctx, this.state); + this.enterRule(_localctx, 182, SparkSqlParser.RULE_relationExtension); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2191; - _localctx._funcName = this.errorCapturingIdentifier(); - this.state = 2192; - this.match(SparkSqlParser.T__0); - this.state = 2201; + this.state = 2494; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 275, this._ctx) ) { - case 1: + switch (this._input.LA(1)) { + case SparkSqlParser.KW_ANTI: + case SparkSqlParser.KW_CROSS: + case SparkSqlParser.KW_FULL: + case SparkSqlParser.KW_INNER: + case SparkSqlParser.KW_JOIN: + case SparkSqlParser.KW_LEFT: + case SparkSqlParser.KW_NATURAL: + case SparkSqlParser.KW_RIGHT: + case SparkSqlParser.KW_SEMI: + this.enterOuterAlt(_localctx, 1); { - this.state = 2193; - this.expression(); - this.state = 2198; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 2194; - this.match(SparkSqlParser.T__2); - this.state = 2195; - this.expression(); - } - } - this.state = 2200; - this._errHandler.sync(this); - _la = this._input.LA(1); + this.state = 2491; + this.joinRelation(); + } + break; + case SparkSqlParser.KW_PIVOT: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2492; + this.pivotClause(); } + break; + case SparkSqlParser.KW_UNPIVOT: + this.enterOuterAlt(_localctx, 3); + { + this.state = 2493; + this.unpivotClause(); } break; - } - this.state = 2203; - this.match(SparkSqlParser.T__1); - this.state = 2204; - this.tableAlias(); + default: + throw new NoViableAltException(this); } } catch (re) { @@ -9098,42 +9927,78 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public tableAlias(): TableAliasContext { - let _localctx: TableAliasContext = new TableAliasContext(this._ctx, this.state); - this.enterRule(_localctx, 168, SparkSqlParser.RULE_tableAlias); + public joinRelation(): JoinRelationContext { + let _localctx: JoinRelationContext = new JoinRelationContext(this._ctx, this.state); + this.enterRule(_localctx, 184, SparkSqlParser.RULE_joinRelation); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2213; + this.state = 2513; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 278, this._ctx) ) { - case 1: + switch (this._input.LA(1)) { + case SparkSqlParser.KW_ANTI: + case SparkSqlParser.KW_CROSS: + case SparkSqlParser.KW_FULL: + case SparkSqlParser.KW_INNER: + case SparkSqlParser.KW_JOIN: + case SparkSqlParser.KW_LEFT: + case SparkSqlParser.KW_RIGHT: + case SparkSqlParser.KW_SEMI: + this.enterOuterAlt(_localctx, 1); { - this.state = 2207; + { + this.state = 2496; + this.joinType(); + } + this.state = 2497; + this.match(SparkSqlParser.KW_JOIN); + this.state = 2499; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 276, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 312, this._ctx) ) { case 1: { - this.state = 2206; - this.match(SparkSqlParser.AS); + this.state = 2498; + this.match(SparkSqlParser.KW_LATERAL); } break; } - this.state = 2209; - this.strictIdentifier(); - this.state = 2211; + this.state = 2501; + _localctx._right = this.relationPrimary(); + this.state = 2503; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 277, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 313, this._ctx) ) { case 1: { - this.state = 2210; - this.identifierList(); + this.state = 2502; + this.joinCriteria(); } break; } } break; - } + case SparkSqlParser.KW_NATURAL: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2505; + this.match(SparkSqlParser.KW_NATURAL); + this.state = 2506; + this.joinType(); + this.state = 2507; + this.match(SparkSqlParser.KW_JOIN); + this.state = 2509; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 314, this._ctx) ) { + case 1: + { + this.state = 2508; + this.match(SparkSqlParser.KW_LATERAL); + } + break; + } + this.state = 2511; + _localctx._right = this.relationPrimary(); + } + break; + default: + throw new NoViableAltException(this); } } catch (re) { @@ -9151,150 +10016,125 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public rowFormat(): RowFormatContext { - let _localctx: RowFormatContext = new RowFormatContext(this._ctx, this.state); - this.enterRule(_localctx, 170, SparkSqlParser.RULE_rowFormat); + public joinType(): JoinTypeContext { + let _localctx: JoinTypeContext = new JoinTypeContext(this._ctx, this.state); + this.enterRule(_localctx, 186, SparkSqlParser.RULE_joinType); + let _la: number; try { - this.state = 2264; + this.state = 2539; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 286, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 322, this._ctx) ) { case 1: - _localctx = new RowFormatSerdeContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 2215; - this.match(SparkSqlParser.ROW); - this.state = 2216; - this.match(SparkSqlParser.FORMAT); - this.state = 2217; - this.match(SparkSqlParser.SERDE); - this.state = 2218; - (_localctx as RowFormatSerdeContext)._name = this.match(SparkSqlParser.STRING); - this.state = 2222; + this.state = 2516; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 279, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_INNER) { { - this.state = 2219; - this.match(SparkSqlParser.WITH); - this.state = 2220; - this.match(SparkSqlParser.SERDEPROPERTIES); - this.state = 2221; - (_localctx as RowFormatSerdeContext)._props = this.tablePropertyList(); + this.state = 2515; + this.match(SparkSqlParser.KW_INNER); } - break; } + } break; case 2: - _localctx = new RowFormatDelimitedContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 2224; - this.match(SparkSqlParser.ROW); - this.state = 2225; - this.match(SparkSqlParser.FORMAT); - this.state = 2226; - this.match(SparkSqlParser.DELIMITED); - this.state = 2236; + this.state = 2518; + this.match(SparkSqlParser.KW_CROSS); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 2519; + this.match(SparkSqlParser.KW_LEFT); + this.state = 2521; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 281, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_OUTER) { { - this.state = 2227; - this.match(SparkSqlParser.FIELDS); - this.state = 2228; - this.match(SparkSqlParser.TERMINATED); - this.state = 2229; - this.match(SparkSqlParser.BY); - this.state = 2230; - (_localctx as RowFormatDelimitedContext)._fieldsTerminatedBy = this.match(SparkSqlParser.STRING); - this.state = 2234; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 280, this._ctx) ) { - case 1: - { - this.state = 2231; - this.match(SparkSqlParser.ESCAPED); - this.state = 2232; - this.match(SparkSqlParser.BY); - this.state = 2233; - (_localctx as RowFormatDelimitedContext)._escapedBy = this.match(SparkSqlParser.STRING); - } - break; + this.state = 2520; + this.match(SparkSqlParser.KW_OUTER); } - } - break; } - this.state = 2243; + + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 2524; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 282, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_LEFT) { { - this.state = 2238; - this.match(SparkSqlParser.COLLECTION); - this.state = 2239; - this.match(SparkSqlParser.ITEMS); - this.state = 2240; - this.match(SparkSqlParser.TERMINATED); - this.state = 2241; - this.match(SparkSqlParser.BY); - this.state = 2242; - (_localctx as RowFormatDelimitedContext)._collectionItemsTerminatedBy = this.match(SparkSqlParser.STRING); + this.state = 2523; + this.match(SparkSqlParser.KW_LEFT); } - break; } - this.state = 2250; + + this.state = 2526; + this.match(SparkSqlParser.KW_SEMI); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 2527; + this.match(SparkSqlParser.KW_RIGHT); + this.state = 2529; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 283, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_OUTER) { { - this.state = 2245; - this.match(SparkSqlParser.MAP); - this.state = 2246; - this.match(SparkSqlParser.KEYS); - this.state = 2247; - this.match(SparkSqlParser.TERMINATED); - this.state = 2248; - this.match(SparkSqlParser.BY); - this.state = 2249; - (_localctx as RowFormatDelimitedContext)._keysTerminatedBy = this.match(SparkSqlParser.STRING); + this.state = 2528; + this.match(SparkSqlParser.KW_OUTER); } - break; } - this.state = 2256; + + } + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 2531; + this.match(SparkSqlParser.KW_FULL); + this.state = 2533; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 284, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_OUTER) { { - this.state = 2252; - this.match(SparkSqlParser.LINES); - this.state = 2253; - this.match(SparkSqlParser.TERMINATED); - this.state = 2254; - this.match(SparkSqlParser.BY); - this.state = 2255; - (_localctx as RowFormatDelimitedContext)._linesSeparatedBy = this.match(SparkSqlParser.STRING); + this.state = 2532; + this.match(SparkSqlParser.KW_OUTER); } - break; } - this.state = 2262; + + } + break; + + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 2536; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 285, this._ctx) ) { - case 1: + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_LEFT) { { - this.state = 2258; - this.match(SparkSqlParser.NULL); - this.state = 2259; - this.match(SparkSqlParser.DEFINED); - this.state = 2260; - this.match(SparkSqlParser.AS); - this.state = 2261; - (_localctx as RowFormatDelimitedContext)._nullDefinedAs = this.match(SparkSqlParser.STRING); + this.state = 2535; + this.match(SparkSqlParser.KW_LEFT); } - break; } + + this.state = 2538; + this.match(SparkSqlParser.KW_ANTI); } break; } @@ -9314,31 +10154,33 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public multipartIdentifierList(): MultipartIdentifierListContext { - let _localctx: MultipartIdentifierListContext = new MultipartIdentifierListContext(this._ctx, this.state); - this.enterRule(_localctx, 172, SparkSqlParser.RULE_multipartIdentifierList); - let _la: number; + public joinCriteria(): JoinCriteriaContext { + let _localctx: JoinCriteriaContext = new JoinCriteriaContext(this._ctx, this.state); + this.enterRule(_localctx, 188, SparkSqlParser.RULE_joinCriteria); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2266; - this.multipartIdentifier(); - this.state = 2271; + this.state = 2545; this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { + switch (this._input.LA(1)) { + case SparkSqlParser.KW_ON: + this.enterOuterAlt(_localctx, 1); { - this.state = 2267; - this.match(SparkSqlParser.T__2); - this.state = 2268; - this.multipartIdentifier(); + this.state = 2541; + this.match(SparkSqlParser.KW_ON); + this.state = 2542; + this.booleanExpression(0); } + break; + case SparkSqlParser.KW_USING: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2543; + this.match(SparkSqlParser.KW_USING); + this.state = 2544; + this.identifierList(); } - this.state = 2273; - this._errHandler.sync(this); - _la = this._input.LA(1); - } + break; + default: + throw new NoViableAltException(this); } } catch (re) { @@ -9356,34 +10198,43 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public multipartIdentifier(): MultipartIdentifierContext { - let _localctx: MultipartIdentifierContext = new MultipartIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 174, SparkSqlParser.RULE_multipartIdentifier); + public sample(): SampleContext { + let _localctx: SampleContext = new SampleContext(this._ctx, this.state); + this.enterRule(_localctx, 190, SparkSqlParser.RULE_sample); try { - let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2274; - _localctx._errorCapturingIdentifier = this.errorCapturingIdentifier(); - _localctx._parts.push(_localctx._errorCapturingIdentifier); - this.state = 2279; + this.state = 2547; + this.match(SparkSqlParser.KW_TABLESAMPLE); + this.state = 2548; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2550; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 288, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 2275; - this.match(SparkSqlParser.T__3); - this.state = 2276; - _localctx._errorCapturingIdentifier = this.errorCapturingIdentifier(); - _localctx._parts.push(_localctx._errorCapturingIdentifier); - } - } + switch ( this.interpreter.adaptivePredict(this._input, 324, this._ctx) ) { + case 1: + { + this.state = 2549; + this.sampleMethod(); } - this.state = 2281; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 288, this._ctx); + break; + } + this.state = 2552; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2557; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 325, this._ctx) ) { + case 1: + { + this.state = 2553; + this.match(SparkSqlParser.KW_REPEATABLE); + this.state = 2554; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2555; + _localctx._seed = this.match(SparkSqlParser.INTEGER_VALUE); + this.state = 2556; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; } } } @@ -9402,26 +10253,109 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public tableIdentifier(): TableIdentifierContext { - let _localctx: TableIdentifierContext = new TableIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 176, SparkSqlParser.RULE_tableIdentifier); + public sampleMethod(): SampleMethodContext { + let _localctx: SampleMethodContext = new SampleMethodContext(this._ctx, this.state); + this.enterRule(_localctx, 192, SparkSqlParser.RULE_sampleMethod); + let _la: number; try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2285; + this.state = 2583; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 289, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 329, this._ctx) ) { case 1: + this.enterOuterAlt(_localctx, 1); { - this.state = 2282; - _localctx._db = this.errorCapturingIdentifier(); - this.state = 2283; - this.match(SparkSqlParser.T__3); + this.state = 2560; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 2559; + _localctx._negativeSign = this.match(SparkSqlParser.MINUS); + } + } + + this.state = 2562; + _localctx._percentage = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.INTEGER_VALUE || _la === SparkSqlParser.DECIMAL_VALUE)) { + _localctx._percentage = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 2563; + this.match(SparkSqlParser.KW_PERCENTLIT); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2564; + this.expression(); + this.state = 2565; + this.match(SparkSqlParser.KW_ROWS); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 2567; + _localctx._sampleType = this.match(SparkSqlParser.KW_BUCKET); + this.state = 2568; + _localctx._numerator = this.match(SparkSqlParser.INTEGER_VALUE); + this.state = 2569; + this.match(SparkSqlParser.KW_OUT); + this.state = 2570; + this.match(SparkSqlParser.KW_OF); + this.state = 2571; + _localctx._denominator = this.match(SparkSqlParser.INTEGER_VALUE); + this.state = 2580; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_ON) { + { + this.state = 2572; + this.match(SparkSqlParser.KW_ON); + this.state = 2578; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 327, this._ctx) ) { + case 1: + { + this.state = 2573; + this.identifier(); + } + break; + + case 2: + { + this.state = 2574; + this.qualifiedName(); + this.state = 2575; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2576; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + } + } + } + + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 2582; + _localctx._bytes = this.expression(); } break; - } - this.state = 2287; - _localctx._table = this.errorCapturingIdentifier(); } } catch (re) { @@ -9439,49 +10373,18 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public namedExpression(): NamedExpressionContext { - let _localctx: NamedExpressionContext = new NamedExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 178, SparkSqlParser.RULE_namedExpression); + public identifierList(): IdentifierListContext { + let _localctx: IdentifierListContext = new IdentifierListContext(this._ctx, this.state); + this.enterRule(_localctx, 194, SparkSqlParser.RULE_identifierList); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2289; - this.expression(); - this.state = 2297; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 292, this._ctx) ) { - case 1: - { - this.state = 2291; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 290, this._ctx) ) { - case 1: - { - this.state = 2290; - this.match(SparkSqlParser.AS); - } - break; - } - this.state = 2295; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 291, this._ctx) ) { - case 1: - { - this.state = 2293; - _localctx._name = this.errorCapturingIdentifier(); - } - break; - - case 2: - { - this.state = 2294; - this.identifierList(); - } - break; - } - } - break; - } + this.state = 2585; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2586; + this.identifierSeq(); + this.state = 2587; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -9499,32 +10402,34 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public namedExpressionSeq(): NamedExpressionSeqContext { - let _localctx: NamedExpressionSeqContext = new NamedExpressionSeqContext(this._ctx, this.state); - this.enterRule(_localctx, 180, SparkSqlParser.RULE_namedExpressionSeq); + public identifierSeq(): IdentifierSeqContext { + let _localctx: IdentifierSeqContext = new IdentifierSeqContext(this._ctx, this.state); + this.enterRule(_localctx, 196, SparkSqlParser.RULE_identifierSeq); try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2299; - this.namedExpression(); - this.state = 2304; + this.state = 2589; + _localctx._errorCapturingIdentifier = this.errorCapturingIdentifier(); + _localctx._ident.push(_localctx._errorCapturingIdentifier); + this.state = 2594; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 293, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 330, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 2300; - this.match(SparkSqlParser.T__2); - this.state = 2301; - this.namedExpression(); + this.state = 2590; + this.match(SparkSqlParser.COMMA); + this.state = 2591; + _localctx._errorCapturingIdentifier = this.errorCapturingIdentifier(); + _localctx._ident.push(_localctx._errorCapturingIdentifier); } } } - this.state = 2306; + this.state = 2596; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 293, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 330, this._ctx); } } } @@ -9543,37 +10448,35 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public transformList(): TransformListContext { - let _localctx: TransformListContext = new TransformListContext(this._ctx, this.state); - this.enterRule(_localctx, 182, SparkSqlParser.RULE_transformList); + public orderedIdentifierList(): OrderedIdentifierListContext { + let _localctx: OrderedIdentifierListContext = new OrderedIdentifierListContext(this._ctx, this.state); + this.enterRule(_localctx, 198, SparkSqlParser.RULE_orderedIdentifierList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2307; - this.match(SparkSqlParser.T__0); - this.state = 2308; - _localctx._transform = this.transform(); - _localctx._transforms.push(_localctx._transform); - this.state = 2313; + this.state = 2597; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2598; + this.orderedIdentifier(); + this.state = 2603; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 2309; - this.match(SparkSqlParser.T__2); - this.state = 2310; - _localctx._transform = this.transform(); - _localctx._transforms.push(_localctx._transform); + this.state = 2599; + this.match(SparkSqlParser.COMMA); + this.state = 2600; + this.orderedIdentifier(); } } - this.state = 2315; + this.state = 2605; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 2316; - this.match(SparkSqlParser.T__1); + this.state = 2606; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -9591,55 +10494,36 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public transform(): TransformContext { - let _localctx: TransformContext = new TransformContext(this._ctx, this.state); - this.enterRule(_localctx, 184, SparkSqlParser.RULE_transform); + public orderedIdentifier(): OrderedIdentifierContext { + let _localctx: OrderedIdentifierContext = new OrderedIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 200, SparkSqlParser.RULE_orderedIdentifier); let _la: number; try { - this.state = 2331; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2608; + _localctx._ident = this.errorCapturingIdentifier(); + this.state = 2610; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 296, this._ctx) ) { - case 1: - _localctx = new IdentityTransformContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 2318; - this.qualifiedName(); - } - break; - - case 2: - _localctx = new ApplyTransformContext(_localctx); - this.enterOuterAlt(_localctx, 2); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_ASC || _la === SparkSqlParser.KW_DESC) { { - this.state = 2319; - (_localctx as ApplyTransformContext)._transformName = this.identifier(); - this.state = 2320; - this.match(SparkSqlParser.T__0); - this.state = 2321; - (_localctx as ApplyTransformContext)._transformArgument = this.transformArgument(); - (_localctx as ApplyTransformContext)._argument.push((_localctx as ApplyTransformContext)._transformArgument); - this.state = 2326; - this._errHandler.sync(this); + this.state = 2609; + _localctx._ordering = this._input.LT(1); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 2322; - this.match(SparkSqlParser.T__2); - this.state = 2323; - (_localctx as ApplyTransformContext)._transformArgument = this.transformArgument(); - (_localctx as ApplyTransformContext)._argument.push((_localctx as ApplyTransformContext)._transformArgument); - } + if (!(_la === SparkSqlParser.KW_ASC || _la === SparkSqlParser.KW_DESC)) { + _localctx._ordering = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - this.state = 2328; - this._errHandler.sync(this); - _la = this._input.LA(1); + + this._errHandler.reportMatch(this); + this.consume(); } - this.state = 2329; - this.match(SparkSqlParser.T__1); } - break; + } + } } catch (re) { @@ -9657,28 +10541,35 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public transformArgument(): TransformArgumentContext { - let _localctx: TransformArgumentContext = new TransformArgumentContext(this._ctx, this.state); - this.enterRule(_localctx, 186, SparkSqlParser.RULE_transformArgument); + public identifierCommentList(): IdentifierCommentListContext { + let _localctx: IdentifierCommentListContext = new IdentifierCommentListContext(this._ctx, this.state); + this.enterRule(_localctx, 202, SparkSqlParser.RULE_identifierCommentList); + let _la: number; try { - this.state = 2335; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2612; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2613; + this.identifierComment(); + this.state = 2618; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 297, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { { - this.state = 2333; - this.qualifiedName(); - } - break; - - case 2: - this.enterOuterAlt(_localctx, 2); { - this.state = 2334; - this.constant(); + this.state = 2614; + this.match(SparkSqlParser.COMMA); + this.state = 2615; + this.identifierComment(); } - break; + } + this.state = 2620; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2621; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -9696,14 +10587,25 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public expression(): ExpressionContext { - let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); - this.enterRule(_localctx, 188, SparkSqlParser.RULE_expression); + public identifierComment(): IdentifierCommentContext { + let _localctx: IdentifierCommentContext = new IdentifierCommentContext(this._ctx, this.state); + this.enterRule(_localctx, 204, SparkSqlParser.RULE_identifierComment); + let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2337; - this.booleanExpression(0); + this.state = 2623; + this.identifier(); + this.state = 2625; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_COMMENT) { + { + this.state = 2624; + this.commentSpec(); + } + } + } } catch (re) { @@ -9720,129 +10622,155 @@ export class SparkSqlParser extends Parser { } return _localctx; } - - public booleanExpression(): BooleanExpressionContext; - public booleanExpression(_p: number): BooleanExpressionContext; // @RuleVersion(0) - public booleanExpression(_p?: number): BooleanExpressionContext { - if (_p === undefined) { - _p = 0; - } - - let _parentctx: ParserRuleContext = this._ctx; - let _parentState: number = this.state; - let _localctx: BooleanExpressionContext = new BooleanExpressionContext(this._ctx, _parentState); - let _prevctx: BooleanExpressionContext = _localctx; - let _startState: number = 190; - this.enterRecursionRule(_localctx, 190, SparkSqlParser.RULE_booleanExpression, _p); + public relationPrimary(): RelationPrimaryContext { + let _localctx: RelationPrimaryContext = new RelationPrimaryContext(this._ctx, this.state); + this.enterRule(_localctx, 206, SparkSqlParser.RULE_relationPrimary); try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 2351; + this.state = 2654; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 299, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 339, this._ctx) ) { case 1: + this.enterOuterAlt(_localctx, 1); { - _localctx = new LogicalNotContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 2340; - this.match(SparkSqlParser.NOT); - this.state = 2341; - this.booleanExpression(5); + this.state = 2627; + this.identifierReference(); + this.state = 2629; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 335, this._ctx) ) { + case 1: + { + this.state = 2628; + this.temporalClause(); + } + break; + } + this.state = 2632; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 336, this._ctx) ) { + case 1: + { + this.state = 2631; + this.sample(); + } + break; + } + this.state = 2634; + this.tableAlias(); } break; case 2: + this.enterOuterAlt(_localctx, 2); { - _localctx = new ExistsContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2342; - this.match(SparkSqlParser.EXISTS); - this.state = 2343; - this.match(SparkSqlParser.T__0); - this.state = 2344; + this.state = 2636; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2637; this.query(); - this.state = 2345; - this.match(SparkSqlParser.T__1); + this.state = 2638; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2640; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 337, this._ctx) ) { + case 1: + { + this.state = 2639; + this.sample(); + } + break; + } + this.state = 2642; + this.tableAlias(); } break; case 3: + this.enterOuterAlt(_localctx, 3); { - _localctx = new PredicatedContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2347; - this.valueExpression(0); - this.state = 2349; + this.state = 2644; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2645; + this.relation(); + this.state = 2646; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2648; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 298, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 338, this._ctx) ) { case 1: { - this.state = 2348; - this.predicate(); + this.state = 2647; + this.sample(); } break; } + this.state = 2650; + this.tableAlias(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 2652; + this.inlineTable(); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 2653; + this.functionTable(); } break; } - this._ctx._stop = this._input.tryLT(-1); - this.state = 2361; + } + 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 inlineTable(): InlineTableContext { + let _localctx: InlineTableContext = new InlineTableContext(this._ctx, this.state); + this.enterRule(_localctx, 208, SparkSqlParser.RULE_inlineTable); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2656; + this.match(SparkSqlParser.KW_VALUES); + this.state = 2657; + this.expression(); + this.state = 2662; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 301, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 340, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; { - this.state = 2359; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 300, this._ctx) ) { - case 1: - { - _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); - (_localctx as LogicalBinaryContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_booleanExpression); - this.state = 2353; - if (!(this.precpred(this._ctx, 2))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); - } - this.state = 2354; - (_localctx as LogicalBinaryContext)._operator = this.match(SparkSqlParser.AND); - this.state = 2355; - (_localctx as LogicalBinaryContext)._right = this.booleanExpression(3); - } - break; - - case 2: - { - _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); - (_localctx as LogicalBinaryContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_booleanExpression); - this.state = 2356; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 2357; - (_localctx as LogicalBinaryContext)._operator = this.match(SparkSqlParser.OR); - this.state = 2358; - (_localctx as LogicalBinaryContext)._right = this.booleanExpression(2); - } - break; + { + this.state = 2658; + this.match(SparkSqlParser.COMMA); + this.state = 2659; + this.expression(); } } } - this.state = 2363; + this.state = 2664; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 301, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 340, this._ctx); } + this.state = 2665; + this.tableAlias(); } } catch (re) { @@ -9855,147 +10783,133 @@ export class SparkSqlParser extends Parser { } } finally { - this.unrollRecursionContexts(_parentctx); + this.exitRule(); } return _localctx; } // @RuleVersion(0) - public predicate(): PredicateContext { - let _localctx: PredicateContext = new PredicateContext(this._ctx, this.state); - this.enterRule(_localctx, 192, SparkSqlParser.RULE_predicate); + public functionTableSubqueryArgument(): FunctionTableSubqueryArgumentContext { + let _localctx: FunctionTableSubqueryArgumentContext = new FunctionTableSubqueryArgumentContext(this._ctx, this.state); + this.enterRule(_localctx, 210, SparkSqlParser.RULE_functionTableSubqueryArgument); let _la: number; try { - this.state = 2446; + this.state = 2686; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 315, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 344, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 2365; + this.state = 2667; + this.match(SparkSqlParser.KW_TABLE); + this.state = 2668; + this.tableIdentifierReference(); + this.state = 2670; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { + if (_la === SparkSqlParser.KW_DISTRIBUTE || _la === SparkSqlParser.KW_PARTITION || _la === SparkSqlParser.KW_WITH) { { - this.state = 2364; - this.match(SparkSqlParser.NOT); + this.state = 2669; + this.tableArgumentPartitioning(); } } - this.state = 2367; - _localctx._kind = this.match(SparkSqlParser.BETWEEN); - this.state = 2368; - _localctx._lower = this.valueExpression(0); - this.state = 2369; - this.match(SparkSqlParser.AND); - this.state = 2370; - _localctx._upper = this.valueExpression(0); } break; case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 2373; + this.state = 2672; + this.match(SparkSqlParser.KW_TABLE); + this.state = 2673; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2674; + this.tableIdentifierReference(); + this.state = 2675; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2677; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { + if (_la === SparkSqlParser.KW_DISTRIBUTE || _la === SparkSqlParser.KW_PARTITION || _la === SparkSqlParser.KW_WITH) { { - this.state = 2372; - this.match(SparkSqlParser.NOT); + this.state = 2676; + this.tableArgumentPartitioning(); } } - this.state = 2375; - _localctx._kind = this.match(SparkSqlParser.IN); - this.state = 2376; - this.match(SparkSqlParser.T__0); - this.state = 2377; - this.expression(); - this.state = 2382; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 2378; - this.match(SparkSqlParser.T__2); - this.state = 2379; - this.expression(); - } - } - this.state = 2384; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 2385; - this.match(SparkSqlParser.T__1); } break; case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 2388; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { - { - this.state = 2387; - this.match(SparkSqlParser.NOT); - } - } - - this.state = 2390; - _localctx._kind = this.match(SparkSqlParser.IN); - this.state = 2391; - this.match(SparkSqlParser.T__0); - this.state = 2392; + this.state = 2679; + this.match(SparkSqlParser.KW_TABLE); + this.state = 2680; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2681; this.query(); - this.state = 2393; - this.match(SparkSqlParser.T__1); - } - break; - - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 2396; + this.state = 2682; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2684; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { + if (_la === SparkSqlParser.KW_DISTRIBUTE || _la === SparkSqlParser.KW_PARTITION || _la === SparkSqlParser.KW_WITH) { { - this.state = 2395; - this.match(SparkSqlParser.NOT); + this.state = 2683; + this.tableArgumentPartitioning(); } } - this.state = 2398; - _localctx._kind = this.match(SparkSqlParser.RLIKE); - this.state = 2399; - _localctx._pattern = this.valueExpression(0); } break; - - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 2401; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { - { - this.state = 2400; - this.match(SparkSqlParser.NOT); - } - } - - this.state = 2403; - _localctx._kind = this.match(SparkSqlParser.LIKE); - this.state = 2404; - _localctx._quantifier = this._input.LT(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 tableArgumentPartitioning(): TableArgumentPartitioningContext { + let _localctx: TableArgumentPartitioningContext = new TableArgumentPartitioningContext(this._ctx, this.state); + this.enterRule(_localctx, 212, SparkSqlParser.RULE_tableArgumentPartitioning); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2707; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case SparkSqlParser.KW_WITH: + { + { + this.state = 2688; + this.match(SparkSqlParser.KW_WITH); + this.state = 2689; + this.match(SparkSqlParser.KW_SINGLE); + this.state = 2690; + this.match(SparkSqlParser.KW_PARTITION); + } + } + break; + case SparkSqlParser.KW_DISTRIBUTE: + case SparkSqlParser.KW_PARTITION: + { + { + this.state = 2691; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.ALL || _la === SparkSqlParser.ANY || _la === SparkSqlParser.SOME)) { - _localctx._quantifier = this._errHandler.recoverInline(this); + if (!(_la === SparkSqlParser.KW_DISTRIBUTE || _la === SparkSqlParser.KW_PARTITION)) { + this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { this.matchedEOF = true; @@ -10004,120 +10918,67 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 2418; + this.state = 2692; + this.match(SparkSqlParser.KW_BY); + this.state = 2705; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 309, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 346, this._ctx) ) { case 1: { - this.state = 2405; - this.match(SparkSqlParser.T__0); - this.state = 2406; - this.match(SparkSqlParser.T__1); - } - break; - - case 2: { - this.state = 2407; - this.match(SparkSqlParser.T__0); - this.state = 2408; - this.expression(); - this.state = 2413; + { + this.state = 2693; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2694; + _localctx._expression = this.expression(); + _localctx._partition.push(_localctx._expression); + this.state = 2699; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 2409; - this.match(SparkSqlParser.T__2); - this.state = 2410; - this.expression(); + this.state = 2695; + this.match(SparkSqlParser.COMMA); + this.state = 2696; + _localctx._expression = this.expression(); + _localctx._partition.push(_localctx._expression); } } - this.state = 2415; + this.state = 2701; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 2416; - this.match(SparkSqlParser.T__1); + this.state = 2702; + this.match(SparkSqlParser.RIGHT_PAREN); } - break; - } - } - break; - - case 6: - this.enterOuterAlt(_localctx, 6); - { - this.state = 2421; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { - { - this.state = 2420; - this.match(SparkSqlParser.NOT); } - } - - this.state = 2423; - _localctx._kind = this.match(SparkSqlParser.LIKE); - this.state = 2424; - _localctx._pattern = this.valueExpression(0); - this.state = 2427; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 311, this._ctx) ) { - case 1: - { - this.state = 2425; - this.match(SparkSqlParser.ESCAPE); - this.state = 2426; - _localctx._escapeChar = this.match(SparkSqlParser.STRING); } break; - } - } - break; - case 7: - this.enterOuterAlt(_localctx, 7); - { - this.state = 2429; - this.match(SparkSqlParser.IS); - this.state = 2431; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { + case 2: { - this.state = 2430; - this.match(SparkSqlParser.NOT); + this.state = 2704; + _localctx._expression = this.expression(); + _localctx._partition.push(_localctx._expression); } + break; + } } - - this.state = 2433; - _localctx._kind = this.match(SparkSqlParser.NULL); } break; - - case 8: - this.enterOuterAlt(_localctx, 8); + default: + throw new NoViableAltException(this); + } + this.state = 2725; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_ORDER || _la === SparkSqlParser.KW_SORT) { { - this.state = 2434; - this.match(SparkSqlParser.IS); - this.state = 2436; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { - { - this.state = 2435; - this.match(SparkSqlParser.NOT); - } - } - - this.state = 2438; - _localctx._kind = this._input.LT(1); + this.state = 2709; _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FALSE || _la === SparkSqlParser.TRUE || _la === SparkSqlParser.UNKNOWN)) { - _localctx._kind = this._errHandler.recoverInline(this); + if (!(_la === SparkSqlParser.KW_ORDER || _la === SparkSqlParser.KW_SORT)) { + this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token.EOF) { this.matchedEOF = true; @@ -10126,32 +10987,52 @@ export class SparkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - } - break; - - case 9: - this.enterOuterAlt(_localctx, 9); + this.state = 2710; + this.match(SparkSqlParser.KW_BY); { - this.state = 2439; - this.match(SparkSqlParser.IS); - this.state = 2441; + this.state = 2723; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { + switch ( this.interpreter.adaptivePredict(this._input, 349, this._ctx) ) { + case 1: + { { - this.state = 2440; - this.match(SparkSqlParser.NOT); + this.state = 2711; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2712; + this.sortItem(); + this.state = 2717; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2713; + this.match(SparkSqlParser.COMMA); + this.state = 2714; + this.sortItem(); + } + } + this.state = 2719; + this._errHandler.sync(this); + _la = this._input.LA(1); } - } + this.state = 2720; + this.match(SparkSqlParser.RIGHT_PAREN); + } + } + break; - this.state = 2443; - _localctx._kind = this.match(SparkSqlParser.DISTINCT); - this.state = 2444; - this.match(SparkSqlParser.FROM); - this.state = 2445; - _localctx._right = this.valueExpression(0); + case 2: + { + this.state = 2722; + this.sortItem(); + } + break; } - break; + } + } + } + } } catch (re) { @@ -10168,201 +11049,19 @@ export class SparkSqlParser extends Parser { } return _localctx; } - - public valueExpression(): ValueExpressionContext; - public valueExpression(_p: number): ValueExpressionContext; // @RuleVersion(0) - public valueExpression(_p?: number): ValueExpressionContext { - if (_p === undefined) { - _p = 0; - } - - let _parentctx: ParserRuleContext = this._ctx; - let _parentState: number = this.state; - let _localctx: ValueExpressionContext = new ValueExpressionContext(this._ctx, _parentState); - let _prevctx: ValueExpressionContext = _localctx; - let _startState: number = 194; - this.enterRecursionRule(_localctx, 194, SparkSqlParser.RULE_valueExpression, _p); - let _la: number; + public functionTableNamedArgumentExpression(): FunctionTableNamedArgumentExpressionContext { + let _localctx: FunctionTableNamedArgumentExpressionContext = new FunctionTableNamedArgumentExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 214, SparkSqlParser.RULE_functionTableNamedArgumentExpression); try { - let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2452; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 316, this._ctx) ) { - case 1: - { - _localctx = new ValueExpressionDefaultContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 2449; - this.primaryExpression(0); - } - break; - - case 2: - { - _localctx = new ArithmeticUnaryContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2450; - (_localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); - _la = this._input.LA(1); - if (!(((((_la - 268)) & ~0x1F) === 0 && ((1 << (_la - 268)) & ((1 << (SparkSqlParser.PLUS - 268)) | (1 << (SparkSqlParser.MINUS - 268)) | (1 << (SparkSqlParser.TILDE - 268)))) !== 0))) { - (_localctx as ArithmeticUnaryContext)._operator = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2451; - this.valueExpression(7); - } - break; - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 2475; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 318, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - this.state = 2473; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 317, this._ctx) ) { - case 1: - { - _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); - (_localctx as ArithmeticBinaryContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 2454; - if (!(this.precpred(this._ctx, 6))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); - } - this.state = 2455; - (_localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DIV || ((((_la - 270)) & ~0x1F) === 0 && ((1 << (_la - 270)) & ((1 << (SparkSqlParser.ASTERISK - 270)) | (1 << (SparkSqlParser.SLASH - 270)) | (1 << (SparkSqlParser.PERCENT - 270)))) !== 0))) { - (_localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2456; - (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(7); - } - break; - - case 2: - { - _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); - (_localctx as ArithmeticBinaryContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 2457; - if (!(this.precpred(this._ctx, 5))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); - } - this.state = 2458; - (_localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); - _la = this._input.LA(1); - if (!(((((_la - 268)) & ~0x1F) === 0 && ((1 << (_la - 268)) & ((1 << (SparkSqlParser.PLUS - 268)) | (1 << (SparkSqlParser.MINUS - 268)) | (1 << (SparkSqlParser.CONCAT_PIPE - 268)))) !== 0))) { - (_localctx as ArithmeticBinaryContext)._operator = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2459; - (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(6); - } - break; - - case 3: - { - _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); - (_localctx as ArithmeticBinaryContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 2460; - if (!(this.precpred(this._ctx, 4))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); - } - this.state = 2461; - (_localctx as ArithmeticBinaryContext)._operator = this.match(SparkSqlParser.AMPERSAND); - this.state = 2462; - (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(5); - } - break; - - case 4: - { - _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); - (_localctx as ArithmeticBinaryContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 2463; - if (!(this.precpred(this._ctx, 3))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); - } - this.state = 2464; - (_localctx as ArithmeticBinaryContext)._operator = this.match(SparkSqlParser.HAT); - this.state = 2465; - (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(4); - } - break; - - case 5: - { - _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); - (_localctx as ArithmeticBinaryContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 2466; - if (!(this.precpred(this._ctx, 2))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); - } - this.state = 2467; - (_localctx as ArithmeticBinaryContext)._operator = this.match(SparkSqlParser.PIPE); - this.state = 2468; - (_localctx as ArithmeticBinaryContext)._right = this.valueExpression(3); - } - break; - - case 6: - { - _localctx = new ComparisonContext(new ValueExpressionContext(_parentctx, _parentState)); - (_localctx as ComparisonContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); - this.state = 2469; - if (!(this.precpred(this._ctx, 1))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); - } - this.state = 2470; - this.comparisonOperator(); - this.state = 2471; - (_localctx as ComparisonContext)._right = this.valueExpression(2); - } - break; - } - } - } - this.state = 2477; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 318, this._ctx); - } + this.state = 2727; + _localctx._key = this.identifier(); + this.state = 2728; + this.match(SparkSqlParser.FAT_ARROW); + this.state = 2729; + _localctx._table = this.functionTableSubqueryArgument(); } } catch (re) { @@ -10375,723 +11074,645 @@ export class SparkSqlParser extends Parser { } } finally { - this.unrollRecursionContexts(_parentctx); + this.exitRule(); } return _localctx; } - - public primaryExpression(): PrimaryExpressionContext; - public primaryExpression(_p: number): PrimaryExpressionContext; // @RuleVersion(0) - public primaryExpression(_p?: number): PrimaryExpressionContext { - if (_p === undefined) { - _p = 0; - } - - let _parentctx: ParserRuleContext = this._ctx; - let _parentState: number = this.state; - let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, _parentState); - let _prevctx: PrimaryExpressionContext = _localctx; - let _startState: number = 196; - this.enterRecursionRule(_localctx, 196, SparkSqlParser.RULE_primaryExpression, _p); - let _la: number; + public functionTableReferenceArgument(): FunctionTableReferenceArgumentContext { + let _localctx: FunctionTableReferenceArgumentContext = new FunctionTableReferenceArgumentContext(this._ctx, this.state); + this.enterRule(_localctx, 216, SparkSqlParser.RULE_functionTableReferenceArgument); try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 2662; + this.state = 2733; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 338, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 351, this._ctx) ) { case 1: + this.enterOuterAlt(_localctx, 1); { - _localctx = new CurrentDatetimeContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 2479; - (_localctx as CurrentDatetimeContext)._name = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.CURRENT_DATE || _la === SparkSqlParser.CURRENT_TIMESTAMP)) { - (_localctx as CurrentDatetimeContext)._name = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 2731; + this.functionTableSubqueryArgument(); + } + break; - this._errHandler.reportMatch(this); - this.consume(); + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2732; + this.functionTableNamedArgumentExpression(); } + 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 functionTableArgument(): FunctionTableArgumentContext { + let _localctx: FunctionTableArgumentContext = new FunctionTableArgumentContext(this._ctx, this.state); + this.enterRule(_localctx, 218, SparkSqlParser.RULE_functionTableArgument); + try { + this.state = 2737; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 352, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 2735; + this.functionTableReferenceArgument(); } break; case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2736; + this.functionArgument(); + } + 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 functionTable(): FunctionTableContext { + let _localctx: FunctionTableContext = new FunctionTableContext(this._ctx, this.state); + this.enterRule(_localctx, 220, SparkSqlParser.RULE_functionTable); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2739; + _localctx._funcName = this.functionName(); + this.state = 2740; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2749; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 354, this._ctx) ) { + case 1: { - _localctx = new SearchedCaseContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2480; - this.match(SparkSqlParser.CASE); - this.state = 2482; + this.state = 2741; + this.functionTableArgument(); + this.state = 2746; this._errHandler.sync(this); _la = this._input.LA(1); - do { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 2481; - this.whenClause(); + this.state = 2742; + this.match(SparkSqlParser.COMMA); + this.state = 2743; + this.functionTableArgument(); } } - this.state = 2484; + this.state = 2748; this._errHandler.sync(this); _la = this._input.LA(1); - } while (_la === SparkSqlParser.WHEN); - this.state = 2488; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.ELSE) { - { - this.state = 2486; - this.match(SparkSqlParser.ELSE); - this.state = 2487; - (_localctx as SearchedCaseContext)._elseExpression = this.expression(); - } } - - this.state = 2490; - this.match(SparkSqlParser.END); } break; - - case 3: + } + this.state = 2751; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 2752; + this.tableAlias(); + } + } + 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 tableAlias(): TableAliasContext { + let _localctx: TableAliasContext = new TableAliasContext(this._ctx, this.state); + this.enterRule(_localctx, 222, SparkSqlParser.RULE_tableAlias); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2761; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 357, this._ctx) ) { + case 1: { - _localctx = new SimpleCaseContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2492; - this.match(SparkSqlParser.CASE); - this.state = 2493; - (_localctx as SimpleCaseContext)._value = this.expression(); - this.state = 2495; + this.state = 2755; this._errHandler.sync(this); - _la = this._input.LA(1); - do { - { + switch ( this.interpreter.adaptivePredict(this._input, 355, this._ctx) ) { + case 1: { - this.state = 2494; - this.whenClause(); - } + this.state = 2754; + this.match(SparkSqlParser.KW_AS); } - this.state = 2497; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while (_la === SparkSqlParser.WHEN); - this.state = 2501; + break; + } + this.state = 2757; + this.strictIdentifier(); + this.state = 2759; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.ELSE) { + switch ( this.interpreter.adaptivePredict(this._input, 356, this._ctx) ) { + case 1: { - this.state = 2499; - this.match(SparkSqlParser.ELSE); - this.state = 2500; - (_localctx as SimpleCaseContext)._elseExpression = this.expression(); + this.state = 2758; + this.identifierList(); } + break; } - - this.state = 2503; - this.match(SparkSqlParser.END); } break; - - case 4: + } + } + } + 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 rowFormat(): RowFormatContext { + let _localctx: RowFormatContext = new RowFormatContext(this._ctx, this.state); + this.enterRule(_localctx, 224, SparkSqlParser.RULE_rowFormat); + try { + this.state = 2812; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 365, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); { - _localctx = new CastContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2505; - this.match(SparkSqlParser.CAST); - this.state = 2506; - this.match(SparkSqlParser.T__0); - this.state = 2507; - this.expression(); - this.state = 2508; - this.match(SparkSqlParser.AS); - this.state = 2509; - this.dataType(); - this.state = 2510; - this.match(SparkSqlParser.T__1); + this.state = 2763; + this.match(SparkSqlParser.KW_ROW); + this.state = 2764; + this.match(SparkSqlParser.KW_FORMAT); + this.state = 2765; + this.match(SparkSqlParser.KW_SERDE); + this.state = 2766; + _localctx._name = this.stringLit(); + this.state = 2770; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 358, this._ctx) ) { + case 1: + { + this.state = 2767; + this.match(SparkSqlParser.KW_WITH); + this.state = 2768; + this.match(SparkSqlParser.KW_SERDEPROPERTIES); + this.state = 2769; + _localctx._props = this.propertyList(); + } + break; + } } break; - case 5: + case 2: + this.enterOuterAlt(_localctx, 2); { - _localctx = new StructContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2512; - this.match(SparkSqlParser.STRUCT); - this.state = 2513; - this.match(SparkSqlParser.T__0); - this.state = 2522; + this.state = 2772; + this.match(SparkSqlParser.KW_ROW); + this.state = 2773; + this.match(SparkSqlParser.KW_FORMAT); + this.state = 2774; + this.match(SparkSqlParser.KW_DELIMITED); + this.state = 2784; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 324, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 360, this._ctx) ) { case 1: { - this.state = 2514; - (_localctx as StructContext)._namedExpression = this.namedExpression(); - (_localctx as StructContext)._argument.push((_localctx as StructContext)._namedExpression); - this.state = 2519; + this.state = 2775; + this.match(SparkSqlParser.KW_FIELDS); + this.state = 2776; + this.match(SparkSqlParser.KW_TERMINATED); + this.state = 2777; + this.match(SparkSqlParser.KW_BY); + this.state = 2778; + _localctx._fieldsTerminatedBy = this.stringLit(); + this.state = 2782; this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { + switch ( this.interpreter.adaptivePredict(this._input, 359, this._ctx) ) { + case 1: { - this.state = 2515; - this.match(SparkSqlParser.T__2); - this.state = 2516; - (_localctx as StructContext)._namedExpression = this.namedExpression(); - (_localctx as StructContext)._argument.push((_localctx as StructContext)._namedExpression); + this.state = 2779; + this.match(SparkSqlParser.KW_ESCAPED); + this.state = 2780; + this.match(SparkSqlParser.KW_BY); + this.state = 2781; + _localctx._escapedBy = this.stringLit(); } - } - this.state = 2521; - this._errHandler.sync(this); - _la = this._input.LA(1); + break; } } break; } - this.state = 2524; - this.match(SparkSqlParser.T__1); - } - break; - - case 6: - { - _localctx = new FirstContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2525; - this.match(SparkSqlParser.FIRST); - this.state = 2526; - this.match(SparkSqlParser.T__0); - this.state = 2527; - this.expression(); - this.state = 2530; + this.state = 2791; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.IGNORE) { + switch ( this.interpreter.adaptivePredict(this._input, 361, this._ctx) ) { + case 1: { - this.state = 2528; - this.match(SparkSqlParser.IGNORE); - this.state = 2529; - this.match(SparkSqlParser.NULLS); + this.state = 2786; + this.match(SparkSqlParser.KW_COLLECTION); + this.state = 2787; + this.match(SparkSqlParser.KW_ITEMS); + this.state = 2788; + this.match(SparkSqlParser.KW_TERMINATED); + this.state = 2789; + this.match(SparkSqlParser.KW_BY); + this.state = 2790; + _localctx._collectionItemsTerminatedBy = this.stringLit(); } + break; } - - this.state = 2532; - this.match(SparkSqlParser.T__1); - } - break; - - case 7: - { - _localctx = new LastContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2534; - this.match(SparkSqlParser.LAST); - this.state = 2535; - this.match(SparkSqlParser.T__0); - this.state = 2536; - this.expression(); - this.state = 2539; + this.state = 2798; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.IGNORE) { + switch ( this.interpreter.adaptivePredict(this._input, 362, this._ctx) ) { + case 1: { - this.state = 2537; - this.match(SparkSqlParser.IGNORE); - this.state = 2538; - this.match(SparkSqlParser.NULLS); + this.state = 2793; + this.match(SparkSqlParser.KW_MAP); + this.state = 2794; + this.match(SparkSqlParser.KW_KEYS); + this.state = 2795; + this.match(SparkSqlParser.KW_TERMINATED); + this.state = 2796; + this.match(SparkSqlParser.KW_BY); + this.state = 2797; + _localctx._keysTerminatedBy = this.stringLit(); } + break; } - - this.state = 2541; - this.match(SparkSqlParser.T__1); - } - break; - - case 8: - { - _localctx = new PositionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2543; - this.match(SparkSqlParser.POSITION); - this.state = 2544; - this.match(SparkSqlParser.T__0); - this.state = 2545; - (_localctx as PositionContext)._substr = this.valueExpression(0); - this.state = 2546; - this.match(SparkSqlParser.IN); - this.state = 2547; - (_localctx as PositionContext)._str = this.valueExpression(0); - this.state = 2548; - this.match(SparkSqlParser.T__1); + this.state = 2804; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 363, this._ctx) ) { + case 1: + { + this.state = 2800; + this.match(SparkSqlParser.KW_LINES); + this.state = 2801; + this.match(SparkSqlParser.KW_TERMINATED); + this.state = 2802; + this.match(SparkSqlParser.KW_BY); + this.state = 2803; + _localctx._linesSeparatedBy = this.stringLit(); + } + break; } - break; - - case 9: - { - _localctx = new ConstantDefaultContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2550; - this.constant(); + this.state = 2810; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 364, this._ctx) ) { + case 1: + { + this.state = 2806; + this.match(SparkSqlParser.KW_NULL); + this.state = 2807; + this.match(SparkSqlParser.KW_DEFINED); + this.state = 2808; + this.match(SparkSqlParser.KW_AS); + this.state = 2809; + _localctx._nullDefinedAs = this.stringLit(); + } + break; } - break; - - case 10: - { - _localctx = new StarContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2551; - this.match(SparkSqlParser.ASTERISK); } break; - - case 11: - { - _localctx = new StarContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2552; - this.qualifiedName(); - this.state = 2553; - this.match(SparkSqlParser.T__3); - this.state = 2554; - this.match(SparkSqlParser.ASTERISK); - } - break; - - case 12: + } + } + 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 multipartIdentifierList(): MultipartIdentifierListContext { + let _localctx: MultipartIdentifierListContext = new MultipartIdentifierListContext(this._ctx, this.state); + this.enterRule(_localctx, 226, SparkSqlParser.RULE_multipartIdentifierList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2814; + this.multipartIdentifier(); + this.state = 2819; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { { - _localctx = new RowConstructorContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2556; - this.match(SparkSqlParser.T__0); - this.state = 2557; - this.namedExpression(); - this.state = 2560; + { + this.state = 2815; + this.match(SparkSqlParser.COMMA); + this.state = 2816; + this.multipartIdentifier(); + } + } + this.state = 2821; this._errHandler.sync(this); _la = this._input.LA(1); - do { + } + } + } + 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 multipartIdentifier(): MultipartIdentifierContext { + let _localctx: MultipartIdentifierContext = new MultipartIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 228, SparkSqlParser.RULE_multipartIdentifier); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2822; + _localctx._errorCapturingIdentifier = this.errorCapturingIdentifier(); + _localctx._parts.push(_localctx._errorCapturingIdentifier); + this.state = 2827; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 367, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { { { - this.state = 2558; - this.match(SparkSqlParser.T__2); - this.state = 2559; - this.namedExpression(); + this.state = 2823; + this.match(SparkSqlParser.DOT); + this.state = 2824; + _localctx._errorCapturingIdentifier = this.errorCapturingIdentifier(); + _localctx._parts.push(_localctx._errorCapturingIdentifier); } } - this.state = 2562; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while (_la === SparkSqlParser.T__2); - this.state = 2564; - this.match(SparkSqlParser.T__1); } - break; + this.state = 2829; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 367, this._ctx); + } + } + } + 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 multipartIdentifierPropertyList(): MultipartIdentifierPropertyListContext { + let _localctx: MultipartIdentifierPropertyListContext = new MultipartIdentifierPropertyListContext(this._ctx, this.state); + this.enterRule(_localctx, 230, SparkSqlParser.RULE_multipartIdentifierPropertyList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2830; + this.multipartIdentifierProperty(); + this.state = 2835; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2831; + this.match(SparkSqlParser.COMMA); + this.state = 2832; + this.multipartIdentifierProperty(); + } + } + this.state = 2837; + 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 multipartIdentifierProperty(): MultipartIdentifierPropertyContext { + let _localctx: MultipartIdentifierPropertyContext = new MultipartIdentifierPropertyContext(this._ctx, this.state); + this.enterRule(_localctx, 232, SparkSqlParser.RULE_multipartIdentifierProperty); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2838; + this.multipartIdentifier(); + this.state = 2841; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_OPTIONS) { + { + this.state = 2839; + this.match(SparkSqlParser.KW_OPTIONS); + this.state = 2840; + _localctx._options = this.propertyList(); + } + } - case 13: + } + } + 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 tableIdentifier(): TableIdentifierContext { + let _localctx: TableIdentifierContext = new TableIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 234, SparkSqlParser.RULE_tableIdentifier); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2846; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 370, this._ctx) ) { + case 1: { - _localctx = new SubqueryExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2566; - this.match(SparkSqlParser.T__0); - this.state = 2567; - this.query(); - this.state = 2568; - this.match(SparkSqlParser.T__1); + this.state = 2843; + _localctx._db = this.errorCapturingIdentifier(); + this.state = 2844; + this.match(SparkSqlParser.DOT); } break; - - case 14: + } + this.state = 2848; + _localctx._table = this.errorCapturingIdentifier(); + } + } + 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 functionIdentifier(): FunctionIdentifierContext { + let _localctx: FunctionIdentifierContext = new FunctionIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 236, SparkSqlParser.RULE_functionIdentifier); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2853; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 371, this._ctx) ) { + case 1: { - _localctx = new FunctionCallContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2570; - this.functionName(); - this.state = 2571; - this.match(SparkSqlParser.T__0); - this.state = 2583; + this.state = 2850; + _localctx._db = this.errorCapturingIdentifier(); + this.state = 2851; + this.match(SparkSqlParser.DOT); + } + break; + } + this.state = 2855; + _localctx._function = this.errorCapturingIdentifier(); + } + } + 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 namedExpression(): NamedExpressionContext { + let _localctx: NamedExpressionContext = new NamedExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 238, SparkSqlParser.RULE_namedExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 2857; + this.expression(); + this.state = 2865; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 374, this._ctx) ) { + case 1: + { + this.state = 2859; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 330, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 372, this._ctx) ) { case 1: { - this.state = 2573; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 328, this._ctx) ) { - case 1: - { - this.state = 2572; - this.setQuantifier(); - } - break; - } - this.state = 2575; - (_localctx as FunctionCallContext)._expression = this.expression(); - (_localctx as FunctionCallContext)._argument.push((_localctx as FunctionCallContext)._expression); - this.state = 2580; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 2576; - this.match(SparkSqlParser.T__2); - this.state = 2577; - (_localctx as FunctionCallContext)._expression = this.expression(); - (_localctx as FunctionCallContext)._argument.push((_localctx as FunctionCallContext)._expression); - } - } - this.state = 2582; - this._errHandler.sync(this); - _la = this._input.LA(1); - } + this.state = 2858; + this.match(SparkSqlParser.KW_AS); } break; } - this.state = 2585; - this.match(SparkSqlParser.T__1); - this.state = 2592; + this.state = 2863; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 331, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 373, this._ctx) ) { case 1: { - this.state = 2586; - this.match(SparkSqlParser.FILTER); - this.state = 2587; - this.match(SparkSqlParser.T__0); - this.state = 2588; - this.match(SparkSqlParser.WHERE); - this.state = 2589; - (_localctx as FunctionCallContext)._where = this.booleanExpression(0); - this.state = 2590; - this.match(SparkSqlParser.T__1); + this.state = 2861; + _localctx._name = this.errorCapturingIdentifier(); } break; - } - this.state = 2596; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 332, this._ctx) ) { - case 1: + + case 2: { - this.state = 2594; - this.match(SparkSqlParser.OVER); - this.state = 2595; - this.windowSpec(); + this.state = 2862; + this.identifierList(); } break; } } break; - - case 15: - { - _localctx = new LambdaContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2598; - this.identifier(); - this.state = 2599; - this.match(SparkSqlParser.T__6); - this.state = 2600; - this.expression(); - } - break; - - case 16: - { - _localctx = new LambdaContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2602; - this.match(SparkSqlParser.T__0); - this.state = 2603; - this.identifier(); - this.state = 2606; - this._errHandler.sync(this); - _la = this._input.LA(1); - do { - { - { - this.state = 2604; - this.match(SparkSqlParser.T__2); - this.state = 2605; - this.identifier(); - } - } - this.state = 2608; - this._errHandler.sync(this); - _la = this._input.LA(1); - } while (_la === SparkSqlParser.T__2); - this.state = 2610; - this.match(SparkSqlParser.T__1); - this.state = 2611; - this.match(SparkSqlParser.T__6); - this.state = 2612; - this.expression(); - } - break; - - case 17: - { - _localctx = new ColumnReferenceContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2614; - this.identifier(); - } - break; - - case 18: - { - _localctx = new ParenthesizedExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2615; - this.match(SparkSqlParser.T__0); - this.state = 2616; - this.expression(); - this.state = 2617; - this.match(SparkSqlParser.T__1); - } - break; - - case 19: - { - _localctx = new ExtractContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2619; - this.match(SparkSqlParser.EXTRACT); - this.state = 2620; - this.match(SparkSqlParser.T__0); - this.state = 2621; - (_localctx as ExtractContext)._field = this.identifier(); - this.state = 2622; - this.match(SparkSqlParser.FROM); - this.state = 2623; - (_localctx as ExtractContext)._source = this.valueExpression(0); - this.state = 2624; - this.match(SparkSqlParser.T__1); - } - break; - - case 20: - { - _localctx = new SubstringContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2626; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.SUBSTR || _la === SparkSqlParser.SUBSTRING)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2627; - this.match(SparkSqlParser.T__0); - this.state = 2628; - (_localctx as SubstringContext)._str = this.valueExpression(0); - this.state = 2629; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.T__2 || _la === SparkSqlParser.FROM)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2630; - (_localctx as SubstringContext)._pos = this.valueExpression(0); - this.state = 2633; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.T__2 || _la === SparkSqlParser.FOR) { - { - this.state = 2631; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.T__2 || _la === SparkSqlParser.FOR)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2632; - (_localctx as SubstringContext)._len = this.valueExpression(0); - } - } - - this.state = 2635; - this.match(SparkSqlParser.T__1); - } - break; - - case 21: - { - _localctx = new TrimContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2637; - this.match(SparkSqlParser.TRIM); - this.state = 2638; - this.match(SparkSqlParser.T__0); - this.state = 2640; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 335, this._ctx) ) { - case 1: - { - this.state = 2639; - (_localctx as TrimContext)._trimOption = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.BOTH || _la === SparkSqlParser.LEADING || _la === SparkSqlParser.TRAILING)) { - (_localctx as TrimContext)._trimOption = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - break; - } - this.state = 2643; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 336, this._ctx) ) { - case 1: - { - this.state = 2642; - (_localctx as TrimContext)._trimStr = this.valueExpression(0); - } - break; - } - this.state = 2645; - this.match(SparkSqlParser.FROM); - this.state = 2646; - (_localctx as TrimContext)._srcStr = this.valueExpression(0); - this.state = 2647; - this.match(SparkSqlParser.T__1); - } - break; - - case 22: - { - _localctx = new OverlayContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 2649; - this.match(SparkSqlParser.OVERLAY); - this.state = 2650; - this.match(SparkSqlParser.T__0); - this.state = 2651; - (_localctx as OverlayContext)._input = this.valueExpression(0); - this.state = 2652; - this.match(SparkSqlParser.PLACING); - this.state = 2653; - (_localctx as OverlayContext)._replace = this.valueExpression(0); - this.state = 2654; - this.match(SparkSqlParser.FROM); - this.state = 2655; - (_localctx as OverlayContext)._position = this.valueExpression(0); - this.state = 2658; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.FOR) { - { - this.state = 2656; - this.match(SparkSqlParser.FOR); - this.state = 2657; - (_localctx as OverlayContext)._length = this.valueExpression(0); - } - } - - this.state = 2660; - this.match(SparkSqlParser.T__1); - } - break; - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 2674; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 340, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - this.state = 2672; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 339, this._ctx) ) { - case 1: - { - _localctx = new SubscriptContext(new PrimaryExpressionContext(_parentctx, _parentState)); - (_localctx as SubscriptContext)._value = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_primaryExpression); - this.state = 2664; - if (!(this.precpred(this._ctx, 8))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 8)"); - } - this.state = 2665; - this.match(SparkSqlParser.T__7); - this.state = 2666; - (_localctx as SubscriptContext)._index = this.valueExpression(0); - this.state = 2667; - this.match(SparkSqlParser.T__8); - } - break; - - case 2: - { - _localctx = new DereferenceContext(new PrimaryExpressionContext(_parentctx, _parentState)); - (_localctx as DereferenceContext)._base = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_primaryExpression); - this.state = 2669; - if (!(this.precpred(this._ctx, 6))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); - } - this.state = 2670; - this.match(SparkSqlParser.T__3); - this.state = 2671; - (_localctx as DereferenceContext)._fieldName = this.identifier(); - } - break; - } - } - } - this.state = 2676; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 340, this._ctx); } } } @@ -11105,92 +11726,38 @@ export class SparkSqlParser extends Parser { } } finally { - this.unrollRecursionContexts(_parentctx); + this.exitRule(); } return _localctx; } // @RuleVersion(0) - public constant(): ConstantContext { - let _localctx: ConstantContext = new ConstantContext(this._ctx, this.state); - this.enterRule(_localctx, 198, SparkSqlParser.RULE_constant); + public namedExpressionSeq(): NamedExpressionSeqContext { + let _localctx: NamedExpressionSeqContext = new NamedExpressionSeqContext(this._ctx, this.state); + this.enterRule(_localctx, 240, SparkSqlParser.RULE_namedExpressionSeq); try { let _alt: number; - this.state = 2689; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2867; + this.namedExpression(); + this.state = 2872; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 342, this._ctx) ) { - case 1: - _localctx = new NullLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 2677; - this.match(SparkSqlParser.NULL); - } - break; - - case 2: - _localctx = new IntervalLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 2678; - this.interval(); - } - break; - - case 3: - _localctx = new TypeConstructorContext(_localctx); - this.enterOuterAlt(_localctx, 3); - { - this.state = 2679; - this.identifier(); - this.state = 2680; - this.match(SparkSqlParser.STRING); - } - break; - - case 4: - _localctx = new NumericLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 4); - { - this.state = 2682; - this.number(); - } - break; - - case 5: - _localctx = new BooleanLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 5); - { - this.state = 2683; - this.booleanValue(); - } - break; - - case 6: - _localctx = new StringLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 6); - { - this.state = 2685; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 2684; - this.match(SparkSqlParser.STRING); - } - } - break; - default: - throw new NoViableAltException(this); + _alt = this.interpreter.adaptivePredict(this._input, 375, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 2868; + this.match(SparkSqlParser.COMMA); + this.state = 2869; + this.namedExpression(); + } } - this.state = 2687; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 341, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } - break; + this.state = 2874; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 375, this._ctx); + } } } catch (re) { @@ -11208,25 +11775,37 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public comparisonOperator(): ComparisonOperatorContext { - let _localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 200, SparkSqlParser.RULE_comparisonOperator); + public partitionFieldList(): PartitionFieldListContext { + let _localctx: PartitionFieldListContext = new PartitionFieldListContext(this._ctx, this.state); + this.enterRule(_localctx, 242, SparkSqlParser.RULE_partitionFieldList); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2691; + this.state = 2875; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2876; + _localctx._partitionField = this.partitionField(); + _localctx._fields.push(_localctx._partitionField); + this.state = 2881; + this._errHandler.sync(this); _la = this._input.LA(1); - if (!(((((_la - 260)) & ~0x1F) === 0 && ((1 << (_la - 260)) & ((1 << (SparkSqlParser.EQ - 260)) | (1 << (SparkSqlParser.NSEQ - 260)) | (1 << (SparkSqlParser.NEQ - 260)) | (1 << (SparkSqlParser.NEQJ - 260)) | (1 << (SparkSqlParser.LT - 260)) | (1 << (SparkSqlParser.LTE - 260)) | (1 << (SparkSqlParser.GT - 260)) | (1 << (SparkSqlParser.GTE - 260)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2877; + this.match(SparkSqlParser.COMMA); + this.state = 2878; + _localctx._partitionField = this.partitionField(); + _localctx._fields.push(_localctx._partitionField); } - - this._errHandler.reportMatch(this); - this.consume(); + } + this.state = 2883; + this._errHandler.sync(this); + _la = this._input.LA(1); } + this.state = 2884; + this.match(SparkSqlParser.RIGHT_PAREN); } } catch (re) { @@ -11244,61 +11823,28 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public arithmeticOperator(): ArithmeticOperatorContext { - let _localctx: ArithmeticOperatorContext = new ArithmeticOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 202, SparkSqlParser.RULE_arithmeticOperator); - let _la: number; + public partitionField(): PartitionFieldContext { + let _localctx: PartitionFieldContext = new PartitionFieldContext(this._ctx, this.state); + this.enterRule(_localctx, 244, SparkSqlParser.RULE_partitionField); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2693; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DIV || ((((_la - 268)) & ~0x1F) === 0 && ((1 << (_la - 268)) & ((1 << (SparkSqlParser.PLUS - 268)) | (1 << (SparkSqlParser.MINUS - 268)) | (1 << (SparkSqlParser.ASTERISK - 268)) | (1 << (SparkSqlParser.SLASH - 268)) | (1 << (SparkSqlParser.PERCENT - 268)) | (1 << (SparkSqlParser.TILDE - 268)) | (1 << (SparkSqlParser.AMPERSAND - 268)) | (1 << (SparkSqlParser.PIPE - 268)) | (1 << (SparkSqlParser.CONCAT_PIPE - 268)) | (1 << (SparkSqlParser.HAT - 268)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + this.state = 2888; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 377, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 2886; + this.transform(); } + break; - 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 predicateOperator(): PredicateOperatorContext { - let _localctx: PredicateOperatorContext = new PredicateOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 204, SparkSqlParser.RULE_predicateOperator); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2695; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.AND || _la === SparkSqlParser.IN || _la === SparkSqlParser.NOT || _la === SparkSqlParser.OR)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2887; + this.colType(); } - - this._errHandler.reportMatch(this); - this.consume(); - } + break; } } catch (re) { @@ -11316,25 +11862,51 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public booleanValue(): BooleanValueContext { - let _localctx: BooleanValueContext = new BooleanValueContext(this._ctx, this.state); - this.enterRule(_localctx, 206, SparkSqlParser.RULE_booleanValue); + public transform(): TransformContext { + let _localctx: TransformContext = new TransformContext(this._ctx, this.state); + this.enterRule(_localctx, 246, SparkSqlParser.RULE_transform); let _la: number; try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2697; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FALSE || _la === SparkSqlParser.TRUE)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + this.state = 2903; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 379, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 2890; + this.qualifiedName(); } + break; - this._errHandler.reportMatch(this); - this.consume(); - } + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 2891; + _localctx._transformName = this.identifier(); + this.state = 2892; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2893; + this.transformArgument(); + this.state = 2898; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2894; + this.match(SparkSqlParser.COMMA); + this.state = 2895; + this.transformArgument(); + } + } + this.state = 2900; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2901; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; } } catch (re) { @@ -11352,32 +11924,29 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public interval(): IntervalContext { - let _localctx: IntervalContext = new IntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 208, SparkSqlParser.RULE_interval); + public transformArgument(): TransformArgumentContext { + let _localctx: TransformArgumentContext = new TransformArgumentContext(this._ctx, this.state); + this.enterRule(_localctx, 248, SparkSqlParser.RULE_transformArgument); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2699; - this.match(SparkSqlParser.INTERVAL); - this.state = 2702; + this.state = 2907; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 343, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 380, this._ctx) ) { case 1: + this.enterOuterAlt(_localctx, 1); { - this.state = 2700; - this.errorCapturingMultiUnitsInterval(); + this.state = 2905; + this.qualifiedName(); } break; case 2: + this.enterOuterAlt(_localctx, 2); { - this.state = 2701; - this.errorCapturingUnitToUnitInterval(); + this.state = 2906; + this.constant(); } break; } - } } catch (re) { if (re instanceof RecognitionException) { @@ -11394,24 +11963,14 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext { - let _localctx: ErrorCapturingMultiUnitsIntervalContext = new ErrorCapturingMultiUnitsIntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 210, SparkSqlParser.RULE_errorCapturingMultiUnitsInterval); + public expression(): ExpressionContext { + let _localctx: ExpressionContext = new ExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 250, SparkSqlParser.RULE_expression); try { this.enterOuterAlt(_localctx, 1); { - this.state = 2704; - this.multiUnitsInterval(); - this.state = 2706; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 344, this._ctx) ) { - case 1: - { - this.state = 2705; - this.unitToUnitInterval(); - } - break; - } + this.state = 2909; + this.booleanExpression(0); } } catch (re) { @@ -11429,36 +11988,18 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public multiUnitsInterval(): MultiUnitsIntervalContext { - let _localctx: MultiUnitsIntervalContext = new MultiUnitsIntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 212, SparkSqlParser.RULE_multiUnitsInterval); + public namedArgumentExpression(): NamedArgumentExpressionContext { + let _localctx: NamedArgumentExpressionContext = new NamedArgumentExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 252, SparkSqlParser.RULE_namedArgumentExpression); try { - let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2711; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { - case 1: - { - { - this.state = 2708; - this.intervalValue(); - this.state = 2709; - _localctx._identifier = this.identifier(); - _localctx._unit.push(_localctx._identifier); - } - } - break; - default: - throw new NoViableAltException(this); - } - this.state = 2713; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 345, this._ctx); - } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + this.state = 2911; + _localctx._key = this.identifier(); + this.state = 2912; + this.match(SparkSqlParser.FAT_ARROW); + this.state = 2913; + _localctx._value = this.expression(); } } catch (re) { @@ -11476,32 +12017,29 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext { - let _localctx: ErrorCapturingUnitToUnitIntervalContext = new ErrorCapturingUnitToUnitIntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 214, SparkSqlParser.RULE_errorCapturingUnitToUnitInterval); + public functionArgument(): FunctionArgumentContext { + let _localctx: FunctionArgumentContext = new FunctionArgumentContext(this._ctx, this.state); + this.enterRule(_localctx, 254, SparkSqlParser.RULE_functionArgument); try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2715; - _localctx._body = this.unitToUnitInterval(); - this.state = 2718; + this.state = 2917; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 346, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 381, this._ctx) ) { case 1: + this.enterOuterAlt(_localctx, 1); { - this.state = 2716; - _localctx._error1 = this.multiUnitsInterval(); + this.state = 2915; + this.expression(); } break; case 2: + this.enterOuterAlt(_localctx, 2); { - this.state = 2717; - _localctx._error2 = this.unitToUnitInterval(); + this.state = 2916; + this.namedArgumentExpression(); } break; } - } } catch (re) { if (re instanceof RecognitionException) { @@ -11518,20 +12056,31 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public unitToUnitInterval(): UnitToUnitIntervalContext { - let _localctx: UnitToUnitIntervalContext = new UnitToUnitIntervalContext(this._ctx, this.state); - this.enterRule(_localctx, 216, SparkSqlParser.RULE_unitToUnitInterval); + public expressionSeq(): ExpressionSeqContext { + let _localctx: ExpressionSeqContext = new ExpressionSeqContext(this._ctx, this.state); + this.enterRule(_localctx, 256, SparkSqlParser.RULE_expressionSeq); + let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2720; - _localctx._value = this.intervalValue(); - this.state = 2721; - _localctx._from = this.identifier(); - this.state = 2722; - this.match(SparkSqlParser.TO); - this.state = 2723; - _localctx._to = this.identifier(); + this.state = 2919; + this.expression(); + this.state = 2924; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2920; + this.match(SparkSqlParser.COMMA); + this.state = 2921; + this.expression(); + } + } + this.state = 2926; + this._errHandler.sync(this); + _la = this._input.LA(1); + } } } catch (re) { @@ -11548,106 +12097,119 @@ export class SparkSqlParser extends Parser { } return _localctx; } + + public booleanExpression(): BooleanExpressionContext; + public booleanExpression(_p: number): BooleanExpressionContext; // @RuleVersion(0) - public intervalValue(): IntervalValueContext { - let _localctx: IntervalValueContext = new IntervalValueContext(this._ctx, this.state); - this.enterRule(_localctx, 218, SparkSqlParser.RULE_intervalValue); - let _la: number; + public booleanExpression(_p?: number): BooleanExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: BooleanExpressionContext = new BooleanExpressionContext(this._ctx, _parentState); + let _prevctx: BooleanExpressionContext = _localctx; + let _startState: number = 258; + this.enterRecursionRule(_localctx, 258, SparkSqlParser.RULE_booleanExpression, _p); try { - this.state = 2730; + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 2939; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.PLUS: - case SparkSqlParser.MINUS: - case SparkSqlParser.INTEGER_VALUE: - case SparkSqlParser.DECIMAL_VALUE: - this.enterOuterAlt(_localctx, 1); + switch ( this.interpreter.adaptivePredict(this._input, 384, this._ctx) ) { + case 1: { - this.state = 2726; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.PLUS || _la === SparkSqlParser.MINUS) { - { - this.state = 2725; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.PLUS || _la === SparkSqlParser.MINUS)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } + this.state = 2928; + this.match(SparkSqlParser.KW_NOT); + this.state = 2929; + this.booleanExpression(5); } + break; - this.state = 2728; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.INTEGER_VALUE || _la === SparkSqlParser.DECIMAL_VALUE)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } + case 2: + { + this.state = 2930; + this.match(SparkSqlParser.KW_EXISTS); + this.state = 2931; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2932; + this.query(); + this.state = 2933; + this.match(SparkSqlParser.RIGHT_PAREN); } break; - case SparkSqlParser.STRING: - this.enterOuterAlt(_localctx, 2); + + case 3: { - this.state = 2729; - this.match(SparkSqlParser.STRING); + this.state = 2935; + this.valueExpression(0); + this.state = 2937; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 383, this._ctx) ) { + case 1: + { + this.state = 2936; + this.predicate(); + } + break; + } } 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 colPosition(): ColPositionContext { - let _localctx: ColPositionContext = new ColPositionContext(this._ctx, this.state); - this.enterRule(_localctx, 220, SparkSqlParser.RULE_colPosition); - try { - this.state = 2735; + this._ctx._stop = this._input.tryLT(-1); + this.state = 2949; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.FIRST: - this.enterOuterAlt(_localctx, 1); - { - this.state = 2732; - _localctx._position = this.match(SparkSqlParser.FIRST); - } - break; - case SparkSqlParser.AFTER: - this.enterOuterAlt(_localctx, 2); - { - this.state = 2733; - _localctx._position = this.match(SparkSqlParser.AFTER); - this.state = 2734; - _localctx._afterCol = this.errorCapturingIdentifier(); + _alt = this.interpreter.adaptivePredict(this._input, 386, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + this.state = 2947; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 385, this._ctx) ) { + case 1: + { + _localctx = new BooleanExpressionContext(_parentctx, _parentState); + _localctx._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_booleanExpression); + this.state = 2941; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 2942; + _localctx._operator = this.match(SparkSqlParser.KW_AND); + this.state = 2943; + _localctx._right = this.booleanExpression(3); + } + break; + + case 2: + { + _localctx = new BooleanExpressionContext(_parentctx, _parentState); + _localctx._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_booleanExpression); + this.state = 2944; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 2945; + _localctx._operator = this.match(SparkSqlParser.KW_OR); + this.state = 2946; + _localctx._right = this.booleanExpression(2); + } + break; + } + } } - break; - default: - throw new NoViableAltException(this); + this.state = 2951; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 386, this._ctx); + } } } catch (re) { @@ -11660,232 +12222,325 @@ export class SparkSqlParser extends Parser { } } finally { - this.exitRule(); + this.unrollRecursionContexts(_parentctx); } return _localctx; } // @RuleVersion(0) - public dataType(): DataTypeContext { - let _localctx: DataTypeContext = new DataTypeContext(this._ctx, this.state); - this.enterRule(_localctx, 222, SparkSqlParser.RULE_dataType); + public predicate(): PredicateContext { + let _localctx: PredicateContext = new PredicateContext(this._ctx, this.state); + this.enterRule(_localctx, 260, SparkSqlParser.RULE_predicate); let _la: number; try { - this.state = 2771; + this.state = 3034; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 354, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 400, this._ctx) ) { case 1: - _localctx = new ComplexDataTypeContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 2737; - (_localctx as ComplexDataTypeContext)._complex = this.match(SparkSqlParser.ARRAY); - this.state = 2738; - this.match(SparkSqlParser.LT); - this.state = 2739; - this.dataType(); - this.state = 2740; - this.match(SparkSqlParser.GT); + this.state = 2953; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 2952; + this.match(SparkSqlParser.KW_NOT); + } + } + + this.state = 2955; + _localctx._kind = this.match(SparkSqlParser.KW_BETWEEN); + this.state = 2956; + _localctx._lower = this.valueExpression(0); + this.state = 2957; + this.match(SparkSqlParser.KW_AND); + this.state = 2958; + _localctx._upper = this.valueExpression(0); } break; case 2: - _localctx = new ComplexDataTypeContext(_localctx); this.enterOuterAlt(_localctx, 2); { - this.state = 2742; - (_localctx as ComplexDataTypeContext)._complex = this.match(SparkSqlParser.MAP); - this.state = 2743; - this.match(SparkSqlParser.LT); - this.state = 2744; - this.dataType(); - this.state = 2745; - this.match(SparkSqlParser.T__2); - this.state = 2746; - this.dataType(); - this.state = 2747; - this.match(SparkSqlParser.GT); + this.state = 2961; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 2960; + this.match(SparkSqlParser.KW_NOT); + } + } + + this.state = 2963; + _localctx._kind = this.match(SparkSqlParser.KW_IN); + this.state = 2964; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2965; + this.expression(); + this.state = 2970; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 2966; + this.match(SparkSqlParser.COMMA); + this.state = 2967; + this.expression(); + } + } + this.state = 2972; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 2973; + this.match(SparkSqlParser.RIGHT_PAREN); } break; case 3: - _localctx = new ComplexDataTypeContext(_localctx); this.enterOuterAlt(_localctx, 3); { - this.state = 2749; - (_localctx as ComplexDataTypeContext)._complex = this.match(SparkSqlParser.STRUCT); - this.state = 2756; + this.state = 2976; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.LT: - { - this.state = 2750; - this.match(SparkSqlParser.LT); - this.state = 2752; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 350, this._ctx) ) { - case 1: - { - this.state = 2751; - this.complexColTypeList(); - } - break; - } - this.state = 2754; - this.match(SparkSqlParser.GT); - } - break; - case SparkSqlParser.NEQ: + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { { - this.state = 2755; - this.match(SparkSqlParser.NEQ); + this.state = 2975; + this.match(SparkSqlParser.KW_NOT); } - break; - default: - throw new NoViableAltException(this); } + + this.state = 2978; + _localctx._kind = this.match(SparkSqlParser.KW_IN); + this.state = 2979; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2980; + this.query(); + this.state = 2981; + this.match(SparkSqlParser.RIGHT_PAREN); } break; case 4: - _localctx = new PrimitiveDataTypeContext(_localctx); this.enterOuterAlt(_localctx, 4); { - this.state = 2758; - this.identifier(); - this.state = 2769; + this.state = 2984; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 2983; + this.match(SparkSqlParser.KW_NOT); + } + } + + this.state = 2986; + _localctx._kind = this.match(SparkSqlParser.KW_RLIKE); + this.state = 2987; + _localctx._pattern = this.valueExpression(0); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 2989; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 2988; + this.match(SparkSqlParser.KW_NOT); + } + } + + this.state = 2991; + _localctx._kind = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_LIKE || _la === SparkSqlParser.KW_ILIKE)) { + _localctx._kind = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 2992; + _localctx._quantifier = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_ALL || _la === SparkSqlParser.KW_ANY || _la === SparkSqlParser.KW_SOME)) { + _localctx._quantifier = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3006; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 353, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 394, this._ctx) ) { case 1: { - this.state = 2759; - this.match(SparkSqlParser.T__0); - this.state = 2760; - this.match(SparkSqlParser.INTEGER_VALUE); - this.state = 2765; + this.state = 2993; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2994; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 2: + { + this.state = 2995; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 2996; + this.expression(); + this.state = 3001; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 2761; - this.match(SparkSqlParser.T__2); - this.state = 2762; - this.match(SparkSqlParser.INTEGER_VALUE); + this.state = 2997; + this.match(SparkSqlParser.COMMA); + this.state = 2998; + this.expression(); } } - this.state = 2767; + this.state = 3003; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 2768; - this.match(SparkSqlParser.T__1); + this.state = 3004; + this.match(SparkSqlParser.RIGHT_PAREN); } break; } } 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 qualifiedColTypeWithPositionList(): QualifiedColTypeWithPositionListContext { - let _localctx: QualifiedColTypeWithPositionListContext = new QualifiedColTypeWithPositionListContext(this._ctx, this.state); - this.enterRule(_localctx, 224, SparkSqlParser.RULE_qualifiedColTypeWithPositionList); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2773; - this.qualifiedColTypeWithPosition(); - this.state = 2778; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { + + case 6: + this.enterOuterAlt(_localctx, 6); { - this.state = 2774; - this.match(SparkSqlParser.T__2); - this.state = 2775; - this.qualifiedColTypeWithPosition(); - } - } - this.state = 2780; + this.state = 3009; 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 qualifiedColTypeWithPosition(): QualifiedColTypeWithPositionContext { - let _localctx: QualifiedColTypeWithPositionContext = new QualifiedColTypeWithPositionContext(this._ctx, this.state); - this.enterRule(_localctx, 226, SparkSqlParser.RULE_qualifiedColTypeWithPosition); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2781; - _localctx._name = this.multipartIdentifier(); - this.state = 2782; - this.dataType(); - this.state = 2785; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { - { - this.state = 2783; - this.match(SparkSqlParser.NOT); - this.state = 2784; - this.match(SparkSqlParser.NULL); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 3008; + this.match(SparkSqlParser.KW_NOT); + } } - } - this.state = 2788; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 357, this._ctx) ) { - case 1: - { - this.state = 2787; - this.commentSpec(); - } - break; - } - this.state = 2791; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.AFTER || _la === SparkSqlParser.FIRST) { + this.state = 3011; + _localctx._kind = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_LIKE || _la === SparkSqlParser.KW_ILIKE)) { + _localctx._kind = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3012; + _localctx._pattern = this.valueExpression(0); + this.state = 3015; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 396, this._ctx) ) { + case 1: + { + this.state = 3013; + this.match(SparkSqlParser.KW_ESCAPE); + this.state = 3014; + _localctx._escapeChar = this.stringLit(); + } + break; + } + } + break; + + case 7: + this.enterOuterAlt(_localctx, 7); { - this.state = 2790; - this.colPosition(); + this.state = 3017; + this.match(SparkSqlParser.KW_IS); + this.state = 3019; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 3018; + this.match(SparkSqlParser.KW_NOT); + } + } + + this.state = 3021; + _localctx._kind = this.match(SparkSqlParser.KW_NULL); + } + break; + + case 8: + this.enterOuterAlt(_localctx, 8); + { + this.state = 3022; + this.match(SparkSqlParser.KW_IS); + this.state = 3024; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 3023; + this.match(SparkSqlParser.KW_NOT); + } + } + + this.state = 3026; + _localctx._kind = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_FALSE || _la === SparkSqlParser.KW_TRUE || _la === SparkSqlParser.KW_UNKNOWN)) { + _localctx._kind = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + + case 9: + this.enterOuterAlt(_localctx, 9); + { + this.state = 3027; + this.match(SparkSqlParser.KW_IS); + this.state = 3029; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 3028; + this.match(SparkSqlParser.KW_NOT); + } } - } + this.state = 3031; + _localctx._kind = this.match(SparkSqlParser.KW_DISTINCT); + this.state = 3032; + this.match(SparkSqlParser.KW_FROM); + this.state = 3033; + _localctx._right = this.valueExpression(0); + } + break; } } catch (re) { @@ -11902,33 +12557,193 @@ export class SparkSqlParser extends Parser { } return _localctx; } + + public valueExpression(): ValueExpressionContext; + public valueExpression(_p: number): ValueExpressionContext; // @RuleVersion(0) - public colTypeList(): ColTypeListContext { - let _localctx: ColTypeListContext = new ColTypeListContext(this._ctx, this.state); - this.enterRule(_localctx, 228, SparkSqlParser.RULE_colTypeList); + public valueExpression(_p?: number): ValueExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: ValueExpressionContext = new ValueExpressionContext(this._ctx, _parentState); + let _prevctx: ValueExpressionContext = _localctx; + let _startState: number = 262; + this.enterRecursionRule(_localctx, 262, SparkSqlParser.RULE_valueExpression, _p); + let _la: number; try { let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2793; - this.colType(); - this.state = 2798; + this.state = 3040; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 401, this._ctx) ) { + case 1: + { + this.state = 3037; + this.primaryExpression(0); + } + break; + + case 2: + { + this.state = 3038; + _localctx._operator = this._input.LT(1); + _la = this._input.LA(1); + if (!(((((_la - 350)) & ~0x1F) === 0 && ((1 << (_la - 350)) & ((1 << (SparkSqlParser.PLUS - 350)) | (1 << (SparkSqlParser.MINUS - 350)) | (1 << (SparkSqlParser.TILDE - 350)))) !== 0))) { + _localctx._operator = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3039; + this.valueExpression(7); + } + break; + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 3063; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 359, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 403, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; { - { - this.state = 2794; - this.match(SparkSqlParser.T__2); - this.state = 2795; - this.colType(); + this.state = 3061; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 402, this._ctx) ) { + case 1: + { + _localctx = new ValueExpressionContext(_parentctx, _parentState); + _localctx._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); + this.state = 3042; + if (!(this.precpred(this._ctx, 6))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); + } + this.state = 3043; + _localctx._operator = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DIV || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & ((1 << (SparkSqlParser.ASTERISK - 352)) | (1 << (SparkSqlParser.SLASH - 352)) | (1 << (SparkSqlParser.PERCENT - 352)))) !== 0))) { + _localctx._operator = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3044; + _localctx._right = this.valueExpression(7); + } + break; + + case 2: + { + _localctx = new ValueExpressionContext(_parentctx, _parentState); + _localctx._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); + this.state = 3045; + if (!(this.precpred(this._ctx, 5))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); + } + this.state = 3046; + _localctx._operator = this._input.LT(1); + _la = this._input.LA(1); + if (!(((((_la - 350)) & ~0x1F) === 0 && ((1 << (_la - 350)) & ((1 << (SparkSqlParser.PLUS - 350)) | (1 << (SparkSqlParser.MINUS - 350)) | (1 << (SparkSqlParser.CONCAT_PIPE - 350)))) !== 0))) { + _localctx._operator = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3047; + _localctx._right = this.valueExpression(6); + } + break; + + case 3: + { + _localctx = new ValueExpressionContext(_parentctx, _parentState); + _localctx._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); + this.state = 3048; + if (!(this.precpred(this._ctx, 4))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); + } + this.state = 3049; + _localctx._operator = this.match(SparkSqlParser.AMPERSAND); + this.state = 3050; + _localctx._right = this.valueExpression(5); + } + break; + + case 4: + { + _localctx = new ValueExpressionContext(_parentctx, _parentState); + _localctx._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); + this.state = 3051; + if (!(this.precpred(this._ctx, 3))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); + } + this.state = 3052; + _localctx._operator = this.match(SparkSqlParser.HAT); + this.state = 3053; + _localctx._right = this.valueExpression(4); + } + break; + + case 5: + { + _localctx = new ValueExpressionContext(_parentctx, _parentState); + _localctx._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); + this.state = 3054; + if (!(this.precpred(this._ctx, 2))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); + } + this.state = 3055; + _localctx._operator = this.match(SparkSqlParser.PIPE); + this.state = 3056; + _localctx._right = this.valueExpression(3); + } + break; + + case 6: + { + _localctx = new ValueExpressionContext(_parentctx, _parentState); + _localctx._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_valueExpression); + this.state = 3057; + if (!(this.precpred(this._ctx, 1))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); + } + this.state = 3058; + this.comparisonOperator(); + this.state = 3059; + _localctx._right = this.valueExpression(2); + } + break; } } } - this.state = 2800; + this.state = 3065; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 359, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 403, this._ctx); } } } @@ -11942,42 +12757,29 @@ export class SparkSqlParser extends Parser { } } finally { - this.exitRule(); + this.unrollRecursionContexts(_parentctx); } return _localctx; } // @RuleVersion(0) - public colType(): ColTypeContext { - let _localctx: ColTypeContext = new ColTypeContext(this._ctx, this.state); - this.enterRule(_localctx, 230, SparkSqlParser.RULE_colType); + public datetimeUnit(): DatetimeUnitContext { + let _localctx: DatetimeUnitContext = new DatetimeUnitContext(this._ctx, this.state); + this.enterRule(_localctx, 264, SparkSqlParser.RULE_datetimeUnit); + let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2801; - _localctx._colName = this.errorCapturingIdentifier(); - this.state = 2802; - this.dataType(); - this.state = 2805; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 360, this._ctx) ) { - case 1: - { - this.state = 2803; - this.match(SparkSqlParser.NOT); - this.state = 2804; - this.match(SparkSqlParser.NULL); - } - break; - } - this.state = 2808; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 361, this._ctx) ) { - case 1: - { - this.state = 2807; - this.commentSpec(); + this.state = 3066; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DAY || _la === SparkSqlParser.KW_DAYOFYEAR || _la === SparkSqlParser.KW_HOUR || ((((_la - 176)) & ~0x1F) === 0 && ((1 << (_la - 176)) & ((1 << (SparkSqlParser.KW_MICROSECOND - 176)) | (1 << (SparkSqlParser.KW_MILLISECOND - 176)) | (1 << (SparkSqlParser.KW_MINUTE - 176)) | (1 << (SparkSqlParser.KW_MONTH - 176)))) !== 0) || _la === SparkSqlParser.KW_QUARTER || _la === SparkSqlParser.KW_SECOND || _la === SparkSqlParser.KW_WEEK || _la === SparkSqlParser.KW_YEAR)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - break; + + this._errHandler.reportMatch(this); + this.consume(); } } } @@ -11995,575 +12797,882 @@ export class SparkSqlParser extends Parser { } return _localctx; } + + public primaryExpression(): PrimaryExpressionContext; + public primaryExpression(_p: number): PrimaryExpressionContext; // @RuleVersion(0) - public complexColTypeList(): ComplexColTypeListContext { - let _localctx: ComplexColTypeListContext = new ComplexColTypeListContext(this._ctx, this.state); - this.enterRule(_localctx, 232, SparkSqlParser.RULE_complexColTypeList); + public primaryExpression(_p?: number): PrimaryExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: PrimaryExpressionContext = new PrimaryExpressionContext(this._ctx, _parentState); + let _prevctx: PrimaryExpressionContext = _localctx; + let _startState: number = 266; + this.enterRecursionRule(_localctx, 266, SparkSqlParser.RULE_primaryExpression, _p); let _la: number; try { + let _alt: number; this.enterOuterAlt(_localctx, 1); { - this.state = 2810; - this.complexColType(); - this.state = 2815; + this.state = 3317; this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { + switch ( this.interpreter.adaptivePredict(this._input, 429, this._ctx) ) { + case 1: { - this.state = 2811; - this.match(SparkSqlParser.T__2); - this.state = 2812; - this.complexColType(); + this.state = 3069; + _localctx._name = this._input.LT(1); + _la = this._input.LA(1); + if (!(((((_la - 63)) & ~0x1F) === 0 && ((1 << (_la - 63)) & ((1 << (SparkSqlParser.KW_CURRENT_DATE - 63)) | (1 << (SparkSqlParser.KW_CURRENT_TIMESTAMP - 63)) | (1 << (SparkSqlParser.KW_CURRENT_USER - 63)))) !== 0) || _la === SparkSqlParser.KW_SESSION_USER || _la === SparkSqlParser.KW_USER)) { + _localctx._name = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); } } - this.state = 2817; - this._errHandler.sync(this); + break; + + case 2: + { + this.state = 3070; + _localctx._name = this._input.LT(1); _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 complexColType(): ComplexColTypeContext { - let _localctx: ComplexColTypeContext = new ComplexColTypeContext(this._ctx, this.state); - this.enterRule(_localctx, 234, SparkSqlParser.RULE_complexColType); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2818; - this.identifier(); - this.state = 2819; - this.match(SparkSqlParser.T__9); - this.state = 2820; - this.dataType(); - this.state = 2823; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.NOT) { - { - this.state = 2821; - this.match(SparkSqlParser.NOT); - this.state = 2822; - this.match(SparkSqlParser.NULL); + if (!(_la === SparkSqlParser.KW_DATEADD || _la === SparkSqlParser.KW_DATE_ADD || _la === SparkSqlParser.KW_TIMESTAMPADD)) { + _localctx._name = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); } - } + this.state = 3071; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3074; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 404, this._ctx) ) { + case 1: + { + this.state = 3072; + _localctx._unit = this.datetimeUnit(); + } + break; - this.state = 2826; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.COMMENT) { + case 2: + { + this.state = 3073; + _localctx._invalidUnit = this.stringLit(); + } + break; + } + this.state = 3076; + this.match(SparkSqlParser.COMMA); + this.state = 3077; + _localctx._unitsAmount = this.valueExpression(0); + this.state = 3078; + this.match(SparkSqlParser.COMMA); + this.state = 3079; + _localctx._timestamp = this.valueExpression(0); + this.state = 3080; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 3: { - this.state = 2825; - this.commentSpec(); + this.state = 3082; + _localctx._name = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DATEDIFF || _la === SparkSqlParser.KW_DATE_DIFF || _la === SparkSqlParser.KW_TIMEDIFF || _la === SparkSqlParser.KW_TIMESTAMPDIFF)) { + _localctx._name = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); } - } + this.state = 3083; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3086; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 405, this._ctx) ) { + case 1: + { + this.state = 3084; + _localctx._unit = this.datetimeUnit(); + } + 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 whenClause(): WhenClauseContext { - let _localctx: WhenClauseContext = new WhenClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 236, SparkSqlParser.RULE_whenClause); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2828; - this.match(SparkSqlParser.WHEN); - this.state = 2829; - _localctx._condition = this.expression(); - this.state = 2830; - this.match(SparkSqlParser.THEN); - this.state = 2831; - _localctx._result = this.expression(); - } - } - 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 windowClause(): WindowClauseContext { - let _localctx: WindowClauseContext = new WindowClauseContext(this._ctx, this.state); - this.enterRule(_localctx, 238, SparkSqlParser.RULE_windowClause); - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 2833; - this.match(SparkSqlParser.WINDOW); - this.state = 2834; - this.namedWindow(); - this.state = 2839; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 365, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { + case 2: + { + this.state = 3085; + _localctx._invalidUnit = this.stringLit(); + } + break; + } + this.state = 3088; + this.match(SparkSqlParser.COMMA); + this.state = 3089; + _localctx._startTimestamp = this.valueExpression(0); + this.state = 3090; + this.match(SparkSqlParser.COMMA); + this.state = 3091; + _localctx._endTimestamp = this.valueExpression(0); + this.state = 3092; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 4: + { + this.state = 3094; + this.match(SparkSqlParser.KW_CASE); + this.state = 3096; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { { { - this.state = 2835; - this.match(SparkSqlParser.T__2); - this.state = 2836; - this.namedWindow(); + this.state = 3095; + this.whenClause(); } } - } - this.state = 2841; + this.state = 3098; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === SparkSqlParser.KW_WHEN); + this.state = 3102; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 365, this._ctx); - } - } - } - 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 namedWindow(): NamedWindowContext { - let _localctx: NamedWindowContext = new NamedWindowContext(this._ctx, this.state); - this.enterRule(_localctx, 240, SparkSqlParser.RULE_namedWindow); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2842; - _localctx._name = this.errorCapturingIdentifier(); - this.state = 2843; - this.match(SparkSqlParser.AS); - this.state = 2844; - this.windowSpec(); - } - } - 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 windowSpec(): WindowSpecContext { - let _localctx: WindowSpecContext = new WindowSpecContext(this._ctx, this.state); - this.enterRule(_localctx, 242, SparkSqlParser.RULE_windowSpec); - let _la: number; - try { - this.state = 2892; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 373, this._ctx) ) { - case 1: - _localctx = new WindowRefContext(_localctx); - this.enterOuterAlt(_localctx, 1); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_ELSE) { + { + this.state = 3100; + this.match(SparkSqlParser.KW_ELSE); + this.state = 3101; + _localctx._elseExpression = this.expression(); + } + } + + this.state = 3104; + this.match(SparkSqlParser.KW_END); + } + break; + + case 5: { - this.state = 2846; - (_localctx as WindowRefContext)._name = this.errorCapturingIdentifier(); + this.state = 3106; + this.match(SparkSqlParser.KW_CASE); + this.state = 3107; + this.expression(); + this.state = 3109; + this._errHandler.sync(this); + _la = this._input.LA(1); + do { + { + { + this.state = 3108; + this.whenClause(); + } + } + this.state = 3111; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === SparkSqlParser.KW_WHEN); + this.state = 3115; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_ELSE) { + { + this.state = 3113; + this.match(SparkSqlParser.KW_ELSE); + this.state = 3114; + _localctx._elseExpression = this.expression(); + } + } + + this.state = 3117; + this.match(SparkSqlParser.KW_END); } break; - case 2: - _localctx = new WindowRefContext(_localctx); - this.enterOuterAlt(_localctx, 2); + case 6: { - this.state = 2847; - this.match(SparkSqlParser.T__0); - this.state = 2848; - (_localctx as WindowRefContext)._name = this.errorCapturingIdentifier(); - this.state = 2849; - this.match(SparkSqlParser.T__1); + this.state = 3119; + _localctx._name = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_CAST || _la === SparkSqlParser.KW_TRY_CAST)) { + _localctx._name = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3120; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3121; + this.expression(); + this.state = 3122; + this.match(SparkSqlParser.KW_AS); + this.state = 3123; + this.dataType(); + this.state = 3124; + this.match(SparkSqlParser.RIGHT_PAREN); } break; - case 3: - _localctx = new WindowDefContext(_localctx); - this.enterOuterAlt(_localctx, 3); + case 7: { - this.state = 2851; - this.match(SparkSqlParser.T__0); - this.state = 2886; + this.state = 3126; + this.match(SparkSqlParser.KW_STRUCT); + this.state = 3127; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3136; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.CLUSTER: - { - this.state = 2852; - this.match(SparkSqlParser.CLUSTER); - this.state = 2853; - this.match(SparkSqlParser.BY); - this.state = 2854; - (_localctx as WindowDefContext)._expression = this.expression(); - (_localctx as WindowDefContext)._partition.push((_localctx as WindowDefContext)._expression); - this.state = 2859; + switch ( this.interpreter.adaptivePredict(this._input, 411, this._ctx) ) { + case 1: + { + this.state = 3128; + this.namedExpression(); + this.state = 3133; this._errHandler.sync(this); _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { + while (_la === SparkSqlParser.COMMA) { { { - this.state = 2855; - this.match(SparkSqlParser.T__2); - this.state = 2856; - (_localctx as WindowDefContext)._expression = this.expression(); - (_localctx as WindowDefContext)._partition.push((_localctx as WindowDefContext)._expression); + this.state = 3129; + this.match(SparkSqlParser.COMMA); + this.state = 3130; + this.namedExpression(); } } - this.state = 2861; + this.state = 3135; this._errHandler.sync(this); _la = this._input.LA(1); } } break; - case SparkSqlParser.T__1: - case SparkSqlParser.DISTRIBUTE: - case SparkSqlParser.ORDER: - case SparkSqlParser.PARTITION: - case SparkSqlParser.RANGE: - case SparkSqlParser.ROWS: - case SparkSqlParser.SORT: - { - this.state = 2872; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.DISTRIBUTE || _la === SparkSqlParser.PARTITION) { - { - this.state = 2862; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DISTRIBUTE || _la === SparkSqlParser.PARTITION)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + } + this.state = 3138; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2863; - this.match(SparkSqlParser.BY); - this.state = 2864; - (_localctx as WindowDefContext)._expression = this.expression(); - (_localctx as WindowDefContext)._partition.push((_localctx as WindowDefContext)._expression); - this.state = 2869; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 2865; - this.match(SparkSqlParser.T__2); - this.state = 2866; - (_localctx as WindowDefContext)._expression = this.expression(); - (_localctx as WindowDefContext)._partition.push((_localctx as WindowDefContext)._expression); - } - } - this.state = 2871; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } + case 8: + { + this.state = 3139; + this.match(SparkSqlParser.KW_FIRST); + this.state = 3140; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3141; + this.expression(); + this.state = 3144; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_IGNORE) { + { + this.state = 3142; + this.match(SparkSqlParser.KW_IGNORE); + this.state = 3143; + this.match(SparkSqlParser.KW_NULLS); } + } - this.state = 2884; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.ORDER || _la === SparkSqlParser.SORT) { - { - this.state = 2874; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.ORDER || _la === SparkSqlParser.SORT)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 3146; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 2875; - this.match(SparkSqlParser.BY); - this.state = 2876; - this.sortItem(); - this.state = 2881; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { - { - this.state = 2877; - this.match(SparkSqlParser.T__2); - this.state = 2878; - this.sortItem(); - } - } - this.state = 2883; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - } + case 9: + { + this.state = 3148; + this.match(SparkSqlParser.KW_ANY_VALUE); + this.state = 3149; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3150; + this.expression(); + this.state = 3153; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_IGNORE) { + { + this.state = 3151; + this.match(SparkSqlParser.KW_IGNORE); + this.state = 3152; + this.match(SparkSqlParser.KW_NULLS); } + } - } - break; - default: - throw new NoViableAltException(this); + this.state = 3155; + this.match(SparkSqlParser.RIGHT_PAREN); } - this.state = 2889; + break; + + case 10: + { + this.state = 3157; + this.match(SparkSqlParser.KW_LAST); + this.state = 3158; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3159; + this.expression(); + this.state = 3162; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la === SparkSqlParser.RANGE || _la === SparkSqlParser.ROWS) { + if (_la === SparkSqlParser.KW_IGNORE) { { - this.state = 2888; - this.windowFrame(); + this.state = 3160; + this.match(SparkSqlParser.KW_IGNORE); + this.state = 3161; + this.match(SparkSqlParser.KW_NULLS); } } - this.state = 2891; - this.match(SparkSqlParser.T__1); + this.state = 3164; + this.match(SparkSqlParser.RIGHT_PAREN); } 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 windowFrame(): WindowFrameContext { - let _localctx: WindowFrameContext = new WindowFrameContext(this._ctx, this.state); - this.enterRule(_localctx, 244, SparkSqlParser.RULE_windowFrame); - try { - this.state = 2910; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 374, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); + + case 11: { - this.state = 2894; - _localctx._frameType = this.match(SparkSqlParser.RANGE); - this.state = 2895; - _localctx._frameStart = this.frameBound(); + this.state = 3166; + this.match(SparkSqlParser.KW_POSITION); + this.state = 3167; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3168; + _localctx._substr = this.valueExpression(0); + this.state = 3169; + this.match(SparkSqlParser.KW_IN); + this.state = 3170; + _localctx._str = this.valueExpression(0); + this.state = 3171; + this.match(SparkSqlParser.RIGHT_PAREN); } break; - case 2: - this.enterOuterAlt(_localctx, 2); + case 12: { - this.state = 2896; - _localctx._frameType = this.match(SparkSqlParser.ROWS); - this.state = 2897; - _localctx._frameStart = this.frameBound(); + this.state = 3173; + this.constant(); } break; - case 3: - this.enterOuterAlt(_localctx, 3); + case 13: { - this.state = 2898; - _localctx._frameType = this.match(SparkSqlParser.RANGE); - this.state = 2899; - this.match(SparkSqlParser.BETWEEN); - this.state = 2900; - _localctx._frameStart = this.frameBound(); - this.state = 2901; - this.match(SparkSqlParser.AND); - this.state = 2902; - _localctx._end = this.frameBound(); + this.state = 3174; + this.match(SparkSqlParser.ASTERISK); } break; - case 4: - this.enterOuterAlt(_localctx, 4); + case 14: { - this.state = 2904; - _localctx._frameType = this.match(SparkSqlParser.ROWS); - this.state = 2905; - this.match(SparkSqlParser.BETWEEN); - this.state = 2906; - _localctx._frameStart = this.frameBound(); - this.state = 2907; - this.match(SparkSqlParser.AND); - this.state = 2908; - _localctx._end = this.frameBound(); + this.state = 3175; + this.qualifiedName(); + this.state = 3176; + this.match(SparkSqlParser.DOT); + this.state = 3177; + this.match(SparkSqlParser.ASTERISK); } 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 frameBound(): FrameBoundContext { - let _localctx: FrameBoundContext = new FrameBoundContext(this._ctx, this.state); - this.enterRule(_localctx, 246, SparkSqlParser.RULE_frameBound); - let _la: number; - try { - this.state = 2919; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 375, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); + + case 15: { - this.state = 2912; - this.match(SparkSqlParser.UNBOUNDED); - this.state = 2913; - _localctx._boundType = this._input.LT(1); + this.state = 3179; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3180; + this.namedExpression(); + this.state = 3183; + this._errHandler.sync(this); _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FOLLOWING || _la === SparkSqlParser.PRECEDING)) { - _localctx._boundType = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + do { + { + { + this.state = 3181; + this.match(SparkSqlParser.COMMA); + this.state = 3182; + this.namedExpression(); } - - this._errHandler.reportMatch(this); - this.consume(); - } + } + this.state = 3185; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === SparkSqlParser.COMMA); + this.state = 3187; + this.match(SparkSqlParser.RIGHT_PAREN); } break; - case 2: - this.enterOuterAlt(_localctx, 2); + case 16: { - this.state = 2914; - _localctx._boundType = this.match(SparkSqlParser.CURRENT); - this.state = 2915; - this.match(SparkSqlParser.ROW); + this.state = 3189; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3190; + this.query(); + this.state = 3191; + this.match(SparkSqlParser.RIGHT_PAREN); } break; - case 3: - this.enterOuterAlt(_localctx, 3); + case 17: { - this.state = 2916; + this.state = 3193; + this.match(SparkSqlParser.KW_IDENTIFIER_KW); + this.state = 3194; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3195; this.expression(); - this.state = 2917; - _localctx._boundType = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.FOLLOWING || _la === SparkSqlParser.PRECEDING)) { - _localctx._boundType = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + this.state = 3196; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 18: + { + this.state = 3198; + this.functionName(); + this.state = 3199; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3211; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 418, this._ctx) ) { + case 1: + { + this.state = 3201; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 416, this._ctx) ) { + case 1: + { + this.state = 3200; + this.setQuantifier(); + } + break; + } + this.state = 3203; + this.functionArgument(); + this.state = 3208; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3204; + this.match(SparkSqlParser.COMMA); + this.state = 3205; + this.functionArgument(); + } + } + this.state = 3210; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + } + this.state = 3213; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 3220; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 419, this._ctx) ) { + case 1: + { + this.state = 3214; + this.match(SparkSqlParser.KW_FILTER); + this.state = 3215; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3216; + this.match(SparkSqlParser.KW_WHERE); + this.state = 3217; + _localctx._where = this.booleanExpression(0); + this.state = 3218; + this.match(SparkSqlParser.RIGHT_PAREN); } + break; + } + this.state = 3224; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 420, this._ctx) ) { + case 1: + { + this.state = 3222; + _localctx._nullsOption = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_IGNORE || _la === SparkSqlParser.KW_RESPECT)) { + _localctx._nullsOption = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3223; + this.match(SparkSqlParser.KW_NULLS); + } + break; + } + this.state = 3228; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 421, this._ctx) ) { + case 1: + { + this.state = 3226; + this.match(SparkSqlParser.KW_OVER); + this.state = 3227; + this.windowSpec(); + } + break; } } 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 qualifiedNameList(): QualifiedNameListContext { - let _localctx: QualifiedNameListContext = new QualifiedNameListContext(this._ctx, this.state); - this.enterRule(_localctx, 248, SparkSqlParser.RULE_qualifiedNameList); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2921; - this.qualifiedName(); - this.state = 2926; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === SparkSqlParser.T__2) { - { + + case 19: { - this.state = 2922; - this.match(SparkSqlParser.T__2); - this.state = 2923; - this.qualifiedName(); - } + this.state = 3230; + this.identifier(); + this.state = 3231; + this.match(SparkSqlParser.ARROW); + this.state = 3232; + this.expression(); } - this.state = 2928; + break; + + case 20: + { + this.state = 3234; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3235; + this.identifier(); + this.state = 3238; this._errHandler.sync(this); _la = this._input.LA(1); + do { + { + { + this.state = 3236; + this.match(SparkSqlParser.COMMA); + this.state = 3237; + this.identifier(); + } + } + this.state = 3240; + this._errHandler.sync(this); + _la = this._input.LA(1); + } while (_la === SparkSqlParser.COMMA); + this.state = 3242; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 3243; + this.match(SparkSqlParser.ARROW); + this.state = 3244; + this.expression(); + } + break; + + case 21: + { + this.state = 3246; + this.identifier(); + } + break; + + case 22: + { + this.state = 3247; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3248; + this.expression(); + this.state = 3249; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 23: + { + this.state = 3251; + this.match(SparkSqlParser.KW_EXTRACT); + this.state = 3252; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3253; + _localctx._field = this.identifier(); + this.state = 3254; + this.match(SparkSqlParser.KW_FROM); + this.state = 3255; + _localctx._source = this.valueExpression(0); + this.state = 3256; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 24: + { + this.state = 3258; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_SUBSTR || _la === SparkSqlParser.KW_SUBSTRING)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3259; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3260; + _localctx._str = this.valueExpression(0); + this.state = 3261; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.COMMA || _la === SparkSqlParser.KW_FROM)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3262; + _localctx._pos = this.valueExpression(0); + this.state = 3265; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.COMMA || _la === SparkSqlParser.KW_FOR) { + { + this.state = 3263; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.COMMA || _la === SparkSqlParser.KW_FOR)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3264; + _localctx._len = this.valueExpression(0); + } + } + + this.state = 3267; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 25: + { + this.state = 3269; + this.match(SparkSqlParser.KW_TRIM); + this.state = 3270; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3272; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 424, this._ctx) ) { + case 1: + { + this.state = 3271; + _localctx._trimOption = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_BOTH || _la === SparkSqlParser.KW_LEADING || _la === SparkSqlParser.KW_TRAILING)) { + _localctx._trimOption = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 3275; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 425, this._ctx) ) { + case 1: + { + this.state = 3274; + _localctx._trimStr = this.valueExpression(0); + } + break; + } + this.state = 3277; + this.match(SparkSqlParser.KW_FROM); + this.state = 3278; + _localctx._srcStr = this.valueExpression(0); + this.state = 3279; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 26: + { + this.state = 3281; + this.match(SparkSqlParser.KW_OVERLAY); + this.state = 3282; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3283; + _localctx._input = this.valueExpression(0); + this.state = 3284; + this.match(SparkSqlParser.KW_PLACING); + this.state = 3285; + _localctx._replace = this.valueExpression(0); + this.state = 3286; + this.match(SparkSqlParser.KW_FROM); + this.state = 3287; + _localctx._position = this.valueExpression(0); + this.state = 3290; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_FOR) { + { + this.state = 3288; + this.match(SparkSqlParser.KW_FOR); + this.state = 3289; + _localctx._length = this.valueExpression(0); + } + } + + this.state = 3292; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 27: + { + this.state = 3294; + _localctx._name = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_PERCENTILE_CONT || _la === SparkSqlParser.KW_PERCENTILE_DISC)) { + _localctx._name = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3295; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3296; + _localctx._percentage = this.valueExpression(0); + this.state = 3297; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 3298; + this.match(SparkSqlParser.KW_WITHIN); + this.state = 3299; + this.match(SparkSqlParser.KW_GROUP); + this.state = 3300; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3301; + this.match(SparkSqlParser.KW_ORDER); + this.state = 3302; + this.match(SparkSqlParser.KW_BY); + this.state = 3303; + this.sortItem(); + this.state = 3304; + this.match(SparkSqlParser.RIGHT_PAREN); + this.state = 3311; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 427, this._ctx) ) { + case 1: + { + this.state = 3305; + this.match(SparkSqlParser.KW_FILTER); + this.state = 3306; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3307; + this.match(SparkSqlParser.KW_WHERE); + this.state = 3308; + _localctx._where = this.booleanExpression(0); + this.state = 3309; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + } + this.state = 3315; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 428, this._ctx) ) { + case 1: + { + this.state = 3313; + this.match(SparkSqlParser.KW_OVER); + this.state = 3314; + this.windowSpec(); + } + break; + } + } + break; + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 3329; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 431, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + this.state = 3327; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 430, this._ctx) ) { + case 1: + { + _localctx = new PrimaryExpressionContext(_parentctx, _parentState); + _localctx._value = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_primaryExpression); + this.state = 3319; + if (!(this.precpred(this._ctx, 9))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 9)"); + } + this.state = 3320; + this.match(SparkSqlParser.LEFT_BRACKET); + this.state = 3321; + _localctx._index = this.valueExpression(0); + this.state = 3322; + this.match(SparkSqlParser.RIGHT_BRACKET); + } + break; + + case 2: + { + _localctx = new PrimaryExpressionContext(_parentctx, _parentState); + _localctx._base = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, SparkSqlParser.RULE_primaryExpression); + this.state = 3324; + if (!(this.precpred(this._ctx, 7))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 7)"); + } + this.state = 3325; + this.match(SparkSqlParser.DOT); + this.state = 3326; + _localctx._fieldName = this.identifier(); + } + break; + } + } + } + this.state = 3331; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 431, this._ctx); } } } @@ -12577,120 +13686,73 @@ export class SparkSqlParser extends Parser { } } finally { - this.exitRule(); + this.unrollRecursionContexts(_parentctx); } return _localctx; } // @RuleVersion(0) - public functionName(): FunctionNameContext { - let _localctx: FunctionNameContext = new FunctionNameContext(this._ctx, this.state); - this.enterRule(_localctx, 250, SparkSqlParser.RULE_functionName); + public literalType(): LiteralTypeContext { + let _localctx: LiteralTypeContext = new LiteralTypeContext(this._ctx, this.state); + this.enterRule(_localctx, 268, SparkSqlParser.RULE_literalType); try { - this.state = 2933; + this.state = 3339; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 377, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 432, this._ctx) ) { case 1: this.enterOuterAlt(_localctx, 1); { - this.state = 2929; - this.qualifiedName(); + this.state = 3332; + this.match(SparkSqlParser.KW_DATE); } break; case 2: this.enterOuterAlt(_localctx, 2); { - this.state = 2930; - this.match(SparkSqlParser.FILTER); + this.state = 3333; + this.match(SparkSqlParser.KW_TIMESTAMP); } break; case 3: this.enterOuterAlt(_localctx, 3); { - this.state = 2931; - this.match(SparkSqlParser.LEFT); + this.state = 3334; + this.match(SparkSqlParser.KW_TIMESTAMP_LTZ); } break; case 4: this.enterOuterAlt(_localctx, 4); { - this.state = 2932; - this.match(SparkSqlParser.RIGHT); + this.state = 3335; + this.match(SparkSqlParser.KW_TIMESTAMP_NTZ); } 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 qualifiedName(): QualifiedNameContext { - let _localctx: QualifiedNameContext = new QualifiedNameContext(this._ctx, this.state); - this.enterRule(_localctx, 252, SparkSqlParser.RULE_qualifiedName); - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 2935; - this.identifier(); - this.state = 2940; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 378, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 2936; - this.match(SparkSqlParser.T__3); - this.state = 2937; - this.identifier(); - } - } + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 3336; + this.match(SparkSqlParser.KW_INTERVAL); } - this.state = 2942; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 378, this._ctx); - } - } - } - 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 errorCapturingIdentifier(): ErrorCapturingIdentifierContext { - let _localctx: ErrorCapturingIdentifierContext = new ErrorCapturingIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 254, SparkSqlParser.RULE_errorCapturingIdentifier); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 2943; - this.identifier(); - this.state = 2944; - this.errorCapturingIdentifierExtra(); + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 3337; + this.match(SparkSqlParser.KW_BINARY_HEX); + } + break; + + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 3338; + _localctx._unsupportedType = this.identifier(); + } + break; } } catch (re) { @@ -12708,50 +13770,99 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public errorCapturingIdentifierExtra(): ErrorCapturingIdentifierExtraContext { - let _localctx: ErrorCapturingIdentifierExtraContext = new ErrorCapturingIdentifierExtraContext(this._ctx, this.state); - this.enterRule(_localctx, 256, SparkSqlParser.RULE_errorCapturingIdentifierExtra); + public constant(): ConstantContext { + let _localctx: ConstantContext = new ConstantContext(this._ctx, this.state); + this.enterRule(_localctx, 270, SparkSqlParser.RULE_constant); try { let _alt: number; - this.state = 2953; + this.state = 3356; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 380, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 434, this._ctx) ) { case 1: - _localctx = new ErrorIdentContext(_localctx); this.enterOuterAlt(_localctx, 1); { - this.state = 2948; - this._errHandler.sync(this); - _alt = 1; - do { - switch (_alt) { + this.state = 3341; + this.match(SparkSqlParser.KW_NULL); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3342; + this.match(SparkSqlParser.QUESTION); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3343; + this.match(SparkSqlParser.COLON); + this.state = 3344; + this.identifier(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3345; + this.interval(); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 3346; + this.literalType(); + this.state = 3347; + this.stringLit(); + } + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 3349; + this.number(); + } + break; + + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 3350; + this.booleanValue(); + } + break; + + case 8: + this.enterOuterAlt(_localctx, 8); + { + this.state = 3352; + this._errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { case 1: { { - this.state = 2946; - this.match(SparkSqlParser.MINUS); - this.state = 2947; - this.identifier(); + this.state = 3351; + this.stringLit(); } } break; default: throw new NoViableAltException(this); } - this.state = 2950; + this.state = 3354; this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 379, this._ctx); + _alt = this.interpreter.adaptivePredict(this._input, 433, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } break; - - case 2: - _localctx = new RealIdentContext(_localctx); - this.enterOuterAlt(_localctx, 2); - // tslint:disable-next-line:no-empty - { - } - break; } } catch (re) { @@ -12769,32 +13880,25 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public identifier(): IdentifierContext { - let _localctx: IdentifierContext = new IdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 258, SparkSqlParser.RULE_identifier); + public comparisonOperator(): ComparisonOperatorContext { + let _localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this._ctx, this.state); + this.enterRule(_localctx, 272, SparkSqlParser.RULE_comparisonOperator); + let _la: number; try { - this.state = 2958; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 381, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 2955; - this.strictIdentifier(); + this.enterOuterAlt(_localctx, 1); + { + this.state = 3358; + _la = this._input.LA(1); + if (!(((((_la - 342)) & ~0x1F) === 0 && ((1 << (_la - 342)) & ((1 << (SparkSqlParser.EQ - 342)) | (1 << (SparkSqlParser.NSEQ - 342)) | (1 << (SparkSqlParser.NEQ - 342)) | (1 << (SparkSqlParser.NEQJ - 342)) | (1 << (SparkSqlParser.LT - 342)) | (1 << (SparkSqlParser.LTE - 342)) | (1 << (SparkSqlParser.GT - 342)) | (1 << (SparkSqlParser.GTE - 342)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - break; - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 2956; - if (!(!this.SQL_standard_keyword_behavior)) { - throw this.createFailedPredicateException("!this.SQL_standard_keyword_behavior"); - } - this.state = 2957; - this.strictNonReserved(); - } - break; + this._errHandler.reportMatch(this); + this.consume(); + } } } catch (re) { @@ -12812,56 +13916,61 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public strictIdentifier(): StrictIdentifierContext { - let _localctx: StrictIdentifierContext = new StrictIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 260, SparkSqlParser.RULE_strictIdentifier); + public arithmeticOperator(): ArithmeticOperatorContext { + let _localctx: ArithmeticOperatorContext = new ArithmeticOperatorContext(this._ctx, this.state); + this.enterRule(_localctx, 274, SparkSqlParser.RULE_arithmeticOperator); + let _la: number; try { - this.state = 2966; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 382, this._ctx) ) { - case 1: - _localctx = new UnquotedIdentifierContext(_localctx); - this.enterOuterAlt(_localctx, 1); - { - this.state = 2960; - this.match(SparkSqlParser.IDENTIFIER); - } - break; - - case 2: - _localctx = new QuotedIdentifierAlternativeContext(_localctx); - this.enterOuterAlt(_localctx, 2); - { - this.state = 2961; - this.quotedIdentifier(); + this.enterOuterAlt(_localctx, 1); + { + this.state = 3360; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DIV || ((((_la - 350)) & ~0x1F) === 0 && ((1 << (_la - 350)) & ((1 << (SparkSqlParser.PLUS - 350)) | (1 << (SparkSqlParser.MINUS - 350)) | (1 << (SparkSqlParser.ASTERISK - 350)) | (1 << (SparkSqlParser.SLASH - 350)) | (1 << (SparkSqlParser.PERCENT - 350)) | (1 << (SparkSqlParser.TILDE - 350)) | (1 << (SparkSqlParser.AMPERSAND - 350)) | (1 << (SparkSqlParser.PIPE - 350)) | (1 << (SparkSqlParser.CONCAT_PIPE - 350)) | (1 << (SparkSqlParser.HAT - 350)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - break; - case 3: - _localctx = new UnquotedIdentifierContext(_localctx); - this.enterOuterAlt(_localctx, 3); - { - this.state = 2962; - if (!(this.SQL_standard_keyword_behavior)) { - throw this.createFailedPredicateException("this.SQL_standard_keyword_behavior"); - } - this.state = 2963; - this.ansiNonReserved(); + 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 predicateOperator(): PredicateOperatorContext { + let _localctx: PredicateOperatorContext = new PredicateOperatorContext(this._ctx, this.state); + this.enterRule(_localctx, 276, SparkSqlParser.RULE_predicateOperator); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3362; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_AND || _la === SparkSqlParser.KW_IN || _la === SparkSqlParser.KW_NOT || _la === SparkSqlParser.KW_OR)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; } - break; - case 4: - _localctx = new UnquotedIdentifierContext(_localctx); - this.enterOuterAlt(_localctx, 4); - { - this.state = 2964; - if (!(!this.SQL_standard_keyword_behavior)) { - throw this.createFailedPredicateException("!this.SQL_standard_keyword_behavior"); - } - this.state = 2965; - this.nonReserved(); - } - break; + this._errHandler.reportMatch(this); + this.consume(); + } } } catch (re) { @@ -12879,14 +13988,25 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public quotedIdentifier(): QuotedIdentifierContext { - let _localctx: QuotedIdentifierContext = new QuotedIdentifierContext(this._ctx, this.state); - this.enterRule(_localctx, 262, SparkSqlParser.RULE_quotedIdentifier); + public booleanValue(): BooleanValueContext { + let _localctx: BooleanValueContext = new BooleanValueContext(this._ctx, this.state); + this.enterRule(_localctx, 278, SparkSqlParser.RULE_booleanValue); + let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 2968; - this.match(SparkSqlParser.BACKQUOTED_IDENTIFIER); + this.state = 3364; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_FALSE || _la === SparkSqlParser.KW_TRUE)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } } } catch (re) { @@ -12904,226 +14024,67 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public number(): NumberContext { - let _localctx: NumberContext = new NumberContext(this._ctx, this.state); - this.enterRule(_localctx, 264, SparkSqlParser.RULE_number); - let _la: number; + public interval(): IntervalContext { + let _localctx: IntervalContext = new IntervalContext(this._ctx, this.state); + this.enterRule(_localctx, 280, SparkSqlParser.RULE_interval); try { - this.state = 3013; + this.enterOuterAlt(_localctx, 1); + { + this.state = 3366; + this.match(SparkSqlParser.KW_INTERVAL); + this.state = 3369; this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 393, this._ctx) ) { + switch ( this.interpreter.adaptivePredict(this._input, 435, this._ctx) ) { case 1: - _localctx = new ExponentLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 1); { - this.state = 2970; - if (!(!this.legacy_exponent_literal_as_decimal_enabled)) { - throw this.createFailedPredicateException("!this.legacy_exponent_literal_as_decimal_enabled"); - } - this.state = 2972; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 2971; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 2974; - this.match(SparkSqlParser.EXPONENT_VALUE); + this.state = 3367; + this.errorCapturingMultiUnitsInterval(); } break; case 2: - _localctx = new DecimalLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 2); { - this.state = 2975; - if (!(!this.legacy_exponent_literal_as_decimal_enabled)) { - throw this.createFailedPredicateException("!this.legacy_exponent_literal_as_decimal_enabled"); - } - this.state = 2977; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 2976; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 2979; - this.match(SparkSqlParser.DECIMAL_VALUE); + this.state = 3368; + this.errorCapturingUnitToUnitInterval(); } break; - - case 3: - _localctx = new LegacyDecimalLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 3); + } + } + } + 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 errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext { + let _localctx: ErrorCapturingMultiUnitsIntervalContext = new ErrorCapturingMultiUnitsIntervalContext(this._ctx, this.state); + this.enterRule(_localctx, 282, SparkSqlParser.RULE_errorCapturingMultiUnitsInterval); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3371; + _localctx._body = this.multiUnitsInterval(); + this.state = 3373; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 436, this._ctx) ) { + case 1: { - this.state = 2980; - if (!(this.legacy_exponent_literal_as_decimal_enabled)) { - throw this.createFailedPredicateException("this.legacy_exponent_literal_as_decimal_enabled"); - } - this.state = 2982; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 2981; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 2984; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.EXPONENT_VALUE || _la === SparkSqlParser.DECIMAL_VALUE)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - break; - - case 4: - _localctx = new IntegerLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 4); - { - this.state = 2986; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 2985; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 2988; - this.match(SparkSqlParser.INTEGER_VALUE); - } - break; - - case 5: - _localctx = new BigIntLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 5); - { - this.state = 2990; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 2989; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 2992; - this.match(SparkSqlParser.BIGINT_LITERAL); - } - break; - - case 6: - _localctx = new SmallIntLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 6); - { - this.state = 2994; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 2993; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 2996; - this.match(SparkSqlParser.SMALLINT_LITERAL); - } - break; - - case 7: - _localctx = new TinyIntLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 7); - { - this.state = 2998; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 2997; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3000; - this.match(SparkSqlParser.TINYINT_LITERAL); - } - break; - - case 8: - _localctx = new DoubleLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 8); - { - this.state = 3002; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 3001; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3004; - this.match(SparkSqlParser.DOUBLE_LITERAL); - } - break; - - case 9: - _localctx = new FloatLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 9); - { - this.state = 3006; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 3005; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3008; - this.match(SparkSqlParser.FLOAT_LITERAL); - } - break; - - case 10: - _localctx = new BigDecimalLiteralContext(_localctx); - this.enterOuterAlt(_localctx, 10); - { - this.state = 3010; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === SparkSqlParser.MINUS) { - { - this.state = 3009; - this.match(SparkSqlParser.MINUS); - } - } - - this.state = 3012; - this.match(SparkSqlParser.BIGDECIMAL_LITERAL); + this.state = 3372; + this.unitToUnitInterval(); } break; } + } } catch (re) { if (re instanceof RecognitionException) { @@ -13140,63 +14101,36 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public alterColumnAction(): AlterColumnActionContext { - let _localctx: AlterColumnActionContext = new AlterColumnActionContext(this._ctx, this.state); - this.enterRule(_localctx, 266, SparkSqlParser.RULE_alterColumnAction); - let _la: number; + public multiUnitsInterval(): MultiUnitsIntervalContext { + let _localctx: MultiUnitsIntervalContext = new MultiUnitsIntervalContext(this._ctx, this.state); + this.enterRule(_localctx, 284, SparkSqlParser.RULE_multiUnitsInterval); try { - this.state = 3022; + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 3378; this._errHandler.sync(this); - switch (this._input.LA(1)) { - case SparkSqlParser.TYPE: - this.enterOuterAlt(_localctx, 1); - { - this.state = 3015; - this.match(SparkSqlParser.TYPE); - this.state = 3016; - this.dataType(); - } - break; - case SparkSqlParser.COMMENT: - this.enterOuterAlt(_localctx, 2); - { - this.state = 3017; - this.commentSpec(); - } - break; - case SparkSqlParser.AFTER: - case SparkSqlParser.FIRST: - this.enterOuterAlt(_localctx, 3); - { - this.state = 3018; - this.colPosition(); - } - break; - case SparkSqlParser.DROP: - case SparkSqlParser.SET: - this.enterOuterAlt(_localctx, 4); - { - this.state = 3019; - _localctx._setOrDrop = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.DROP || _la === SparkSqlParser.SET)) { - _localctx._setOrDrop = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 3375; + this.intervalValue(); + this.state = 3376; + _localctx._unitInMultiUnits = this.unitInMultiUnits(); + _localctx._unit.push(_localctx._unitInMultiUnits); } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 3020; - this.match(SparkSqlParser.NOT); - this.state = 3021; - this.match(SparkSqlParser.NULL); + } + break; + default: + throw new NoViableAltException(this); } - break; - default: - throw new NoViableAltException(this); + this.state = 3380; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 437, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } } catch (re) { @@ -13214,24 +14148,30 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public ansiNonReserved(): AnsiNonReservedContext { - let _localctx: AnsiNonReservedContext = new AnsiNonReservedContext(this._ctx, this.state); - this.enterRule(_localctx, 268, SparkSqlParser.RULE_ansiNonReserved); - let _la: number; + public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext { + let _localctx: ErrorCapturingUnitToUnitIntervalContext = new ErrorCapturingUnitToUnitIntervalContext(this._ctx, this.state); + this.enterRule(_localctx, 286, SparkSqlParser.RULE_errorCapturingUnitToUnitInterval); try { this.enterOuterAlt(_localctx, 1); { - this.state = 3024; - _la = this._input.LA(1); - if (!(((((_la - 11)) & ~0x1F) === 0 && ((1 << (_la - 11)) & ((1 << (SparkSqlParser.ADD - 11)) | (1 << (SparkSqlParser.AFTER - 11)) | (1 << (SparkSqlParser.ALTER - 11)) | (1 << (SparkSqlParser.ANALYZE - 11)) | (1 << (SparkSqlParser.ANTI - 11)) | (1 << (SparkSqlParser.ARCHIVE - 11)) | (1 << (SparkSqlParser.ARRAY - 11)) | (1 << (SparkSqlParser.ASC - 11)) | (1 << (SparkSqlParser.AT - 11)) | (1 << (SparkSqlParser.BETWEEN - 11)) | (1 << (SparkSqlParser.BUCKET - 11)) | (1 << (SparkSqlParser.BUCKETS - 11)) | (1 << (SparkSqlParser.BY - 11)) | (1 << (SparkSqlParser.CACHE - 11)) | (1 << (SparkSqlParser.CASCADE - 11)) | (1 << (SparkSqlParser.CHANGE - 11)) | (1 << (SparkSqlParser.CLEAR - 11)) | (1 << (SparkSqlParser.CLUSTER - 11)) | (1 << (SparkSqlParser.CLUSTERED - 11)) | (1 << (SparkSqlParser.CODEGEN - 11)) | (1 << (SparkSqlParser.COLLECTION - 11)))) !== 0) || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & ((1 << (SparkSqlParser.COLUMNS - 43)) | (1 << (SparkSqlParser.COMMENT - 43)) | (1 << (SparkSqlParser.COMMIT - 43)) | (1 << (SparkSqlParser.COMPACT - 43)) | (1 << (SparkSqlParser.COMPACTIONS - 43)) | (1 << (SparkSqlParser.COMPUTE - 43)) | (1 << (SparkSqlParser.CONCATENATE - 43)) | (1 << (SparkSqlParser.COST - 43)) | (1 << (SparkSqlParser.CUBE - 43)) | (1 << (SparkSqlParser.CURRENT - 43)) | (1 << (SparkSqlParser.DATA - 43)) | (1 << (SparkSqlParser.DATABASE - 43)) | (1 << (SparkSqlParser.DATABASES - 43)) | (1 << (SparkSqlParser.DBPROPERTIES - 43)) | (1 << (SparkSqlParser.DEFINED - 43)) | (1 << (SparkSqlParser.DELETE - 43)) | (1 << (SparkSqlParser.DELIMITED - 43)) | (1 << (SparkSqlParser.DESC - 43)) | (1 << (SparkSqlParser.DESCRIBE - 43)) | (1 << (SparkSqlParser.DFS - 43)) | (1 << (SparkSqlParser.DIRECTORIES - 43)) | (1 << (SparkSqlParser.DIRECTORY - 43)) | (1 << (SparkSqlParser.DISTRIBUTE - 43)) | (1 << (SparkSqlParser.DIV - 43)))) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & ((1 << (SparkSqlParser.DROP - 75)) | (1 << (SparkSqlParser.ESCAPED - 75)) | (1 << (SparkSqlParser.EXCHANGE - 75)) | (1 << (SparkSqlParser.EXISTS - 75)) | (1 << (SparkSqlParser.EXPLAIN - 75)) | (1 << (SparkSqlParser.EXPORT - 75)) | (1 << (SparkSqlParser.EXTENDED - 75)) | (1 << (SparkSqlParser.EXTERNAL - 75)) | (1 << (SparkSqlParser.EXTRACT - 75)) | (1 << (SparkSqlParser.FIELDS - 75)) | (1 << (SparkSqlParser.FILEFORMAT - 75)) | (1 << (SparkSqlParser.FIRST - 75)) | (1 << (SparkSqlParser.FOLLOWING - 75)) | (1 << (SparkSqlParser.FORMAT - 75)) | (1 << (SparkSqlParser.FORMATTED - 75)) | (1 << (SparkSqlParser.FUNCTION - 75)) | (1 << (SparkSqlParser.FUNCTIONS - 75)) | (1 << (SparkSqlParser.GLOBAL - 75)) | (1 << (SparkSqlParser.GROUPING - 75)))) !== 0) || ((((_la - 108)) & ~0x1F) === 0 && ((1 << (_la - 108)) & ((1 << (SparkSqlParser.IF - 108)) | (1 << (SparkSqlParser.IGNORE - 108)) | (1 << (SparkSqlParser.IMPORT - 108)) | (1 << (SparkSqlParser.INDEX - 108)) | (1 << (SparkSqlParser.INDEXES - 108)) | (1 << (SparkSqlParser.INPATH - 108)) | (1 << (SparkSqlParser.INPUTFORMAT - 108)) | (1 << (SparkSqlParser.INSERT - 108)) | (1 << (SparkSqlParser.INTERVAL - 108)) | (1 << (SparkSqlParser.ITEMS - 108)) | (1 << (SparkSqlParser.KEYS - 108)) | (1 << (SparkSqlParser.LAST - 108)) | (1 << (SparkSqlParser.LATERAL - 108)) | (1 << (SparkSqlParser.LAZY - 108)) | (1 << (SparkSqlParser.LIKE - 108)) | (1 << (SparkSqlParser.LIMIT - 108)) | (1 << (SparkSqlParser.LINES - 108)) | (1 << (SparkSqlParser.LIST - 108)) | (1 << (SparkSqlParser.LOAD - 108)) | (1 << (SparkSqlParser.LOCAL - 108)) | (1 << (SparkSqlParser.LOCATION - 108)) | (1 << (SparkSqlParser.LOCK - 108)) | (1 << (SparkSqlParser.LOCKS - 108)) | (1 << (SparkSqlParser.LOGICAL - 108)))) !== 0) || ((((_la - 140)) & ~0x1F) === 0 && ((1 << (_la - 140)) & ((1 << (SparkSqlParser.MACRO - 140)) | (1 << (SparkSqlParser.MAP - 140)) | (1 << (SparkSqlParser.MATCHED - 140)) | (1 << (SparkSqlParser.MERGE - 140)) | (1 << (SparkSqlParser.MSCK - 140)) | (1 << (SparkSqlParser.NAMESPACE - 140)) | (1 << (SparkSqlParser.NAMESPACES - 140)) | (1 << (SparkSqlParser.NO - 140)) | (1 << (SparkSqlParser.NULLS - 140)) | (1 << (SparkSqlParser.OF - 140)) | (1 << (SparkSqlParser.OPTION - 140)) | (1 << (SparkSqlParser.OPTIONS - 140)) | (1 << (SparkSqlParser.OUT - 140)) | (1 << (SparkSqlParser.OUTPUTFORMAT - 140)) | (1 << (SparkSqlParser.OVER - 140)) | (1 << (SparkSqlParser.OVERLAY - 140)) | (1 << (SparkSqlParser.OVERWRITE - 140)) | (1 << (SparkSqlParser.PARTITION - 140)) | (1 << (SparkSqlParser.PARTITIONED - 140)) | (1 << (SparkSqlParser.PARTITIONS - 140)) | (1 << (SparkSqlParser.PERCENTLIT - 140)) | (1 << (SparkSqlParser.PIVOT - 140)) | (1 << (SparkSqlParser.PLACING - 140)))) !== 0) || ((((_la - 172)) & ~0x1F) === 0 && ((1 << (_la - 172)) & ((1 << (SparkSqlParser.POSITION - 172)) | (1 << (SparkSqlParser.PRECEDING - 172)) | (1 << (SparkSqlParser.PRINCIPALS - 172)) | (1 << (SparkSqlParser.PROPERTIES - 172)) | (1 << (SparkSqlParser.PURGE - 172)) | (1 << (SparkSqlParser.QUERY - 172)) | (1 << (SparkSqlParser.RANGE - 172)) | (1 << (SparkSqlParser.RECORDREADER - 172)) | (1 << (SparkSqlParser.RECORDWRITER - 172)) | (1 << (SparkSqlParser.RECOVER - 172)) | (1 << (SparkSqlParser.REDUCE - 172)) | (1 << (SparkSqlParser.REFRESH - 172)) | (1 << (SparkSqlParser.RENAME - 172)) | (1 << (SparkSqlParser.REPAIR - 172)) | (1 << (SparkSqlParser.REPLACE - 172)) | (1 << (SparkSqlParser.RESET - 172)) | (1 << (SparkSqlParser.RESTRICT - 172)) | (1 << (SparkSqlParser.REVOKE - 172)) | (1 << (SparkSqlParser.RLIKE - 172)) | (1 << (SparkSqlParser.ROLE - 172)) | (1 << (SparkSqlParser.ROLES - 172)) | (1 << (SparkSqlParser.ROLLBACK - 172)) | (1 << (SparkSqlParser.ROLLUP - 172)) | (1 << (SparkSqlParser.ROW - 172)) | (1 << (SparkSqlParser.ROWS - 172)) | (1 << (SparkSqlParser.SCHEMA - 172)) | (1 << (SparkSqlParser.SEMI - 172)) | (1 << (SparkSqlParser.SEPARATED - 172)))) !== 0) || ((((_la - 204)) & ~0x1F) === 0 && ((1 << (_la - 204)) & ((1 << (SparkSqlParser.SERDE - 204)) | (1 << (SparkSqlParser.SERDEPROPERTIES - 204)) | (1 << (SparkSqlParser.SET - 204)) | (1 << (SparkSqlParser.SETMINUS - 204)) | (1 << (SparkSqlParser.SETS - 204)) | (1 << (SparkSqlParser.SHOW - 204)) | (1 << (SparkSqlParser.SKEWED - 204)) | (1 << (SparkSqlParser.SORT - 204)) | (1 << (SparkSqlParser.SORTED - 204)) | (1 << (SparkSqlParser.START - 204)) | (1 << (SparkSqlParser.STATISTICS - 204)) | (1 << (SparkSqlParser.STORED - 204)) | (1 << (SparkSqlParser.STRATIFY - 204)) | (1 << (SparkSqlParser.STRUCT - 204)) | (1 << (SparkSqlParser.SUBSTR - 204)) | (1 << (SparkSqlParser.SUBSTRING - 204)) | (1 << (SparkSqlParser.TABLES - 204)) | (1 << (SparkSqlParser.TABLESAMPLE - 204)) | (1 << (SparkSqlParser.TBLPROPERTIES - 204)) | (1 << (SparkSqlParser.TEMPORARY - 204)) | (1 << (SparkSqlParser.TERMINATED - 204)) | (1 << (SparkSqlParser.TOUCH - 204)) | (1 << (SparkSqlParser.TRANSACTION - 204)) | (1 << (SparkSqlParser.TRANSACTIONS - 204)) | (1 << (SparkSqlParser.TRANSFORM - 204)))) !== 0) || ((((_la - 236)) & ~0x1F) === 0 && ((1 << (_la - 236)) & ((1 << (SparkSqlParser.TRIM - 236)) | (1 << (SparkSqlParser.TRUE - 236)) | (1 << (SparkSqlParser.TRUNCATE - 236)) | (1 << (SparkSqlParser.TYPE - 236)) | (1 << (SparkSqlParser.UNARCHIVE - 236)) | (1 << (SparkSqlParser.UNBOUNDED - 236)) | (1 << (SparkSqlParser.UNCACHE - 236)) | (1 << (SparkSqlParser.UNLOCK - 236)) | (1 << (SparkSqlParser.UNSET - 236)) | (1 << (SparkSqlParser.UPDATE - 236)) | (1 << (SparkSqlParser.USE - 236)) | (1 << (SparkSqlParser.VALUES - 236)) | (1 << (SparkSqlParser.VIEW - 236)) | (1 << (SparkSqlParser.VIEWS - 236)) | (1 << (SparkSqlParser.WINDOW - 236)) | (1 << (SparkSqlParser.ZONE - 236)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; + this.state = 3382; + _localctx._body = this.unitToUnitInterval(); + this.state = 3385; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 438, this._ctx) ) { + case 1: + { + this.state = 3383; + _localctx._error1 = this.multiUnitsInterval(); } + break; - this._errHandler.reportMatch(this); - this.consume(); + case 2: + { + this.state = 3384; + _localctx._error2 = this.unitToUnitInterval(); + } + break; } } } @@ -13250,25 +14190,20 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public strictNonReserved(): StrictNonReservedContext { - let _localctx: StrictNonReservedContext = new StrictNonReservedContext(this._ctx, this.state); - this.enterRule(_localctx, 270, SparkSqlParser.RULE_strictNonReserved); - let _la: number; + public unitToUnitInterval(): UnitToUnitIntervalContext { + let _localctx: UnitToUnitIntervalContext = new UnitToUnitIntervalContext(this._ctx, this.state); + this.enterRule(_localctx, 288, SparkSqlParser.RULE_unitToUnitInterval); try { this.enterOuterAlt(_localctx, 1); { - this.state = 3026; - _la = this._input.LA(1); - if (!(_la === SparkSqlParser.ANTI || _la === SparkSqlParser.CROSS || _la === SparkSqlParser.EXCEPT || ((((_la - 100)) & ~0x1F) === 0 && ((1 << (_la - 100)) & ((1 << (SparkSqlParser.FULL - 100)) | (1 << (SparkSqlParser.INNER - 100)) | (1 << (SparkSqlParser.INTERSECT - 100)) | (1 << (SparkSqlParser.JOIN - 100)) | (1 << (SparkSqlParser.LEFT - 100)))) !== 0) || _la === SparkSqlParser.NATURAL || _la === SparkSqlParser.ON || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & ((1 << (SparkSqlParser.RIGHT - 192)) | (1 << (SparkSqlParser.SEMI - 192)) | (1 << (SparkSqlParser.SETMINUS - 192)))) !== 0) || _la === SparkSqlParser.UNION || _la === SparkSqlParser.USING)) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } + this.state = 3387; + _localctx._value = this.intervalValue(); + this.state = 3388; + this.unitInUnitToUnit(); + this.state = 3389; + this.match(SparkSqlParser.KW_TO); + this.state = 3390; + this.unitInUnitToUnit(); } } catch (re) { @@ -13286,28 +14221,60 @@ export class SparkSqlParser extends Parser { return _localctx; } // @RuleVersion(0) - public nonReserved(): NonReservedContext { - let _localctx: NonReservedContext = new NonReservedContext(this._ctx, this.state); - this.enterRule(_localctx, 272, SparkSqlParser.RULE_nonReserved); + public intervalValue(): IntervalValueContext { + let _localctx: IntervalValueContext = new IntervalValueContext(this._ctx, this.state); + this.enterRule(_localctx, 290, SparkSqlParser.RULE_intervalValue); let _la: number; try { this.enterOuterAlt(_localctx, 1); { - this.state = 3028; - _la = this._input.LA(1); - if (!(((((_la - 11)) & ~0x1F) === 0 && ((1 << (_la - 11)) & ((1 << (SparkSqlParser.ADD - 11)) | (1 << (SparkSqlParser.AFTER - 11)) | (1 << (SparkSqlParser.ALL - 11)) | (1 << (SparkSqlParser.ALTER - 11)) | (1 << (SparkSqlParser.ANALYZE - 11)) | (1 << (SparkSqlParser.AND - 11)) | (1 << (SparkSqlParser.ANY - 11)) | (1 << (SparkSqlParser.ARCHIVE - 11)) | (1 << (SparkSqlParser.ARRAY - 11)) | (1 << (SparkSqlParser.AS - 11)) | (1 << (SparkSqlParser.ASC - 11)) | (1 << (SparkSqlParser.AT - 11)) | (1 << (SparkSqlParser.AUTHORIZATION - 11)) | (1 << (SparkSqlParser.BETWEEN - 11)) | (1 << (SparkSqlParser.BOTH - 11)) | (1 << (SparkSqlParser.BUCKET - 11)) | (1 << (SparkSqlParser.BUCKETS - 11)) | (1 << (SparkSqlParser.BY - 11)) | (1 << (SparkSqlParser.CACHE - 11)) | (1 << (SparkSqlParser.CASCADE - 11)) | (1 << (SparkSqlParser.CASE - 11)) | (1 << (SparkSqlParser.CAST - 11)) | (1 << (SparkSqlParser.CHANGE - 11)) | (1 << (SparkSqlParser.CHECK - 11)) | (1 << (SparkSqlParser.CLEAR - 11)) | (1 << (SparkSqlParser.CLUSTER - 11)) | (1 << (SparkSqlParser.CLUSTERED - 11)) | (1 << (SparkSqlParser.CODEGEN - 11)) | (1 << (SparkSqlParser.COLLATE - 11)) | (1 << (SparkSqlParser.COLLECTION - 11)) | (1 << (SparkSqlParser.COLUMN - 11)))) !== 0) || ((((_la - 43)) & ~0x1F) === 0 && ((1 << (_la - 43)) & ((1 << (SparkSqlParser.COLUMNS - 43)) | (1 << (SparkSqlParser.COMMENT - 43)) | (1 << (SparkSqlParser.COMMIT - 43)) | (1 << (SparkSqlParser.COMPACT - 43)) | (1 << (SparkSqlParser.COMPACTIONS - 43)) | (1 << (SparkSqlParser.COMPUTE - 43)) | (1 << (SparkSqlParser.CONCATENATE - 43)) | (1 << (SparkSqlParser.CONSTRAINT - 43)) | (1 << (SparkSqlParser.COST - 43)) | (1 << (SparkSqlParser.CREATE - 43)) | (1 << (SparkSqlParser.CUBE - 43)) | (1 << (SparkSqlParser.CURRENT - 43)) | (1 << (SparkSqlParser.CURRENT_DATE - 43)) | (1 << (SparkSqlParser.CURRENT_TIME - 43)) | (1 << (SparkSqlParser.CURRENT_TIMESTAMP - 43)) | (1 << (SparkSqlParser.CURRENT_USER - 43)) | (1 << (SparkSqlParser.DATA - 43)) | (1 << (SparkSqlParser.DATABASE - 43)) | (1 << (SparkSqlParser.DATABASES - 43)) | (1 << (SparkSqlParser.DBPROPERTIES - 43)) | (1 << (SparkSqlParser.DEFINED - 43)) | (1 << (SparkSqlParser.DELETE - 43)) | (1 << (SparkSqlParser.DELIMITED - 43)) | (1 << (SparkSqlParser.DESC - 43)) | (1 << (SparkSqlParser.DESCRIBE - 43)) | (1 << (SparkSqlParser.DFS - 43)) | (1 << (SparkSqlParser.DIRECTORIES - 43)) | (1 << (SparkSqlParser.DIRECTORY - 43)) | (1 << (SparkSqlParser.DISTINCT - 43)) | (1 << (SparkSqlParser.DISTRIBUTE - 43)) | (1 << (SparkSqlParser.DIV - 43)))) !== 0) || ((((_la - 75)) & ~0x1F) === 0 && ((1 << (_la - 75)) & ((1 << (SparkSqlParser.DROP - 75)) | (1 << (SparkSqlParser.ELSE - 75)) | (1 << (SparkSqlParser.END - 75)) | (1 << (SparkSqlParser.ESCAPE - 75)) | (1 << (SparkSqlParser.ESCAPED - 75)) | (1 << (SparkSqlParser.EXCHANGE - 75)) | (1 << (SparkSqlParser.EXISTS - 75)) | (1 << (SparkSqlParser.EXPLAIN - 75)) | (1 << (SparkSqlParser.EXPORT - 75)) | (1 << (SparkSqlParser.EXTENDED - 75)) | (1 << (SparkSqlParser.EXTERNAL - 75)) | (1 << (SparkSqlParser.EXTRACT - 75)) | (1 << (SparkSqlParser.FALSE - 75)) | (1 << (SparkSqlParser.FETCH - 75)) | (1 << (SparkSqlParser.FIELDS - 75)) | (1 << (SparkSqlParser.FILTER - 75)) | (1 << (SparkSqlParser.FILEFORMAT - 75)) | (1 << (SparkSqlParser.FIRST - 75)) | (1 << (SparkSqlParser.FOLLOWING - 75)) | (1 << (SparkSqlParser.FOR - 75)) | (1 << (SparkSqlParser.FOREIGN - 75)) | (1 << (SparkSqlParser.FORMAT - 75)) | (1 << (SparkSqlParser.FORMATTED - 75)) | (1 << (SparkSqlParser.FROM - 75)) | (1 << (SparkSqlParser.FUNCTION - 75)) | (1 << (SparkSqlParser.FUNCTIONS - 75)) | (1 << (SparkSqlParser.GLOBAL - 75)) | (1 << (SparkSqlParser.GRANT - 75)) | (1 << (SparkSqlParser.GROUP - 75)) | (1 << (SparkSqlParser.GROUPING - 75)))) !== 0) || ((((_la - 107)) & ~0x1F) === 0 && ((1 << (_la - 107)) & ((1 << (SparkSqlParser.HAVING - 107)) | (1 << (SparkSqlParser.IF - 107)) | (1 << (SparkSqlParser.IGNORE - 107)) | (1 << (SparkSqlParser.IMPORT - 107)) | (1 << (SparkSqlParser.IN - 107)) | (1 << (SparkSqlParser.INDEX - 107)) | (1 << (SparkSqlParser.INDEXES - 107)) | (1 << (SparkSqlParser.INPATH - 107)) | (1 << (SparkSqlParser.INPUTFORMAT - 107)) | (1 << (SparkSqlParser.INSERT - 107)) | (1 << (SparkSqlParser.INTERVAL - 107)) | (1 << (SparkSqlParser.INTO - 107)) | (1 << (SparkSqlParser.IS - 107)) | (1 << (SparkSqlParser.ITEMS - 107)) | (1 << (SparkSqlParser.KEYS - 107)) | (1 << (SparkSqlParser.LAST - 107)) | (1 << (SparkSqlParser.LATERAL - 107)) | (1 << (SparkSqlParser.LAZY - 107)) | (1 << (SparkSqlParser.LEADING - 107)) | (1 << (SparkSqlParser.LIKE - 107)) | (1 << (SparkSqlParser.LIMIT - 107)) | (1 << (SparkSqlParser.LINES - 107)) | (1 << (SparkSqlParser.LIST - 107)) | (1 << (SparkSqlParser.LOAD - 107)) | (1 << (SparkSqlParser.LOCAL - 107)) | (1 << (SparkSqlParser.LOCATION - 107)) | (1 << (SparkSqlParser.LOCK - 107)) | (1 << (SparkSqlParser.LOCKS - 107)))) !== 0) || ((((_la - 139)) & ~0x1F) === 0 && ((1 << (_la - 139)) & ((1 << (SparkSqlParser.LOGICAL - 139)) | (1 << (SparkSqlParser.MACRO - 139)) | (1 << (SparkSqlParser.MAP - 139)) | (1 << (SparkSqlParser.MATCHED - 139)) | (1 << (SparkSqlParser.MERGE - 139)) | (1 << (SparkSqlParser.MSCK - 139)) | (1 << (SparkSqlParser.NAMESPACE - 139)) | (1 << (SparkSqlParser.NAMESPACES - 139)) | (1 << (SparkSqlParser.NO - 139)) | (1 << (SparkSqlParser.NOT - 139)) | (1 << (SparkSqlParser.NULL - 139)) | (1 << (SparkSqlParser.NULLS - 139)) | (1 << (SparkSqlParser.OF - 139)) | (1 << (SparkSqlParser.ONLY - 139)) | (1 << (SparkSqlParser.OPTION - 139)) | (1 << (SparkSqlParser.OPTIONS - 139)) | (1 << (SparkSqlParser.OR - 139)) | (1 << (SparkSqlParser.ORDER - 139)) | (1 << (SparkSqlParser.OUT - 139)) | (1 << (SparkSqlParser.OUTER - 139)) | (1 << (SparkSqlParser.OUTPUTFORMAT - 139)) | (1 << (SparkSqlParser.OVER - 139)) | (1 << (SparkSqlParser.OVERLAPS - 139)) | (1 << (SparkSqlParser.OVERLAY - 139)) | (1 << (SparkSqlParser.OVERWRITE - 139)) | (1 << (SparkSqlParser.PARTITION - 139)) | (1 << (SparkSqlParser.PARTITIONED - 139)) | (1 << (SparkSqlParser.PARTITIONS - 139)) | (1 << (SparkSqlParser.PERCENTLIT - 139)) | (1 << (SparkSqlParser.PIVOT - 139)))) !== 0) || ((((_la - 171)) & ~0x1F) === 0 && ((1 << (_la - 171)) & ((1 << (SparkSqlParser.PLACING - 171)) | (1 << (SparkSqlParser.POSITION - 171)) | (1 << (SparkSqlParser.PRECEDING - 171)) | (1 << (SparkSqlParser.PRIMARY - 171)) | (1 << (SparkSqlParser.PRINCIPALS - 171)) | (1 << (SparkSqlParser.PROPERTIES - 171)) | (1 << (SparkSqlParser.PURGE - 171)) | (1 << (SparkSqlParser.QUERY - 171)) | (1 << (SparkSqlParser.RANGE - 171)) | (1 << (SparkSqlParser.RECORDREADER - 171)) | (1 << (SparkSqlParser.RECORDWRITER - 171)) | (1 << (SparkSqlParser.RECOVER - 171)) | (1 << (SparkSqlParser.REDUCE - 171)) | (1 << (SparkSqlParser.REFERENCES - 171)) | (1 << (SparkSqlParser.REFRESH - 171)) | (1 << (SparkSqlParser.RENAME - 171)) | (1 << (SparkSqlParser.REPAIR - 171)) | (1 << (SparkSqlParser.REPLACE - 171)) | (1 << (SparkSqlParser.RESET - 171)) | (1 << (SparkSqlParser.RESTRICT - 171)) | (1 << (SparkSqlParser.REVOKE - 171)) | (1 << (SparkSqlParser.RLIKE - 171)) | (1 << (SparkSqlParser.ROLE - 171)) | (1 << (SparkSqlParser.ROLES - 171)) | (1 << (SparkSqlParser.ROLLBACK - 171)) | (1 << (SparkSqlParser.ROLLUP - 171)) | (1 << (SparkSqlParser.ROW - 171)) | (1 << (SparkSqlParser.ROWS - 171)) | (1 << (SparkSqlParser.SCHEMA - 171)) | (1 << (SparkSqlParser.SELECT - 171)))) !== 0) || ((((_la - 203)) & ~0x1F) === 0 && ((1 << (_la - 203)) & ((1 << (SparkSqlParser.SEPARATED - 203)) | (1 << (SparkSqlParser.SERDE - 203)) | (1 << (SparkSqlParser.SERDEPROPERTIES - 203)) | (1 << (SparkSqlParser.SESSION_USER - 203)) | (1 << (SparkSqlParser.SET - 203)) | (1 << (SparkSqlParser.SETS - 203)) | (1 << (SparkSqlParser.SHOW - 203)) | (1 << (SparkSqlParser.SKEWED - 203)) | (1 << (SparkSqlParser.SOME - 203)) | (1 << (SparkSqlParser.SORT - 203)) | (1 << (SparkSqlParser.SORTED - 203)) | (1 << (SparkSqlParser.START - 203)) | (1 << (SparkSqlParser.STATISTICS - 203)) | (1 << (SparkSqlParser.STORED - 203)) | (1 << (SparkSqlParser.STRATIFY - 203)) | (1 << (SparkSqlParser.STRUCT - 203)) | (1 << (SparkSqlParser.SUBSTR - 203)) | (1 << (SparkSqlParser.SUBSTRING - 203)) | (1 << (SparkSqlParser.TABLE - 203)) | (1 << (SparkSqlParser.TABLES - 203)) | (1 << (SparkSqlParser.TABLESAMPLE - 203)) | (1 << (SparkSqlParser.TBLPROPERTIES - 203)) | (1 << (SparkSqlParser.TEMPORARY - 203)) | (1 << (SparkSqlParser.TERMINATED - 203)) | (1 << (SparkSqlParser.THEN - 203)) | (1 << (SparkSqlParser.TIME - 203)) | (1 << (SparkSqlParser.TO - 203)) | (1 << (SparkSqlParser.TOUCH - 203)) | (1 << (SparkSqlParser.TRAILING - 203)) | (1 << (SparkSqlParser.TRANSACTION - 203)) | (1 << (SparkSqlParser.TRANSACTIONS - 203)))) !== 0) || ((((_la - 235)) & ~0x1F) === 0 && ((1 << (_la - 235)) & ((1 << (SparkSqlParser.TRANSFORM - 235)) | (1 << (SparkSqlParser.TRIM - 235)) | (1 << (SparkSqlParser.TRUE - 235)) | (1 << (SparkSqlParser.TRUNCATE - 235)) | (1 << (SparkSqlParser.TYPE - 235)) | (1 << (SparkSqlParser.UNARCHIVE - 235)) | (1 << (SparkSqlParser.UNBOUNDED - 235)) | (1 << (SparkSqlParser.UNCACHE - 235)) | (1 << (SparkSqlParser.UNIQUE - 235)) | (1 << (SparkSqlParser.UNKNOWN - 235)) | (1 << (SparkSqlParser.UNLOCK - 235)) | (1 << (SparkSqlParser.UNSET - 235)) | (1 << (SparkSqlParser.UPDATE - 235)) | (1 << (SparkSqlParser.USE - 235)) | (1 << (SparkSqlParser.USER - 235)) | (1 << (SparkSqlParser.VALUES - 235)) | (1 << (SparkSqlParser.VIEW - 235)) | (1 << (SparkSqlParser.VIEWS - 235)) | (1 << (SparkSqlParser.WHEN - 235)) | (1 << (SparkSqlParser.WHERE - 235)) | (1 << (SparkSqlParser.WINDOW - 235)) | (1 << (SparkSqlParser.WITH - 235)) | (1 << (SparkSqlParser.ZONE - 235)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } + this.state = 3393; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 439, this._ctx) ) { + case 1: + { + this.state = 3392; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.PLUS || _la === SparkSqlParser.MINUS)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + this.state = 3398; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 440, this._ctx) ) { + case 1: + { + this.state = 3395; + this.match(SparkSqlParser.INTEGER_VALUE); + } + break; + + case 2: + { + this.state = 3396; + this.match(SparkSqlParser.DECIMAL_VALUE); + } + break; + + case 3: + { + this.state = 3397; + this.stringLit(); + } + break; + } + } + } + catch (re) { if (re instanceof RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); @@ -13321,4887 +14288,6184 @@ export class SparkSqlParser extends Parser { } return _localctx; } + // @RuleVersion(0) + public unitInMultiUnits(): UnitInMultiUnitsContext { + let _localctx: UnitInMultiUnitsContext = new UnitInMultiUnitsContext(this._ctx, this.state); + this.enterRule(_localctx, 292, SparkSqlParser.RULE_unitInMultiUnits); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3400; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DAY || _la === SparkSqlParser.KW_DAYS || _la === SparkSqlParser.KW_HOUR || _la === SparkSqlParser.KW_HOURS || ((((_la - 176)) & ~0x1F) === 0 && ((1 << (_la - 176)) & ((1 << (SparkSqlParser.KW_MICROSECOND - 176)) | (1 << (SparkSqlParser.KW_MICROSECONDS - 176)) | (1 << (SparkSqlParser.KW_MILLISECOND - 176)) | (1 << (SparkSqlParser.KW_MILLISECONDS - 176)) | (1 << (SparkSqlParser.KW_MINUTE - 176)) | (1 << (SparkSqlParser.KW_MINUTES - 176)) | (1 << (SparkSqlParser.KW_MONTH - 176)) | (1 << (SparkSqlParser.KW_MONTHS - 176)) | (1 << (SparkSqlParser.KW_NANOSECOND - 176)) | (1 << (SparkSqlParser.KW_NANOSECONDS - 176)))) !== 0) || _la === SparkSqlParser.KW_SECOND || _la === SparkSqlParser.KW_SECONDS || ((((_la - 332)) & ~0x1F) === 0 && ((1 << (_la - 332)) & ((1 << (SparkSqlParser.KW_WEEK - 332)) | (1 << (SparkSqlParser.KW_WEEKS - 332)) | (1 << (SparkSqlParser.KW_YEAR - 332)) | (1 << (SparkSqlParser.KW_YEARS - 332)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { - switch (ruleIndex) { - case 42: - return this.queryTerm_sempred(_localctx as QueryTermContext, predIndex); + 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 unitInUnitToUnit(): UnitInUnitToUnitContext { + let _localctx: UnitInUnitToUnitContext = new UnitInUnitToUnitContext(this._ctx, this.state); + this.enterRule(_localctx, 294, SparkSqlParser.RULE_unitInUnitToUnit); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3402; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DAY || _la === SparkSqlParser.KW_HOUR || _la === SparkSqlParser.KW_MINUTE || _la === SparkSqlParser.KW_MONTH || _la === SparkSqlParser.KW_SECOND || _la === SparkSqlParser.KW_YEAR)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } - case 95: - return this.booleanExpression_sempred(_localctx as BooleanExpressionContext, predIndex); + 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 colPosition(): ColPositionContext { + let _localctx: ColPositionContext = new ColPositionContext(this._ctx, this.state); + this.enterRule(_localctx, 296, SparkSqlParser.RULE_colPosition); + try { + this.state = 3407; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case SparkSqlParser.KW_FIRST: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3404; + _localctx._position = this.match(SparkSqlParser.KW_FIRST); + } + break; + case SparkSqlParser.KW_AFTER: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3405; + _localctx._position = this.match(SparkSqlParser.KW_AFTER); + this.state = 3406; + _localctx._afterCol = this.errorCapturingIdentifier(); + } + 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 type(): TypeContext { + let _localctx: TypeContext = new TypeContext(this._ctx, this.state); + this.enterRule(_localctx, 298, SparkSqlParser.RULE_type); + try { + this.state = 3439; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 442, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3409; + this.match(SparkSqlParser.KW_BOOLEAN); + } + break; - case 97: - return this.valueExpression_sempred(_localctx as ValueExpressionContext, predIndex); + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3410; + this.match(SparkSqlParser.KW_TINYINT); + } + break; - case 98: - return this.primaryExpression_sempred(_localctx as PrimaryExpressionContext, predIndex); + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3411; + this.match(SparkSqlParser.KW_BYTE); + } + break; - case 129: - return this.identifier_sempred(_localctx as IdentifierContext, predIndex); + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3412; + this.match(SparkSqlParser.KW_SMALLINT); + } + break; - case 130: - return this.strictIdentifier_sempred(_localctx as StrictIdentifierContext, predIndex); + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 3413; + this.match(SparkSqlParser.KW_SHORT); + } + break; - case 132: - return this.number_sempred(_localctx as NumberContext, predIndex); - } - return true; - } - private queryTerm_sempred(_localctx: QueryTermContext, predIndex: number): boolean { - switch (predIndex) { - case 0: - return this.precpred(this._ctx, 3); + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 3414; + this.match(SparkSqlParser.KW_INT); + } + break; - case 1: - return this.legacy_setops_precedence_enbled; + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 3415; + this.match(SparkSqlParser.KW_INTEGER); + } + break; - case 2: - return this.precpred(this._ctx, 2); + case 8: + this.enterOuterAlt(_localctx, 8); + { + this.state = 3416; + this.match(SparkSqlParser.KW_BIGINT); + } + break; - case 3: - return !this.legacy_setops_precedence_enbled; + case 9: + this.enterOuterAlt(_localctx, 9); + { + this.state = 3417; + this.match(SparkSqlParser.KW_LONG); + } + break; - case 4: - return this.precpred(this._ctx, 1); + case 10: + this.enterOuterAlt(_localctx, 10); + { + this.state = 3418; + this.match(SparkSqlParser.KW_FLOAT); + } + break; - case 5: - return !this.legacy_setops_precedence_enbled; - } - return true; - } - private booleanExpression_sempred(_localctx: BooleanExpressionContext, predIndex: number): boolean { - switch (predIndex) { - case 6: - return this.precpred(this._ctx, 2); + case 11: + this.enterOuterAlt(_localctx, 11); + { + this.state = 3419; + this.match(SparkSqlParser.KW_REAL); + } + break; - case 7: - return this.precpred(this._ctx, 1); - } - return true; - } - private valueExpression_sempred(_localctx: ValueExpressionContext, predIndex: number): boolean { - switch (predIndex) { - case 8: - return this.precpred(this._ctx, 6); + case 12: + this.enterOuterAlt(_localctx, 12); + { + this.state = 3420; + this.match(SparkSqlParser.KW_DOUBLE); + } + break; - case 9: - return this.precpred(this._ctx, 5); + case 13: + this.enterOuterAlt(_localctx, 13); + { + this.state = 3421; + this.match(SparkSqlParser.KW_DATE); + } + break; - case 10: - return this.precpred(this._ctx, 4); + case 14: + this.enterOuterAlt(_localctx, 14); + { + this.state = 3422; + this.match(SparkSqlParser.KW_TIMESTAMP); + } + break; - case 11: - return this.precpred(this._ctx, 3); + case 15: + this.enterOuterAlt(_localctx, 15); + { + this.state = 3423; + this.match(SparkSqlParser.KW_TIMESTAMP_NTZ); + } + break; - case 12: - return this.precpred(this._ctx, 2); + case 16: + this.enterOuterAlt(_localctx, 16); + { + this.state = 3424; + this.match(SparkSqlParser.KW_TIMESTAMP_LTZ); + } + break; - case 13: - return this.precpred(this._ctx, 1); - } - return true; - } - private primaryExpression_sempred(_localctx: PrimaryExpressionContext, predIndex: number): boolean { - switch (predIndex) { - case 14: - return this.precpred(this._ctx, 8); + case 17: + this.enterOuterAlt(_localctx, 17); + { + this.state = 3425; + this.match(SparkSqlParser.KW_STRING); + } + break; - case 15: - return this.precpred(this._ctx, 6); - } - return true; - } - private identifier_sempred(_localctx: IdentifierContext, predIndex: number): boolean { - switch (predIndex) { - case 16: - return !this.SQL_standard_keyword_behavior; - } - return true; - } - private strictIdentifier_sempred(_localctx: StrictIdentifierContext, predIndex: number): boolean { - switch (predIndex) { - case 17: - return this.SQL_standard_keyword_behavior; + case 18: + this.enterOuterAlt(_localctx, 18); + { + this.state = 3426; + this.match(SparkSqlParser.KW_CHARACTER); + } + break; - case 18: - return !this.SQL_standard_keyword_behavior; - } - return true; - } - private number_sempred(_localctx: NumberContext, predIndex: number): boolean { - switch (predIndex) { - case 19: - return !this.legacy_exponent_literal_as_decimal_enabled; + case 19: + this.enterOuterAlt(_localctx, 19); + { + this.state = 3427; + this.match(SparkSqlParser.KW_CHAR); + } + break; - case 20: - return !this.legacy_exponent_literal_as_decimal_enabled; + case 20: + this.enterOuterAlt(_localctx, 20); + { + this.state = 3428; + this.match(SparkSqlParser.KW_VARCHAR); + } + break; - case 21: - return this.legacy_exponent_literal_as_decimal_enabled; - } - return true; - } + case 21: + this.enterOuterAlt(_localctx, 21); + { + this.state = 3429; + this.match(SparkSqlParser.KW_BINARY); + } + break; - private static readonly _serializedATNSegments: number = 6; - private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\u0129\u0BD9\x04" + - "\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04" + - "\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r" + - "\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12" + - "\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17" + - "\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C" + - "\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04" + - "#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t" + - "+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" + - "4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + - "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + - "F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04" + - "O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04" + - "X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t^\x04_\t_\x04`\t" + - "`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04g\tg\x04h\th\x04" + - "i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04p\tp\x04q\tq\x04" + - "r\tr\x04s\ts\x04t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x04y\ty\x04z\tz\x04" + - "{\t{\x04|\t|\x04}\t}\x04~\t~\x04\x7F\t\x7F\x04\x80\t\x80\x04\x81\t\x81" + - "\x04\x82\t\x82\x04\x83\t\x83\x04\x84\t\x84\x04\x85\t\x85\x04\x86\t\x86" + - "\x04\x87\t\x87\x04\x88\t\x88\x04\x89\t\x89\x04\x8A\t\x8A\x03\x02\x03\x02" + - "\x03\x02\x03\x03\x03\x03\x05\x03\u011A\n\x03\x03\x03\x07\x03\u011D\n\x03" + - "\f\x03\x0E\x03\u0120\v\x03\x03\x04\x03\x04\x03\x05\x03\x05\x03\x05\x03" + - "\x06\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\b\x03\b\x03\b\x03\t\x03" + - "\t\x03\t\x03\n\x03\n\x05\n\u0135\n\n\x03\n\x03\n\x03\n\x05\n\u013A\n\n" + - "\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0142\n\n\x03\n\x03\n\x03\n" + - "\x03\n\x03\n\x03\n\x07\n\u014A\n\n\f\n\x0E\n\u014D\v\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x05\n\u0160\n\n\x03\n\x03\n\x05\n\u0164\n\n\x03\n\x03\n" + - "\x03\n\x03\n\x05\n\u016A\n\n\x03\n\x05\n\u016D\n\n\x03\n\x05\n\u0170\n" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0177\n\n\x03\n\x03\n\x03\n\x05" + - "\n\u017C\n\n\x03\n\x05\n\u017F\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n" + - "\u0186\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n" + - "\x05\n\u0192\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x07\n\u019B" + - "\n\n\f\n\x0E\n\u019E\v\n\x03\n\x05\n\u01A1\n\n\x03\n\x05\n\u01A4\n\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x05\n\u01AB\n\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x07\n\u01B6\n\n\f\n\x0E\n\u01B9\v\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x05\n\u01C0\n\n\x03\n\x03\n\x03\n\x05\n\u01C5\n\n" + - "\x03\n\x05\n\u01C8\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u01CE\n\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u01D9\n\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x05\n\u0219\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0222" + - "\n\n\x03\n\x03\n\x05\n\u0226\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u022C\n" + - "\n\x03\n\x03\n\x05\n\u0230\n\n\x03\n\x03\n\x03\n\x05\n\u0235\n\n\x03\n" + - "\x03\n\x03\n\x03\n\x05\n\u023B\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n" + - "\x03\n\x03\n\x03\n\x03\n\x05\n\u0247\n\n\x03\n\x03\n\x03\n\x03\n\x03\n" + - "\x03\n\x05\n\u024F\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0255\n\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0262\n" + - "\n\x03\n\x06\n\u0265\n\n\r\n\x0E\n\u0266\x03\n\x03\n\x03\n\x03\n\x03\n" + - "\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0277\n\n" + - "\x03\n\x03\n\x03\n\x07\n\u027C\n\n\f\n\x0E\n\u027F\v\n\x03\n\x05\n\u0282" + - "\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0288\n\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0297\n\n\x03" + - "\n\x03\n\x05\n\u029B\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u02A1\n\n\x03\n" + - "\x03\n\x03\n\x03\n\x05\n\u02A7\n\n\x03\n\x05\n\u02AA\n\n\x03\n\x05\n\u02AD" + - "\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u02B3\n\n\x03\n\x03\n\x05\n\u02B7\n" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x07\n\u02BF\n\n\f\n\x0E\n\u02C2" + - "\v\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u02CA\n\n\x03\n\x05\n\u02CD" + - "\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u02D6\n\n\x03\n\x03" + - "\n\x03\n\x05\n\u02DB\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u02E1\n\n\x03\n" + - "\x03\n\x03\n\x03\n\x03\n\x05\n\u02E8\n\n\x03\n\x05\n\u02EB\n\n\x03\n\x03" + - "\n\x03\n\x03\n\x05\n\u02F1\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x07\n\u02FA\n\n\f\n\x0E\n\u02FD\v\n\x05\n\u02FF\n\n\x03\n\x03\n\x05" + - "\n\u0303\n\n\x03\n\x03\n\x03\n\x05\n\u0308\n\n\x03\n\x03\n\x03\n\x05\n" + - "\u030D\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0314\n\n\x03\n\x05\n\u0317" + - "\n\n\x03\n\x05\n\u031A\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0321\n" + - "\n\x03\n\x03\n\x03\n\x05\n\u0326\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x05\n\u032F\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0337" + - "\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u033D\n\n\x03\n\x05\n\u0340\n\n\x03" + - "\n\x05\n\u0343\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0349\n\n\x03\n\x03\n" + - "\x05\n\u034D\n\n\x03\n\x03\n\x05\n\u0351\n\n\x03\n\x03\n\x05\n\u0355\n" + - "\n\x05\n\u0357\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u035F\n\n" + - "\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0367\n\n\x03\n\x03\n\x03\n" + - "\x03\n\x05\n\u036D\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u0373\n\n\x03\n\x05" + - "\n\u0376\n\n\x03\n\x03\n\x05\n\u037A\n\n\x03\n\x05\n\u037D\n\n\x03\n\x03" + - "\n\x05\n\u0381\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x07\n\u039B\n\n\f\n\x0E\n\u039E\v\n\x05\n\u03A0\n" + - "\n\x03\n\x03\n\x05\n\u03A4\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u03AA\n\n" + - "\x03\n\x05\n\u03AD\n\n\x03\n\x05\n\u03B0\n\n\x03\n\x03\n\x03\n\x03\n\x05" + - "\n\u03B6\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05\n\u03BE\n\n\x03\n" + - "\x03\n\x03\n\x05\n\u03C3\n\n\x03\n\x03\n\x03\n\x03\n\x05\n\u03C9\n\n\x03" + - "\n\x03\n\x03\n\x03\n\x05\n\u03CF\n\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x07\n\u03D9\n\n\f\n\x0E\n\u03DC\v\n\x05\n\u03DE\n\n\x03" + - "\n\x03\n\x03\n\x07\n\u03E3\n\n\f\n\x0E\n\u03E6\v\n\x03\n\x03\n\x03\n\x03" + - "\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x07\n\u03F4\n\n\f\n" + - "\x0E\n\u03F7\v\n\x03\n\x03\n\x03\n\x03\n\x07\n\u03FD\n\n\f\n\x0E\n\u0400" + - "\v\n\x05\n\u0402\n\n\x03\n\x03\n\x07\n\u0406\n\n\f\n\x0E\n\u0409\v\n\x03" + - "\n\x03\n\x03\n\x03\n\x07\n\u040F\n\n\f\n\x0E\n\u0412\v\n\x03\n\x03\n\x07" + - "\n\u0416\n\n\f\n\x0E\n\u0419\v\n\x05\n\u041B\n\n\x03\v\x03\v\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x05\f\u0425\n\f\x03\f\x03\f\x05\f\u0429\n\f" + - "\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u0430\n\f\x03\f\x03\f\x03\f\x03\f" + - "\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x05\f\u04A4\n\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05" + - "\f\u04AC\n\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u04B4\n\f\x03\f" + - "\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u04BD\n\f\x03\f\x03\f\x03\f" + - "\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u04C7\n\f\x03\r\x03\r\x05\r\u04CB" + - "\n\r\x03\r\x05\r\u04CE\n\r\x03\r\x03\r\x03\r\x03\r\x05\r\u04D4\n\r\x03" + - "\r\x03\r\x03\x0E\x03\x0E\x05\x0E\u04DA\n\x0E\x03\x0E\x03\x0E\x03\x0E\x03" + - "\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x05\x0F\u04E6\n\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10" + - "\x03\x10\x05\x10\u04F2\n\x10\x03\x10\x03\x10\x03\x10\x05\x10\u04F7\n\x10" + - "\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x13\x05\x13\u0500" + - "\n\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x05\x14\u0508\n" + - "\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x05\x14\u050F\n\x14\x05\x14" + - "\u0511\n\x14\x03\x14\x03\x14\x03\x14\x05\x14\u0516\n\x14\x03\x14\x03\x14" + - "\x05\x14\u051A\n\x14\x03\x14\x03\x14\x03\x14\x05\x14\u051F\n\x14\x03\x14" + - "\x03\x14\x03\x14\x05\x14\u0524\n\x14\x03\x14\x03\x14\x03\x14\x05\x14\u0529" + - "\n\x14\x03\x14\x05\x14\u052C\n\x14\x03\x14\x03\x14\x03\x14\x05\x14\u0531" + - "\n\x14\x03\x14\x03\x14\x05\x14\u0535\n\x14\x03\x14\x03\x14\x03\x14\x05" + - "\x14\u053A\n\x14\x05\x14\u053C\n\x14\x03\x15\x03\x15\x05\x15\u0540\n\x15" + - "\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x07\x16\u0547\n\x16\f\x16\x0E" + - "\x16\u054A\v\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x17\x05\x17\u0551" + - "\n\x17\x03\x18\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x05\x19" + - "\u055A\n\x19\x03\x1A\x03\x1A\x03\x1A\x07\x1A\u055F\n\x1A\f\x1A\x0E\x1A" + - "\u0562\v\x1A\x03\x1B\x03\x1B\x03\x1B\x03\x1B\x07\x1B\u0568\n\x1B\f\x1B" + - "\x0E\x1B\u056B\v\x1B\x03\x1C\x03\x1C\x05\x1C\u056F\n\x1C\x03\x1C\x05\x1C" + - "\u0572\n\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D\x03" + - "\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03\x1E\x03" + - "\x1E\x07\x1E\u0585\n\x1E\f\x1E\x0E\x1E\u0588\v\x1E\x03\x1F\x03\x1F\x03" + - "\x1F\x03\x1F\x07\x1F\u058E\n\x1F\f\x1F\x0E\x1F\u0591\v\x1F\x03\x1F\x03" + - "\x1F\x03 \x03 \x05 \u0597\n \x03 \x05 \u059A\n \x03!\x03!\x03!\x07!\u059F" + - "\n!\f!\x0E!\u05A2\v!\x03!\x05!\u05A5\n!\x03\"\x03\"\x03\"\x03\"\x05\"" + - "\u05AB\n\"\x03#\x03#\x03#\x03#\x07#\u05B1\n#\f#\x0E#\u05B4\v#\x03#\x03" + - "#\x03$\x03$\x03$\x03$\x07$\u05BC\n$\f$\x0E$\u05BF\v$\x03$\x03$\x03%\x03" + - "%\x03%\x03%\x03%\x03%\x05%\u05C9\n%\x03&\x03&\x03&\x03&\x03&\x05&\u05D0" + - "\n&\x03\'\x03\'\x03\'\x03\'\x05\'\u05D6\n\'\x03(\x03(\x03(\x03)\x03)\x03" + - ")\x03)\x03)\x03)\x06)\u05E1\n)\r)\x0E)\u05E2\x03)\x03)\x03)\x03)\x03)" + - "\x05)\u05EA\n)\x03)\x03)\x03)\x03)\x03)\x05)\u05F1\n)\x03)\x03)\x03)\x03" + - ")\x03)\x03)\x03)\x03)\x03)\x03)\x05)\u05FD\n)\x03)\x03)\x03)\x03)\x07" + - ")\u0603\n)\f)\x0E)\u0606\v)\x03)\x07)\u0609\n)\f)\x0E)\u060C\v)\x05)\u060E" + - "\n)\x03*\x03*\x03*\x03*\x03*\x07*\u0615\n*\f*\x0E*\u0618\v*\x05*\u061A" + - "\n*\x03*\x03*\x03*\x03*\x03*\x07*\u0621\n*\f*\x0E*\u0624\v*\x05*\u0626" + - "\n*\x03*\x03*\x03*\x03*\x03*\x07*\u062D\n*\f*\x0E*\u0630\v*\x05*\u0632" + - "\n*\x03*\x03*\x03*\x03*\x03*\x07*\u0639\n*\f*\x0E*\u063C\v*\x05*\u063E" + - "\n*\x03*\x05*\u0641\n*\x03*\x03*\x03*\x05*\u0646\n*\x05*\u0648\n*\x03" + - "+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x05,\u0654\n,\x03,\x03" + - ",\x03,\x03,\x03,\x05,\u065B\n,\x03,\x03,\x03,\x03,\x03,\x05,\u0662\n," + - "\x03,\x07,\u0665\n,\f,\x0E,\u0668\v,\x03-\x03-\x03-\x03-\x03-\x03-\x03" + - "-\x03-\x03-\x05-\u0673\n-\x03.\x03.\x05.\u0677\n.\x03.\x03.\x05.\u067B" + - "\n.\x03/\x03/\x06/\u067F\n/\r/\x0E/\u0680\x030\x030\x050\u0685\n0\x03" + - "0\x030\x030\x030\x070\u068B\n0\f0\x0E0\u068E\v0\x030\x050\u0691\n0\x03" + - "0\x050\u0694\n0\x030\x050\u0697\n0\x030\x050\u069A\n0\x030\x030\x050\u069E" + - "\n0\x031\x031\x051\u06A2\n1\x031\x051\u06A5\n1\x031\x031\x051\u06A9\n" + - "1\x031\x071\u06AC\n1\f1\x0E1\u06AF\v1\x031\x051\u06B2\n1\x031\x051\u06B5" + - "\n1\x031\x051\u06B8\n1\x031\x051\u06BB\n1\x051\u06BD\n1\x032\x032\x03" + - "2\x032\x032\x032\x032\x032\x032\x032\x052\u06C9\n2\x032\x052\u06CC\n2" + - "\x032\x032\x052\u06D0\n2\x032\x032\x032\x032\x032\x032\x032\x032\x052" + - "\u06DA\n2\x032\x032\x052\u06DE\n2\x052\u06E0\n2\x032\x052\u06E3\n2\x03" + - "2\x032\x052\u06E7\n2\x033\x033\x073\u06EB\n3\f3\x0E3\u06EE\v3\x033\x05" + - "3\u06F1\n3\x033\x033\x034\x034\x034\x035\x035\x035\x035\x055\u06FC\n5" + - "\x035\x035\x035\x036\x036\x036\x036\x036\x056\u0706\n6\x036\x036\x036" + - "\x037\x037\x037\x037\x037\x037\x037\x057\u0712\n7\x038\x038\x038\x038" + - "\x038\x038\x038\x038\x038\x038\x038\x078\u071F\n8\f8\x0E8\u0722\v8\x03" + - "8\x038\x058\u0726\n8\x039\x039\x039\x079\u072B\n9\f9\x0E9\u072E\v9\x03" + - ":\x03:\x03:\x03:\x03;\x03;\x03;\x03<\x03<\x03<\x03=\x03=\x03=\x05=\u073D" + - "\n=\x03=\x07=\u0740\n=\f=\x0E=\u0743\v=\x03=\x03=\x03>\x03>\x03>\x03>" + - "\x03>\x03>\x07>\u074D\n>\f>\x0E>\u0750\v>\x03>\x03>\x05>\u0754\n>\x03" + - "?\x03?\x03?\x03?\x07?\u075A\n?\f?\x0E?\u075D\v?\x03?\x07?\u0760\n?\f?" + - "\x0E?\u0763\v?\x03?\x05?\u0766\n?\x03@\x03@\x03@\x03@\x03@\x07@\u076D" + - "\n@\f@\x0E@\u0770\v@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03@\x03" + - "@\x07@\u077C\n@\f@\x0E@\u077F\v@\x03@\x03@\x05@\u0783\n@\x03@\x03@\x03" + - "@\x03@\x03@\x03@\x03@\x03@\x07@\u078D\n@\f@\x0E@\u0790\v@\x03@\x03@\x05" + - "@\u0794\n@\x03A\x03A\x03A\x03A\x07A\u079A\nA\fA\x0EA\u079D\vA\x05A\u079F" + - "\nA\x03A\x03A\x05A\u07A3\nA\x03B\x03B\x03B\x03B\x03B\x03B\x03B\x03B\x03" + - "B\x03B\x07B\u07AF\nB\fB\x0EB\u07B2\vB\x03B\x03B\x03B\x03C\x03C\x03C\x03" + - "C\x03C\x07C\u07BC\nC\fC\x0EC\u07BF\vC\x03C\x03C\x05C\u07C3\nC\x03D\x03" + - "D\x05D\u07C7\nD\x03D\x05D\u07CA\nD\x03E\x03E\x03E\x05E\u07CF\nE\x03E\x03" + - "E\x03E\x03E\x03E\x07E\u07D6\nE\fE\x0EE\u07D9\vE\x05E\u07DB\nE\x03E\x03" + - "E\x03E\x05E\u07E0\nE\x03E\x03E\x03E\x07E\u07E5\nE\fE\x0EE\u07E8\vE\x05" + - "E\u07EA\nE\x03F\x03F\x03G\x03G\x07G\u07F0\nG\fG\x0EG\u07F3\vG\x03H\x03" + - "H\x03H\x03H\x05H\u07F9\nH\x03H\x03H\x03H\x03H\x03H\x05H\u0800\nH\x03I" + - "\x05I\u0803\nI\x03I\x03I\x03I\x05I\u0808\nI\x03I\x05I\u080B\nI\x03I\x03" + - "I\x03I\x05I\u0810\nI\x03I\x03I\x05I\u0814\nI\x03I\x05I\u0817\nI\x03I\x05" + - "I\u081A\nI\x03J\x03J\x03J\x03J\x05J\u0820\nJ\x03K\x03K\x03K\x05K\u0825" + - "\nK\x03K\x03K\x03L\x05L\u082A\nL\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03" + - "L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x03L\x05L\u083C\nL\x05L\u083E\nL" + - "\x03L\x05L\u0841\nL\x03M\x03M\x03M\x03M\x03N\x03N\x03N\x07N\u084A\nN\f" + - "N\x0EN\u084D\vN\x03O\x03O\x03O\x03O\x07O\u0853\nO\fO\x0EO\u0856\vO\x03" + - "O\x03O\x03P\x03P\x05P\u085C\nP\x03Q\x03Q\x03Q\x03Q\x07Q\u0862\nQ\fQ\x0E" + - "Q\u0865\vQ\x03Q\x03Q\x03R\x03R\x05R\u086B\nR\x03S\x03S\x05S\u086F\nS\x03" + - "S\x03S\x03S\x03S\x03S\x03S\x05S\u0877\nS\x03S\x03S\x03S\x03S\x03S\x03" + - "S\x05S\u087F\nS\x03S\x03S\x03S\x03S\x05S\u0885\nS\x03T\x03T\x03T\x03T" + - "\x07T\u088B\nT\fT\x0ET\u088E\vT\x03T\x03T\x03U\x03U\x03U\x03U\x03U\x07" + - "U\u0897\nU\fU\x0EU\u089A\vU\x05U\u089C\nU\x03U\x03U\x03U\x03V\x05V\u08A2" + - "\nV\x03V\x03V\x05V\u08A6\nV\x05V\u08A8\nV\x03W\x03W\x03W\x03W\x03W\x03" + - "W\x03W\x05W\u08B1\nW\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03W\x03" + - "W\x05W\u08BD\nW\x05W\u08BF\nW\x03W\x03W\x03W\x03W\x03W\x05W\u08C6\nW\x03" + - "W\x03W\x03W\x03W\x03W\x05W\u08CD\nW\x03W\x03W\x03W\x03W\x05W\u08D3\nW" + - "\x03W\x03W\x03W\x03W\x05W\u08D9\nW\x05W\u08DB\nW\x03X\x03X\x03X\x07X\u08E0" + - "\nX\fX\x0EX\u08E3\vX\x03Y\x03Y\x03Y\x07Y\u08E8\nY\fY\x0EY\u08EB\vY\x03" + - "Z\x03Z\x03Z\x05Z\u08F0\nZ\x03Z\x03Z\x03[\x03[\x05[\u08F6\n[\x03[\x03[" + - "\x05[\u08FA\n[\x05[\u08FC\n[\x03\\\x03\\\x03\\\x07\\\u0901\n\\\f\\\x0E" + - "\\\u0904\v\\\x03]\x03]\x03]\x03]\x07]\u090A\n]\f]\x0E]\u090D\v]\x03]\x03" + - "]\x03^\x03^"; - private static readonly _serializedATNSegment1: string = - "\x03^\x03^\x03^\x03^\x07^\u0917\n^\f^\x0E^\u091A\v^\x03^\x03^\x05^\u091E" + - "\n^\x03_\x03_\x05_\u0922\n_\x03`\x03`\x03a\x03a\x03a\x03a\x03a\x03a\x03" + - "a\x03a\x03a\x03a\x05a\u0930\na\x05a\u0932\na\x03a\x03a\x03a\x03a\x03a" + - "\x03a\x07a\u093A\na\fa\x0Ea\u093D\va\x03b\x05b\u0940\nb\x03b\x03b\x03" + - "b\x03b\x03b\x03b\x05b\u0948\nb\x03b\x03b\x03b\x03b\x03b\x07b\u094F\nb" + - "\fb\x0Eb\u0952\vb\x03b\x03b\x03b\x05b\u0957\nb\x03b\x03b\x03b\x03b\x03" + - "b\x03b\x05b\u095F\nb\x03b\x03b\x03b\x05b\u0964\nb\x03b\x03b\x03b\x03b" + - "\x03b\x03b\x03b\x03b\x07b\u096E\nb\fb\x0Eb\u0971\vb\x03b\x03b\x05b\u0975" + - "\nb\x03b\x05b\u0978\nb\x03b\x03b\x03b\x03b\x05b\u097E\nb\x03b\x03b\x05" + - "b\u0982\nb\x03b\x03b\x03b\x05b\u0987\nb\x03b\x03b\x03b\x05b\u098C\nb\x03" + - "b\x03b\x03b\x05b\u0991\nb\x03c\x03c\x03c\x03c\x05c\u0997\nc\x03c\x03c" + - "\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03c\x03" + - "c\x03c\x03c\x03c\x07c\u09AC\nc\fc\x0Ec\u09AF\vc\x03d\x03d\x03d\x03d\x06" + - "d\u09B5\nd\rd\x0Ed\u09B6\x03d\x03d\x05d\u09BB\nd\x03d\x03d\x03d\x03d\x03" + - "d\x06d\u09C2\nd\rd\x0Ed\u09C3\x03d\x03d\x05d\u09C8\nd\x03d\x03d\x03d\x03" + - "d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x07d\u09D8\nd\fd\x0E" + - "d\u09DB\vd\x05d\u09DD\nd\x03d\x03d\x03d\x03d\x03d\x03d\x05d\u09E5\nd\x03" + - "d\x03d\x03d\x03d\x03d\x03d\x03d\x05d\u09EE\nd\x03d\x03d\x03d\x03d\x03" + - "d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03" + - "d\x06d\u0A03\nd\rd\x0Ed\u0A04\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d" + - "\x03d\x05d\u0A10\nd\x03d\x03d\x03d\x07d\u0A15\nd\fd\x0Ed\u0A18\vd\x05" + - "d\u0A1A\nd\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x05d\u0A23\nd\x03d\x03d" + - "\x05d\u0A27\nd\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x06d\u0A31\nd\r" + - "d\x0Ed\u0A32\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03" + - "d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x05d\u0A4C\n" + - "d\x03d\x03d\x03d\x03d\x03d\x05d\u0A53\nd\x03d\x05d\u0A56\nd\x03d\x03d" + - "\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x05d\u0A65\nd" + - "\x03d\x03d\x05d\u0A69\nd\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x03d\x07d" + - "\u0A73\nd\fd\x0Ed\u0A76\vd\x03e\x03e\x03e\x03e\x03e\x03e\x03e\x03e\x06" + - "e\u0A80\ne\re\x0Ee\u0A81\x05e\u0A84\ne\x03f\x03f\x03g\x03g\x03h\x03h\x03" + - "i\x03i\x03j\x03j\x03j\x05j\u0A91\nj\x03k\x03k\x05k\u0A95\nk\x03l\x03l" + - "\x03l\x06l\u0A9A\nl\rl\x0El\u0A9B\x03m\x03m\x03m\x05m\u0AA1\nm\x03n\x03" + - "n\x03n\x03n\x03n\x03o\x05o\u0AA9\no\x03o\x03o\x05o\u0AAD\no\x03p\x03p" + - "\x03p\x05p\u0AB2\np\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q\x03q" + - "\x03q\x03q\x03q\x03q\x03q\x05q\u0AC3\nq\x03q\x03q\x05q\u0AC7\nq\x03q\x03" + - "q\x03q\x03q\x03q\x07q\u0ACE\nq\fq\x0Eq\u0AD1\vq\x03q\x05q\u0AD4\nq\x05" + - "q\u0AD6\nq\x03r\x03r\x03r\x07r\u0ADB\nr\fr\x0Er\u0ADE\vr\x03s\x03s\x03" + - "s\x03s\x05s\u0AE4\ns\x03s\x05s\u0AE7\ns\x03s\x05s\u0AEA\ns\x03t\x03t\x03" + - "t\x07t\u0AEF\nt\ft\x0Et\u0AF2\vt\x03u\x03u\x03u\x03u\x05u\u0AF8\nu\x03" + - "u\x05u\u0AFB\nu\x03v\x03v\x03v\x07v\u0B00\nv\fv\x0Ev\u0B03\vv\x03w\x03" + - "w\x03w\x03w\x03w\x05w\u0B0A\nw\x03w\x05w\u0B0D\nw\x03x\x03x\x03x\x03x" + - "\x03x\x03y\x03y\x03y\x03y\x07y\u0B18\ny\fy\x0Ey\u0B1B\vy\x03z\x03z\x03" + - "z\x03z\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x03{\x07{\u0B2C" + - "\n{\f{\x0E{\u0B2F\v{\x03{\x03{\x03{\x03{\x03{\x07{\u0B36\n{\f{\x0E{\u0B39" + - "\v{\x05{\u0B3B\n{\x03{\x03{\x03{\x03{\x03{\x07{\u0B42\n{\f{\x0E{\u0B45" + - "\v{\x05{\u0B47\n{\x05{\u0B49\n{\x03{\x05{\u0B4C\n{\x03{\x05{\u0B4F\n{" + - "\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03|\x03" + - "|\x03|\x03|\x05|\u0B61\n|\x03}\x03}\x03}\x03}\x03}\x03}\x03}\x05}\u0B6A" + - "\n}\x03~\x03~\x03~\x07~\u0B6F\n~\f~\x0E~\u0B72\v~\x03\x7F\x03\x7F\x03" + - "\x7F\x03\x7F\x05\x7F\u0B78\n\x7F\x03\x80\x03\x80\x03\x80\x07\x80\u0B7D" + - "\n\x80\f\x80\x0E\x80\u0B80\v\x80\x03\x81\x03\x81\x03\x81\x03\x82\x03\x82" + - "\x06\x82\u0B87\n\x82\r\x82\x0E\x82\u0B88\x03\x82\x05\x82\u0B8C\n\x82\x03" + - "\x83\x03\x83\x03\x83\x05\x83\u0B91\n\x83\x03\x84\x03\x84\x03\x84\x03\x84" + - "\x03\x84\x03\x84\x05\x84\u0B99\n\x84\x03\x85\x03\x85\x03\x86\x03\x86\x05" + - "\x86\u0B9F\n\x86\x03\x86\x03\x86\x03\x86\x05\x86\u0BA4\n\x86\x03\x86\x03" + - "\x86\x03\x86\x05\x86\u0BA9\n\x86\x03\x86\x03\x86\x05\x86\u0BAD\n\x86\x03" + - "\x86\x03\x86\x05\x86\u0BB1\n\x86\x03\x86\x03\x86\x05\x86\u0BB5\n\x86\x03" + - "\x86\x03\x86\x05\x86\u0BB9\n\x86\x03\x86\x03\x86\x05\x86\u0BBD\n\x86\x03" + - "\x86\x03\x86\x05\x86\u0BC1\n\x86\x03\x86\x03\x86\x05\x86\u0BC5\n\x86\x03" + - "\x86\x05\x86\u0BC8\n\x86\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87" + - "\x03\x87\x05\x87\u0BD1\n\x87\x03\x88\x03\x88\x03\x89\x03\x89\x03\x8A\x03" + - "\x8A\x03\x8A\n\u039C\u03DA\u03E4\u03F5\u03FE\u0407\u0410\u0417\x02\x06" + - "V\xC0\xC4\xC6\x8B\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10" + - "\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02" + - "$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02:\x02<\x02>\x02" + - "@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02V\x02X\x02Z\x02" + - "\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02r\x02t\x02v\x02" + - "x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88\x02\x8A\x02\x8C" + - "\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A\x02\x9C\x02\x9E" + - "\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC\x02\xAE\x02\xB0" + - "\x02\xB2\x02\xB4\x02\xB6\x02\xB8\x02\xBA\x02\xBC\x02\xBE\x02\xC0\x02\xC2" + - "\x02\xC4\x02\xC6\x02\xC8\x02\xCA\x02\xCC\x02\xCE\x02\xD0\x02\xD2\x02\xD4" + - "\x02\xD6\x02\xD8\x02\xDA\x02\xDC\x02\xDE\x02\xE0\x02\xE2\x02\xE4\x02\xE6" + - "\x02\xE8\x02\xEA\x02\xEC\x02\xEE\x02\xF0\x02\xF2\x02\xF4\x02\xF6\x02\xF8" + - "\x02\xFA\x02\xFC\x02\xFE\x02\u0100\x02\u0102\x02\u0104\x02\u0106\x02\u0108" + - "\x02\u010A\x02\u010C\x02\u010E\x02\u0110\x02\u0112\x02\x02-\x04\x02AA" + - "\xB2\xB2\x04\x02!!\xC0\xC0\x04\x02@@\x94\x94\x04\x02eeqq\x03\x02,-\x04" + - "\x02\xE0\xE0\xFF\xFF\x04\x02\x10\x10$$\x07\x02))55WWdd\x8D\x8D\x03\x02" + - "EF\x04\x02WWdd\x04\x02\x98\x98\u0119\u0119\x04\x02\r\r\x87\x87\x04\x02" + - "\x89\x89\u0119\u0119\x05\x02??\x93\x93\xCA\xCA\x06\x02RRxx\xD2\xD2\xF5" + - "\xF5\x05\x02RR\xD2\xD2\xF5\xF5\x04\x02\x18\x18EE\x04\x02__\x7F\x7F\x04" + - "\x02\x0F\x0FJJ\x04\x02\u011D\u011D\u011F\u011F\x05\x02\x0F\x0F\x14\x14" + - "\xD6\xD6\x05\x02ZZ\xEF\xEF\xF7\xF7\x04\x02\u010E\u010F\u0113\u0113\x04" + - "\x02LL\u0110\u0112\x04\x02\u010E\u010F\u0116\u0116\x04\x02::<<\x03\x02" + - "\xDE\xDF\x04\x02\x05\x05ee\x04\x02\x05\x05aa\x05\x02\x1C\x1C\x82\x82\xEA" + - "\xEA\x03\x02\u0106\u010D\x04\x02LL\u010E\u0117\x06\x02\x12\x12qq\x97\x97" + - "\x9F\x9F\x04\x02ZZ\xEF\xEF\x03\x02\u010E\u010F\x04\x02KK\xA8\xA8\x04\x02" + - "\xA0\xA0\xD7\xD7\x04\x02``\xAF\xAF\x03\x02\u011E\u011F\x04\x02MM\xD1\xD1" + - "2\x02\r\x0E\x10\x11\x13\x13\x15\x16\x18\x19\x1B\x1B\x1D!$$&)++-35589>" + - "IKMQQSY\\\\^`cdgillnprsuwyy||~\x81\x84\x94\x96\x96\x99\x9A\x9D\x9E\xA1" + - "\xA1\xA3\xA4\xA6\xAF\xB1\xB9\xBB\xC1\xC3\xCA\xCC\xCF\xD1\xD5\xD7\xDF\xE1" + - "\xE5\xE9\xE9\xEB\xF4\xF8\xFB\xFE\u0100\u0103\u0103\u0105\u0105\x11\x02" + - "\x13\x1377RRffttxx}}\x83\x83\x95\x95\x9B\x9B\xC2\xC2\xCC\xCC\xD2\xD2\xF5" + - "\xF5\xFD\xFD\x12\x02\r\x12\x1468QSegsuwy|~\x82\x84\x94\x96\x9A\x9C\xC1" + - "\xC3\xCB\xCD\xD1\xD3\xF4\xF6\xFC\xFE\u0105\x02\u0DB3\x02\u0114\x03\x02" + - "\x02\x02\x04\u011E\x03\x02\x02\x02\x06\u0121\x03\x02\x02\x02\b\u0123\x03" + - "\x02\x02\x02\n\u0126\x03\x02\x02\x02\f\u0129\x03\x02\x02\x02\x0E\u012C" + - "\x03\x02\x02\x02\x10\u012F\x03\x02\x02\x02\x12\u041A\x03\x02\x02\x02\x14" + - "\u041C\x03\x02\x02\x02\x16\u04C6\x03\x02\x02\x02\x18\u04C8\x03\x02\x02" + - "\x02\x1A\u04D9\x03\x02\x02\x02\x1C\u04DF\x03\x02\x02\x02\x1E\u04EB\x03" + - "\x02\x02\x02 \u04F8\x03\x02\x02\x02\"\u04FB\x03\x02\x02\x02$\u04FF\x03" + - "\x02\x02\x02&\u053B\x03\x02\x02\x02(\u053D\x03\x02\x02\x02*\u0541\x03" + - "\x02\x02\x02,\u054D\x03\x02\x02\x02.\u0552\x03\x02\x02\x020\u0559\x03" + - "\x02\x02\x022\u055B\x03\x02\x02\x024\u0563\x03\x02\x02\x026\u056C\x03" + - "\x02\x02\x028\u0577\x03\x02\x02\x02:\u0586\x03\x02\x02\x02<\u0589\x03" + - "\x02\x02\x02>\u0594\x03\x02\x02\x02@\u05A4\x03\x02\x02\x02B\u05AA\x03" + - "\x02\x02\x02D\u05AC\x03\x02\x02\x02F\u05B7\x03\x02\x02\x02H\u05C8\x03" + - "\x02\x02\x02J\u05CF\x03\x02\x02\x02L\u05D1\x03\x02\x02\x02N\u05D7\x03" + - "\x02\x02\x02P\u060D\x03\x02\x02\x02R\u0619\x03\x02\x02\x02T\u0649\x03" + - "\x02\x02\x02V\u064C\x03\x02\x02\x02X\u0672\x03\x02\x02\x02Z\u0674\x03" + - "\x02\x02\x02\\\u067C\x03\x02\x02\x02^\u069D\x03\x02\x02\x02`\u06BC\x03" + - "\x02\x02\x02b\u06C8\x03\x02\x02\x02d\u06E8\x03\x02\x02\x02f\u06F4\x03" + - "\x02\x02\x02h\u06F7\x03\x02\x02\x02j\u0700\x03\x02\x02\x02l\u0711\x03" + - "\x02\x02\x02n\u0725\x03\x02\x02\x02p\u0727\x03\x02\x02\x02r\u072F\x03" + - "\x02\x02\x02t\u0733\x03\x02\x02\x02v\u0736\x03\x02\x02\x02x\u0739\x03" + - "\x02\x02\x02z\u0753\x03\x02\x02\x02|\u0755\x03\x02\x02\x02~\u0793\x03" + - "\x02\x02\x02\x80\u07A2\x03\x02\x02\x02\x82\u07A4\x03\x02\x02\x02\x84\u07C2" + - "\x03\x02\x02\x02\x86\u07C4\x03\x02\x02\x02\x88\u07CB\x03\x02\x02\x02\x8A" + - "\u07EB\x03\x02\x02\x02\x8C\u07ED\x03\x02\x02\x02\x8E\u07FF\x03\x02\x02" + - "\x02\x90\u0819\x03\x02\x02\x02\x92\u081F\x03\x02\x02\x02\x94\u0821\x03" + - "\x02\x02\x02\x96\u0840\x03\x02\x02\x02\x98\u0842\x03\x02\x02\x02\x9A\u0846" + - "\x03\x02\x02\x02\x9C\u084E\x03\x02\x02\x02\x9E\u0859\x03\x02\x02\x02\xA0" + - "\u085D\x03\x02\x02\x02\xA2\u0868\x03\x02\x02\x02\xA4\u0884\x03\x02\x02" + - "\x02\xA6\u0886\x03\x02\x02\x02\xA8\u0891\x03\x02\x02\x02\xAA\u08A7\x03" + - "\x02\x02\x02\xAC\u08DA\x03\x02\x02\x02\xAE\u08DC\x03\x02\x02\x02\xB0\u08E4" + - "\x03\x02\x02\x02\xB2\u08EF\x03\x02\x02\x02\xB4\u08F3\x03\x02\x02\x02\xB6" + - "\u08FD\x03\x02\x02\x02\xB8\u0905\x03\x02\x02\x02\xBA\u091D\x03\x02\x02" + - "\x02\xBC\u0921\x03\x02\x02\x02\xBE\u0923\x03\x02\x02\x02\xC0\u0931\x03" + - "\x02\x02\x02\xC2\u0990\x03\x02\x02\x02\xC4\u0996\x03\x02\x02\x02\xC6\u0A68" + - "\x03\x02\x02\x02\xC8\u0A83\x03\x02\x02\x02\xCA\u0A85\x03\x02\x02\x02\xCC" + - "\u0A87\x03\x02\x02\x02\xCE\u0A89\x03\x02\x02\x02\xD0\u0A8B\x03\x02\x02" + - "\x02\xD2\u0A8D\x03\x02\x02\x02\xD4\u0A92\x03\x02\x02\x02\xD6\u0A99\x03" + - "\x02\x02\x02\xD8\u0A9D\x03\x02\x02\x02\xDA\u0AA2\x03\x02\x02\x02\xDC\u0AAC" + - "\x03\x02\x02\x02\xDE\u0AB1\x03\x02\x02\x02\xE0\u0AD5\x03\x02\x02\x02\xE2" + - "\u0AD7\x03\x02\x02\x02\xE4\u0ADF\x03\x02\x02\x02\xE6\u0AEB\x03\x02\x02" + - "\x02\xE8\u0AF3\x03\x02\x02\x02\xEA\u0AFC\x03\x02\x02\x02\xEC\u0B04\x03" + - "\x02\x02\x02\xEE\u0B0E\x03\x02\x02\x02\xF0\u0B13\x03\x02\x02\x02\xF2\u0B1C" + - "\x03\x02\x02\x02\xF4\u0B4E\x03\x02\x02\x02\xF6\u0B60\x03\x02\x02\x02\xF8" + - "\u0B69\x03\x02\x02\x02\xFA\u0B6B\x03\x02\x02\x02\xFC\u0B77\x03\x02\x02" + - "\x02\xFE\u0B79\x03\x02\x02\x02\u0100\u0B81\x03\x02\x02\x02\u0102\u0B8B" + - "\x03\x02\x02\x02\u0104\u0B90\x03\x02\x02\x02\u0106\u0B98\x03\x02\x02\x02" + - "\u0108\u0B9A\x03\x02\x02\x02\u010A\u0BC7\x03\x02\x02\x02\u010C\u0BD0\x03" + - "\x02\x02\x02\u010E\u0BD2\x03\x02\x02\x02\u0110\u0BD4\x03\x02\x02\x02\u0112" + - "\u0BD6\x03\x02\x02\x02\u0114\u0115\x05\x04\x03\x02\u0115\u0116\x07\x02" + - "\x02\x03\u0116\x03\x03\x02\x02\x02\u0117\u0119\x05\x12\n\x02\u0118\u011A" + - "\x07\u0118\x02\x02\u0119\u0118\x03\x02\x02\x02\u0119\u011A\x03\x02\x02" + - "\x02\u011A\u011D\x03\x02\x02\x02\u011B\u011D\x05\x06\x04\x02\u011C\u0117" + - "\x03\x02\x02\x02\u011C\u011B\x03\x02\x02\x02\u011D\u0120\x03\x02\x02\x02" + - "\u011E\u011C\x03\x02\x02\x02\u011E\u011F\x03\x02\x02\x02\u011F\x05\x03" + - "\x02\x02\x02\u0120\u011E\x03\x02\x02\x02\u0121\u0122\x07\u0118\x02\x02" + - "\u0122\x07\x03\x02\x02\x02\u0123\u0124\x05\xB4[\x02\u0124\u0125\x07\x02" + - "\x02\x03\u0125\t\x03\x02\x02\x02\u0126\u0127\x05\xB2Z\x02\u0127\u0128" + - "\x07\x02\x02\x03\u0128\v\x03\x02\x02\x02\u0129\u012A\x05\xB0Y\x02\u012A" + - "\u012B\x07\x02\x02\x03\u012B\r\x03\x02\x02\x02\u012C\u012D\x05\xE0q\x02" + - "\u012D\u012E\x07\x02\x02\x03\u012E\x0F\x03\x02\x02\x02\u012F\u0130\x05" + - "\xE6t\x02\u0130\u0131\x07\x02\x02\x03\u0131\x11\x03\x02\x02\x02\u0132" + - "\u041B\x05$\x13\x02\u0133\u0135\x054\x1B\x02\u0134\u0133\x03\x02\x02\x02" + - "\u0134\u0135\x03\x02\x02\x02\u0135\u0136\x03\x02\x02\x02\u0136\u041B\x05" + - "P)\x02\u0137\u0139\x07\xFB\x02\x02\u0138\u013A\x07\x93\x02\x02\u0139\u0138" + - "\x03\x02\x02\x02\u0139\u013A\x03\x02\x02\x02\u013A\u013B\x03\x02\x02\x02" + - "\u013B\u041B\x05\xB0Y\x02\u013C\u013D\x076\x02\x02\u013D\u0141\x05.\x18" + - "\x02\u013E\u013F\x07n\x02\x02\u013F\u0140\x07\x97\x02\x02\u0140\u0142" + - "\x07T\x02\x02\u0141\u013E\x03\x02\x02\x02\u0141\u0142\x03\x02\x02\x02" + - "\u0142\u0143\x03\x02\x02\x02\u0143\u014B\x05\xB0Y\x02\u0144\u014A\x05" + - "\"\x12\x02\u0145\u014A\x05 \x11\x02\u0146\u0147\x07\u0104\x02\x02\u0147" + - "\u0148\t\x02\x02\x02\u0148\u014A\x05<\x1F\x02\u0149\u0144\x03\x02\x02" + - "\x02\u0149\u0145\x03\x02\x02\x02\u0149\u0146\x03\x02\x02\x02\u014A\u014D" + - "\x03\x02\x02\x02\u014B\u0149\x03\x02\x02\x02\u014B\u014C\x03\x02\x02\x02" + - "\u014C\u041B\x03\x02\x02\x02\u014D\u014B\x03\x02\x02\x02\u014E\u014F\x07" + - "\x10\x02\x02\u014F\u0150\x05.\x18\x02\u0150\u0151\x05\xB0Y\x02\u0151\u0152" + - "\x07\xD1\x02\x02\u0152\u0153\t\x02\x02\x02\u0153\u0154\x05<\x1F\x02\u0154" + - "\u041B\x03\x02\x02\x02\u0155\u0156\x07\x10\x02\x02\u0156\u0157\x05.\x18" + - "\x02\u0157\u0158\x05\xB0Y\x02\u0158\u0159\x07\xD1\x02\x02\u0159\u015A" + - "\x05 \x11\x02\u015A\u041B\x03\x02\x02\x02\u015B\u015C\x07M\x02\x02\u015C" + - "\u015F\x05.\x18\x02\u015D\u015E\x07n\x02\x02\u015E\u0160\x07T\x02\x02" + - "\u015F\u015D\x03\x02\x02\x02\u015F\u0160\x03\x02\x02\x02\u0160\u0161\x03" + - "\x02\x02\x02\u0161\u0163\x05\xB0Y\x02\u0162\u0164\t\x03\x02\x02\u0163" + - "\u0162\x03\x02\x02\x02\u0163\u0164\x03\x02\x02\x02\u0164\u041B\x03\x02" + - "\x02\x02\u0165\u0166\x07\xD4\x02\x02\u0166\u0169\t\x04\x02\x02\u0167\u0168" + - "\t\x05\x02\x02\u0168\u016A\x05\xB0Y\x02\u0169\u0167\x03\x02\x02\x02\u0169" + - "\u016A\x03\x02\x02\x02\u016A\u016F\x03\x02\x02\x02\u016B\u016D\x07\x84" + - "\x02\x02\u016C\u016B\x03\x02\x02\x02\u016C\u016D\x03\x02\x02\x02\u016D" + - "\u016E\x03\x02\x02\x02\u016E\u0170\x07\u0119\x02\x02\u016F\u016C\x03\x02" + - "\x02\x02\u016F\u0170\x03\x02\x02\x02\u0170\u041B\x03\x02\x02\x02\u0171" + - "\u0176\x05\x18\r\x02\u0172\u0173\x07\x03\x02\x02\u0173\u0174\x05\xE6t" + - "\x02\u0174\u0175\x07\x04\x02\x02\u0175\u0177\x03\x02\x02\x02\u0176\u0172" + - "\x03\x02\x02\x02\u0176\u0177\x03\x02\x02\x02\u0177\u0178\x03\x02\x02\x02" + - "\u0178\u0179\x058\x1D\x02\u0179\u017E\x05:\x1E\x02\u017A\u017C\x07\x17" + - "\x02\x02\u017B\u017A\x03\x02\x02\x02\u017B\u017C\x03\x02\x02\x02\u017C" + - "\u017D\x03\x02\x02\x02\u017D\u017F\x05$\x13\x02\u017E\u017B\x03\x02\x02" + - "\x02\u017E\u017F\x03\x02\x02\x02\u017F\u041B\x03\x02\x02\x02\u0180\u0185" + - "\x05\x18\r\x02\u0181\u0182\x07\x03\x02\x02\u0182\u0183\x05\xE6t\x02\u0183" + - "\u0184\x07\x04\x02\x02\u0184\u0186\x03\x02\x02\x02\u0185\u0181\x03\x02" + - "\x02\x02\u0185\u0186\x03\x02\x02\x02\u0186\u019C\x03\x02\x02\x02\u0187" + - "\u019B\x05\"\x12\x02\u0188\u0189\x07\xA9\x02\x02\u0189\u018A\x07\x1F\x02" + - "\x02\u018A\u018B\x07\x03\x02\x02\u018B\u018C\x05\xE6t\x02\u018C\u018D" + - "\x07\x04\x02\x02\u018D\u0192\x03\x02\x02\x02\u018E\u018F\x07\xA9\x02\x02" + - "\u018F\u0190\x07\x1F\x02\x02\u0190\u0192\x05\x98M\x02\u0191\u0188\x03" + - "\x02\x02\x02\u0191\u018E\x03\x02\x02\x02\u0192\u019B\x03\x02\x02\x02\u0193" + - "\u019B\x05\x1C\x0F\x02\u0194\u019B\x05\x1E\x10\x02\u0195\u019B\x05\xAC" + - "W\x02\u0196\u019B\x05H%\x02\u0197\u019B\x05 \x11\x02\u0198\u0199\x07\xE3" + - "\x02\x02\u0199\u019B\x05<\x1F\x02\u019A\u0187\x03\x02\x02\x02\u019A\u0191" + - "\x03\x02\x02\x02\u019A\u0193\x03\x02\x02\x02\u019A\u0194\x03\x02\x02\x02" + - "\u019A\u0195\x03\x02\x02\x02\u019A\u0196\x03\x02\x02\x02\u019A\u0197\x03" + - "\x02\x02\x02\u019A\u0198\x03\x02\x02\x02\u019B\u019E\x03\x02\x02\x02\u019C" + - "\u019A\x03\x02\x02\x02\u019C\u019D\x03\x02\x02\x02\u019D\u01A3\x03\x02" + - "\x02\x02\u019E\u019C\x03\x02\x02\x02\u019F\u01A1\x07\x17\x02\x02\u01A0" + - "\u019F\x03\x02\x02\x02\u01A0\u01A1\x03\x02\x02\x02\u01A1\u01A2\x03\x02" + - "\x02\x02\u01A2\u01A4\x05$\x13\x02\u01A3\u01A0\x03\x02\x02\x02\u01A3\u01A4" + - "\x03\x02\x02\x02\u01A4\u041B\x03\x02\x02\x02\u01A5\u01A6\x076\x02\x02" + - "\u01A6\u01AA\x07\xE0\x02\x02\u01A7\u01A8\x07n\x02\x02\u01A8\u01A9\x07" + - "\x97\x02\x02\u01A9\u01AB\x07T\x02\x02\u01AA\u01A7\x03\x02\x02\x02\u01AA" + - "\u01AB\x03\x02\x02\x02\u01AB\u01AC\x03\x02\x02\x02\u01AC\u01AD\x05\xB2" + - "Z\x02\u01AD\u01AE\x07\x84\x02\x02\u01AE\u01B7\x05\xB2Z\x02\u01AF\u01B6" + - "\x058\x1D\x02\u01B0\u01B6\x05\xACW\x02\u01B1\u01B6\x05H%\x02\u01B2\u01B6" + - "\x05 \x11\x02\u01B3\u01B4\x07\xE3\x02\x02\u01B4\u01B6\x05<\x1F\x02\u01B5" + - "\u01AF\x03\x02\x02\x02\u01B5\u01B0\x03\x02\x02\x02\u01B5\u01B1\x03\x02" + - "\x02\x02\u01B5\u01B2\x03\x02\x02\x02\u01B5\u01B3\x03\x02\x02\x02\u01B6" + - "\u01B9\x03\x02\x02\x02\u01B7\u01B5\x03\x02\x02\x02\u01B7\u01B8\x03\x02" + - "\x02\x02\u01B8\u041B\x03\x02\x02\x02\u01B9\u01B7\x03\x02\x02\x02\u01BA" + - "\u01BF\x05\x1A\x0E\x02\u01BB\u01BC\x07\x03\x02\x02\u01BC\u01BD\x05\xE6" + - "t\x02\u01BD\u01BE\x07\x04\x02\x02\u01BE\u01C0\x03\x02\x02\x02\u01BF\u01BB" + - "\x03\x02\x02\x02\u01BF\u01C0\x03\x02\x02\x02\u01C0\u01C1\x03\x02\x02\x02" + - "\u01C1\u01C2\x058\x1D\x02\u01C2\u01C7\x05:\x1E\x02\u01C3\u01C5\x07\x17" + - "\x02\x02\u01C4\u01C3\x03\x02\x02\x02\u01C4\u01C5\x03\x02\x02\x02\u01C5" + - "\u01C6\x03\x02\x02\x02\u01C6\u01C8\x05$\x13\x02\u01C7\u01C4\x03\x02\x02" + - "\x02\u01C7\u01C8\x03\x02\x02\x02\u01C8\u041B\x03\x02\x02\x02\u01C9\u01CA" + - "\x07\x11\x02\x02\u01CA\u01CB\x07\xE0\x02\x02\u01CB\u01CD\x05\xB0Y\x02" + - "\u01CC\u01CE\x05*\x16\x02\u01CD\u01CC\x03\x02\x02\x02\u01CD\u01CE\x03" + - "\x02\x02\x02\u01CE\u01CF\x03\x02\x02\x02\u01CF\u01D0\x072\x02\x02\u01D0" + - "\u01D8\x07\xDA\x02\x02\u01D1\u01D9\x05\u0104\x83\x02\u01D2\u01D3\x07a" + - "\x02\x02\u01D3\u01D4\x07-\x02\x02\u01D4\u01D9\x05\x9AN\x02\u01D5\u01D6" + - "\x07a\x02\x02\u01D6\u01D7\x07\x0F\x02\x02\u01D7\u01D9\x07-\x02\x02\u01D8" + - "\u01D1\x03\x02\x02\x02\u01D8\u01D2\x03\x02\x02\x02\u01D8\u01D5\x03\x02" + - "\x02\x02\u01D8\u01D9\x03\x02\x02\x02\u01D9\u041B\x03\x02\x02\x02\u01DA" + - "\u01DB\x07\x10\x02\x02\u01DB\u01DC\x07\xE0\x02\x02\u01DC\u01DD\x05\xB0" + - "Y\x02\u01DD\u01DE\x07\r\x02\x02\u01DE\u01DF\t\x06\x02\x02\u01DF\u01E0" + - "\x05\xE2r\x02\u01E0\u041B\x03\x02\x02\x02\u01E1\u01E2\x07\x10\x02\x02" + - "\u01E2\u01E3\x07\xE0\x02\x02\u01E3\u01E4\x05\xB0Y\x02\u01E4\u01E5\x07" + - "\r\x02\x02\u01E5\u01E6\t\x06\x02\x02\u01E6\u01E7\x07\x03\x02\x02\u01E7" + - "\u01E8\x05\xE2r\x02\u01E8\u01E9\x07\x04\x02\x02\u01E9\u041B\x03\x02\x02" + - "\x02\u01EA\u01EB\x07\x10\x02\x02\u01EB\u01EC\x07\xE0\x02\x02\u01EC\u01ED" + - "\x05\xB0Y\x02\u01ED\u01EE\x07\xBC\x02\x02\u01EE\u01EF\x07,\x02\x02\u01EF" + - "\u01F0\x05\xB0Y\x02\u01F0\u01F1\x07\xE8\x02\x02\u01F1\u01F2\x05\u0100" + - "\x81\x02\u01F2\u041B\x03\x02\x02\x02\u01F3\u01F4\x07\x10\x02\x02\u01F4" + - "\u01F5\x07\xE0\x02\x02\u01F5\u01F6\x05\xB0Y\x02\u01F6\u01F7\x07M\x02\x02" + - "\u01F7\u01F8\t\x06\x02\x02\u01F8\u01F9\x07\x03\x02\x02\u01F9\u01FA\x05" + - "\xAEX\x02\u01FA\u01FB\x07\x04\x02\x02\u01FB\u041B\x03\x02\x02\x02\u01FC" + - "\u01FD\x07\x10\x02\x02\u01FD\u01FE\x07\xE0\x02\x02\u01FE\u01FF\x05\xB0" + - "Y\x02\u01FF\u0200\x07M\x02\x02\u0200\u0201\t\x06\x02\x02\u0201\u0202\x05" + - "\xAEX\x02\u0202\u041B\x03\x02\x02\x02\u0203\u0204\x07\x10\x02\x02\u0204" + - "\u0205\t\x07\x02\x02\u0205\u0206\x05\xB0Y\x02\u0206\u0207\x07\xBC\x02" + - "\x02\u0207\u0208\x07\xE8\x02\x02\u0208\u0209\x05\xB0Y\x02\u0209\u041B" + - "\x03\x02\x02\x02\u020A\u020B\x07\x10\x02\x02\u020B\u020C\t\x07\x02\x02" + - "\u020C\u020D\x05\xB0Y\x02\u020D\u020E\x07\xD1\x02\x02\u020E\u020F\x07" + - "\xE3\x02\x02\u020F\u0210\x05<\x1F\x02\u0210\u041B\x03\x02\x02\x02\u0211" + - "\u0212\x07\x10\x02\x02\u0212\u0213\t\x07\x02\x02\u0213\u0214\x05\xB0Y" + - "\x02\u0214\u0215\x07\xF9\x02\x02\u0215\u0218\x07\xE3\x02\x02\u0216\u0217" + - "\x07n\x02\x02\u0217\u0219\x07T\x02\x02\u0218\u0216\x03\x02\x02\x02\u0218" + - "\u0219\x03\x02\x02\x02\u0219\u021A\x03\x02\x02\x02\u021A\u021B\x05<\x1F" + - "\x02\u021B\u041B\x03\x02\x02\x02\u021C\u021D\x07\x10\x02\x02\u021D\u021E" + - "\x07\xE0\x02\x02\u021E\u021F\x05\xB0Y\x02\u021F\u0221\t\b\x02\x02\u0220" + - "\u0222\x07,\x02\x02\u0221\u0220\x03\x02\x02\x02\u0221\u0222\x03\x02\x02" + - "\x02\u0222\u0223\x03\x02\x02\x02\u0223\u0225\x05\xB0Y\x02\u0224\u0226" + - "\x05\u010C\x87\x02\u0225\u0224\x03\x02\x02\x02\u0225\u0226\x03\x02\x02" + - "\x02\u0226\u041B\x03\x02\x02\x02\u0227\u0228\x07\x10"; - private static readonly _serializedATNSegment2: string = - "\x02\x02\u0228\u0229\x07\xE0\x02\x02\u0229\u022B\x05\xB0Y\x02\u022A\u022C" + - "\x05*\x16\x02\u022B\u022A\x03\x02\x02\x02\u022B\u022C\x03\x02\x02\x02" + - "\u022C\u022D\x03\x02\x02\x02\u022D\u022F\x07$\x02\x02\u022E\u0230\x07" + - ",\x02\x02\u022F\u022E\x03\x02\x02\x02\u022F\u0230\x03\x02\x02\x02\u0230" + - "\u0231\x03\x02\x02\x02\u0231\u0232\x05\xB0Y\x02\u0232\u0234\x05\xE8u\x02" + - "\u0233\u0235\x05\xDEp\x02\u0234\u0233\x03\x02\x02\x02\u0234\u0235\x03" + - "\x02\x02\x02\u0235\u041B\x03\x02\x02\x02\u0236\u0237\x07\x10\x02\x02\u0237" + - "\u0238\x07\xE0\x02\x02\u0238\u023A\x05\xB0Y\x02\u0239\u023B\x05*\x16\x02" + - "\u023A\u0239\x03\x02\x02\x02\u023A\u023B\x03\x02\x02\x02\u023B\u023C\x03" + - "\x02\x02\x02\u023C\u023D\x07\xBE\x02\x02\u023D\u023E\x07-\x02\x02\u023E" + - "\u023F\x07\x03\x02\x02\u023F\u0240\x05\xE2r\x02\u0240\u0241\x07\x04\x02" + - "\x02\u0241\u041B\x03\x02\x02\x02\u0242\u0243\x07\x10\x02\x02\u0243\u0244" + - "\x07\xE0\x02\x02\u0244\u0246\x05\xB0Y\x02\u0245\u0247\x05*\x16\x02\u0246" + - "\u0245\x03\x02\x02\x02\u0246\u0247\x03\x02\x02\x02\u0247\u0248\x03\x02" + - "\x02\x02\u0248\u0249\x07\xD1\x02\x02\u0249\u024A\x07\xCE\x02\x02\u024A" + - "\u024E\x07\u0119\x02\x02\u024B\u024C\x07\u0104\x02\x02\u024C\u024D\x07" + - "\xCF\x02\x02\u024D\u024F\x05<\x1F\x02\u024E\u024B\x03\x02\x02\x02\u024E" + - "\u024F\x03\x02\x02\x02\u024F\u041B\x03\x02\x02\x02\u0250\u0251\x07\x10" + - "\x02\x02\u0251\u0252\x07\xE0\x02\x02\u0252\u0254\x05\xB0Y\x02\u0253\u0255" + - "\x05*\x16\x02\u0254\u0253\x03\x02\x02\x02\u0254\u0255\x03\x02\x02\x02" + - "\u0255\u0256\x03\x02\x02\x02\u0256\u0257\x07\xD1\x02\x02\u0257\u0258\x07" + - "\xCF\x02\x02\u0258\u0259\x05<\x1F\x02\u0259\u041B\x03\x02\x02\x02\u025A" + - "\u025B\x07\x10\x02\x02\u025B\u025C\t\x07\x02\x02\u025C\u025D\x05\xB0Y" + - "\x02\u025D\u0261\x07\r\x02\x02\u025E\u025F\x07n\x02\x02\u025F\u0260\x07" + - "\x97\x02\x02\u0260\u0262\x07T\x02\x02\u0261\u025E\x03\x02\x02\x02\u0261" + - "\u0262\x03\x02\x02\x02\u0262\u0264\x03\x02\x02\x02\u0263\u0265\x05(\x15" + - "\x02\u0264\u0263\x03\x02\x02\x02\u0265\u0266\x03\x02\x02\x02\u0266\u0264" + - "\x03\x02\x02\x02\u0266\u0267\x03\x02\x02\x02\u0267\u041B\x03\x02\x02\x02" + - "\u0268\u0269\x07\x10\x02\x02\u0269\u026A\x07\xE0\x02\x02\u026A\u026B\x05" + - "\xB0Y\x02\u026B\u026C\x05*\x16\x02\u026C\u026D\x07\xBC\x02\x02\u026D\u026E" + - "\x07\xE8\x02\x02\u026E\u026F\x05*\x16\x02\u026F\u041B\x03\x02\x02\x02" + - "\u0270\u0271\x07\x10\x02\x02\u0271\u0272\t\x07\x02\x02\u0272\u0273\x05" + - "\xB0Y\x02\u0273\u0276\x07M\x02\x02\u0274\u0275\x07n\x02\x02\u0275\u0277" + - "\x07T\x02\x02\u0276\u0274\x03\x02\x02\x02\u0276\u0277\x03\x02\x02\x02" + - "\u0277\u0278\x03\x02\x02\x02\u0278\u027D\x05*\x16\x02\u0279\u027A\x07" + - "\x05\x02\x02\u027A\u027C\x05*\x16\x02\u027B\u0279\x03\x02\x02\x02\u027C" + - "\u027F\x03\x02\x02\x02\u027D\u027B\x03\x02\x02\x02\u027D\u027E\x03\x02" + - "\x02\x02\u027E\u0281\x03\x02\x02\x02\u027F\u027D\x03\x02\x02\x02\u0280" + - "\u0282\x07\xB3\x02\x02\u0281\u0280\x03\x02\x02\x02\u0281\u0282\x03\x02" + - "\x02\x02\u0282\u041B\x03\x02\x02\x02\u0283\u0284\x07\x10\x02\x02\u0284" + - "\u0285\x07\xE0\x02\x02\u0285\u0287\x05\xB0Y\x02\u0286\u0288\x05*\x16\x02" + - "\u0287\u0286\x03\x02\x02\x02\u0287\u0288\x03\x02\x02\x02\u0288\u0289\x03" + - "\x02\x02\x02\u0289\u028A\x07\xD1\x02\x02\u028A\u028B\x05 \x11\x02\u028B" + - "\u041B\x03\x02\x02\x02\u028C\u028D\x07\x10\x02\x02\u028D\u028E\x07\xE0" + - "\x02\x02\u028E\u028F\x05\xB0Y\x02\u028F\u0290\x07\xB8\x02\x02\u0290\u0291" + - "\x07\xAA\x02\x02\u0291\u041B\x03\x02\x02\x02\u0292\u0293\x07M\x02\x02" + - "\u0293\u0296\x07\xE0\x02\x02\u0294\u0295\x07n\x02\x02\u0295\u0297\x07" + - "T\x02\x02\u0296\u0294\x03\x02\x02\x02\u0296\u0297\x03\x02\x02\x02\u0297" + - "\u0298\x03\x02\x02\x02\u0298\u029A\x05\xB0Y\x02\u0299\u029B\x07\xB3\x02" + - "\x02\u029A\u0299\x03\x02\x02\x02\u029A\u029B\x03\x02\x02\x02\u029B\u041B" + - "\x03\x02\x02\x02\u029C\u029D\x07M\x02\x02\u029D\u02A0\x07\xFF\x02\x02" + - "\u029E\u029F\x07n\x02\x02\u029F\u02A1\x07T\x02\x02\u02A0\u029E\x03\x02" + - "\x02\x02\u02A0\u02A1\x03\x02\x02\x02\u02A1\u02A2\x03\x02\x02\x02\u02A2" + - "\u041B\x05\xB0Y\x02\u02A3\u02A6\x076\x02\x02\u02A4\u02A5\x07\x9F\x02\x02" + - "\u02A5\u02A7\x07\xBE\x02\x02\u02A6\u02A4\x03\x02\x02\x02\u02A6\u02A7\x03" + - "\x02\x02\x02\u02A7\u02AC\x03\x02\x02\x02\u02A8\u02AA\x07i\x02\x02\u02A9" + - "\u02A8\x03\x02\x02\x02\u02A9\u02AA\x03\x02\x02\x02\u02AA\u02AB\x03\x02" + - "\x02\x02\u02AB\u02AD\x07\xE4\x02\x02\u02AC\u02A9\x03\x02\x02\x02\u02AC" + - "\u02AD\x03\x02\x02\x02\u02AD\u02AE\x03\x02\x02\x02\u02AE\u02B2\x07\xFF" + - "\x02\x02\u02AF\u02B0\x07n\x02\x02\u02B0\u02B1\x07\x97\x02\x02\u02B1\u02B3" + - "\x07T\x02\x02\u02B2\u02AF\x03\x02\x02\x02\u02B2\u02B3\x03\x02\x02\x02" + - "\u02B3\u02B4\x03\x02\x02\x02\u02B4\u02B6\x05\xB0Y\x02\u02B5\u02B7\x05" + - "\xA0Q\x02\u02B6\u02B5\x03\x02\x02\x02\u02B6\u02B7\x03\x02\x02\x02\u02B7" + - "\u02C0\x03\x02\x02\x02\u02B8\u02BF\x05\"\x12\x02\u02B9\u02BA\x07\xA9\x02" + - "\x02\u02BA\u02BB\x07\x9B\x02\x02\u02BB\u02BF\x05\x98M\x02\u02BC\u02BD" + - "\x07\xE3\x02\x02\u02BD\u02BF\x05<\x1F\x02\u02BE\u02B8\x03\x02\x02\x02" + - "\u02BE\u02B9\x03\x02\x02\x02\u02BE\u02BC\x03\x02\x02\x02\u02BF\u02C2\x03" + - "\x02\x02\x02\u02C0\u02BE\x03\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1" + - "\u02C3\x03\x02\x02\x02\u02C2\u02C0\x03\x02\x02\x02\u02C3\u02C4\x07\x17" + - "\x02\x02\u02C4\u02C5\x05$\x13\x02\u02C5\u041B\x03\x02\x02\x02\u02C6\u02C9" + - "\x076\x02\x02\u02C7\u02C8\x07\x9F\x02\x02\u02C8\u02CA\x07\xBE\x02\x02" + - "\u02C9\u02C7\x03\x02\x02\x02\u02C9\u02CA\x03\x02\x02\x02\u02CA\u02CC\x03" + - "\x02\x02\x02\u02CB\u02CD\x07i\x02\x02\u02CC\u02CB\x03\x02\x02\x02\u02CC" + - "\u02CD\x03\x02\x02\x02\u02CD\u02CE\x03\x02\x02\x02\u02CE\u02CF\x07\xE4" + - "\x02\x02\u02CF\u02D0\x07\xFF\x02\x02\u02D0\u02D5\x05\xB2Z\x02\u02D1\u02D2" + - "\x07\x03\x02\x02\u02D2\u02D3\x05\xE6t\x02\u02D3\u02D4\x07\x04\x02\x02" + - "\u02D4\u02D6\x03\x02\x02\x02\u02D5\u02D1\x03\x02\x02\x02\u02D5\u02D6\x03" + - "\x02\x02\x02\u02D6\u02D7\x03\x02\x02\x02\u02D7\u02DA\x058\x1D\x02\u02D8" + - "\u02D9\x07\x9E\x02\x02\u02D9\u02DB\x05<\x1F\x02\u02DA\u02D8\x03\x02\x02" + - "\x02\u02DA\u02DB\x03\x02\x02\x02\u02DB\u041B\x03\x02\x02\x02\u02DC\u02DD" + - "\x07\x10\x02\x02\u02DD\u02DE\x07\xFF\x02\x02\u02DE\u02E0\x05\xB0Y\x02" + - "\u02DF\u02E1\x07\x17\x02\x02\u02E0\u02DF\x03\x02\x02\x02\u02E0\u02E1\x03" + - "\x02\x02\x02\u02E1\u02E2\x03\x02\x02\x02\u02E2\u02E3\x05$\x13\x02\u02E3" + - "\u041B\x03\x02\x02\x02\u02E4\u02E7\x076\x02\x02\u02E5\u02E6\x07\x9F\x02" + - "\x02\u02E6\u02E8\x07\xBE\x02\x02\u02E7\u02E5\x03\x02\x02\x02\u02E7\u02E8" + - "\x03\x02\x02\x02\u02E8\u02EA\x03\x02\x02\x02\u02E9\u02EB\x07\xE4\x02\x02" + - "\u02EA\u02E9\x03\x02\x02\x02\u02EA\u02EB\x03\x02\x02\x02\u02EB\u02EC\x03" + - "\x02\x02\x02\u02EC\u02F0\x07g\x02\x02\u02ED\u02EE\x07n\x02\x02\u02EE\u02EF" + - "\x07\x97\x02\x02\u02EF\u02F1\x07T\x02\x02\u02F0\u02ED\x03\x02\x02\x02" + - "\u02F0\u02F1\x03\x02\x02\x02\u02F1\u02F2\x03\x02\x02\x02\u02F2\u02F3\x05" + - "\xB0Y\x02\u02F3\u02F4\x07\x17\x02\x02\u02F4\u02FE\x07\u0119\x02\x02\u02F5" + - "\u02F6\x07\xFD\x02\x02\u02F6\u02FB\x05N(\x02\u02F7\u02F8\x07\x05\x02\x02" + - "\u02F8\u02FA\x05N(\x02\u02F9\u02F7\x03\x02\x02\x02\u02FA\u02FD\x03\x02" + - "\x02\x02\u02FB\u02F9\x03\x02\x02\x02\u02FB\u02FC\x03\x02\x02\x02\u02FC" + - "\u02FF\x03\x02\x02\x02\u02FD\u02FB\x03\x02\x02\x02\u02FE\u02F5\x03\x02" + - "\x02\x02\u02FE\u02FF\x03\x02\x02\x02\u02FF\u041B\x03\x02\x02\x02\u0300" + - "\u0302\x07M\x02\x02\u0301\u0303\x07\xE4\x02\x02\u0302\u0301\x03\x02\x02" + - "\x02\u0302\u0303\x03\x02\x02\x02\u0303\u0304\x03\x02\x02\x02\u0304\u0307" + - "\x07g\x02\x02\u0305\u0306\x07n\x02\x02\u0306\u0308\x07T\x02\x02\u0307" + - "\u0305\x03\x02\x02\x02\u0307\u0308\x03\x02\x02\x02\u0308\u0309\x03\x02" + - "\x02\x02\u0309\u041B\x05\xB0Y\x02\u030A\u030C\x07U\x02\x02\u030B\u030D" + - "\t\t\x02\x02\u030C\u030B\x03\x02\x02\x02\u030C\u030D\x03\x02\x02\x02\u030D" + - "\u030E\x03\x02\x02\x02\u030E\u041B\x05\x12\n\x02\u030F\u0310\x07\xD4\x02" + - "\x02\u0310\u0313\x07\xE1\x02\x02\u0311\u0312\t\x05\x02\x02\u0312\u0314" + - "\x05\xB0Y\x02\u0313\u0311\x03\x02\x02\x02\u0313\u0314\x03\x02\x02\x02" + - "\u0314\u0319\x03\x02\x02\x02\u0315\u0317\x07\x84\x02\x02\u0316\u0315\x03" + - "\x02\x02\x02\u0316\u0317\x03\x02\x02\x02\u0317\u0318\x03\x02\x02\x02\u0318" + - "\u031A\x07\u0119\x02\x02\u0319\u0316\x03\x02\x02\x02\u0319\u031A\x03\x02" + - "\x02\x02\u031A\u041B\x03\x02\x02\x02\u031B\u031C\x07\xD4\x02\x02\u031C" + - "\u031D\x07\xE0\x02\x02\u031D\u0320\x07W\x02\x02\u031E\u031F\t\x05\x02" + - "\x02\u031F\u0321\x05\xB0Y\x02\u0320\u031E\x03\x02\x02\x02\u0320\u0321" + - "\x03\x02\x02\x02\u0321\u0322\x03\x02\x02\x02\u0322\u0323\x07\x84\x02\x02" + - "\u0323\u0325\x07\u0119\x02\x02\u0324\u0326\x05*\x16\x02\u0325\u0324\x03" + - "\x02\x02\x02\u0325\u0326\x03\x02\x02\x02\u0326\u041B\x03\x02\x02\x02\u0327" + - "\u0328\x07\xD4\x02\x02\u0328\u0329\x07\xE3\x02\x02\u0329\u032E\x05\xB0" + - "Y\x02\u032A\u032B\x07\x03\x02\x02\u032B\u032C\x05@!\x02\u032C\u032D\x07" + - "\x04\x02\x02\u032D\u032F\x03\x02\x02\x02\u032E\u032A\x03\x02\x02\x02\u032E" + - "\u032F\x03\x02\x02\x02\u032F\u041B\x03\x02\x02\x02\u0330\u0331\x07\xD4" + - "\x02\x02\u0331\u0332\x07-\x02\x02\u0332\u0333\t\x05\x02\x02\u0333\u0336" + - "\x05\xB0Y\x02\u0334\u0335\t\x05\x02\x02\u0335\u0337\x05\xB0Y\x02\u0336" + - "\u0334\x03\x02\x02\x02\u0336\u0337\x03\x02\x02\x02\u0337\u041B\x03\x02" + - "\x02\x02\u0338\u0339\x07\xD4\x02\x02\u0339\u033C\x07\u0100\x02\x02\u033A" + - "\u033B\t\x05\x02\x02\u033B\u033D\x05\xB0Y\x02\u033C\u033A\x03\x02\x02" + - "\x02\u033C\u033D\x03\x02\x02\x02\u033D\u0342\x03\x02\x02\x02\u033E\u0340" + - "\x07\x84\x02\x02\u033F\u033E\x03\x02\x02\x02\u033F\u0340\x03\x02\x02\x02" + - "\u0340\u0341\x03\x02\x02\x02\u0341\u0343\x07\u0119\x02\x02\u0342\u033F" + - "\x03\x02\x02\x02\u0342\u0343\x03\x02\x02\x02\u0343\u041B\x03\x02\x02\x02" + - "\u0344\u0345\x07\xD4\x02\x02\u0345\u0346\x07\xAA\x02\x02\u0346\u0348\x05" + - "\xB0Y\x02\u0347\u0349\x05*\x16\x02\u0348\u0347\x03\x02\x02\x02\u0348\u0349" + - "\x03\x02\x02\x02\u0349\u041B\x03\x02\x02\x02\u034A\u034C\x07\xD4\x02\x02" + - "\u034B\u034D\x05\u0104\x83\x02\u034C\u034B\x03\x02\x02\x02\u034C\u034D" + - "\x03\x02\x02\x02\u034D\u034E\x03\x02\x02\x02\u034E\u0356\x07h\x02\x02" + - "\u034F\u0351\x07\x84\x02\x02\u0350\u034F\x03\x02\x02\x02\u0350\u0351\x03" + - "\x02\x02\x02\u0351\u0354\x03\x02\x02\x02\u0352\u0355\x05\xB0Y\x02\u0353" + - "\u0355\x07\u0119\x02\x02\u0354\u0352\x03\x02\x02\x02\u0354\u0353\x03\x02" + - "\x02\x02\u0355\u0357\x03\x02\x02\x02\u0356\u0350\x03\x02\x02\x02\u0356" + - "\u0357\x03\x02\x02\x02\u0357\u041B\x03\x02\x02\x02\u0358\u0359\x07\xD4" + - "\x02\x02\u0359\u035A\x076\x02\x02\u035A\u035B\x07\xE0\x02\x02\u035B\u035E" + - "\x05\xB0Y\x02\u035C\u035D\x07\x17\x02\x02\u035D\u035F\x07\xCE\x02\x02" + - "\u035E\u035C\x03\x02\x02\x02\u035E\u035F\x03\x02\x02\x02\u035F\u041B\x03" + - "\x02\x02\x02\u0360\u0361\x07\xD4\x02\x02\u0361\u0362\x079\x02\x02\u0362" + - "\u041B\x07\x93\x02\x02\u0363\u0364\t\n\x02\x02\u0364\u0366\x07g\x02\x02" + - "\u0365\u0367\x07W\x02\x02\u0366\u0365\x03\x02\x02\x02\u0366\u0367\x03" + - "\x02\x02\x02\u0367\u0368\x03\x02\x02\x02\u0368\u041B\x050\x19\x02\u0369" + - "\u036A\t\n\x02\x02\u036A\u036C\x05.\x18\x02\u036B\u036D\x07W\x02\x02\u036C" + - "\u036B\x03\x02\x02\x02\u036C\u036D\x03\x02\x02\x02\u036D\u036E\x03\x02" + - "\x02\x02\u036E\u036F\x05\xB0Y\x02\u036F\u041B\x03\x02\x02\x02\u0370\u0372" + - "\t\n\x02\x02\u0371\u0373\x07\xE0\x02\x02\u0372\u0371\x03\x02\x02\x02\u0372" + - "\u0373\x03\x02\x02\x02\u0373\u0375\x03\x02\x02\x02\u0374\u0376\t\v\x02" + - "\x02\u0375\u0374\x03\x02\x02\x02\u0375\u0376\x03\x02\x02\x02\u0376\u0377" + - "\x03\x02\x02\x02\u0377\u0379\x05\xB0Y\x02\u0378\u037A\x05*\x16\x02\u0379" + - "\u0378\x03\x02\x02\x02\u0379\u037A\x03\x02\x02\x02\u037A\u037C\x03\x02" + - "\x02\x02\u037B\u037D\x052\x1A\x02\u037C\u037B\x03\x02\x02\x02\u037C\u037D" + - "\x03\x02\x02\x02\u037D\u041B\x03\x02\x02\x02\u037E\u0380\t\n\x02\x02\u037F" + - "\u0381\x07\xB4\x02\x02\u0380\u037F\x03\x02\x02\x02\u0380\u0381\x03\x02" + - "\x02\x02\u0381\u0382\x03\x02\x02\x02\u0382\u041B\x05$\x13\x02\u0383\u0384" + - "\x07.\x02\x02\u0384\u0385\x07\x9B\x02\x02\u0385\u0386\x05.\x18\x02\u0386" + - "\u0387\x05\xB0Y\x02\u0387\u0388\x07{\x02\x02\u0388\u0389\t\f\x02\x02\u0389" + - "\u041B\x03\x02\x02\x02\u038A\u038B\x07.\x02\x02\u038B\u038C\x07\x9B\x02" + - "\x02\u038C\u038D\x07\xE0\x02\x02\u038D\u038E\x05\xB0Y\x02\u038E\u038F" + - "\x07{\x02\x02\u038F\u0390\t\f\x02\x02\u0390\u041B\x03\x02\x02\x02\u0391" + - "\u0392\x07\xBB\x02\x02\u0392\u0393\x07\xE0\x02\x02\u0393\u041B\x05\xB0" + - "Y\x02\u0394\u0395\x07\xBB\x02\x02\u0395\u0396\x07g\x02\x02\u0396\u041B" + - "\x05\xB0Y\x02\u0397\u039F\x07\xBB\x02\x02\u0398\u03A0\x07\u0119\x02\x02" + - "\u0399\u039B\v\x02\x02\x02\u039A\u0399\x03\x02\x02\x02\u039B\u039E\x03" + - "\x02\x02\x02\u039C\u039D\x03\x02\x02\x02\u039C\u039A\x03\x02\x02\x02\u039D" + - "\u03A0\x03\x02\x02\x02\u039E\u039C\x03\x02\x02\x02\u039F\u0398\x03\x02" + - "\x02\x02\u039F\u039C\x03\x02\x02\x02\u03A0\u041B\x03\x02\x02\x02\u03A1" + - "\u03A3\x07 \x02\x02\u03A2\u03A4\x07\x81\x02\x02\u03A3\u03A2\x03\x02\x02" + - "\x02\u03A3\u03A4\x03\x02\x02\x02\u03A4\u03A5\x03\x02\x02\x02\u03A5\u03A6" + - "\x07\xE0\x02\x02\u03A6\u03A9\x05\xB0Y\x02\u03A7\u03A8\x07\x9E\x02\x02" + - "\u03A8\u03AA\x05<\x1F\x02\u03A9\u03A7\x03\x02\x02\x02\u03A9\u03AA\x03" + - "\x02\x02\x02\u03AA\u03AF\x03\x02\x02\x02\u03AB\u03AD\x07\x17\x02\x02\u03AC" + - "\u03AB\x03\x02\x02\x02\u03AC\u03AD\x03\x02\x02\x02\u03AD\u03AE\x03\x02" + - "\x02\x02\u03AE\u03B0\x05$\x13\x02\u03AF\u03AC\x03\x02\x02\x02\u03AF\u03B0" + - "\x03\x02\x02\x02\u03B0\u041B\x03\x02\x02\x02\u03B1\u03B2\x07\xF4\x02\x02" + - "\u03B2\u03B5\x07\xE0\x02\x02\u03B3\u03B4\x07n\x02\x02\u03B4\u03B6\x07" + - "T\x02\x02\u03B5\u03B3\x03\x02\x02\x02\u03B5\u03B6\x03\x02\x02\x02\u03B6" + - "\u03B7\x03\x02\x02\x02\u03B7\u041B\x05\xB0Y\x02\u03B8\u03B9\x07&\x02\x02" + - "\u03B9\u041B\x07 \x02\x02\u03BA\u03BB\x07\x88\x02\x02\u03BB\u03BD\x07" + - ">\x02\x02\u03BC\u03BE\x07\x89\x02\x02\u03BD\u03BC\x03\x02\x02\x02\u03BD" + - "\u03BE\x03\x02\x02\x02\u03BE\u03BF\x03\x02\x02\x02\u03BF\u03C0\x07u\x02" + - "\x02\u03C0\u03C2\x07\u0119\x02\x02\u03C1\u03C3\x07\xA7\x02\x02\u03C2\u03C1" + - "\x03\x02\x02\x02\u03C2\u03C3\x03\x02\x02\x02\u03C3\u03C4\x03\x02\x02\x02" + - "\u03C4\u03C5\x07z\x02\x02\u03C5\u03C6\x07\xE0\x02\x02\u03C6\u03C8\x05" + - "\xB0Y\x02\u03C7\u03C9\x05*\x16\x02\u03C8\u03C7\x03\x02\x02\x02\u03C8\u03C9" + - "\x03\x02\x02\x02\u03C9\u041B\x03\x02\x02\x02\u03CA\u03CB\x07\xF0\x02\x02" + - "\u03CB\u03CC\x07\xE0\x02\x02\u03CC\u03CE\x05\xB0Y\x02\u03CD\u03CF\x05" + - "*\x16\x02\u03CE\u03CD\x03\x02\x02\x02\u03CE\u03CF\x03\x02\x02\x02\u03CF" + - "\u041B\x03\x02\x02\x02\u03D0\u03D1\x07\x92\x02\x02\u03D1\u03D2\x07\xBD" + - "\x02\x02\u03D2\u03D3\x07\xE0\x02\x02\u03D3\u041B\x05\xB0Y\x02\u03D4\u03D5" + - "\t\r\x02\x02\u03D5\u03DD\x05\u0104\x83\x02\u03D6\u03DE\x07\u0119\x02\x02" + - "\u03D7\u03D9\v\x02\x02\x02\u03D8\u03D7\x03\x02\x02\x02\u03D9\u03DC\x03" + - "\x02\x02\x02\u03DA\u03DB\x03\x02\x02\x02\u03DA\u03D8\x03\x02\x02\x02\u03DB" + - "\u03DE\x03\x02\x02\x02\u03DC\u03DA\x03\x02\x02\x02\u03DD\u03D6\x03\x02" + - "\x02\x02\u03DD\u03DA\x03\x02\x02\x02\u03DE\u041B\x03\x02\x02\x02\u03DF" + - "\u03E0\x07\xD1\x02\x02\u03E0\u03E4\x07\xC4\x02\x02\u03E1\u03E3\v\x02\x02" + - "\x02\u03E2\u03E1\x03\x02\x02\x02\u03E3\u03E6\x03\x02\x02\x02\u03E4\u03E5" + - "\x03\x02\x02\x02\u03E4\u03E2\x03\x02\x02\x02\u03E5\u041B\x03\x02\x02\x02" + - "\u03E6\u03E4\x03\x02\x02\x02\u03E7\u03E8\x07\xD1\x02\x02\u03E8\u03E9\x07" + - "\xE7\x02\x02\u03E9\u03EA\x07\u0105\x02\x02\u03EA\u041B\x05\xD2j\x02\u03EB" + - "\u03EC\x07\xD1\x02\x02\u03EC\u03ED\x07\xE7\x02\x02\u03ED\u03EE\x07\u0105" + - "\x02\x02\u03EE\u041B\t\x0E\x02\x02\u03EF\u03F0\x07\xD1\x02\x02\u03F0\u03F1" + - "\x07\xE7\x02\x02\u03F1\u03F5\x07\u0105\x02\x02\u03F2\u03F4\v\x02\x02\x02" + - "\u03F3\u03F2\x03\x02\x02\x02\u03F4\u03F7\x03\x02\x02\x02\u03F5\u03F6\x03" + - "\x02\x02\x02\u03F5\u03F3\x03\x02\x02\x02\u03F6\u041B\x03\x02\x02\x02\u03F7" + - "\u03F5\x03\x02\x02\x02\u03F8\u03F9\x07\xD1\x02\x02\u03F9\u0401\x05\x14" + - "\v\x02\u03FA\u03FE\x07\u0106\x02\x02\u03FB\u03FD\v\x02\x02\x02\u03FC\u03FB" + - "\x03\x02\x02\x02\u03FD\u0400\x03\x02\x02\x02\u03FE\u03FF\x03\x02\x02\x02" + - "\u03FE\u03FC\x03\x02\x02\x02\u03FF\u0402\x03\x02\x02\x02\u0400\u03FE\x03" + - "\x02\x02\x02\u0401\u03FA\x03\x02\x02\x02\u0401\u0402\x03\x02\x02\x02\u0402" + - "\u041B\x03\x02\x02\x02\u0403\u0407\x07\xD1\x02\x02\u0404\u0406\v\x02\x02" + - "\x02\u0405\u0404\x03\x02\x02\x02\u0406\u0409\x03\x02\x02\x02\u0407\u0408" + - "\x03\x02\x02\x02\u0407\u0405\x03\x02\x02\x02\u0408\u041B\x03\x02\x02\x02" + - "\u0409\u0407\x03\x02\x02\x02\u040A\u040B\x07\xBF\x02\x02\u040B\u041B\x05" + - "\x14\v\x02\u040C\u0410\x07\xBF\x02\x02\u040D\u040F\v\x02\x02\x02\u040E" + - "\u040D\x03\x02\x02\x02\u040F\u0412\x03\x02\x02\x02\u0410\u0411\x03\x02" + - "\x02\x02\u0410\u040E\x03\x02\x02\x02\u0411\u041B\x03\x02\x02\x02\u0412" + - "\u0410\x03\x02\x02\x02\u0413\u0417\x05\x16\f\x02\u0414\u0416\v\x02\x02" + - "\x02\u0415\u0414\x03\x02\x02\x02\u0416\u0419\x03\x02\x02\x02\u0417\u0418" + - "\x03\x02\x02\x02\u0417\u0415\x03\x02\x02\x02\u0418\u041B\x03\x02\x02\x02" + - "\u0419\u0417\x03\x02\x02\x02\u041A\u0132\x03\x02\x02\x02\u041A\u0134\x03" + - "\x02\x02\x02\u041A\u0137\x03\x02\x02\x02\u041A\u013C\x03\x02\x02\x02\u041A" + - "\u014E\x03\x02\x02\x02\u041A\u0155\x03\x02\x02\x02\u041A\u015B\x03\x02" + - "\x02\x02\u041A\u0165\x03\x02\x02\x02\u041A\u0171\x03\x02\x02\x02\u041A" + - "\u0180\x03\x02\x02\x02\u041A\u01A5\x03\x02\x02\x02\u041A\u01BA\x03\x02" + - "\x02\x02\u041A\u01C9\x03\x02\x02\x02\u041A\u01DA\x03\x02\x02\x02\u041A" + - "\u01E1\x03\x02\x02\x02\u041A\u01EA\x03\x02\x02\x02\u041A\u01F3\x03\x02" + - "\x02\x02\u041A\u01FC\x03\x02\x02\x02\u041A\u0203\x03\x02\x02\x02\u041A" + - "\u020A\x03\x02\x02\x02\u041A\u0211\x03\x02\x02\x02\u041A\u021C\x03\x02" + - "\x02\x02\u041A\u0227\x03\x02\x02\x02\u041A\u0236\x03\x02\x02\x02\u041A" + - "\u0242\x03\x02\x02\x02\u041A\u0250\x03\x02\x02\x02\u041A\u025A\x03\x02" + - "\x02\x02\u041A\u0268\x03\x02\x02\x02\u041A\u0270\x03\x02\x02\x02\u041A" + - "\u0283\x03\x02\x02\x02\u041A\u028C\x03\x02\x02\x02\u041A\u0292\x03\x02" + - "\x02\x02\u041A\u029C\x03\x02\x02\x02\u041A\u02A3\x03\x02\x02\x02\u041A" + - "\u02C6\x03\x02\x02\x02\u041A\u02DC\x03\x02\x02\x02\u041A\u02E4\x03\x02" + - "\x02\x02\u041A\u0300\x03\x02\x02\x02\u041A\u030A\x03\x02\x02\x02\u041A" + - "\u030F\x03\x02\x02\x02\u041A\u031B\x03\x02\x02\x02\u041A\u0327\x03\x02" + - "\x02\x02\u041A\u0330\x03\x02\x02\x02\u041A\u0338\x03\x02\x02\x02\u041A" + - "\u0344\x03\x02\x02\x02\u041A\u034A\x03\x02\x02\x02\u041A\u0358\x03\x02" + - "\x02\x02\u041A\u0360\x03\x02\x02\x02\u041A\u0363\x03\x02\x02\x02\u041A" + - "\u0369\x03\x02\x02\x02\u041A\u0370\x03\x02\x02\x02\u041A\u037E\x03\x02" + - "\x02\x02\u041A\u0383\x03\x02\x02\x02\u041A\u038A\x03\x02\x02\x02\u041A" + - "\u0391\x03\x02\x02\x02\u041A\u0394\x03\x02\x02\x02\u041A\u0397\x03\x02" + - "\x02\x02\u041A\u03A1\x03\x02\x02\x02\u041A\u03B1\x03\x02\x02\x02\u041A" + - "\u03B8\x03\x02\x02\x02\u041A\u03BA\x03\x02\x02\x02\u041A\u03CA\x03\x02" + - "\x02\x02\u041A\u03D0\x03\x02\x02\x02\u041A\u03D4\x03\x02\x02\x02\u041A" + - "\u03DF\x03\x02\x02\x02\u041A\u03E7\x03\x02\x02\x02\u041A\u03EB\x03\x02" + - "\x02\x02\u041A\u03EF\x03\x02\x02\x02\u041A\u03F8\x03\x02\x02\x02\u041A" + - "\u0403\x03\x02\x02\x02\u041A\u040A\x03\x02\x02\x02\u041A\u040C\x03\x02" + - "\x02\x02\u041A\u0413\x03\x02\x02\x02\u041B\x13\x03\x02\x02\x02\u041C\u041D" + - "\x05\u0108\x85\x02\u041D\x15\x03\x02\x02\x02\u041E\u041F\x076\x02\x02" + - "\u041F\u04C7\x07\xC4\x02\x02\u0420\u0421\x07M\x02\x02\u0421\u04C7\x07" + - "\xC4\x02\x02\u0422\u0424\x07j\x02\x02\u0423\u0425\x07\xC4\x02\x02\u0424" + - "\u0423\x03\x02\x02\x02\u0424\u0425\x03\x02\x02\x02\u0425\u04C7\x03\x02" + - "\x02\x02\u0426\u0428\x07\xC1\x02\x02\u0427\u0429\x07\xC4\x02\x02\u0428" + - "\u0427\x03\x02\x02\x02\u0428\u0429\x03\x02\x02\x02\u0429\u04C7\x03\x02" + - "\x02\x02\u042A\u042B\x07\xD4\x02\x02\u042B\u04C7\x07j\x02\x02\u042C\u042D" + - "\x07\xD4\x02\x02\u042D\u042F\x07\xC4\x02\x02\u042E\u0430\x07j\x02\x02" + - "\u042F\u042E\x03\x02\x02\x02\u042F\u0430\x03\x02\x02\x02\u0430\u04C7\x03" + - "\x02\x02\x02\u0431\u0432\x07\xD4\x02\x02\u0432\u04C7\x07\xB1\x02\x02\u0433" + - "\u0434\x07\xD4\x02\x02\u0434\u04C7\x07\xC5\x02\x02\u0435\u0436\x07\xD4" + - "\x02\x02\u0436\u0437\x079\x02\x02\u0437\u04C7\x07\xC5\x02\x02\u0438\u0439" + - "\x07V\x02\x02\u0439\u04C7\x07\xE0\x02\x02\u043A\u043B\x07p\x02\x02\u043B" + - "\u04C7\x07\xE0\x02\x02\u043C\u043D\x07\xD4\x02\x02\u043D\u04C7\x071\x02" + - "\x02\u043E\u043F\x07\xD4\x02\x02\u043F\u0440\x076\x02\x02\u0440\u04C7" + - "\x07\xE0\x02\x02\u0441\u0442\x07\xD4\x02\x02\u0442\u04C7\x07\xEC\x02\x02" + - "\u0443\u0444\x07\xD4\x02\x02\u0444\u04C7\x07s\x02\x02\u0445\u0446\x07" + - "\xD4\x02\x02\u0446\u04C7\x07\x8C\x02\x02\u0447\u0448\x076\x02\x02\u0448" + - "\u04C7\x07r\x02\x02\u0449\u044A\x07M\x02\x02\u044A\u04C7\x07r\x02\x02" + - "\u044B\u044C\x07\x10\x02\x02\u044C\u04C7\x07r\x02\x02\u044D\u044E\x07" + - "\x8B\x02\x02\u044E\u04C7\x07\xE0\x02\x02\u044F\u0450\x07\x8B\x02\x02\u0450" + - "\u04C7\x07?\x02\x02\u0451\u0452\x07\xF8\x02\x02\u0452\u04C7\x07\xE0\x02" + - "\x02\u0453\u0454\x07\xF8\x02\x02\u0454\u04C7\x07?\x02\x02\u0455\u0456" + - "\x076\x02\x02\u0456\u0457\x07\xE4\x02\x02\u0457\u04C7\x07\x8E\x02\x02" + - "\u0458\u0459\x07M\x02\x02\u0459\u045A\x07\xE4\x02\x02\u045A\u04C7\x07" + - "\x8E\x02\x02\u045B\u045C\x07\x10\x02\x02\u045C\u045D\x07\xE0\x02\x02\u045D" + - "\u045E\x05\xB2Z\x02\u045E\u045F\x07\x97\x02\x02\u045F\u0460\x07(\x02\x02" + - "\u0460\u04C7\x03\x02\x02\x02\u0461\u0462\x07\x10\x02\x02\u0462\u0463\x07" + - "\xE0\x02\x02\u0463\u0464\x05\xB2Z\x02\u0464\u0465\x07(\x02\x02\u0465\u0466" + - "\x07\x1F\x02\x02\u0466\u04C7\x03\x02\x02\x02\u0467\u0468\x07\x10\x02\x02" + - "\u0468\u0469\x07\xE0\x02\x02\u0469\u046A\x05\xB2Z\x02\u046A\u046B\x07" + - "\x97\x02\x02\u046B\u046C\x07\xD8\x02\x02\u046C\u04C7\x03\x02\x02\x02\u046D" + - "\u046E\x07\x10\x02\x02\u046E\u046F\x07\xE0\x02\x02\u046F\u0470\x05\xB2" + - "Z\x02\u0470\u0471\x07\xD5\x02\x02\u0471\u0472\x07\x1F\x02\x02\u0472\u04C7" + - "\x03\x02\x02\x02\u0473\u0474\x07\x10\x02\x02\u0474\u0475\x07\xE0\x02\x02" + - "\u0475\u0476\x05\xB2Z\x02\u0476\u0477\x07\x97\x02\x02\u0477\u0478\x07" + - "\xD5\x02\x02\u0478\u04C7\x03\x02\x02\x02\u0479\u047A\x07\x10\x02\x02\u047A" + - "\u047B\x07\xE0\x02\x02\u047B\u047C\x05\xB2Z\x02\u047C\u047D\x07\x97\x02" + - "\x02\u047D\u047E\x07\xDB\x02\x02\u047E\u047F\x07\x17\x02\x02\u047F\u0480" + - "\x07H\x02\x02\u0480\u04C7\x03\x02\x02\x02\u0481\u0482\x07\x10\x02\x02" + - "\u0482\u0483\x07\xE0\x02\x02\u0483\u0484\x05\xB2Z\x02\u0484\u0485\x07" + - "\xD1\x02\x02\u0485\u0486\x07\xD5\x02\x02\u0486\u0487\x07\x8A\x02\x02\u0487" + - "\u04C7\x03\x02\x02\x02\u0488\u0489\x07\x10\x02\x02\u0489\u048A\x07\xE0" + - "\x02\x02\u048A\u048B\x05\xB2Z\x02\u048B\u048C\x07S\x02\x02\u048C\u048D" + - "\x07\xA8\x02\x02\u048D\u04C7\x03\x02\x02\x02\u048E\u048F\x07\x10\x02\x02" + - "\u048F\u0490\x07\xE0\x02\x02\u0490\u0491\x05\xB2Z\x02\u0491\u0492\x07" + - "\x15\x02\x02\u0492\u0493\x07\xA8\x02\x02\u0493\u04C7\x03\x02\x02\x02\u0494" + - "\u0495\x07\x10\x02\x02\u0495\u0496\x07\xE0\x02\x02\u0496\u0497\x05\xB2" + - "Z\x02\u0497\u0498\x07\xF2\x02\x02\u0498\u0499\x07\xA8\x02\x02\u0499\u04C7" + - "\x03\x02\x02\x02\u049A\u049B\x07\x10\x02\x02\u049B\u049C\x07\xE0\x02\x02" + - "\u049C\u049D\x05\xB2Z\x02\u049D\u049E\x07\xE9\x02\x02\u049E\u04C7\x03" + - "\x02\x02\x02\u049F\u04A0\x07\x10\x02\x02\u04A0\u04A1\x07\xE0\x02\x02\u04A1" + - "\u04A3\x05\xB2Z\x02\u04A2\u04A4\x05*\x16\x02\u04A3\u04A2\x03\x02\x02\x02" + - "\u04A3\u04A4\x03\x02\x02\x02\u04A4\u04A5\x03\x02\x02\x02\u04A5\u04A6\x07" + - "0\x02\x02\u04A6\u04C7\x03\x02\x02\x02\u04A7\u04A8\x07\x10\x02\x02\u04A8" + - "\u04A9\x07\xE0\x02\x02\u04A9\u04AB\x05\xB2Z\x02\u04AA\u04AC\x05*\x16\x02" + - "\u04AB\u04AA\x03\x02\x02\x02\u04AB\u04AC\x03\x02\x02\x02\u04AC\u04AD\x03" + - "\x02\x02\x02\u04AD\u04AE\x073\x02\x02\u04AE\u04C7\x03\x02\x02\x02\u04AF" + - "\u04B0\x07\x10\x02\x02\u04B0\u04B1\x07\xE0\x02\x02\u04B1\u04B3\x05\xB2" + - "Z\x02\u04B2\u04B4\x05*\x16\x02\u04B3\u04B2\x03\x02\x02\x02\u04B3\u04B4" + - "\x03\x02\x02\x02\u04B4\u04B5\x03\x02\x02\x02\u04B5\u04B6\x07\xD1\x02\x02" + - "\u04B6\u04B7\x07^\x02\x02\u04B7\u04C7\x03\x02\x02\x02\u04B8\u04B9\x07" + - "\x10\x02\x02\u04B9\u04BA\x07\xE0\x02\x02\u04BA\u04BC\x05\xB2Z\x02\u04BB" + - "\u04BD\x05*\x16\x02\u04BC\u04BB\x03\x02\x02\x02\u04BC\u04BD\x03\x02\x02" + - "\x02\u04BD\u04BE\x03\x02\x02\x02\u04BE\u04BF\x07\xBE\x02\x02\u04BF\u04C0" + - "\x07-\x02\x02\u04C0\u04C7\x03\x02\x02\x02\u04C1\u04C2\x07\xD9\x02\x02" + - "\u04C2\u04C7\x07\xEB\x02\x02\u04C3\u04C7\x07/\x02\x02\u04C4\u04C7\x07" + - "\xC6\x02\x02\u04C5\u04C7\x07G\x02\x02\u04C6\u041E\x03\x02\x02\x02\u04C6" + - "\u0420\x03\x02\x02\x02\u04C6\u0422\x03\x02\x02\x02\u04C6\u0426\x03\x02" + - "\x02\x02"; - private static readonly _serializedATNSegment3: string = - "\u04C6\u042A\x03\x02\x02\x02\u04C6\u042C\x03\x02\x02\x02\u04C6\u0431\x03" + - "\x02\x02\x02\u04C6\u0433\x03\x02\x02\x02\u04C6\u0435\x03\x02\x02\x02\u04C6" + - "\u0438\x03\x02\x02\x02\u04C6\u043A\x03\x02\x02\x02\u04C6\u043C\x03\x02" + - "\x02\x02\u04C6\u043E\x03\x02\x02\x02\u04C6\u0441\x03\x02\x02\x02\u04C6" + - "\u0443\x03\x02\x02\x02\u04C6\u0445\x03\x02\x02\x02\u04C6\u0447\x03\x02" + - "\x02\x02\u04C6\u0449\x03\x02\x02\x02\u04C6\u044B\x03\x02\x02\x02\u04C6" + - "\u044D\x03\x02\x02\x02\u04C6\u044F\x03\x02\x02\x02\u04C6\u0451\x03\x02" + - "\x02\x02\u04C6\u0453\x03\x02\x02\x02\u04C6\u0455\x03\x02\x02\x02\u04C6" + - "\u0458\x03\x02\x02\x02\u04C6\u045B\x03\x02\x02\x02\u04C6\u0461\x03\x02" + - "\x02\x02\u04C6\u0467\x03\x02\x02\x02\u04C6\u046D\x03\x02\x02\x02\u04C6" + - "\u0473\x03\x02\x02\x02\u04C6\u0479\x03\x02\x02\x02\u04C6\u0481\x03\x02" + - "\x02\x02\u04C6\u0488\x03\x02\x02\x02\u04C6\u048E\x03\x02\x02\x02\u04C6" + - "\u0494\x03\x02\x02\x02\u04C6\u049A\x03\x02\x02\x02\u04C6\u049F\x03\x02" + - "\x02\x02\u04C6\u04A7\x03\x02\x02\x02\u04C6\u04AF\x03\x02\x02\x02\u04C6" + - "\u04B8\x03\x02\x02\x02\u04C6\u04C1\x03\x02\x02\x02\u04C6\u04C3\x03\x02" + - "\x02\x02\u04C6\u04C4\x03\x02\x02\x02\u04C6\u04C5\x03\x02\x02\x02\u04C7" + - "\x17\x03\x02\x02\x02\u04C8\u04CA\x076\x02\x02\u04C9\u04CB\x07\xE4\x02" + - "\x02\u04CA\u04C9\x03\x02\x02\x02\u04CA\u04CB\x03\x02\x02\x02\u04CB\u04CD" + - "\x03\x02\x02\x02\u04CC\u04CE\x07X\x02\x02\u04CD\u04CC\x03\x02\x02\x02" + - "\u04CD\u04CE\x03\x02\x02\x02\u04CE\u04CF\x03\x02\x02\x02\u04CF\u04D3\x07" + - "\xE0\x02\x02\u04D0\u04D1\x07n\x02\x02\u04D1\u04D2\x07\x97\x02\x02\u04D2" + - "\u04D4\x07T\x02\x02\u04D3\u04D0\x03\x02\x02\x02\u04D3\u04D4\x03\x02\x02" + - "\x02\u04D4\u04D5\x03\x02\x02\x02\u04D5\u04D6\x05\xB0Y\x02\u04D6\x19\x03" + - "\x02\x02\x02\u04D7\u04D8\x076\x02\x02\u04D8\u04DA\x07\x9F\x02\x02\u04D9" + - "\u04D7\x03\x02\x02\x02\u04D9\u04DA\x03\x02\x02\x02\u04DA\u04DB\x03\x02" + - "\x02\x02\u04DB\u04DC\x07\xBE\x02\x02\u04DC\u04DD\x07\xE0\x02\x02\u04DD" + - "\u04DE\x05\xB0Y\x02\u04DE\x1B\x03\x02\x02\x02\u04DF\u04E0\x07(\x02\x02" + - "\u04E0\u04E1\x07\x1F\x02\x02\u04E1\u04E5\x05\x98M\x02\u04E2\u04E3\x07" + - "\xD8\x02\x02\u04E3\u04E4\x07\x1F\x02\x02\u04E4\u04E6\x05\x9CO\x02\u04E5" + - "\u04E2\x03\x02\x02\x02\u04E5\u04E6\x03\x02\x02\x02\u04E6\u04E7\x03\x02" + - "\x02\x02\u04E7\u04E8\x07z\x02\x02\u04E8\u04E9\x07\u011D\x02\x02\u04E9" + - "\u04EA\x07\x1E\x02\x02\u04EA\x1D\x03\x02\x02\x02\u04EB\u04EC\x07\xD5\x02" + - "\x02\u04EC\u04ED\x07\x1F\x02\x02\u04ED\u04EE\x05\x98M\x02\u04EE\u04F1" + - "\x07\x9B\x02\x02\u04EF\u04F2\x05D#\x02\u04F0\u04F2\x05F$\x02\u04F1\u04EF" + - "\x03\x02\x02\x02\u04F1\u04F0\x03\x02\x02\x02\u04F2\u04F6\x03\x02\x02\x02" + - "\u04F3\u04F4\x07\xDB\x02\x02\u04F4\u04F5\x07\x17\x02\x02\u04F5\u04F7\x07" + - "H\x02\x02\u04F6\u04F3\x03\x02\x02\x02\u04F6\u04F7\x03\x02\x02\x02\u04F7" + - "\x1F\x03\x02\x02\x02\u04F8\u04F9\x07\x8A\x02\x02\u04F9\u04FA\x07\u0119" + - "\x02\x02\u04FA!\x03\x02\x02\x02\u04FB\u04FC\x07.\x02\x02\u04FC\u04FD\x07" + - "\u0119\x02\x02\u04FD#\x03\x02\x02\x02\u04FE\u0500\x054\x1B\x02\u04FF\u04FE" + - "\x03\x02\x02\x02\u04FF\u0500\x03\x02\x02\x02\u0500\u0501\x03\x02\x02\x02" + - "\u0501\u0502\x05V,\x02\u0502\u0503\x05R*\x02\u0503%\x03\x02\x02\x02\u0504" + - "\u0505\x07w\x02\x02\u0505\u0507\x07\xA7\x02\x02\u0506\u0508\x07\xE0\x02" + - "\x02\u0507\u0506\x03\x02\x02\x02\u0507\u0508\x03\x02\x02\x02\u0508\u0509" + - "\x03\x02\x02\x02\u0509\u0510\x05\xB0Y\x02\u050A\u050E\x05*\x16\x02\u050B" + - "\u050C\x07n\x02\x02\u050C\u050D\x07\x97\x02\x02\u050D\u050F\x07T\x02\x02" + - "\u050E\u050B\x03\x02\x02\x02\u050E\u050F\x03\x02\x02\x02\u050F\u0511\x03" + - "\x02\x02\x02\u0510\u050A\x03\x02\x02\x02\u0510\u0511\x03\x02\x02\x02\u0511" + - "\u053C\x03\x02\x02\x02\u0512\u0513\x07w\x02\x02\u0513\u0515\x07z\x02\x02" + - "\u0514\u0516\x07\xE0\x02\x02\u0515\u0514\x03\x02\x02\x02\u0515\u0516\x03" + - "\x02\x02\x02\u0516\u0517\x03\x02\x02\x02\u0517\u0519\x05\xB0Y\x02\u0518" + - "\u051A\x05*\x16\x02\u0519\u0518\x03\x02\x02\x02\u0519\u051A\x03\x02\x02" + - "\x02\u051A\u051E\x03\x02\x02\x02\u051B\u051C\x07n\x02\x02\u051C\u051D" + - "\x07\x97\x02\x02\u051D\u051F\x07T\x02\x02\u051E\u051B\x03\x02\x02\x02" + - "\u051E\u051F\x03\x02\x02\x02\u051F\u053C\x03\x02\x02\x02\u0520\u0521\x07" + - "w\x02\x02\u0521\u0523\x07\xA7\x02\x02\u0522\u0524\x07\x89\x02\x02\u0523" + - "\u0522\x03\x02\x02\x02\u0523\u0524\x03\x02\x02\x02\u0524\u0525\x03\x02" + - "\x02\x02\u0525\u0526\x07I\x02\x02\u0526\u0528\x07\u0119\x02\x02\u0527" + - "\u0529\x05\xACW\x02\u0528\u0527\x03\x02\x02\x02\u0528\u0529\x03\x02\x02" + - "\x02\u0529\u052B\x03\x02\x02\x02\u052A\u052C\x05H%\x02\u052B\u052A\x03" + - "\x02\x02\x02\u052B\u052C\x03\x02\x02\x02\u052C\u053C\x03\x02\x02\x02\u052D" + - "\u052E\x07w\x02\x02\u052E\u0530\x07\xA7\x02\x02\u052F\u0531\x07\x89\x02" + - "\x02\u0530\u052F\x03\x02\x02\x02\u0530\u0531\x03\x02\x02\x02\u0531\u0532" + - "\x03\x02\x02\x02\u0532\u0534\x07I\x02\x02\u0533\u0535\x07\u0119\x02\x02" + - "\u0534\u0533\x03\x02\x02\x02\u0534\u0535\x03\x02\x02\x02\u0535\u0536\x03" + - "\x02\x02\x02\u0536\u0539\x058\x1D\x02\u0537\u0538\x07\x9E\x02\x02\u0538" + - "\u053A\x05<\x1F\x02\u0539\u0537\x03\x02\x02\x02\u0539\u053A\x03\x02\x02" + - "\x02\u053A\u053C\x03\x02\x02\x02\u053B\u0504\x03\x02\x02\x02\u053B\u0512" + - "\x03\x02\x02\x02\u053B\u0520\x03\x02\x02\x02\u053B\u052D\x03\x02\x02\x02" + - "\u053C\'\x03\x02\x02\x02\u053D\u053F\x05*\x16\x02\u053E\u0540\x05 \x11" + - "\x02\u053F\u053E\x03\x02\x02\x02\u053F\u0540\x03\x02\x02\x02\u0540)\x03" + - "\x02\x02\x02\u0541\u0542\x07\xA8\x02\x02\u0542\u0543\x07\x03\x02\x02\u0543" + - "\u0548\x05,\x17\x02\u0544\u0545\x07\x05\x02\x02\u0545\u0547\x05,\x17\x02" + - "\u0546\u0544\x03\x02\x02\x02\u0547\u054A\x03\x02\x02\x02\u0548\u0546\x03" + - "\x02\x02\x02\u0548\u0549\x03\x02\x02\x02\u0549\u054B\x03\x02\x02\x02\u054A" + - "\u0548\x03\x02\x02\x02\u054B\u054C\x07\x04\x02\x02\u054C+\x03\x02\x02" + - "\x02\u054D\u0550\x05\u0104\x83\x02\u054E\u054F\x07\u0106\x02\x02\u054F" + - "\u0551\x05\xC8e\x02\u0550\u054E\x03\x02\x02\x02\u0550\u0551\x03\x02\x02" + - "\x02\u0551-\x03\x02\x02\x02\u0552\u0553\t\x0F\x02\x02\u0553/\x03\x02\x02" + - "\x02\u0554\u055A\x05\xFE\x80\x02\u0555\u055A\x07\u0119\x02\x02\u0556\u055A" + - "\x05\xCAf\x02\u0557\u055A\x05\xCCg\x02\u0558\u055A\x05\xCEh\x02\u0559" + - "\u0554\x03\x02\x02\x02\u0559\u0555\x03\x02\x02\x02\u0559\u0556\x03\x02" + - "\x02\x02\u0559\u0557\x03\x02\x02\x02\u0559\u0558\x03\x02\x02\x02\u055A" + - "1\x03\x02\x02\x02\u055B\u0560\x05\u0104\x83\x02\u055C\u055D\x07\x06\x02" + - "\x02\u055D\u055F\x05\u0104\x83\x02\u055E\u055C\x03\x02\x02\x02\u055F\u0562" + - "\x03\x02\x02\x02\u0560\u055E\x03\x02\x02\x02\u0560\u0561\x03\x02\x02\x02" + - "\u05613\x03\x02\x02\x02\u0562\u0560\x03\x02\x02\x02\u0563\u0564\x07\u0104" + - "\x02\x02\u0564\u0569\x056\x1C\x02\u0565\u0566\x07\x05\x02\x02\u0566\u0568" + - "\x056\x1C\x02\u0567\u0565\x03\x02\x02\x02\u0568\u056B\x03\x02\x02\x02" + - "\u0569\u0567\x03\x02\x02\x02\u0569\u056A\x03\x02\x02\x02\u056A5\x03\x02" + - "\x02\x02\u056B\u0569\x03\x02\x02\x02\u056C\u056E\x05\u0100\x81\x02\u056D" + - "\u056F\x05\x98M\x02\u056E\u056D\x03\x02\x02\x02\u056E\u056F\x03\x02\x02" + - "\x02\u056F\u0571\x03\x02\x02\x02\u0570\u0572\x07\x17\x02\x02\u0571\u0570" + - "\x03\x02\x02\x02\u0571\u0572\x03\x02\x02\x02\u0572\u0573\x03\x02\x02\x02" + - "\u0573\u0574\x07\x03\x02\x02\u0574\u0575\x05$\x13\x02\u0575\u0576\x07" + - "\x04\x02\x02\u05767\x03\x02\x02\x02\u0577\u0578\x07\xFD\x02\x02\u0578" + - "\u0579\x05\xB0Y\x02\u05799\x03\x02\x02\x02\u057A\u057B\x07\x9E\x02\x02" + - "\u057B\u0585\x05<\x1F\x02\u057C\u057D\x07\xA9\x02\x02\u057D\u057E\x07" + - "\x1F\x02\x02\u057E\u0585\x05\xB8]\x02\u057F\u0585\x05\x1C\x0F\x02\u0580" + - "\u0585\x05 \x11\x02\u0581\u0585\x05\"\x12\x02\u0582\u0583\x07\xE3\x02" + - "\x02\u0583\u0585\x05<\x1F\x02\u0584\u057A\x03\x02\x02\x02\u0584\u057C" + - "\x03\x02\x02\x02\u0584\u057F\x03\x02\x02\x02\u0584\u0580\x03\x02\x02\x02" + - "\u0584\u0581\x03\x02\x02\x02\u0584\u0582\x03\x02\x02\x02\u0585\u0588\x03" + - "\x02\x02\x02\u0586\u0584\x03\x02\x02\x02\u0586\u0587\x03\x02\x02\x02\u0587" + - ";\x03\x02\x02\x02\u0588\u0586\x03\x02\x02\x02\u0589\u058A\x07\x03\x02" + - "\x02\u058A\u058F\x05> \x02\u058B\u058C\x07\x05\x02\x02\u058C\u058E\x05" + - "> \x02\u058D\u058B\x03\x02\x02\x02\u058E\u0591\x03\x02\x02\x02\u058F\u058D" + - "\x03\x02\x02\x02\u058F\u0590\x03\x02\x02\x02\u0590\u0592\x03\x02\x02\x02" + - "\u0591\u058F\x03\x02\x02\x02\u0592\u0593\x07\x04\x02\x02\u0593=\x03\x02" + - "\x02\x02\u0594\u0599\x05@!\x02\u0595\u0597\x07\u0106\x02\x02\u0596\u0595" + - "\x03\x02\x02\x02\u0596\u0597\x03\x02\x02\x02\u0597\u0598\x03\x02\x02\x02" + - "\u0598\u059A\x05B\"\x02\u0599\u0596\x03\x02\x02\x02\u0599\u059A\x03\x02" + - "\x02\x02\u059A?\x03\x02\x02\x02\u059B\u05A0\x05\u0104\x83\x02\u059C\u059D" + - "\x07\x06\x02\x02\u059D\u059F\x05\u0104\x83\x02\u059E\u059C\x03\x02\x02" + - "\x02\u059F\u05A2\x03\x02\x02\x02\u05A0\u059E\x03\x02\x02\x02\u05A0\u05A1" + - "\x03\x02\x02\x02\u05A1\u05A5\x03\x02\x02\x02\u05A2\u05A0\x03\x02\x02\x02" + - "\u05A3\u05A5\x07\u0119\x02\x02\u05A4\u059B\x03\x02\x02\x02\u05A4\u05A3" + - "\x03\x02\x02\x02\u05A5A\x03\x02\x02\x02\u05A6\u05AB\x07\u011D\x02\x02" + - "\u05A7\u05AB\x07\u011F\x02\x02\u05A8\u05AB\x05\xD0i\x02\u05A9\u05AB\x07" + - "\u0119\x02\x02\u05AA\u05A6\x03\x02\x02\x02\u05AA\u05A7\x03\x02\x02\x02" + - "\u05AA\u05A8\x03\x02\x02\x02\u05AA\u05A9\x03\x02\x02\x02\u05ABC\x03\x02" + - "\x02\x02\u05AC\u05AD\x07\x03\x02\x02\u05AD\u05B2\x05\xC8e\x02\u05AE\u05AF" + - "\x07\x05\x02\x02\u05AF\u05B1\x05\xC8e\x02\u05B0\u05AE\x03\x02\x02\x02" + - "\u05B1\u05B4\x03\x02\x02\x02\u05B2\u05B0\x03\x02\x02\x02\u05B2\u05B3\x03" + - "\x02\x02\x02\u05B3\u05B5\x03\x02\x02\x02\u05B4\u05B2\x03\x02\x02\x02\u05B5" + - "\u05B6\x07\x04\x02\x02\u05B6E\x03\x02\x02\x02\u05B7\u05B8\x07\x03\x02" + - "\x02\u05B8\u05BD\x05D#\x02\u05B9\u05BA\x07\x05\x02\x02\u05BA\u05BC\x05" + - "D#\x02\u05BB\u05B9\x03\x02\x02\x02\u05BC\u05BF\x03\x02\x02\x02\u05BD\u05BB" + - "\x03\x02\x02\x02\u05BD\u05BE\x03\x02\x02\x02\u05BE\u05C0\x03\x02\x02\x02" + - "\u05BF\u05BD\x03\x02\x02\x02\u05C0\u05C1\x07\x04\x02\x02\u05C1G\x03\x02" + - "\x02\x02\u05C2\u05C3\x07\xDB\x02\x02\u05C3\u05C4\x07\x17\x02\x02\u05C4" + - "\u05C9\x05J&\x02\u05C5\u05C6\x07\xDB\x02\x02\u05C6\u05C7\x07\x1F\x02\x02" + - "\u05C7\u05C9\x05L\'\x02\u05C8\u05C2\x03\x02\x02\x02\u05C8\u05C5\x03\x02" + - "\x02\x02\u05C9I\x03\x02\x02\x02\u05CA\u05CB\x07v\x02\x02\u05CB\u05CC\x07" + - "\u0119\x02\x02\u05CC\u05CD\x07\xA3\x02\x02\u05CD\u05D0\x07\u0119\x02\x02" + - "\u05CE\u05D0\x05\u0104\x83\x02\u05CF\u05CA\x03\x02\x02\x02\u05CF\u05CE" + - "\x03\x02\x02\x02\u05D0K\x03\x02\x02\x02\u05D1\u05D5\x07\u0119\x02\x02" + - "\u05D2\u05D3\x07\u0104\x02\x02\u05D3\u05D4\x07\xCF\x02\x02\u05D4\u05D6" + - "\x05<\x1F\x02\u05D5\u05D2\x03\x02\x02\x02\u05D5\u05D6\x03\x02\x02\x02" + - "\u05D6M\x03\x02\x02\x02\u05D7\u05D8\x05\u0104\x83\x02\u05D8\u05D9\x07" + - "\u0119\x02\x02\u05D9O\x03\x02\x02\x02\u05DA\u05DB\x05&\x14\x02\u05DB\u05DC" + - "\x05V,\x02\u05DC\u05DD\x05R*\x02\u05DD\u060E\x03\x02\x02\x02\u05DE\u05E0" + - "\x05|?\x02\u05DF\u05E1\x05T+\x02\u05E0\u05DF\x03\x02\x02\x02\u05E1\u05E2" + - "\x03\x02\x02\x02\u05E2\u05E0\x03\x02\x02\x02\u05E2\u05E3\x03\x02\x02\x02" + - "\u05E3\u060E\x03\x02\x02\x02\u05E4\u05E5\x07C\x02\x02\u05E5\u05E6\x07" + - "e\x02\x02\u05E6\u05E7\x05\xB0Y\x02\u05E7\u05E9\x05\xAAV\x02\u05E8\u05EA" + - "\x05t;\x02\u05E9\u05E8\x03\x02\x02\x02\u05E9\u05EA\x03\x02\x02\x02\u05EA" + - "\u060E\x03\x02\x02\x02\u05EB\u05EC\x07\xFA\x02\x02\u05EC\u05ED\x05\xB0" + - "Y\x02\u05ED\u05EE\x05\xAAV\x02\u05EE\u05F0\x05f4\x02\u05EF\u05F1\x05t" + - ";\x02\u05F0\u05EF\x03\x02\x02\x02\u05F0\u05F1\x03\x02\x02\x02\u05F1\u060E" + - "\x03\x02\x02\x02\u05F2\u05F3\x07\x91\x02\x02\u05F3\u05F4\x07z\x02\x02" + - "\u05F4\u05F5\x05\xB0Y\x02\u05F5\u05F6\x05\xAAV\x02\u05F6\u05FC\x07\xFD" + - "\x02\x02\u05F7\u05FD\x05\xB0Y\x02\u05F8\u05F9\x07\x03\x02\x02\u05F9\u05FA" + - "\x05$\x13\x02\u05FA\u05FB\x07\x04\x02\x02\u05FB\u05FD\x03\x02\x02\x02" + - "\u05FC\u05F7\x03\x02\x02\x02\u05FC\u05F8\x03\x02\x02\x02\u05FD\u05FE\x03" + - "\x02\x02\x02\u05FE\u05FF\x05\xAAV\x02\u05FF\u0600\x07\x9B\x02\x02\u0600" + - "\u0604\x05\xC0a\x02\u0601\u0603\x05h5\x02\u0602\u0601\x03\x02\x02\x02" + - "\u0603\u0606\x03\x02\x02\x02\u0604\u0602\x03\x02\x02\x02\u0604\u0605\x03" + - "\x02\x02\x02\u0605\u060A\x03\x02\x02\x02\u0606\u0604\x03\x02\x02\x02\u0607" + - "\u0609\x05j6\x02\u0608\u0607\x03\x02\x02\x02\u0609\u060C\x03\x02\x02\x02" + - "\u060A\u0608\x03\x02\x02\x02\u060A\u060B\x03\x02\x02\x02\u060B\u060E\x03" + - "\x02\x02\x02\u060C\u060A\x03\x02\x02\x02\u060D\u05DA\x03\x02\x02\x02\u060D" + - "\u05DE\x03\x02\x02\x02\u060D\u05E4\x03\x02\x02\x02\u060D\u05EB\x03\x02" + - "\x02\x02\u060D\u05F2\x03\x02\x02\x02\u060EQ\x03\x02\x02\x02\u060F\u0610" + - "\x07\xA0\x02\x02\u0610\u0611\x07\x1F\x02\x02\u0611\u0616\x05Z.\x02\u0612" + - "\u0613\x07\x05\x02\x02\u0613\u0615\x05Z.\x02\u0614\u0612\x03\x02\x02\x02" + - "\u0615\u0618\x03\x02\x02\x02\u0616\u0614\x03\x02\x02\x02\u0616\u0617\x03" + - "\x02\x02\x02\u0617\u061A\x03\x02\x02\x02\u0618\u0616\x03\x02\x02\x02\u0619" + - "\u060F\x03\x02\x02\x02\u0619\u061A\x03\x02\x02\x02\u061A\u0625\x03\x02" + - "\x02\x02\u061B\u061C\x07\'\x02\x02\u061C\u061D\x07\x1F\x02\x02\u061D\u0622" + - "\x05\xBE`\x02\u061E\u061F\x07\x05\x02\x02\u061F\u0621\x05\xBE`\x02\u0620" + - "\u061E\x03\x02\x02\x02\u0621\u0624\x03\x02\x02\x02\u0622\u0620\x03\x02" + - "\x02\x02\u0622\u0623\x03\x02\x02\x02\u0623\u0626\x03\x02\x02\x02\u0624" + - "\u0622\x03\x02\x02\x02\u0625\u061B\x03\x02\x02\x02\u0625\u0626\x03\x02" + - "\x02\x02\u0626\u0631\x03\x02\x02\x02\u0627\u0628\x07K\x02\x02\u0628\u0629" + - "\x07\x1F\x02\x02\u0629\u062E\x05\xBE`\x02\u062A\u062B\x07\x05\x02\x02" + - "\u062B\u062D\x05\xBE`\x02\u062C\u062A\x03\x02\x02\x02\u062D\u0630\x03" + - "\x02\x02\x02\u062E\u062C\x03\x02\x02\x02\u062E\u062F\x03\x02\x02\x02\u062F" + - "\u0632\x03\x02\x02\x02\u0630\u062E\x03\x02\x02\x02\u0631\u0627\x03\x02" + - "\x02\x02\u0631\u0632\x03\x02\x02\x02\u0632\u063D\x03\x02\x02\x02\u0633" + - "\u0634\x07\xD7\x02\x02\u0634\u0635\x07\x1F\x02\x02\u0635\u063A\x05Z.\x02" + - "\u0636\u0637\x07\x05\x02\x02\u0637\u0639\x05Z.\x02\u0638\u0636\x03\x02" + - "\x02\x02\u0639\u063C\x03\x02\x02\x02\u063A\u0638\x03\x02\x02\x02\u063A" + - "\u063B\x03\x02\x02\x02\u063B\u063E\x03\x02\x02\x02\u063C\u063A\x03\x02" + - "\x02\x02\u063D\u0633\x03\x02\x02\x02\u063D\u063E\x03\x02\x02\x02\u063E" + - "\u0640\x03\x02\x02\x02\u063F\u0641\x05\xF0y\x02\u0640\u063F\x03\x02\x02" + - "\x02\u0640\u0641\x03\x02\x02\x02\u0641\u0647\x03\x02\x02\x02\u0642\u0645" + - "\x07\x85\x02\x02\u0643\u0646\x07\x0F\x02\x02\u0644\u0646\x05\xBE`\x02" + - "\u0645\u0643\x03\x02\x02\x02\u0645\u0644\x03\x02\x02\x02\u0646\u0648\x03" + - "\x02\x02\x02\u0647\u0642\x03\x02\x02\x02\u0647\u0648\x03\x02\x02\x02\u0648" + - "S\x03\x02\x02\x02\u0649\u064A\x05&\x14\x02\u064A\u064B\x05^0\x02\u064B" + - "U\x03\x02\x02\x02\u064C\u064D\b,\x01\x02\u064D\u064E\x05X-\x02\u064E\u0666" + - "\x03\x02\x02\x02\u064F\u0650\f\x05\x02\x02\u0650\u0651\x06,\x03\x02\u0651" + - "\u0653\t\x10\x02\x02\u0652\u0654\x05\x8AF\x02\u0653\u0652\x03\x02\x02" + - "\x02\u0653\u0654\x03\x02\x02\x02\u0654\u0655\x03\x02\x02\x02\u0655\u0665" + - "\x05V,\x06\u0656\u0657\f\x04\x02\x02\u0657\u0658\x06,\x05\x02\u0658\u065A" + - "\x07x\x02\x02\u0659\u065B\x05\x8AF\x02\u065A\u0659\x03\x02\x02\x02\u065A" + - "\u065B\x03\x02\x02\x02\u065B\u065C\x03\x02\x02\x02\u065C\u0665\x05V,\x05" + - "\u065D\u065E\f\x03\x02\x02\u065E\u065F\x06,\x07\x02\u065F\u0661\t\x11" + - "\x02\x02\u0660\u0662\x05\x8AF\x02\u0661\u0660\x03\x02\x02\x02\u0661\u0662" + - "\x03\x02\x02\x02\u0662\u0663\x03\x02\x02\x02\u0663\u0665\x05V,\x04\u0664" + - "\u064F\x03\x02\x02\x02\u0664\u0656\x03\x02\x02\x02\u0664\u065D\x03\x02" + - "\x02\x02\u0665\u0668\x03\x02\x02\x02\u0666\u0664\x03\x02\x02\x02\u0666" + - "\u0667\x03\x02\x02\x02\u0667W\x03\x02\x02\x02\u0668\u0666\x03\x02\x02" + - "\x02\u0669\u0673\x05`1\x02\u066A\u0673\x05\\/\x02\u066B\u066C\x07\xE0" + - "\x02\x02\u066C\u0673\x05\xB0Y\x02\u066D\u0673\x05\xA6T\x02\u066E\u066F" + - "\x07\x03\x02\x02\u066F\u0670\x05$\x13\x02\u0670\u0671\x07\x04\x02\x02" + - "\u0671\u0673\x03\x02\x02\x02\u0672\u0669\x03\x02\x02\x02\u0672\u066A\x03" + - "\x02\x02\x02\u0672\u066B\x03\x02\x02\x02\u0672\u066D\x03\x02\x02\x02\u0672" + - "\u066E\x03\x02\x02\x02\u0673Y\x03\x02\x02\x02\u0674\u0676\x05\xBE`\x02" + - "\u0675\u0677\t\x12\x02\x02\u0676\u0675\x03\x02\x02\x02\u0676\u0677\x03" + - "\x02\x02\x02\u0677\u067A\x03\x02\x02\x02\u0678\u0679\x07\x99\x02\x02\u0679" + - "\u067B\t\x13\x02\x02\u067A\u0678\x03\x02\x02\x02\u067A\u067B\x03\x02\x02" + - "\x02\u067B[\x03\x02\x02\x02\u067C\u067E\x05|?\x02\u067D\u067F\x05^0\x02" + - "\u067E\u067D\x03\x02\x02\x02\u067F\u0680\x03\x02\x02\x02\u0680\u067E\x03" + - "\x02\x02\x02\u0680\u0681\x03\x02\x02\x02\u0681]\x03\x02\x02\x02\u0682" + - "\u0684\x05b2\x02\u0683\u0685\x05t;\x02\u0684\u0683\x03\x02\x02\x02\u0684" + - "\u0685\x03\x02\x02\x02\u0685\u0686\x03\x02\x02\x02\u0686\u0687\x05R*\x02" + - "\u0687\u069E\x03\x02\x02\x02\u0688\u068C\x05d3\x02\u0689\u068B\x05\x88" + - "E\x02\u068A\u0689\x03\x02\x02\x02\u068B\u068E\x03\x02\x02\x02\u068C\u068A" + - "\x03\x02\x02\x02\u068C\u068D\x03\x02\x02\x02\u068D\u0690\x03\x02\x02\x02" + - "\u068E\u068C\x03\x02\x02\x02\u068F\u0691\x05t;\x02\u0690\u068F\x03\x02" + - "\x02\x02\u0690\u0691\x03\x02\x02\x02\u0691\u0693\x03\x02\x02\x02\u0692" + - "\u0694\x05~@\x02\u0693\u0692\x03\x02\x02\x02\u0693\u0694\x03\x02\x02\x02" + - "\u0694\u0696\x03\x02\x02\x02\u0695\u0697\x05v<\x02\u0696\u0695\x03\x02" + - "\x02\x02\u0696\u0697\x03\x02\x02\x02\u0697\u0699\x03\x02\x02\x02\u0698" + - "\u069A\x05\xF0y\x02\u0699\u0698\x03\x02\x02\x02\u0699\u069A\x03\x02\x02" + - "\x02\u069A\u069B\x03\x02\x02\x02\u069B\u069C\x05R*\x02\u069C\u069E\x03" + - "\x02\x02\x02\u069D\u0682\x03\x02\x02\x02\u069D\u0688\x03\x02\x02\x02\u069E" + - "_\x03\x02\x02\x02\u069F\u06A1\x05b2\x02\u06A0\u06A2\x05|?\x02\u06A1\u06A0" + - "\x03\x02\x02\x02\u06A1\u06A2\x03\x02\x02\x02\u06A2\u06A4\x03\x02\x02\x02" + - "\u06A3\u06A5\x05t;\x02\u06A4\u06A3\x03\x02\x02\x02\u06A4\u06A5\x03\x02" + - "\x02\x02\u06A5\u06BD\x03\x02\x02\x02\u06A6\u06A8\x05d3\x02\u06A7\u06A9" + - "\x05|?\x02\u06A8\u06A7\x03\x02\x02\x02\u06A8\u06A9\x03\x02\x02\x02\u06A9" + - "\u06AD\x03\x02\x02\x02\u06AA\u06AC\x05\x88E\x02\u06AB\u06AA\x03\x02\x02" + - "\x02\u06AC\u06AF\x03\x02\x02\x02\u06AD\u06AB\x03\x02\x02\x02\u06AD\u06AE" + - "\x03\x02\x02\x02\u06AE\u06B1\x03\x02\x02\x02\u06AF\u06AD\x03\x02\x02\x02" + - "\u06B0\u06B2\x05t;\x02\u06B1\u06B0\x03\x02\x02\x02\u06B1\u06B2\x03\x02" + - "\x02\x02\u06B2\u06B4\x03\x02\x02\x02\u06B3\u06B5\x05~@\x02\u06B4\u06B3" + - "\x03\x02\x02\x02\u06B4\u06B5\x03\x02\x02\x02\u06B5\u06B7\x03\x02\x02\x02" + - "\u06B6\u06B8\x05v<\x02\u06B7\u06B6\x03\x02\x02\x02\u06B7\u06B8\x03\x02" + - "\x02\x02\u06B8\u06BA\x03\x02\x02\x02\u06B9\u06BB\x05\xF0y\x02\u06BA\u06B9" + - "\x03\x02\x02\x02\u06BA\u06BB\x03\x02\x02\x02\u06BB\u06BD\x03\x02\x02\x02" + - "\u06BC\u069F\x03\x02\x02\x02\u06BC\u06A6\x03\x02\x02\x02\u06BDa\x03\x02" + - "\x02\x02\u06BE\u06BF\x07\xCB\x02\x02\u06BF\u06C0\x07\xED\x02\x02\u06C0" + - "\u06C1\x07\x03\x02\x02\u06C1\u06C2\x05\xB6\\\x02\u06C2\u06C3\x07\x04\x02" + - "\x02\u06C3\u06C9\x03\x02\x02\x02\u06C4\u06C5\x07\x8F\x02\x02\u06C5\u06C9" + - "\x05\xB6\\\x02\u06C6\u06C7\x07\xB9\x02\x02\u06C7\u06C9\x05\xB6\\\x02\u06C8" + - "\u06BE\x03\x02\x02\x02\u06C8\u06C4\x03\x02\x02\x02\u06C8\u06C6\x03\x02" + - "\x02\x02\u06C9\u06CB\x03\x02\x02\x02\u06CA\u06CC\x05\xACW\x02\u06CB\u06CA" + - "\x03\x02\x02\x02\u06CB\u06CC\x03\x02\x02\x02\u06CC\u06CF\x03\x02\x02\x02" + - "\u06CD\u06CE\x07\xB7\x02\x02\u06CE\u06D0\x07\u0119\x02\x02\u06CF\u06CD" + - "\x03\x02\x02\x02\u06CF\u06D0\x03\x02\x02\x02\u06D0\u06D1\x03\x02\x02\x02" + - "\u06D1\u06D2\x07\xFD\x02\x02\u06D2\u06DF\x07\u0119\x02\x02\u06D3\u06DD" + - "\x07\x17\x02\x02\u06D4\u06DE\x05\x9AN\x02\u06D5\u06DE\x05\xE6t\x02\u06D6" + - "\u06D9\x07\x03\x02\x02\u06D7\u06DA\x05\x9AN\x02\u06D8\u06DA\x05\xE6t\x02" + - "\u06D9\u06D7\x03\x02\x02\x02\u06D9\u06D8\x03\x02\x02\x02\u06DA\u06DB\x03" + - "\x02\x02\x02\u06DB\u06DC\x07\x04\x02\x02\u06DC\u06DE\x03\x02\x02\x02\u06DD" + - "\u06D4\x03\x02\x02\x02\u06DD\u06D5\x03\x02\x02\x02\u06DD\u06D6\x03\x02" + - "\x02\x02\u06DE\u06E0\x03\x02\x02\x02\u06DF\u06D3\x03\x02\x02\x02\u06DF" + - "\u06E0\x03\x02\x02\x02\u06E0\u06E2\x03\x02\x02\x02\u06E1\u06E3\x05\xAC" + - "W\x02\u06E2\u06E1\x03\x02\x02\x02\u06E2\u06E3\x03\x02\x02\x02\u06E3\u06E6" + - "\x03\x02\x02\x02\u06E4\u06E5\x07\xB6\x02\x02\u06E5\u06E7\x07\u0119\x02" + - "\x02\u06E6\u06E4\x03\x02\x02\x02\u06E6\u06E7\x03\x02\x02\x02\u06E7c\x03" + - "\x02\x02\x02\u06E8\u06EC\x07\xCB\x02\x02\u06E9\u06EB\x05x=\x02\u06EA\u06E9" + - "\x03\x02\x02\x02\u06EB\u06EE\x03\x02\x02\x02\u06EC\u06EA\x03\x02\x02\x02" + - "\u06EC\u06ED\x03\x02\x02\x02\u06ED\u06F0\x03\x02\x02\x02\u06EE\u06EC\x03" + - "\x02\x02\x02\u06EF\u06F1\x05\x8AF\x02\u06F0\u06EF\x03\x02\x02\x02\u06F0" + - "\u06F1\x03\x02\x02\x02\u06F1\u06F2\x03\x02\x02\x02\u06F2\u06F3\x05\xB6" + - "\\\x02\u06F3e\x03\x02\x02\x02\u06F4\u06F5\x07\xD1\x02\x02\u06F5\u06F6" + - "\x05p9\x02\u06F6g\x03\x02\x02\x02\u06F7\u06F8\x07\u0101\x02\x02\u06F8" + - "\u06FB\x07\x90\x02\x02\u06F9\u06FA\x07\x12\x02\x02\u06FA\u06FC\x05\xC0" + - "a\x02\u06FB\u06F9\x03\x02\x02\x02\u06FB\u06FC\x03\x02\x02\x02\u06FC\u06FD" + - "\x03\x02\x02\x02\u06FD\u06FE\x07\xE6\x02\x02\u06FE\u06FF\x05l7\x02\u06FF" + - "i\x03\x02\x02\x02\u0700\u0701\x07\u0101\x02\x02\u0701\u0702\x07\x97\x02" + - "\x02\u0702\u0705\x07\x90\x02\x02\u0703\u0704\x07\x12\x02\x02\u0704\u0706" + - "\x05\xC0a\x02\u0705\u0703\x03\x02\x02\x02\u0705\u0706\x03\x02\x02\x02" + - "\u0706\u0707\x03\x02\x02\x02\u0707\u0708\x07\xE6\x02\x02\u0708\u0709\x05" + - "n8\x02\u0709k\x03\x02\x02\x02\u070A\u0712\x07C\x02\x02\u070B\u070C\x07" + - "\xFA\x02\x02\u070C\u070D\x07\xD1\x02\x02\u070D\u0712\x07\u0110\x02\x02" + - "\u070E\u070F\x07\xFA\x02\x02\u070F\u0710\x07\xD1\x02\x02\u0710\u0712\x05" + - "p9\x02\u0711\u070A\x03\x02\x02\x02\u0711\u070B\x03\x02\x02\x02\u0711\u070E" + - "\x03\x02\x02\x02\u0712m\x03\x02\x02\x02\u0713\u0714\x07w\x02\x02\u0714" + - "\u0726\x07\u0110\x02\x02\u0715\u0716\x07w\x02\x02\u0716\u0717\x07\x03" + - "\x02\x02\u0717\u0718\x05\xAEX\x02\u0718\u0719\x07\x04\x02\x02\u0719\u071A" + - "\x07\xFE\x02\x02\u071A\u071B\x07\x03\x02\x02\u071B\u0720\x05\xBE`\x02" + - "\u071C\u071D\x07\x05\x02\x02\u071D\u071F\x05\xBE`\x02\u071E\u071C\x03" + - "\x02\x02\x02\u071F\u0722\x03\x02\x02\x02\u0720\u071E\x03\x02\x02\x02\u0720" + - "\u0721\x03\x02\x02\x02\u0721\u0723\x03\x02\x02\x02\u0722\u0720\x03\x02" + - "\x02\x02\u0723\u0724\x07\x04\x02\x02\u0724\u0726\x03\x02\x02\x02\u0725" + - "\u0713\x03\x02\x02\x02\u0725\u0715\x03\x02\x02\x02\u0726o\x03\x02\x02" + - "\x02\u0727\u072C\x05r:\x02\u0728\u0729\x07\x05\x02\x02\u0729\u072B\x05" + - "r:\x02\u072A\u0728\x03\x02\x02\x02\u072B\u072E\x03\x02\x02\x02\u072C\u072A" + - "\x03\x02\x02\x02\u072C\u072D\x03\x02\x02\x02\u072Dq\x03\x02\x02\x02\u072E" + - "\u072C\x03\x02\x02\x02\u072F\u0730\x05\xB0Y\x02\u0730\u0731\x07\u0106" + - "\x02\x02\u0731\u0732\x05\xBE`\x02\u0732s\x03\x02\x02\x02\u0733\u0734\x07" + - "\u0102\x02\x02\u0734\u0735\x05\xC0a\x02\u0735u\x03\x02\x02\x02\u0736\u0737" + - "\x07m\x02\x02\u0737\u0738\x05\xC0a\x02\u0738w\x03\x02\x02\x02\u0739\u073A" + - "\x07\x07\x02\x02\u073A\u0741\x05z>\x02\u073B\u073D\x07\x05\x02\x02\u073C" + - "\u073B\x03\x02\x02\x02\u073C\u073D\x03\x02\x02\x02\u073D\u073E\x03\x02" + - "\x02\x02\u073E\u0740\x05z>\x02\u073F\u073C\x03\x02\x02\x02\u0740\u0743" + - "\x03\x02\x02\x02\u0741\u073F\x03\x02\x02\x02\u0741\u0742\x03\x02\x02\x02" + - "\u0742\u0744\x03\x02\x02\x02\u0743\u0741\x03\x02\x02\x02\u0744\u0745\x07" + - "\b\x02\x02\u0745y\x03\x02\x02\x02\u0746\u0754\x05\u0104\x83\x02\u0747" + - "\u0748\x05\u0104\x83\x02\u0748\u0749\x07\x03\x02\x02\u0749\u074E\x05\xC6" + - "d\x02\u074A\u074B\x07\x05\x02\x02\u074B\u074D\x05\xC6d\x02\u074C\u074A" + - "\x03\x02\x02\x02\u074D\u0750\x03\x02\x02\x02\u074E\u074C\x03\x02\x02\x02" + - "\u074E\u074F\x03\x02\x02\x02\u074F\u0751\x03\x02\x02\x02\u0750\u074E\x03" + - "\x02\x02\x02\u0751\u0752\x07\x04\x02\x02\u0752\u0754\x03\x02\x02\x02\u0753" + - "\u0746\x03\x02\x02\x02\u0753\u0747\x03\x02\x02\x02\u0754{\x03\x02\x02" + - "\x02\u0755\u0756\x07e\x02\x02\u0756\u075B\x05\x8CG\x02\u0757\u0758\x07" + - "\x05\x02\x02\u0758\u075A\x05\x8CG\x02\u0759\u0757\x03\x02\x02\x02\u075A" + - "\u075D\x03\x02\x02\x02\u075B\u0759\x03\x02\x02\x02\u075B\u075C\x03\x02" + - "\x02\x02\u075C\u0761\x03\x02\x02\x02\u075D\u075B\x03\x02\x02\x02\u075E" + - "\u0760\x05\x88E\x02\u075F\u075E\x03\x02\x02\x02\u0760\u0763\x03\x02\x02" + - "\x02\u0761\u075F"; - private static readonly _serializedATNSegment4: string = - "\x03\x02\x02\x02\u0761\u0762\x03\x02\x02\x02\u0762\u0765\x03\x02\x02\x02" + - "\u0763\u0761\x03\x02\x02\x02\u0764\u0766\x05\x82B\x02\u0765\u0764\x03" + - "\x02\x02\x02\u0765\u0766\x03\x02\x02\x02\u0766}\x03\x02\x02\x02\u0767" + - "\u0768\x07k\x02\x02\u0768\u0769\x07\x1F\x02\x02\u0769\u076E\x05\xBE`\x02" + - "\u076A\u076B\x07\x05\x02\x02\u076B\u076D\x05\xBE`\x02\u076C\u076A\x03" + - "\x02\x02\x02\u076D\u0770\x03\x02\x02\x02\u076E\u076C\x03\x02\x02\x02\u076E" + - "\u076F\x03\x02\x02\x02\u076F\u0782\x03\x02\x02\x02\u0770\u076E\x03\x02" + - "\x02\x02\u0771\u0772\x07\u0104\x02\x02\u0772\u0783\x07\xC7\x02\x02\u0773" + - "\u0774\x07\u0104\x02\x02\u0774\u0783\x078\x02\x02\u0775\u0776\x07l\x02" + - "\x02\u0776\u0777\x07\xD3\x02\x02\u0777\u0778\x07\x03\x02\x02\u0778\u077D" + - "\x05\x80A\x02\u0779\u077A\x07\x05\x02\x02\u077A\u077C\x05\x80A\x02\u077B" + - "\u0779\x03\x02\x02\x02\u077C\u077F\x03\x02\x02\x02\u077D\u077B\x03\x02" + - "\x02\x02\u077D\u077E\x03\x02\x02\x02\u077E\u0780\x03\x02\x02\x02\u077F" + - "\u077D\x03\x02\x02\x02\u0780\u0781\x07\x04\x02\x02\u0781\u0783\x03\x02" + - "\x02\x02\u0782\u0771\x03\x02\x02\x02\u0782\u0773\x03\x02\x02\x02\u0782" + - "\u0775\x03\x02\x02\x02\u0782\u0783\x03\x02\x02\x02\u0783\u0794\x03\x02" + - "\x02\x02\u0784\u0785\x07k\x02\x02\u0785\u0786\x07\x1F\x02\x02\u0786\u0787" + - "\x07l\x02\x02\u0787\u0788\x07\xD3\x02\x02\u0788\u0789\x07\x03\x02\x02" + - "\u0789\u078E\x05\x80A\x02\u078A\u078B\x07\x05\x02\x02\u078B\u078D\x05" + - "\x80A\x02\u078C\u078A\x03\x02\x02\x02\u078D\u0790\x03\x02\x02\x02\u078E" + - "\u078C\x03\x02\x02\x02\u078E\u078F\x03\x02\x02\x02\u078F\u0791\x03\x02" + - "\x02\x02\u0790\u078E\x03\x02\x02\x02\u0791\u0792\x07\x04\x02\x02\u0792" + - "\u0794\x03\x02\x02\x02\u0793\u0767\x03\x02\x02\x02\u0793\u0784\x03\x02" + - "\x02\x02\u0794\x7F\x03\x02\x02\x02\u0795\u079E\x07\x03\x02\x02\u0796\u079B" + - "\x05\xBE`\x02\u0797\u0798\x07\x05\x02\x02\u0798\u079A\x05\xBE`\x02\u0799" + - "\u0797\x03\x02\x02\x02\u079A\u079D\x03\x02\x02\x02\u079B\u0799\x03\x02" + - "\x02\x02\u079B\u079C\x03\x02\x02\x02\u079C\u079F\x03\x02\x02\x02\u079D" + - "\u079B\x03\x02\x02\x02\u079E\u0796\x03\x02\x02\x02\u079E\u079F\x03\x02" + - "\x02\x02\u079F\u07A0\x03\x02\x02\x02\u07A0\u07A3\x07\x04\x02\x02\u07A1" + - "\u07A3\x05\xBE`\x02\u07A2\u0795\x03\x02\x02\x02\u07A2\u07A1\x03\x02\x02" + - "\x02\u07A3\x81\x03\x02\x02\x02\u07A4\u07A5\x07\xAC\x02\x02\u07A5\u07A6" + - "\x07\x03\x02\x02\u07A6\u07A7\x05\xB6\\\x02\u07A7\u07A8\x07a\x02\x02\u07A8" + - "\u07A9\x05\x84C\x02\u07A9\u07AA\x07q\x02\x02\u07AA\u07AB\x07\x03\x02\x02" + - "\u07AB\u07B0\x05\x86D\x02\u07AC\u07AD\x07\x05\x02\x02\u07AD\u07AF\x05" + - "\x86D\x02\u07AE\u07AC\x03\x02\x02\x02\u07AF\u07B2\x03\x02\x02\x02\u07B0" + - "\u07AE\x03\x02\x02\x02\u07B0\u07B1\x03\x02\x02\x02\u07B1\u07B3\x03\x02" + - "\x02\x02\u07B2\u07B0\x03\x02\x02\x02\u07B3\u07B4\x07\x04\x02\x02\u07B4" + - "\u07B5\x07\x04\x02\x02\u07B5\x83\x03\x02\x02\x02\u07B6\u07C3\x05\u0104" + - "\x83\x02\u07B7\u07B8\x07\x03\x02\x02\u07B8\u07BD\x05\u0104\x83\x02\u07B9" + - "\u07BA\x07\x05\x02\x02\u07BA\u07BC\x05\u0104\x83\x02\u07BB\u07B9\x03\x02" + - "\x02\x02\u07BC\u07BF\x03\x02\x02\x02\u07BD\u07BB\x03\x02\x02\x02\u07BD" + - "\u07BE\x03\x02\x02\x02\u07BE\u07C0\x03\x02\x02\x02\u07BF\u07BD\x03\x02" + - "\x02\x02\u07C0\u07C1\x07\x04\x02\x02\u07C1\u07C3\x03\x02\x02\x02\u07C2" + - "\u07B6\x03\x02\x02\x02\u07C2\u07B7\x03\x02\x02\x02\u07C3\x85\x03\x02\x02" + - "\x02\u07C4\u07C9\x05\xBE`\x02\u07C5\u07C7\x07\x17\x02\x02\u07C6\u07C5" + - "\x03\x02\x02\x02\u07C6\u07C7\x03\x02\x02\x02\u07C7\u07C8\x03\x02\x02\x02" + - "\u07C8\u07CA\x05\u0104\x83\x02\u07C9\u07C6\x03\x02\x02\x02\u07C9\u07CA" + - "\x03\x02\x02\x02\u07CA\x87\x03\x02\x02\x02\u07CB\u07CC\x07\x80\x02\x02" + - "\u07CC\u07CE\x07\xFF\x02\x02\u07CD\u07CF\x07\xA2\x02\x02\u07CE\u07CD\x03" + - "\x02\x02\x02\u07CE\u07CF\x03\x02\x02\x02\u07CF\u07D0\x03\x02\x02\x02\u07D0" + - "\u07D1\x05\xFE\x80\x02\u07D1\u07DA\x07\x03\x02\x02\u07D2\u07D7\x05\xBE" + - "`\x02\u07D3\u07D4\x07\x05\x02\x02\u07D4\u07D6\x05\xBE`\x02\u07D5\u07D3" + - "\x03\x02\x02\x02\u07D6\u07D9\x03\x02\x02\x02\u07D7\u07D5\x03\x02\x02\x02" + - "\u07D7\u07D8\x03\x02\x02\x02\u07D8\u07DB\x03\x02\x02\x02\u07D9\u07D7\x03" + - "\x02\x02\x02\u07DA\u07D2\x03\x02\x02\x02\u07DA\u07DB\x03\x02\x02\x02\u07DB" + - "\u07DC\x03\x02\x02\x02\u07DC\u07DD\x07\x04\x02\x02\u07DD\u07E9\x05\u0104" + - "\x83\x02\u07DE\u07E0\x07\x17\x02\x02\u07DF\u07DE\x03\x02\x02\x02\u07DF" + - "\u07E0\x03\x02\x02\x02\u07E0\u07E1\x03\x02\x02\x02\u07E1\u07E6\x05\u0104" + - "\x83\x02\u07E2\u07E3\x07\x05\x02\x02\u07E3\u07E5\x05\u0104\x83\x02\u07E4" + - "\u07E2\x03\x02\x02\x02\u07E5\u07E8\x03\x02\x02\x02\u07E6\u07E4\x03\x02" + - "\x02\x02\u07E6\u07E7\x03\x02\x02\x02\u07E7\u07EA\x03\x02\x02\x02\u07E8" + - "\u07E6\x03\x02\x02\x02\u07E9\u07DF\x03\x02\x02\x02\u07E9\u07EA\x03\x02" + - "\x02\x02\u07EA\x89\x03\x02\x02\x02\u07EB\u07EC\t\x14\x02\x02\u07EC\x8B" + - "\x03\x02\x02\x02\u07ED\u07F1\x05\xA4S\x02\u07EE\u07F0\x05\x8EH\x02\u07EF" + - "\u07EE\x03\x02\x02\x02\u07F0\u07F3\x03\x02\x02\x02\u07F1\u07EF\x03\x02" + - "\x02\x02\u07F1\u07F2\x03\x02\x02\x02\u07F2\x8D\x03\x02\x02\x02\u07F3\u07F1" + - "\x03\x02\x02\x02\u07F4\u07F5\x05\x90I\x02\u07F5\u07F6\x07}\x02\x02\u07F6" + - "\u07F8\x05\xA4S\x02\u07F7\u07F9\x05\x92J\x02\u07F8\u07F7\x03\x02\x02\x02" + - "\u07F8\u07F9\x03\x02\x02\x02\u07F9\u0800\x03\x02\x02\x02\u07FA\u07FB\x07" + - "\x95\x02\x02\u07FB\u07FC\x05\x90I\x02\u07FC\u07FD\x07}\x02\x02\u07FD\u07FE" + - "\x05\xA4S\x02\u07FE\u0800\x03\x02\x02\x02\u07FF\u07F4\x03\x02\x02\x02" + - "\u07FF\u07FA\x03\x02\x02\x02\u0800\x8F\x03\x02\x02\x02\u0801\u0803\x07" + - "t\x02\x02\u0802\u0801\x03\x02\x02\x02\u0802\u0803\x03\x02\x02\x02\u0803" + - "\u081A\x03\x02\x02\x02\u0804\u081A\x077\x02\x02\u0805\u0807\x07\x83\x02" + - "\x02\u0806\u0808\x07\xA2\x02\x02\u0807\u0806\x03\x02\x02\x02\u0807\u0808" + - "\x03\x02\x02\x02\u0808\u081A\x03\x02\x02\x02\u0809\u080B\x07\x83\x02\x02" + - "\u080A\u0809\x03\x02\x02\x02\u080A\u080B\x03\x02\x02\x02\u080B\u080C\x03" + - "\x02\x02\x02\u080C\u081A\x07\xCC\x02\x02\u080D\u080F\x07\xC2\x02\x02\u080E" + - "\u0810\x07\xA2\x02\x02\u080F\u080E\x03\x02\x02\x02\u080F\u0810\x03\x02" + - "\x02\x02\u0810\u081A\x03\x02\x02\x02\u0811\u0813\x07f\x02\x02\u0812\u0814" + - "\x07\xA2\x02\x02\u0813\u0812\x03\x02\x02\x02\u0813\u0814\x03\x02\x02\x02" + - "\u0814\u081A\x03\x02\x02\x02\u0815\u0817\x07\x83\x02\x02\u0816\u0815\x03" + - "\x02\x02\x02\u0816\u0817\x03\x02\x02\x02\u0817\u0818\x03\x02\x02\x02\u0818" + - "\u081A\x07\x13\x02\x02\u0819\u0802\x03\x02\x02\x02\u0819\u0804\x03\x02" + - "\x02\x02\u0819\u0805\x03\x02\x02\x02\u0819\u080A\x03\x02\x02\x02\u0819" + - "\u080D\x03\x02\x02\x02\u0819\u0811\x03\x02\x02\x02\u0819\u0816\x03\x02" + - "\x02\x02\u081A\x91\x03\x02\x02\x02\u081B\u081C\x07\x9B\x02\x02\u081C\u0820" + - "\x05\xC0a\x02\u081D\u081E\x07\xFD\x02\x02\u081E\u0820\x05\x98M\x02\u081F" + - "\u081B\x03\x02\x02\x02\u081F\u081D\x03\x02\x02\x02\u0820\x93\x03\x02\x02" + - "\x02\u0821\u0822\x07\xE2\x02\x02\u0822\u0824\x07\x03\x02\x02\u0823\u0825" + - "\x05\x96L\x02\u0824\u0823\x03\x02\x02\x02\u0824\u0825\x03\x02\x02\x02" + - "\u0825\u0826\x03\x02\x02\x02\u0826\u0827\x07\x04\x02\x02\u0827\x95\x03" + - "\x02\x02\x02\u0828\u082A\x07\u010F\x02\x02\u0829\u0828\x03\x02\x02\x02" + - "\u0829\u082A\x03\x02\x02\x02\u082A\u082B\x03\x02\x02\x02\u082B\u082C\t" + - "\x15\x02\x02\u082C\u0841\x07\xAB\x02\x02\u082D\u082E\x05\xBE`\x02\u082E" + - "\u082F\x07\xC9\x02\x02\u082F\u0841\x03\x02\x02\x02\u0830\u0831\x07\x1D" + - "\x02\x02\u0831\u0832\x07\u011D\x02\x02\u0832\u0833\x07\xA1\x02\x02\u0833" + - "\u0834\x07\x9A\x02\x02\u0834\u083D\x07\u011D\x02\x02\u0835\u083B\x07\x9B" + - "\x02\x02\u0836\u083C\x05\u0104\x83\x02\u0837\u0838\x05\xFE\x80\x02\u0838" + - "\u0839\x07\x03\x02\x02\u0839\u083A\x07\x04\x02\x02\u083A\u083C\x03\x02" + - "\x02\x02\u083B\u0836\x03\x02\x02\x02\u083B\u0837\x03\x02\x02\x02\u083C" + - "\u083E\x03\x02\x02\x02\u083D\u0835\x03\x02\x02\x02\u083D\u083E\x03\x02" + - "\x02\x02\u083E\u0841\x03\x02\x02\x02\u083F\u0841\x05\xBE`\x02\u0840\u0829" + - "\x03\x02\x02\x02\u0840\u082D\x03\x02\x02\x02\u0840\u0830\x03\x02\x02\x02" + - "\u0840\u083F\x03\x02\x02\x02\u0841\x97\x03\x02\x02\x02\u0842\u0843\x07" + - "\x03\x02\x02\u0843\u0844\x05\x9AN\x02\u0844\u0845\x07\x04\x02\x02\u0845" + - "\x99\x03\x02\x02\x02\u0846\u084B\x05\u0100\x81\x02\u0847\u0848\x07\x05" + - "\x02\x02\u0848\u084A\x05\u0100\x81\x02\u0849\u0847\x03\x02\x02\x02\u084A" + - "\u084D\x03\x02\x02\x02\u084B\u0849\x03\x02\x02\x02\u084B\u084C\x03\x02" + - "\x02\x02\u084C\x9B\x03\x02\x02\x02\u084D\u084B\x03\x02\x02\x02\u084E\u084F" + - "\x07\x03\x02\x02\u084F\u0854\x05\x9EP\x02\u0850\u0851\x07\x05\x02\x02" + - "\u0851\u0853\x05\x9EP\x02\u0852\u0850\x03\x02\x02\x02\u0853\u0856\x03" + - "\x02\x02\x02\u0854\u0852\x03\x02\x02\x02\u0854\u0855\x03\x02\x02\x02\u0855" + - "\u0857\x03\x02\x02\x02\u0856\u0854\x03\x02\x02\x02\u0857\u0858\x07\x04" + - "\x02\x02\u0858\x9D\x03\x02\x02\x02\u0859\u085B\x05\u0100\x81\x02\u085A" + - "\u085C\t\x12\x02\x02\u085B\u085A\x03\x02\x02\x02\u085B\u085C\x03\x02\x02" + - "\x02\u085C\x9F\x03\x02\x02\x02\u085D\u085E\x07\x03\x02\x02\u085E\u0863" + - "\x05\xA2R\x02\u085F\u0860\x07\x05\x02\x02\u0860\u0862\x05\xA2R\x02\u0861" + - "\u085F\x03\x02\x02\x02\u0862\u0865\x03\x02\x02\x02\u0863\u0861\x03\x02" + - "\x02\x02\u0863\u0864\x03\x02\x02\x02\u0864\u0866\x03\x02\x02\x02\u0865" + - "\u0863\x03\x02\x02\x02\u0866\u0867\x07\x04\x02\x02\u0867\xA1\x03\x02\x02" + - "\x02\u0868\u086A\x05\u0104\x83\x02\u0869\u086B\x05\"\x12\x02\u086A\u0869" + - "\x03\x02\x02\x02\u086A\u086B\x03\x02\x02\x02\u086B\xA3\x03\x02\x02\x02" + - "\u086C\u086E\x05\xB0Y\x02\u086D\u086F\x05\x94K\x02\u086E\u086D\x03\x02" + - "\x02\x02\u086E\u086F\x03\x02\x02\x02\u086F\u0870\x03\x02\x02\x02\u0870" + - "\u0871\x05\xAAV\x02\u0871\u0885\x03\x02\x02\x02\u0872\u0873\x07\x03\x02" + - "\x02\u0873\u0874\x05$\x13\x02\u0874\u0876\x07\x04\x02\x02\u0875\u0877" + - "\x05\x94K\x02\u0876\u0875\x03\x02\x02\x02\u0876\u0877\x03\x02\x02\x02" + - "\u0877\u0878\x03\x02\x02\x02\u0878\u0879\x05\xAAV\x02\u0879\u0885\x03" + - "\x02\x02\x02\u087A\u087B\x07\x03\x02\x02\u087B\u087C\x05\x8CG\x02\u087C" + - "\u087E\x07\x04\x02\x02\u087D\u087F\x05\x94K\x02\u087E\u087D\x03\x02\x02" + - "\x02\u087E\u087F\x03\x02\x02\x02\u087F\u0880\x03\x02\x02\x02\u0880\u0881" + - "\x05\xAAV\x02\u0881\u0885\x03\x02\x02\x02\u0882\u0885\x05\xA6T\x02\u0883" + - "\u0885\x05\xA8U\x02\u0884\u086C\x03\x02\x02\x02\u0884\u0872\x03\x02\x02" + - "\x02\u0884\u087A\x03\x02\x02\x02\u0884\u0882\x03\x02\x02\x02\u0884\u0883" + - "\x03\x02\x02\x02\u0885\xA5\x03\x02\x02\x02\u0886\u0887\x07\xFE\x02\x02" + - "\u0887\u088C\x05\xBE`\x02\u0888\u0889\x07\x05\x02\x02\u0889\u088B\x05" + - "\xBE`\x02\u088A\u0888\x03\x02\x02\x02\u088B\u088E\x03\x02\x02\x02\u088C" + - "\u088A\x03\x02\x02\x02\u088C\u088D\x03\x02\x02\x02\u088D\u088F\x03\x02" + - "\x02\x02\u088E\u088C\x03\x02\x02\x02\u088F\u0890\x05\xAAV\x02\u0890\xA7" + - "\x03\x02\x02\x02\u0891\u0892\x05\u0100\x81\x02\u0892\u089B\x07\x03\x02" + - "\x02\u0893\u0898\x05\xBE`\x02\u0894\u0895\x07\x05\x02\x02\u0895\u0897" + - "\x05\xBE`\x02\u0896\u0894\x03\x02\x02\x02\u0897\u089A\x03\x02\x02\x02" + - "\u0898\u0896\x03\x02\x02\x02\u0898\u0899\x03\x02\x02\x02\u0899\u089C\x03" + - "\x02\x02\x02\u089A\u0898\x03\x02\x02\x02\u089B\u0893\x03\x02\x02\x02\u089B" + - "\u089C\x03\x02\x02\x02\u089C\u089D\x03\x02\x02\x02\u089D\u089E\x07\x04" + - "\x02\x02\u089E\u089F\x05\xAAV\x02\u089F\xA9\x03\x02\x02\x02\u08A0\u08A2" + - "\x07\x17\x02\x02\u08A1\u08A0\x03\x02\x02\x02\u08A1\u08A2\x03\x02\x02\x02" + - "\u08A2\u08A3\x03\x02\x02\x02\u08A3\u08A5\x05\u0106\x84\x02\u08A4\u08A6" + - "\x05\x98M\x02\u08A5\u08A4\x03\x02\x02\x02\u08A5\u08A6\x03\x02\x02\x02" + - "\u08A6\u08A8\x03\x02\x02\x02\u08A7\u08A1\x03\x02\x02\x02\u08A7\u08A8\x03" + - "\x02\x02\x02\u08A8\xAB\x03\x02\x02\x02\u08A9\u08AA\x07\xC8\x02\x02\u08AA" + - "\u08AB\x07c\x02\x02\u08AB\u08AC\x07\xCE\x02\x02\u08AC\u08B0\x07\u0119" + - "\x02\x02\u08AD\u08AE\x07\u0104\x02\x02\u08AE\u08AF\x07\xCF\x02\x02\u08AF" + - "\u08B1\x05<\x1F\x02\u08B0\u08AD\x03\x02\x02\x02\u08B0\u08B1\x03\x02\x02" + - "\x02\u08B1\u08DB\x03\x02\x02\x02\u08B2\u08B3\x07\xC8\x02\x02\u08B3\u08B4" + - "\x07c\x02\x02\u08B4\u08BE\x07D\x02\x02\u08B5\u08B6\x07\\\x02\x02\u08B6" + - "\u08B7\x07\xE5\x02\x02\u08B7\u08B8\x07\x1F\x02\x02\u08B8\u08BC\x07\u0119" + - "\x02\x02\u08B9\u08BA\x07Q\x02\x02\u08BA\u08BB\x07\x1F\x02\x02\u08BB\u08BD" + - "\x07\u0119\x02\x02\u08BC\u08B9\x03\x02\x02\x02\u08BC\u08BD\x03\x02\x02" + - "\x02\u08BD\u08BF\x03\x02\x02\x02\u08BE\u08B5\x03\x02\x02\x02\u08BE\u08BF" + - "\x03\x02\x02\x02\u08BF\u08C5\x03\x02\x02\x02\u08C0\u08C1\x07+\x02\x02" + - "\u08C1\u08C2\x07|\x02\x02\u08C2\u08C3\x07\xE5\x02\x02\u08C3\u08C4\x07" + - "\x1F\x02\x02\u08C4\u08C6\x07\u0119\x02\x02\u08C5\u08C0\x03\x02\x02\x02" + - "\u08C5\u08C6\x03\x02\x02\x02\u08C6\u08CC\x03\x02\x02\x02\u08C7\u08C8\x07" + - "\x8F\x02\x02\u08C8\u08C9\x07~\x02\x02\u08C9\u08CA\x07\xE5\x02\x02\u08CA" + - "\u08CB\x07\x1F\x02\x02\u08CB\u08CD\x07\u0119\x02\x02\u08CC\u08C7\x03\x02" + - "\x02\x02\u08CC\u08CD\x03\x02\x02\x02\u08CD\u08D2\x03\x02\x02\x02\u08CE" + - "\u08CF\x07\x86\x02\x02\u08CF\u08D0\x07\xE5\x02\x02\u08D0\u08D1\x07\x1F" + - "\x02\x02\u08D1\u08D3\x07\u0119\x02\x02\u08D2\u08CE\x03\x02\x02\x02\u08D2" + - "\u08D3\x03\x02\x02\x02\u08D3\u08D8\x03\x02\x02\x02\u08D4\u08D5\x07\x98" + - "\x02\x02\u08D5\u08D6\x07B\x02\x02\u08D6\u08D7\x07\x17\x02\x02\u08D7\u08D9" + - "\x07\u0119\x02\x02\u08D8\u08D4\x03\x02\x02\x02\u08D8\u08D9\x03\x02\x02" + - "\x02\u08D9\u08DB\x03\x02\x02\x02\u08DA\u08A9\x03\x02\x02\x02\u08DA\u08B2" + - "\x03\x02\x02\x02\u08DB\xAD\x03\x02\x02\x02\u08DC\u08E1\x05\xB0Y\x02\u08DD" + - "\u08DE\x07\x05\x02\x02\u08DE\u08E0\x05\xB0Y\x02\u08DF\u08DD\x03\x02\x02" + - "\x02\u08E0\u08E3\x03\x02\x02\x02\u08E1\u08DF\x03\x02\x02\x02\u08E1\u08E2" + - "\x03\x02\x02\x02\u08E2\xAF\x03\x02\x02\x02\u08E3\u08E1\x03\x02\x02\x02" + - "\u08E4\u08E9\x05\u0100\x81\x02\u08E5\u08E6\x07\x06\x02\x02\u08E6\u08E8" + - "\x05\u0100\x81\x02\u08E7\u08E5\x03\x02\x02\x02\u08E8\u08EB\x03\x02\x02" + - "\x02\u08E9\u08E7\x03\x02\x02\x02\u08E9\u08EA\x03\x02\x02\x02\u08EA\xB1" + - "\x03\x02\x02\x02\u08EB\u08E9\x03\x02\x02\x02\u08EC\u08ED\x05\u0100\x81" + - "\x02\u08ED\u08EE\x07\x06\x02\x02\u08EE\u08F0\x03\x02\x02\x02\u08EF\u08EC" + - "\x03\x02\x02\x02\u08EF\u08F0\x03\x02\x02\x02\u08F0\u08F1\x03\x02\x02\x02" + - "\u08F1\u08F2\x05\u0100\x81\x02\u08F2\xB3\x03\x02\x02\x02\u08F3\u08FB\x05" + - "\xBE`\x02\u08F4\u08F6\x07\x17\x02\x02\u08F5\u08F4\x03\x02\x02\x02\u08F5" + - "\u08F6\x03\x02\x02\x02\u08F6\u08F9\x03\x02\x02\x02\u08F7\u08FA\x05\u0100" + - "\x81\x02\u08F8\u08FA\x05\x98M\x02\u08F9\u08F7\x03\x02\x02\x02\u08F9\u08F8" + - "\x03\x02\x02\x02\u08FA\u08FC\x03\x02\x02\x02\u08FB\u08F5\x03\x02\x02\x02" + - "\u08FB\u08FC\x03\x02\x02\x02\u08FC\xB5\x03\x02\x02\x02\u08FD\u0902\x05" + - "\xB4[\x02\u08FE\u08FF\x07\x05\x02\x02\u08FF\u0901\x05\xB4[\x02\u0900\u08FE" + - "\x03\x02\x02\x02\u0901\u0904\x03\x02\x02\x02\u0902\u0900\x03\x02\x02\x02" + - "\u0902\u0903\x03\x02\x02\x02\u0903\xB7\x03\x02\x02\x02\u0904\u0902\x03" + - "\x02\x02\x02\u0905\u0906\x07\x03\x02\x02\u0906\u090B\x05\xBA^\x02\u0907" + - "\u0908\x07\x05\x02\x02\u0908\u090A\x05\xBA^\x02\u0909\u0907\x03\x02\x02" + - "\x02\u090A\u090D\x03\x02\x02\x02\u090B\u0909\x03\x02\x02\x02\u090B\u090C" + - "\x03\x02\x02\x02\u090C\u090E\x03\x02\x02\x02\u090D\u090B\x03\x02\x02\x02" + - "\u090E\u090F\x07\x04\x02\x02\u090F\xB9\x03\x02\x02\x02\u0910\u091E\x05" + - "\xFE\x80\x02\u0911\u0912\x05\u0104\x83\x02\u0912\u0913\x07\x03\x02\x02" + - "\u0913\u0918\x05\xBC_\x02\u0914\u0915\x07\x05\x02\x02\u0915\u0917\x05" + - "\xBC_\x02\u0916\u0914\x03\x02\x02\x02\u0917\u091A\x03\x02\x02\x02\u0918" + - "\u0916\x03\x02\x02\x02\u0918\u0919\x03\x02\x02\x02\u0919\u091B\x03\x02" + - "\x02\x02\u091A\u0918\x03\x02\x02\x02\u091B\u091C\x07\x04\x02\x02\u091C" + - "\u091E\x03\x02\x02\x02\u091D\u0910\x03\x02\x02\x02\u091D\u0911\x03\x02" + - "\x02\x02\u091E\xBB\x03\x02\x02\x02\u091F\u0922\x05\xFE\x80\x02\u0920\u0922" + - "\x05\xC8e\x02\u0921\u091F\x03\x02\x02\x02\u0921\u0920\x03\x02\x02\x02" + - "\u0922\xBD\x03\x02\x02\x02\u0923\u0924\x05\xC0a\x02\u0924\xBF\x03\x02" + - "\x02\x02\u0925\u0926\ba\x01\x02\u0926\u0927\x07\x97\x02\x02\u0927\u0932" + - "\x05\xC0a\x07\u0928\u0929\x07T\x02\x02\u0929\u092A\x07\x03\x02\x02\u092A" + - "\u092B\x05$\x13\x02\u092B\u092C\x07\x04\x02\x02\u092C\u0932\x03\x02\x02" + - "\x02\u092D\u092F\x05\xC4c\x02\u092E\u0930\x05\xC2b\x02\u092F\u092E\x03" + - "\x02\x02\x02\u092F\u0930\x03\x02\x02\x02\u0930\u0932\x03\x02\x02\x02\u0931" + - "\u0925\x03\x02\x02\x02\u0931\u0928\x03\x02\x02\x02\u0931\u092D\x03\x02" + - "\x02\x02\u0932\u093B\x03\x02\x02\x02\u0933\u0934\f\x04\x02\x02\u0934\u0935" + - "\x07\x12\x02\x02\u0935\u093A\x05\xC0a\x05\u0936\u0937\f\x03\x02\x02\u0937" + - "\u0938\x07\x9F\x02\x02\u0938\u093A\x05\xC0a\x04\u0939\u0933\x03\x02\x02" + - "\x02\u0939\u0936\x03\x02\x02\x02\u093A\u093D\x03\x02\x02\x02\u093B\u0939" + - "\x03\x02\x02\x02\u093B\u093C\x03\x02\x02\x02\u093C\xC1\x03\x02\x02\x02" + - "\u093D\u093B\x03\x02\x02\x02\u093E\u0940\x07\x97\x02\x02\u093F\u093E\x03" + - "\x02\x02\x02\u093F\u0940\x03\x02\x02\x02\u0940\u0941\x03\x02\x02\x02\u0941" + - "\u0942\x07\x1B\x02\x02\u0942\u0943\x05\xC4c\x02\u0943\u0944\x07\x12\x02" + - "\x02\u0944\u0945\x05\xC4c\x02\u0945\u0991\x03\x02\x02\x02\u0946\u0948" + - "\x07\x97\x02\x02\u0947\u0946\x03\x02\x02\x02\u0947\u0948\x03\x02\x02\x02" + - "\u0948\u0949\x03\x02\x02\x02\u0949\u094A\x07q\x02\x02\u094A\u094B\x07" + - "\x03\x02\x02\u094B\u0950\x05\xBE`\x02\u094C\u094D\x07\x05\x02\x02\u094D" + - "\u094F\x05\xBE`\x02\u094E\u094C\x03\x02\x02\x02\u094F\u0952\x03\x02\x02" + - "\x02\u0950\u094E\x03\x02\x02\x02\u0950\u0951\x03\x02\x02\x02\u0951\u0953" + - "\x03\x02\x02\x02\u0952\u0950\x03\x02\x02\x02\u0953\u0954\x07\x04\x02\x02" + - "\u0954\u0991\x03\x02\x02\x02\u0955\u0957\x07\x97\x02\x02\u0956\u0955\x03" + - "\x02\x02\x02\u0956\u0957\x03\x02\x02\x02\u0957\u0958\x03\x02\x02\x02\u0958" + - "\u0959\x07q\x02\x02\u0959\u095A\x07\x03\x02\x02\u095A\u095B\x05$\x13\x02" + - "\u095B\u095C\x07\x04\x02\x02\u095C\u0991\x03\x02\x02\x02\u095D\u095F\x07" + - "\x97\x02\x02\u095E\u095D\x03\x02\x02\x02\u095E\u095F\x03\x02\x02\x02\u095F" + - "\u0960\x03\x02\x02\x02\u0960\u0961\x07\xC3\x02\x02\u0961\u0991\x05\xC4" + - "c\x02\u0962\u0964\x07\x97\x02\x02\u0963\u0962\x03\x02\x02\x02\u0963\u0964" + - "\x03\x02\x02\x02\u0964\u0965\x03\x02\x02\x02\u0965\u0966\x07\x84\x02\x02" + - "\u0966\u0974\t\x16\x02\x02\u0967\u0968\x07\x03\x02\x02\u0968\u0975\x07" + - "\x04\x02\x02\u0969\u096A\x07\x03\x02\x02\u096A\u096F\x05\xBE`\x02\u096B" + - "\u096C\x07\x05\x02\x02\u096C\u096E\x05\xBE`\x02\u096D\u096B\x03\x02\x02" + - "\x02\u096E\u0971\x03\x02\x02\x02\u096F\u096D\x03\x02\x02\x02\u096F\u0970" + - "\x03\x02\x02\x02\u0970\u0972\x03\x02\x02\x02\u0971\u096F\x03\x02\x02\x02" + - "\u0972\u0973\x07\x04\x02\x02\u0973\u0975\x03\x02\x02\x02\u0974\u0967\x03" + - "\x02\x02\x02\u0974\u0969\x03\x02\x02\x02\u0975\u0991\x03\x02\x02\x02\u0976" + - "\u0978\x07\x97\x02\x02\u0977\u0976\x03\x02\x02\x02\u0977\u0978\x03\x02" + - "\x02\x02\u0978\u0979\x03\x02\x02\x02\u0979\u097A\x07\x84\x02\x02\u097A" + - "\u097D\x05\xC4c\x02\u097B\u097C\x07P\x02\x02\u097C\u097E\x07\u0119\x02" + - "\x02\u097D\u097B\x03\x02\x02\x02\u097D\u097E\x03\x02\x02\x02\u097E\u0991" + - "\x03\x02\x02\x02\u097F\u0981\x07{\x02\x02\u0980\u0982\x07\x97\x02\x02" + - "\u0981\u0980\x03\x02\x02\x02\u0981\u0982\x03\x02\x02\x02\u0982\u0983\x03" + - "\x02\x02\x02\u0983\u0991\x07\x98\x02\x02\u0984\u0986\x07{\x02\x02\u0985" + - "\u0987\x07\x97\x02\x02\u0986\u0985\x03\x02\x02\x02\u0986\u0987\x03\x02" + - "\x02\x02\u0987\u0988\x03\x02\x02\x02\u0988\u0991\t\x17\x02\x02\u0989\u098B" + - "\x07{\x02\x02\u098A\u098C\x07\x97\x02\x02\u098B\u098A\x03\x02\x02\x02" + - "\u098B\u098C\x03\x02\x02\x02\u098C\u098D\x03\x02\x02\x02\u098D\u098E\x07" + - "J\x02\x02\u098E\u098F\x07e\x02\x02\u098F\u0991\x05\xC4c\x02\u0990\u093F" + - "\x03\x02\x02\x02\u0990\u0947\x03\x02\x02\x02\u0990\u0956\x03\x02\x02\x02" + - "\u0990\u095E\x03\x02\x02\x02\u0990\u0963\x03\x02\x02\x02\u0990\u0977\x03" + - "\x02\x02\x02\u0990\u097F\x03\x02\x02\x02\u0990\u0984\x03\x02\x02\x02\u0990" + - "\u0989\x03\x02\x02\x02\u0991\xC3\x03\x02\x02\x02\u0992\u0993\bc\x01\x02" + - "\u0993\u0997\x05\xC6d\x02\u0994\u0995\t\x18\x02\x02\u0995\u0997\x05\xC4" + - "c\t\u0996\u0992\x03\x02\x02\x02\u0996\u0994\x03\x02\x02\x02\u0997\u09AD" + - "\x03\x02\x02\x02\u0998\u0999\f\b\x02\x02\u0999\u099A\t\x19\x02\x02\u099A" + - "\u09AC\x05\xC4c\t\u099B\u099C\f\x07\x02\x02\u099C\u099D\t\x1A\x02\x02" + - "\u099D\u09AC\x05\xC4c\b\u099E\u099F\f\x06\x02\x02\u099F\u09A0\x07\u0114" + - "\x02\x02\u09A0\u09AC\x05\xC4c\x07\u09A1\u09A2\f\x05\x02\x02\u09A2\u09A3" + - "\x07\u0117\x02\x02\u09A3\u09AC\x05\xC4c\x06\u09A4\u09A5\f\x04\x02\x02" + - "\u09A5\u09A6\x07\u0115\x02\x02\u09A6\u09AC\x05\xC4c\x05\u09A7\u09A8\f" + - "\x03\x02\x02\u09A8\u09A9\x05\xCAf\x02\u09A9\u09AA\x05\xC4c\x04\u09AA\u09AC" + - "\x03\x02\x02\x02\u09AB\u0998\x03\x02\x02\x02\u09AB\u099B\x03\x02\x02\x02" + - "\u09AB\u099E\x03\x02\x02\x02\u09AB\u09A1\x03\x02\x02\x02\u09AB\u09A4\x03" + - "\x02\x02\x02\u09AB\u09A7\x03\x02\x02\x02\u09AC\u09AF\x03\x02\x02\x02\u09AD" + - "\u09AB\x03\x02\x02\x02\u09AD\u09AE\x03\x02\x02\x02\u09AE\xC5\x03\x02\x02" + - "\x02\u09AF\u09AD\x03\x02\x02\x02\u09B0\u09B1\bd\x01\x02\u09B1\u0A69\t" + - "\x1B\x02\x02\u09B2\u09B4\x07\"\x02\x02\u09B3\u09B5\x05\xEEx\x02\u09B4" + - "\u09B3\x03\x02\x02\x02\u09B5\u09B6\x03\x02\x02\x02\u09B6\u09B4\x03\x02" + - "\x02\x02\u09B6\u09B7\x03\x02\x02\x02\u09B7\u09BA\x03\x02\x02\x02\u09B8" + - "\u09B9\x07N\x02\x02\u09B9\u09BB\x05\xBE`\x02\u09BA\u09B8\x03\x02\x02\x02" + - "\u09BA\u09BB\x03\x02\x02\x02\u09BB\u09BC\x03\x02\x02\x02\u09BC\u09BD\x07" + - "O\x02\x02\u09BD\u0A69\x03\x02\x02\x02\u09BE\u09BF\x07\"\x02\x02\u09BF" + - "\u09C1\x05\xBE`\x02\u09C0\u09C2\x05\xEEx\x02\u09C1\u09C0\x03\x02\x02\x02" + - "\u09C2\u09C3\x03\x02\x02\x02\u09C3\u09C1\x03\x02\x02\x02\u09C3\u09C4\x03" + - "\x02\x02\x02\u09C4\u09C7\x03\x02\x02\x02\u09C5\u09C6\x07N\x02\x02\u09C6" + - "\u09C8\x05\xBE`\x02\u09C7\u09C5\x03\x02\x02\x02\u09C7\u09C8\x03\x02\x02" + - "\x02\u09C8\u09C9\x03\x02\x02\x02\u09C9\u09CA\x07O\x02\x02\u09CA\u0A69" + - "\x03\x02\x02\x02\u09CB\u09CC\x07#\x02\x02\u09CC\u09CD\x07\x03\x02\x02" + - "\u09CD\u09CE\x05\xBE`\x02\u09CE\u09CF\x07\x17\x02\x02\u09CF\u09D0\x05" + - "\xE0q\x02\u09D0\u09D1\x07\x04\x02\x02\u09D1\u0A69\x03\x02\x02\x02\u09D2" + - "\u09D3\x07\xDD\x02\x02\u09D3\u09DC\x07\x03\x02\x02\u09D4\u09D9\x05\xB4" + - "[\x02\u09D5\u09D6\x07\x05\x02\x02\u09D6\u09D8\x05\xB4[\x02\u09D7\u09D5" + - "\x03\x02\x02\x02\u09D8\u09DB\x03\x02\x02\x02\u09D9\u09D7\x03\x02\x02\x02" + - "\u09D9\u09DA\x03\x02\x02\x02\u09DA\u09DD\x03\x02\x02\x02\u09DB\u09D9\x03" + - "\x02\x02\x02\u09DC\u09D4\x03\x02\x02\x02\u09DC\u09DD\x03\x02\x02\x02\u09DD" + - "\u09DE\x03\x02\x02\x02\u09DE\u0A69\x07\x04\x02\x02\u09DF\u09E0\x07_\x02" + - "\x02\u09E0\u09E1\x07\x03\x02\x02\u09E1\u09E4\x05\xBE`\x02\u09E2\u09E3" + - "\x07o\x02\x02\u09E3\u09E5\x07\x99\x02\x02\u09E4\u09E2\x03\x02\x02\x02" + - "\u09E4\u09E5\x03\x02\x02\x02\u09E5\u09E6\x03\x02\x02\x02\u09E6\u09E7\x07" + - "\x04\x02\x02\u09E7\u0A69\x03\x02\x02\x02\u09E8\u09E9\x07\x7F\x02\x02\u09E9" + - "\u09EA\x07\x03\x02\x02\u09EA\u09ED\x05\xBE`\x02\u09EB\u09EC\x07o\x02\x02" + - "\u09EC\u09EE\x07\x99\x02\x02\u09ED\u09EB\x03\x02\x02\x02\u09ED\u09EE\x03" + - "\x02\x02\x02\u09EE\u09EF\x03\x02\x02\x02\u09EF\u09F0\x07\x04\x02\x02\u09F0" + - "\u0A69\x03\x02\x02\x02\u09F1\u09F2\x07\xAE\x02\x02\u09F2\u09F3\x07\x03" + - "\x02\x02\u09F3\u09F4\x05\xC4c\x02\u09F4\u09F5\x07q\x02\x02\u09F5\u09F6" + - "\x05\xC4c\x02\u09F6\u09F7\x07\x04\x02\x02\u09F7\u0A69\x03\x02\x02\x02" + - "\u09F8\u0A69\x05\xC8e\x02\u09F9\u0A69\x07\u0110\x02\x02\u09FA\u09FB\x05" + - "\xFE\x80\x02\u09FB\u09FC\x07\x06\x02\x02\u09FC\u09FD\x07\u0110\x02\x02" + - "\u09FD\u0A69\x03\x02\x02\x02\u09FE\u09FF\x07\x03\x02\x02\u09FF\u0A02\x05" + - "\xB4[\x02\u0A00\u0A01\x07\x05\x02\x02\u0A01\u0A03\x05\xB4[\x02\u0A02\u0A00" + - "\x03\x02\x02\x02\u0A03\u0A04\x03\x02\x02\x02\u0A04\u0A02\x03\x02\x02\x02" + - "\u0A04\u0A05\x03\x02\x02\x02\u0A05\u0A06\x03\x02\x02\x02\u0A06\u0A07\x07" + - "\x04\x02\x02\u0A07\u0A69\x03\x02\x02\x02\u0A08\u0A09\x07\x03\x02\x02\u0A09" + - "\u0A0A\x05$\x13\x02\u0A0A\u0A0B\x07\x04\x02\x02\u0A0B\u0A69\x03\x02\x02" + - "\x02\u0A0C\u0A0D\x05\xFC\x7F\x02\u0A0D\u0A19\x07\x03\x02\x02\u0A0E\u0A10" + - "\x05\x8AF\x02\u0A0F\u0A0E\x03\x02\x02\x02\u0A0F\u0A10\x03\x02\x02\x02" + - "\u0A10\u0A11\x03\x02\x02\x02\u0A11\u0A16\x05\xBE`\x02\u0A12\u0A13\x07" + - "\x05\x02\x02\u0A13\u0A15\x05\xBE`\x02\u0A14\u0A12\x03\x02\x02\x02\u0A15" + - "\u0A18\x03\x02\x02\x02\u0A16\u0A14\x03\x02\x02\x02\u0A16\u0A17\x03\x02" + - "\x02\x02\u0A17\u0A1A\x03\x02\x02\x02\u0A18\u0A16\x03\x02\x02\x02\u0A19" + - "\u0A0F\x03\x02\x02\x02\u0A19\u0A1A\x03\x02\x02\x02\u0A1A\u0A1B\x03\x02" + - "\x02\x02\u0A1B\u0A22\x07\x04\x02\x02\u0A1C\u0A1D\x07]\x02\x02\u0A1D\u0A1E" + - "\x07\x03\x02\x02\u0A1E\u0A1F\x07\u0102\x02\x02\u0A1F\u0A20\x05\xC0a\x02" + - "\u0A20\u0A21\x07\x04\x02\x02\u0A21\u0A23\x03\x02\x02\x02\u0A22\u0A1C\x03" + - "\x02"; - private static readonly _serializedATNSegment5: string = - "\x02\x02\u0A22\u0A23\x03\x02\x02\x02\u0A23\u0A26\x03\x02\x02\x02\u0A24" + - "\u0A25\x07\xA4\x02\x02\u0A25\u0A27\x05\xF4{\x02\u0A26\u0A24\x03\x02\x02" + - "\x02\u0A26\u0A27\x03\x02\x02\x02\u0A27\u0A69\x03\x02\x02\x02\u0A28\u0A29" + - "\x05\u0104\x83\x02\u0A29\u0A2A\x07\t\x02\x02\u0A2A\u0A2B\x05\xBE`\x02" + - "\u0A2B\u0A69\x03\x02\x02\x02\u0A2C\u0A2D\x07\x03\x02\x02\u0A2D\u0A30\x05" + - "\u0104\x83\x02\u0A2E\u0A2F\x07\x05\x02\x02\u0A2F\u0A31\x05\u0104\x83\x02" + - "\u0A30\u0A2E\x03\x02\x02\x02\u0A31\u0A32\x03\x02\x02\x02\u0A32\u0A30\x03" + - "\x02\x02\x02\u0A32\u0A33\x03\x02\x02\x02\u0A33\u0A34\x03\x02\x02\x02\u0A34" + - "\u0A35\x07\x04\x02\x02\u0A35\u0A36\x07\t\x02\x02\u0A36\u0A37\x05\xBE`" + - "\x02\u0A37\u0A69\x03\x02\x02\x02\u0A38\u0A69\x05\u0104\x83\x02\u0A39\u0A3A" + - "\x07\x03\x02\x02\u0A3A\u0A3B\x05\xBE`\x02\u0A3B\u0A3C\x07\x04\x02\x02" + - "\u0A3C\u0A69\x03\x02\x02\x02\u0A3D\u0A3E\x07Y\x02\x02\u0A3E\u0A3F\x07" + - "\x03\x02\x02\u0A3F\u0A40\x05\u0104\x83\x02\u0A40\u0A41\x07e\x02\x02\u0A41" + - "\u0A42\x05\xC4c\x02\u0A42\u0A43\x07\x04\x02\x02\u0A43\u0A69\x03\x02\x02" + - "\x02\u0A44\u0A45\t\x1C\x02\x02\u0A45\u0A46\x07\x03\x02\x02\u0A46\u0A47" + - "\x05\xC4c\x02\u0A47\u0A48\t\x1D\x02\x02\u0A48\u0A4B\x05\xC4c\x02\u0A49" + - "\u0A4A\t\x1E\x02\x02\u0A4A\u0A4C\x05\xC4c\x02\u0A4B\u0A49\x03\x02\x02" + - "\x02\u0A4B\u0A4C\x03\x02\x02\x02\u0A4C\u0A4D\x03\x02\x02\x02\u0A4D\u0A4E" + - "\x07\x04\x02\x02\u0A4E\u0A69\x03\x02\x02\x02\u0A4F\u0A50\x07\xEE\x02\x02" + - "\u0A50\u0A52\x07\x03\x02\x02\u0A51\u0A53\t\x1F\x02\x02\u0A52\u0A51\x03" + - "\x02\x02\x02\u0A52\u0A53\x03\x02\x02\x02\u0A53\u0A55\x03\x02\x02\x02\u0A54" + - "\u0A56\x05\xC4c\x02\u0A55\u0A54\x03\x02\x02\x02\u0A55\u0A56\x03\x02\x02" + - "\x02\u0A56\u0A57\x03\x02\x02\x02\u0A57\u0A58\x07e\x02\x02\u0A58\u0A59" + - "\x05\xC4c\x02\u0A59\u0A5A\x07\x04\x02\x02\u0A5A\u0A69\x03\x02\x02\x02" + - "\u0A5B\u0A5C\x07\xA6\x02\x02\u0A5C\u0A5D\x07\x03\x02\x02\u0A5D\u0A5E\x05" + - "\xC4c\x02\u0A5E\u0A5F\x07\xAD\x02\x02\u0A5F\u0A60\x05\xC4c\x02\u0A60\u0A61" + - "\x07e\x02\x02\u0A61\u0A64\x05\xC4c\x02\u0A62\u0A63\x07a\x02\x02\u0A63" + - "\u0A65\x05\xC4c\x02\u0A64\u0A62\x03\x02\x02\x02\u0A64\u0A65\x03\x02\x02" + - "\x02\u0A65\u0A66\x03\x02\x02\x02\u0A66\u0A67\x07\x04\x02\x02\u0A67\u0A69" + - "\x03\x02\x02\x02\u0A68\u09B0\x03\x02\x02\x02\u0A68\u09B2\x03\x02\x02\x02" + - "\u0A68\u09BE\x03\x02\x02\x02\u0A68\u09CB\x03\x02\x02\x02\u0A68\u09D2\x03" + - "\x02\x02\x02\u0A68\u09DF\x03\x02\x02\x02\u0A68\u09E8\x03\x02\x02\x02\u0A68" + - "\u09F1\x03\x02\x02\x02\u0A68\u09F8\x03\x02\x02\x02\u0A68\u09F9\x03\x02" + - "\x02\x02\u0A68\u09FA\x03\x02\x02\x02\u0A68\u09FE\x03\x02\x02\x02\u0A68" + - "\u0A08\x03\x02\x02\x02\u0A68\u0A0C\x03\x02\x02\x02\u0A68\u0A28\x03\x02" + - "\x02\x02\u0A68\u0A2C\x03\x02\x02\x02\u0A68\u0A38\x03\x02\x02\x02\u0A68" + - "\u0A39\x03\x02\x02\x02\u0A68\u0A3D\x03\x02\x02\x02\u0A68\u0A44\x03\x02" + - "\x02\x02\u0A68\u0A4F\x03\x02\x02\x02\u0A68\u0A5B\x03\x02\x02\x02\u0A69" + - "\u0A74\x03\x02\x02\x02\u0A6A\u0A6B\f\n\x02\x02\u0A6B\u0A6C\x07\n\x02\x02" + - "\u0A6C\u0A6D\x05\xC4c\x02\u0A6D\u0A6E\x07\v\x02\x02\u0A6E\u0A73\x03\x02" + - "\x02\x02\u0A6F\u0A70\f\b\x02\x02\u0A70\u0A71\x07\x06\x02\x02\u0A71\u0A73" + - "\x05\u0104\x83\x02\u0A72\u0A6A\x03\x02\x02\x02\u0A72\u0A6F\x03\x02\x02" + - "\x02\u0A73\u0A76\x03\x02\x02\x02\u0A74\u0A72\x03\x02\x02\x02\u0A74\u0A75" + - "\x03\x02\x02\x02\u0A75\xC7\x03\x02\x02\x02\u0A76\u0A74\x03\x02\x02\x02" + - "\u0A77\u0A84\x07\x98\x02\x02\u0A78\u0A84\x05\xD2j\x02\u0A79\u0A7A\x05" + - "\u0104\x83\x02\u0A7A\u0A7B\x07\u0119\x02\x02\u0A7B\u0A84\x03\x02\x02\x02" + - "\u0A7C\u0A84\x05\u010A\x86\x02\u0A7D\u0A84\x05\xD0i\x02\u0A7E\u0A80\x07" + - "\u0119\x02\x02\u0A7F\u0A7E\x03\x02\x02\x02\u0A80\u0A81\x03\x02\x02\x02" + - "\u0A81\u0A7F\x03\x02\x02\x02\u0A81\u0A82\x03\x02\x02\x02\u0A82\u0A84\x03" + - "\x02\x02\x02\u0A83\u0A77\x03\x02\x02\x02\u0A83\u0A78\x03\x02\x02\x02\u0A83" + - "\u0A79\x03\x02\x02\x02\u0A83\u0A7C\x03\x02\x02\x02\u0A83\u0A7D\x03\x02" + - "\x02\x02\u0A83\u0A7F\x03\x02\x02\x02\u0A84\xC9\x03\x02\x02\x02\u0A85\u0A86" + - "\t \x02\x02\u0A86\xCB\x03\x02\x02\x02\u0A87\u0A88\t!\x02\x02\u0A88\xCD" + - "\x03\x02\x02\x02\u0A89\u0A8A\t\"\x02\x02\u0A8A\xCF\x03\x02\x02\x02\u0A8B" + - "\u0A8C\t#\x02\x02\u0A8C\xD1\x03\x02\x02\x02\u0A8D\u0A90\x07y\x02\x02\u0A8E" + - "\u0A91\x05\xD4k\x02\u0A8F\u0A91\x05\xD8m\x02\u0A90\u0A8E\x03\x02\x02\x02" + - "\u0A90\u0A8F\x03\x02\x02\x02\u0A90\u0A91\x03\x02\x02\x02\u0A91\xD3\x03" + - "\x02\x02\x02\u0A92\u0A94\x05\xD6l\x02\u0A93\u0A95\x05\xDAn\x02\u0A94\u0A93" + - "\x03\x02\x02\x02\u0A94\u0A95\x03\x02\x02\x02\u0A95\xD5\x03\x02\x02\x02" + - "\u0A96\u0A97\x05\xDCo\x02\u0A97\u0A98\x05\u0104\x83\x02\u0A98\u0A9A\x03" + - "\x02\x02\x02\u0A99\u0A96\x03\x02\x02\x02\u0A9A\u0A9B\x03\x02\x02\x02\u0A9B" + - "\u0A99\x03\x02\x02\x02\u0A9B\u0A9C\x03\x02\x02\x02\u0A9C\xD7\x03\x02\x02" + - "\x02\u0A9D\u0AA0\x05\xDAn\x02\u0A9E\u0AA1\x05\xD6l\x02\u0A9F\u0AA1\x05" + - "\xDAn\x02\u0AA0\u0A9E\x03\x02\x02\x02\u0AA0\u0A9F\x03\x02\x02\x02\u0AA0" + - "\u0AA1\x03\x02\x02\x02\u0AA1\xD9\x03\x02\x02\x02\u0AA2\u0AA3\x05\xDCo" + - "\x02\u0AA3\u0AA4\x05\u0104\x83\x02\u0AA4\u0AA5\x07\xE8\x02\x02\u0AA5\u0AA6" + - "\x05\u0104\x83\x02\u0AA6\xDB\x03\x02\x02\x02\u0AA7\u0AA9\t$\x02\x02\u0AA8" + - "\u0AA7\x03\x02\x02\x02\u0AA8\u0AA9\x03\x02\x02\x02\u0AA9\u0AAA\x03\x02" + - "\x02\x02\u0AAA\u0AAD\t\x15\x02\x02\u0AAB\u0AAD\x07\u0119\x02\x02\u0AAC" + - "\u0AA8\x03\x02\x02\x02\u0AAC\u0AAB\x03\x02\x02\x02\u0AAD\xDD\x03\x02\x02" + - "\x02\u0AAE\u0AB2\x07_\x02\x02\u0AAF\u0AB0\x07\x0E\x02\x02\u0AB0\u0AB2" + - "\x05\u0100\x81\x02\u0AB1\u0AAE\x03\x02\x02\x02\u0AB1\u0AAF\x03\x02\x02" + - "\x02\u0AB2\xDF\x03\x02\x02\x02\u0AB3\u0AB4\x07\x16\x02\x02\u0AB4\u0AB5" + - "\x07\u010A\x02\x02\u0AB5\u0AB6\x05\xE0q\x02\u0AB6\u0AB7\x07\u010C\x02" + - "\x02\u0AB7\u0AD6\x03\x02\x02\x02\u0AB8\u0AB9\x07\x8F\x02\x02\u0AB9\u0ABA" + - "\x07\u010A\x02\x02\u0ABA\u0ABB\x05\xE0q\x02\u0ABB\u0ABC\x07\x05\x02\x02" + - "\u0ABC\u0ABD\x05\xE0q\x02\u0ABD\u0ABE\x07\u010C\x02\x02\u0ABE\u0AD6\x03" + - "\x02\x02\x02\u0ABF\u0AC6\x07\xDD\x02\x02\u0AC0\u0AC2\x07\u010A\x02\x02" + - "\u0AC1\u0AC3\x05\xEAv\x02\u0AC2\u0AC1\x03\x02\x02\x02\u0AC2\u0AC3\x03" + - "\x02\x02\x02\u0AC3\u0AC4\x03\x02\x02\x02\u0AC4\u0AC7\x07\u010C\x02\x02" + - "\u0AC5\u0AC7\x07\u0108\x02\x02\u0AC6\u0AC0\x03\x02\x02\x02\u0AC6\u0AC5" + - "\x03\x02\x02\x02\u0AC7\u0AD6\x03\x02\x02\x02\u0AC8\u0AD3\x05\u0104\x83" + - "\x02\u0AC9\u0ACA\x07\x03\x02\x02\u0ACA\u0ACF\x07\u011D\x02\x02\u0ACB\u0ACC" + - "\x07\x05\x02\x02\u0ACC\u0ACE\x07\u011D\x02\x02\u0ACD\u0ACB\x03\x02\x02" + - "\x02\u0ACE\u0AD1\x03\x02\x02\x02\u0ACF\u0ACD\x03\x02\x02\x02\u0ACF\u0AD0" + - "\x03\x02\x02\x02\u0AD0\u0AD2\x03\x02\x02\x02\u0AD1\u0ACF\x03\x02\x02\x02" + - "\u0AD2\u0AD4\x07\x04\x02\x02\u0AD3\u0AC9\x03\x02\x02\x02\u0AD3\u0AD4\x03" + - "\x02\x02\x02\u0AD4\u0AD6\x03\x02\x02\x02\u0AD5\u0AB3\x03\x02\x02\x02\u0AD5" + - "\u0AB8\x03\x02\x02\x02\u0AD5\u0ABF\x03\x02\x02\x02\u0AD5\u0AC8\x03\x02" + - "\x02\x02\u0AD6\xE1\x03\x02\x02\x02\u0AD7\u0ADC\x05\xE4s\x02\u0AD8\u0AD9" + - "\x07\x05\x02\x02\u0AD9\u0ADB\x05\xE4s\x02\u0ADA\u0AD8\x03\x02\x02\x02" + - "\u0ADB\u0ADE\x03\x02\x02\x02\u0ADC\u0ADA\x03\x02\x02\x02\u0ADC\u0ADD\x03" + - "\x02\x02\x02\u0ADD\xE3\x03\x02\x02\x02\u0ADE\u0ADC\x03\x02\x02\x02\u0ADF" + - "\u0AE0\x05\xB0Y\x02\u0AE0\u0AE3\x05\xE0q\x02\u0AE1\u0AE2\x07\x97\x02\x02" + - "\u0AE2\u0AE4\x07\x98\x02\x02\u0AE3\u0AE1\x03\x02\x02\x02\u0AE3\u0AE4\x03" + - "\x02\x02\x02\u0AE4\u0AE6\x03\x02\x02\x02\u0AE5\u0AE7\x05\"\x12\x02\u0AE6" + - "\u0AE5\x03\x02\x02\x02\u0AE6\u0AE7\x03\x02\x02\x02\u0AE7\u0AE9\x03\x02" + - "\x02\x02\u0AE8\u0AEA\x05\xDEp\x02\u0AE9\u0AE8\x03\x02\x02\x02\u0AE9\u0AEA" + - "\x03\x02\x02\x02\u0AEA\xE5\x03\x02\x02\x02\u0AEB\u0AF0\x05\xE8u\x02\u0AEC" + - "\u0AED\x07\x05\x02\x02\u0AED\u0AEF\x05\xE8u\x02\u0AEE\u0AEC\x03\x02\x02" + - "\x02\u0AEF\u0AF2\x03\x02\x02\x02\u0AF0\u0AEE\x03\x02\x02\x02\u0AF0\u0AF1" + - "\x03\x02\x02\x02\u0AF1\xE7\x03\x02\x02\x02\u0AF2\u0AF0\x03\x02\x02\x02" + - "\u0AF3\u0AF4\x05\u0100\x81\x02\u0AF4\u0AF7\x05\xE0q\x02\u0AF5\u0AF6\x07" + - "\x97\x02\x02\u0AF6\u0AF8\x07\x98\x02\x02\u0AF7\u0AF5\x03\x02\x02\x02\u0AF7" + - "\u0AF8\x03\x02\x02\x02\u0AF8\u0AFA\x03\x02\x02\x02\u0AF9\u0AFB\x05\"\x12" + - "\x02\u0AFA\u0AF9\x03\x02\x02\x02\u0AFA\u0AFB\x03\x02\x02\x02\u0AFB\xE9" + - "\x03\x02\x02\x02\u0AFC\u0B01\x05\xECw\x02\u0AFD\u0AFE\x07\x05\x02\x02" + - "\u0AFE\u0B00\x05\xECw\x02\u0AFF\u0AFD\x03\x02\x02\x02\u0B00\u0B03\x03" + - "\x02\x02\x02\u0B01\u0AFF\x03\x02\x02\x02\u0B01\u0B02\x03\x02\x02\x02\u0B02" + - "\xEB\x03\x02\x02\x02\u0B03\u0B01\x03\x02\x02\x02\u0B04\u0B05\x05\u0104" + - "\x83\x02\u0B05\u0B06\x07\f\x02\x02\u0B06\u0B09\x05\xE0q\x02\u0B07\u0B08" + - "\x07\x97\x02\x02\u0B08\u0B0A\x07\x98\x02\x02\u0B09\u0B07\x03\x02\x02\x02" + - "\u0B09\u0B0A\x03\x02\x02\x02\u0B0A\u0B0C\x03\x02\x02\x02\u0B0B\u0B0D\x05" + - "\"\x12\x02\u0B0C\u0B0B\x03\x02\x02\x02\u0B0C\u0B0D\x03\x02\x02\x02\u0B0D" + - "\xED\x03\x02\x02\x02\u0B0E\u0B0F\x07\u0101\x02\x02\u0B0F\u0B10\x05\xBE" + - "`\x02\u0B10\u0B11\x07\xE6\x02\x02\u0B11\u0B12\x05\xBE`\x02\u0B12\xEF\x03" + - "\x02\x02\x02\u0B13\u0B14\x07\u0103\x02\x02\u0B14\u0B19\x05\xF2z\x02\u0B15" + - "\u0B16\x07\x05\x02\x02\u0B16\u0B18\x05\xF2z\x02\u0B17\u0B15\x03\x02\x02" + - "\x02\u0B18\u0B1B\x03\x02\x02\x02\u0B19\u0B17\x03\x02\x02\x02\u0B19\u0B1A" + - "\x03\x02\x02\x02\u0B1A\xF1\x03\x02\x02\x02\u0B1B\u0B19\x03\x02\x02\x02" + - "\u0B1C\u0B1D\x05\u0100\x81\x02\u0B1D\u0B1E\x07\x17\x02\x02\u0B1E\u0B1F" + - "\x05\xF4{\x02\u0B1F\xF3\x03\x02\x02\x02\u0B20\u0B4F\x05\u0100\x81\x02" + - "\u0B21\u0B22\x07\x03\x02\x02\u0B22\u0B23\x05\u0100\x81\x02\u0B23\u0B24" + - "\x07\x04\x02\x02\u0B24\u0B4F\x03\x02\x02\x02\u0B25\u0B48\x07\x03\x02\x02" + - "\u0B26\u0B27\x07\'\x02\x02\u0B27\u0B28\x07\x1F\x02\x02\u0B28\u0B2D\x05" + - "\xBE`\x02\u0B29\u0B2A\x07\x05\x02\x02\u0B2A\u0B2C\x05\xBE`\x02\u0B2B\u0B29" + - "\x03\x02\x02\x02\u0B2C\u0B2F\x03\x02\x02\x02\u0B2D\u0B2B\x03\x02\x02\x02" + - "\u0B2D\u0B2E\x03\x02\x02\x02\u0B2E\u0B49\x03\x02\x02\x02\u0B2F\u0B2D\x03" + - "\x02\x02\x02\u0B30\u0B31\t%\x02\x02\u0B31\u0B32\x07\x1F\x02\x02\u0B32" + - "\u0B37\x05\xBE`\x02\u0B33\u0B34\x07\x05\x02\x02\u0B34\u0B36\x05\xBE`\x02" + - "\u0B35\u0B33\x03\x02\x02\x02\u0B36\u0B39\x03\x02\x02\x02\u0B37\u0B35\x03" + - "\x02\x02\x02\u0B37\u0B38\x03\x02\x02\x02\u0B38\u0B3B\x03\x02\x02\x02\u0B39" + - "\u0B37\x03\x02\x02\x02\u0B3A\u0B30\x03\x02\x02\x02\u0B3A\u0B3B\x03\x02" + - "\x02\x02\u0B3B\u0B46\x03\x02\x02\x02\u0B3C\u0B3D\t&\x02\x02\u0B3D\u0B3E" + - "\x07\x1F\x02\x02\u0B3E\u0B43\x05Z.\x02\u0B3F\u0B40\x07\x05\x02\x02\u0B40" + - "\u0B42\x05Z.\x02\u0B41\u0B3F\x03\x02\x02\x02\u0B42\u0B45\x03\x02\x02\x02" + - "\u0B43\u0B41\x03\x02\x02\x02\u0B43\u0B44\x03\x02\x02\x02\u0B44\u0B47\x03" + - "\x02\x02\x02\u0B45\u0B43\x03\x02\x02\x02\u0B46\u0B3C\x03\x02\x02\x02\u0B46" + - "\u0B47\x03\x02\x02\x02\u0B47\u0B49\x03\x02\x02\x02\u0B48\u0B26\x03\x02" + - "\x02\x02\u0B48\u0B3A\x03\x02\x02\x02\u0B49\u0B4B\x03\x02\x02\x02\u0B4A" + - "\u0B4C\x05\xF6|\x02\u0B4B\u0B4A\x03\x02\x02\x02\u0B4B\u0B4C\x03\x02\x02" + - "\x02\u0B4C\u0B4D\x03\x02\x02\x02\u0B4D\u0B4F\x07\x04\x02\x02\u0B4E\u0B20" + - "\x03\x02\x02\x02\u0B4E\u0B21\x03\x02\x02\x02\u0B4E\u0B25\x03\x02\x02\x02" + - "\u0B4F\xF5\x03\x02\x02\x02\u0B50\u0B51\x07\xB5\x02\x02\u0B51\u0B61\x05" + - "\xF8}\x02\u0B52\u0B53\x07\xC9\x02\x02\u0B53\u0B61\x05\xF8}\x02\u0B54\u0B55" + - "\x07\xB5\x02\x02\u0B55\u0B56\x07\x1B\x02\x02\u0B56\u0B57\x05\xF8}\x02" + - "\u0B57\u0B58\x07\x12\x02\x02\u0B58\u0B59\x05\xF8}\x02\u0B59\u0B61\x03" + - "\x02\x02\x02\u0B5A\u0B5B\x07\xC9\x02\x02\u0B5B\u0B5C\x07\x1B\x02\x02\u0B5C" + - "\u0B5D\x05\xF8}\x02\u0B5D\u0B5E\x07\x12\x02\x02\u0B5E\u0B5F\x05\xF8}\x02" + - "\u0B5F\u0B61\x03\x02\x02\x02\u0B60\u0B50\x03\x02\x02\x02\u0B60\u0B52\x03" + - "\x02\x02\x02\u0B60\u0B54\x03\x02\x02\x02\u0B60\u0B5A\x03\x02\x02\x02\u0B61" + - "\xF7\x03\x02\x02\x02\u0B62\u0B63\x07\xF3\x02\x02\u0B63\u0B6A\t\'\x02\x02" + - "\u0B64\u0B65\x079\x02\x02\u0B65\u0B6A\x07\xC8\x02\x02\u0B66\u0B67\x05" + - "\xBE`\x02\u0B67\u0B68\t\'\x02\x02\u0B68\u0B6A\x03\x02\x02\x02\u0B69\u0B62" + - "\x03\x02\x02\x02\u0B69\u0B64\x03\x02\x02\x02\u0B69\u0B66\x03\x02\x02\x02" + - "\u0B6A\xF9\x03\x02\x02\x02\u0B6B\u0B70\x05\xFE\x80\x02\u0B6C\u0B6D\x07" + - "\x05\x02\x02\u0B6D\u0B6F\x05\xFE\x80\x02\u0B6E\u0B6C\x03\x02\x02\x02\u0B6F" + - "\u0B72\x03\x02\x02\x02\u0B70\u0B6E\x03\x02\x02\x02\u0B70\u0B71\x03\x02" + - "\x02\x02\u0B71\xFB\x03\x02\x02\x02\u0B72\u0B70\x03\x02\x02\x02\u0B73\u0B78" + - "\x05\xFE\x80\x02\u0B74\u0B78\x07]\x02\x02\u0B75\u0B78\x07\x83\x02\x02" + - "\u0B76\u0B78\x07\xC2\x02\x02\u0B77\u0B73\x03\x02\x02\x02\u0B77\u0B74\x03" + - "\x02\x02\x02\u0B77\u0B75\x03\x02\x02\x02\u0B77\u0B76\x03\x02\x02\x02\u0B78" + - "\xFD\x03\x02\x02\x02\u0B79\u0B7E\x05\u0104\x83\x02\u0B7A\u0B7B\x07\x06" + - "\x02\x02\u0B7B\u0B7D\x05\u0104\x83\x02\u0B7C\u0B7A\x03\x02\x02\x02\u0B7D" + - "\u0B80\x03\x02\x02\x02\u0B7E\u0B7C\x03\x02\x02\x02\u0B7E\u0B7F\x03\x02" + - "\x02\x02\u0B7F\xFF\x03\x02\x02\x02\u0B80\u0B7E\x03\x02\x02\x02\u0B81\u0B82" + - "\x05\u0104\x83\x02\u0B82\u0B83\x05\u0102\x82\x02\u0B83\u0101\x03\x02\x02" + - "\x02\u0B84\u0B85\x07\u010F\x02\x02\u0B85\u0B87\x05\u0104\x83\x02\u0B86" + - "\u0B84\x03\x02\x02\x02\u0B87\u0B88\x03\x02\x02\x02\u0B88\u0B86\x03\x02" + - "\x02\x02\u0B88\u0B89\x03\x02\x02\x02\u0B89\u0B8C\x03\x02\x02\x02\u0B8A" + - "\u0B8C\x03\x02\x02\x02\u0B8B\u0B86\x03\x02\x02\x02\u0B8B\u0B8A\x03\x02" + - "\x02\x02\u0B8C\u0103\x03\x02\x02\x02\u0B8D\u0B91\x05\u0106\x84\x02\u0B8E" + - "\u0B8F\x06\x83\x12\x02\u0B8F\u0B91\x05\u0110\x89\x02\u0B90\u0B8D\x03\x02" + - "\x02\x02\u0B90\u0B8E\x03\x02\x02\x02\u0B91\u0105\x03\x02\x02\x02\u0B92" + - "\u0B99\x07\u0123\x02\x02\u0B93\u0B99\x05\u0108\x85\x02\u0B94\u0B95\x06" + - "\x84\x13\x02\u0B95\u0B99\x05\u010E\x88\x02\u0B96\u0B97\x06\x84\x14\x02" + - "\u0B97\u0B99\x05\u0112\x8A\x02\u0B98\u0B92\x03\x02\x02\x02\u0B98\u0B93" + - "\x03\x02\x02\x02\u0B98\u0B94\x03\x02\x02\x02\u0B98\u0B96\x03\x02\x02\x02" + - "\u0B99\u0107\x03\x02\x02\x02\u0B9A\u0B9B\x07\u0124\x02\x02\u0B9B\u0109" + - "\x03\x02\x02\x02\u0B9C\u0B9E\x06\x86\x15\x02\u0B9D\u0B9F\x07\u010F\x02" + - "\x02\u0B9E\u0B9D\x03\x02\x02\x02\u0B9E\u0B9F\x03\x02\x02\x02\u0B9F\u0BA0" + - "\x03\x02\x02\x02\u0BA0\u0BC8\x07\u011E\x02\x02\u0BA1\u0BA3\x06\x86\x16" + - "\x02\u0BA2\u0BA4\x07\u010F\x02\x02\u0BA3\u0BA2\x03\x02\x02\x02\u0BA3\u0BA4" + - "\x03\x02\x02\x02\u0BA4\u0BA5\x03\x02\x02\x02\u0BA5\u0BC8\x07\u011F\x02" + - "\x02\u0BA6\u0BA8\x06\x86\x17\x02\u0BA7\u0BA9\x07\u010F\x02\x02\u0BA8\u0BA7" + - "\x03\x02\x02\x02\u0BA8\u0BA9\x03\x02\x02\x02\u0BA9\u0BAA\x03\x02\x02\x02" + - "\u0BAA\u0BC8\t(\x02\x02\u0BAB\u0BAD\x07\u010F\x02\x02\u0BAC\u0BAB\x03" + - "\x02\x02\x02\u0BAC\u0BAD\x03\x02\x02\x02\u0BAD\u0BAE\x03\x02\x02\x02\u0BAE" + - "\u0BC8\x07\u011D\x02\x02\u0BAF\u0BB1\x07\u010F\x02\x02\u0BB0\u0BAF\x03" + - "\x02\x02\x02\u0BB0\u0BB1\x03\x02\x02\x02\u0BB1\u0BB2\x03\x02\x02\x02\u0BB2" + - "\u0BC8\x07\u011A\x02\x02\u0BB3\u0BB5\x07\u010F\x02\x02\u0BB4\u0BB3\x03" + - "\x02\x02\x02\u0BB4\u0BB5\x03\x02\x02\x02\u0BB5\u0BB6\x03\x02\x02\x02\u0BB6" + - "\u0BC8\x07\u011B\x02\x02\u0BB7\u0BB9\x07\u010F\x02\x02\u0BB8\u0BB7\x03" + - "\x02\x02\x02\u0BB8\u0BB9\x03\x02\x02\x02\u0BB9\u0BBA\x03\x02\x02\x02\u0BBA" + - "\u0BC8\x07\u011C\x02\x02\u0BBB\u0BBD\x07\u010F\x02\x02\u0BBC\u0BBB\x03" + - "\x02\x02\x02\u0BBC\u0BBD\x03\x02\x02\x02\u0BBD\u0BBE\x03\x02\x02\x02\u0BBE" + - "\u0BC8\x07\u0121\x02\x02\u0BBF\u0BC1\x07\u010F\x02\x02\u0BC0\u0BBF\x03" + - "\x02\x02\x02\u0BC0\u0BC1\x03\x02\x02\x02\u0BC1\u0BC2\x03\x02\x02\x02\u0BC2" + - "\u0BC8\x07\u0120\x02\x02\u0BC3\u0BC5\x07\u010F\x02\x02\u0BC4\u0BC3\x03" + - "\x02\x02\x02\u0BC4\u0BC5\x03\x02\x02\x02\u0BC5\u0BC6\x03\x02\x02\x02\u0BC6" + - "\u0BC8\x07\u0122\x02\x02\u0BC7\u0B9C\x03\x02\x02\x02\u0BC7\u0BA1\x03\x02" + - "\x02\x02\u0BC7\u0BA6\x03\x02\x02\x02\u0BC7\u0BAC\x03\x02\x02\x02\u0BC7" + - "\u0BB0\x03\x02\x02\x02\u0BC7\u0BB4\x03\x02\x02\x02\u0BC7\u0BB8\x03\x02" + - "\x02\x02\u0BC7\u0BBC\x03\x02\x02\x02\u0BC7\u0BC0\x03\x02\x02\x02\u0BC7" + - "\u0BC4\x03\x02\x02\x02\u0BC8\u010B\x03\x02\x02\x02\u0BC9\u0BCA\x07\xF1" + - "\x02\x02\u0BCA\u0BD1\x05\xE0q\x02\u0BCB\u0BD1\x05\"\x12\x02\u0BCC\u0BD1" + - "\x05\xDEp\x02\u0BCD\u0BCE\t)\x02\x02\u0BCE\u0BCF\x07\x97\x02\x02\u0BCF" + - "\u0BD1\x07\x98\x02\x02\u0BD0\u0BC9\x03\x02\x02\x02\u0BD0\u0BCB\x03\x02" + - "\x02\x02\u0BD0\u0BCC\x03\x02\x02\x02\u0BD0\u0BCD\x03\x02\x02\x02\u0BD1" + - "\u010D\x03\x02\x02\x02\u0BD2\u0BD3\t*\x02\x02\u0BD3\u010F\x03\x02\x02" + - "\x02\u0BD4\u0BD5\t+\x02\x02\u0BD5\u0111\x03\x02\x02\x02\u0BD6\u0BD7\t" + - ",\x02\x02\u0BD7\u0113\x03\x02\x02\x02\u018D\u0119\u011C\u011E\u0134\u0139" + - "\u0141\u0149\u014B\u015F\u0163\u0169\u016C\u016F\u0176\u017B\u017E\u0185" + - "\u0191\u019A\u019C\u01A0\u01A3\u01AA\u01B5\u01B7\u01BF\u01C4\u01C7\u01CD" + - "\u01D8\u0218\u0221\u0225\u022B\u022F\u0234\u023A\u0246\u024E\u0254\u0261" + - "\u0266\u0276\u027D\u0281\u0287\u0296\u029A\u02A0\u02A6\u02A9\u02AC\u02B2" + - "\u02B6\u02BE\u02C0\u02C9\u02CC\u02D5\u02DA\u02E0\u02E7\u02EA\u02F0\u02FB" + - "\u02FE\u0302\u0307\u030C\u0313\u0316\u0319\u0320\u0325\u032E\u0336\u033C" + - "\u033F\u0342\u0348\u034C\u0350\u0354\u0356\u035E\u0366\u036C\u0372\u0375" + - "\u0379\u037C\u0380\u039C\u039F\u03A3\u03A9\u03AC\u03AF\u03B5\u03BD\u03C2" + - "\u03C8\u03CE\u03DA\u03DD\u03E4\u03F5\u03FE\u0401\u0407\u0410\u0417\u041A" + - "\u0424\u0428\u042F\u04A3\u04AB\u04B3\u04BC\u04C6\u04CA\u04CD\u04D3\u04D9" + - "\u04E5\u04F1\u04F6\u04FF\u0507\u050E\u0510\u0515\u0519\u051E\u0523\u0528" + - "\u052B\u0530\u0534\u0539\u053B\u053F\u0548\u0550\u0559\u0560\u0569\u056E" + - "\u0571\u0584\u0586\u058F\u0596\u0599\u05A0\u05A4\u05AA\u05B2\u05BD\u05C8" + - "\u05CF\u05D5\u05E2\u05E9\u05F0\u05FC\u0604\u060A\u060D\u0616\u0619\u0622" + - "\u0625\u062E\u0631\u063A\u063D\u0640\u0645\u0647\u0653\u065A\u0661\u0664" + - "\u0666\u0672\u0676\u067A\u0680\u0684\u068C\u0690\u0693\u0696\u0699\u069D" + - "\u06A1\u06A4\u06A8\u06AD\u06B1\u06B4\u06B7\u06BA\u06BC\u06C8\u06CB\u06CF" + - "\u06D9\u06DD\u06DF\u06E2\u06E6\u06EC\u06F0\u06FB\u0705\u0711\u0720\u0725" + - "\u072C\u073C\u0741\u074E\u0753\u075B\u0761\u0765\u076E\u077D\u0782\u078E" + - "\u0793\u079B\u079E\u07A2\u07B0\u07BD\u07C2\u07C6\u07C9\u07CE\u07D7\u07DA" + - "\u07DF\u07E6\u07E9\u07F1\u07F8\u07FF\u0802\u0807\u080A\u080F\u0813\u0816" + - "\u0819\u081F\u0824\u0829\u083B\u083D\u0840\u084B\u0854\u085B\u0863\u086A" + - "\u086E\u0876\u087E\u0884\u088C\u0898\u089B\u08A1\u08A5\u08A7\u08B0\u08BC" + - "\u08BE\u08C5\u08CC\u08D2\u08D8\u08DA\u08E1\u08E9\u08EF\u08F5\u08F9\u08FB" + - "\u0902\u090B\u0918\u091D\u0921\u092F\u0931\u0939\u093B\u093F\u0947\u0950" + - "\u0956\u095E\u0963\u096F\u0974\u0977\u097D\u0981\u0986\u098B\u0990\u0996" + - "\u09AB\u09AD\u09B6\u09BA\u09C3\u09C7\u09D9\u09DC\u09E4\u09ED\u0A04\u0A0F" + - "\u0A16\u0A19\u0A22\u0A26\u0A32\u0A4B\u0A52\u0A55\u0A64\u0A68\u0A72\u0A74" + - "\u0A81\u0A83\u0A90\u0A94\u0A9B\u0AA0\u0AA8\u0AAC\u0AB1\u0AC2\u0AC6\u0ACF" + - "\u0AD3\u0AD5\u0ADC\u0AE3\u0AE6\u0AE9\u0AF0\u0AF7\u0AFA\u0B01\u0B09\u0B0C" + - "\u0B19\u0B2D\u0B37\u0B3A\u0B43\u0B46\u0B48\u0B4B\u0B4E\u0B60\u0B69\u0B70" + - "\u0B77\u0B7E\u0B88\u0B8B\u0B90\u0B98\u0B9E\u0BA3\u0BA8\u0BAC\u0BB0\u0BB4" + - "\u0BB8\u0BBC\u0BC0\u0BC4\u0BC7\u0BD0"; - public static readonly _serializedATN: string = Utils.join( - [ - SparkSqlParser._serializedATNSegment0, - SparkSqlParser._serializedATNSegment1, - SparkSqlParser._serializedATNSegment2, - SparkSqlParser._serializedATNSegment3, - SparkSqlParser._serializedATNSegment4, - SparkSqlParser._serializedATNSegment5, - ], - "", - ); - public static __ATN: ATN; - public static get _ATN(): ATN { - if (!SparkSqlParser.__ATN) { - SparkSqlParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(SparkSqlParser._serializedATN)); - } + case 22: + this.enterOuterAlt(_localctx, 22); + { + this.state = 3430; + this.match(SparkSqlParser.KW_DECIMAL); + } + break; - return SparkSqlParser.__ATN; - } + case 23: + this.enterOuterAlt(_localctx, 23); + { + this.state = 3431; + this.match(SparkSqlParser.KW_DEC); + } + break; -} + case 24: + this.enterOuterAlt(_localctx, 24); + { + this.state = 3432; + this.match(SparkSqlParser.KW_NUMERIC); + } + break; -export class ProgramContext extends ParserRuleContext { - public singleStatement(): SingleStatementContext { - return this.getRuleContext(0, SingleStatementContext); - } - public EOF(): TerminalNode { return this.getToken(SparkSqlParser.EOF, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_program; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterProgram) { - listener.enterProgram(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitProgram) { - listener.exitProgram(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitProgram) { - return visitor.visitProgram(this); - } else { - return visitor.visitChildren(this); - } - } -} + case 25: + this.enterOuterAlt(_localctx, 25); + { + this.state = 3433; + this.match(SparkSqlParser.KW_VOID); + } + break; + case 26: + this.enterOuterAlt(_localctx, 26); + { + this.state = 3434; + this.match(SparkSqlParser.KW_INTERVAL); + } + break; -export class SingleStatementContext extends ParserRuleContext { - public statement(): StatementContext[]; - public statement(i: number): StatementContext; - public statement(i?: number): StatementContext | StatementContext[] { - if (i === undefined) { - return this.getRuleContexts(StatementContext); - } else { - return this.getRuleContext(i, StatementContext); - } - } - public emptyStatement(): EmptyStatementContext[]; - public emptyStatement(i: number): EmptyStatementContext; - public emptyStatement(i?: number): EmptyStatementContext | EmptyStatementContext[] { - if (i === undefined) { - return this.getRuleContexts(EmptyStatementContext); - } else { - return this.getRuleContext(i, EmptyStatementContext); - } - } - public SEMICOLON(): TerminalNode[]; - public SEMICOLON(i: number): TerminalNode; - public SEMICOLON(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.SEMICOLON); - } else { - return this.getToken(SparkSqlParser.SEMICOLON, i); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_singleStatement; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSingleStatement) { - listener.enterSingleStatement(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSingleStatement) { - listener.exitSingleStatement(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSingleStatement) { - return visitor.visitSingleStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} + case 27: + this.enterOuterAlt(_localctx, 27); + { + this.state = 3435; + this.match(SparkSqlParser.KW_ARRAY); + } + break; + + case 28: + this.enterOuterAlt(_localctx, 28); + { + this.state = 3436; + this.match(SparkSqlParser.KW_STRUCT); + } + break; + case 29: + this.enterOuterAlt(_localctx, 29); + { + this.state = 3437; + this.match(SparkSqlParser.KW_MAP); + } + break; -export class EmptyStatementContext extends ParserRuleContext { - public SEMICOLON(): TerminalNode { return this.getToken(SparkSqlParser.SEMICOLON, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_emptyStatement; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterEmptyStatement) { - listener.enterEmptyStatement(this); + case 30: + this.enterOuterAlt(_localctx, 30); + { + this.state = 3438; + _localctx._unsupportedType = this.identifier(); + } + break; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitEmptyStatement) { - listener.exitEmptyStatement(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitEmptyStatement) { - return visitor.visitEmptyStatement(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} - - -export class SingleExpressionContext extends ParserRuleContext { - public namedExpression(): NamedExpressionContext { - return this.getRuleContext(0, NamedExpressionContext); - } - public EOF(): TerminalNode { return this.getToken(SparkSqlParser.EOF, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_singleExpression; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSingleExpression) { - listener.enterSingleExpression(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSingleExpression) { - listener.exitSingleExpression(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSingleExpression) { - return visitor.visitSingleExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} + // @RuleVersion(0) + public dataType(): DataTypeContext { + let _localctx: DataTypeContext = new DataTypeContext(this._ctx, this.state); + this.enterRule(_localctx, 300, SparkSqlParser.RULE_dataType); + let _la: number; + try { + this.state = 3487; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 449, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3441; + _localctx._complex = this.match(SparkSqlParser.KW_ARRAY); + this.state = 3442; + this.match(SparkSqlParser.LT); + this.state = 3443; + this.dataType(); + this.state = 3444; + this.match(SparkSqlParser.GT); + } + break; + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3446; + _localctx._complex = this.match(SparkSqlParser.KW_MAP); + this.state = 3447; + this.match(SparkSqlParser.LT); + this.state = 3448; + this.dataType(); + this.state = 3449; + this.match(SparkSqlParser.COMMA); + this.state = 3450; + this.dataType(); + this.state = 3451; + this.match(SparkSqlParser.GT); + } + break; -export class SingleTableIdentifierContext extends ParserRuleContext { - public tableIdentifier(): TableIdentifierContext { - return this.getRuleContext(0, TableIdentifierContext); - } - public EOF(): TerminalNode { return this.getToken(SparkSqlParser.EOF, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_singleTableIdentifier; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSingleTableIdentifier) { - listener.enterSingleTableIdentifier(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSingleTableIdentifier) { - listener.exitSingleTableIdentifier(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSingleTableIdentifier) { - return visitor.visitSingleTableIdentifier(this); - } else { - return visitor.visitChildren(this); - } - } -} + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3453; + _localctx._complex = this.match(SparkSqlParser.KW_STRUCT); + this.state = 3460; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case SparkSqlParser.LT: + { + this.state = 3454; + this.match(SparkSqlParser.LT); + this.state = 3456; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 443, this._ctx) ) { + case 1: + { + this.state = 3455; + this.complexColTypeList(); + } + break; + } + this.state = 3458; + this.match(SparkSqlParser.GT); + } + break; + case SparkSqlParser.NEQ: + { + this.state = 3459; + this.match(SparkSqlParser.NEQ); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3462; + this.match(SparkSqlParser.KW_INTERVAL); + this.state = 3463; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_MONTH || _la === SparkSqlParser.KW_YEAR)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } -export class SingleMultipartIdentifierContext extends ParserRuleContext { - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public EOF(): TerminalNode { return this.getToken(SparkSqlParser.EOF, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_singleMultipartIdentifier; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSingleMultipartIdentifier) { - listener.enterSingleMultipartIdentifier(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSingleMultipartIdentifier) { - listener.exitSingleMultipartIdentifier(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSingleMultipartIdentifier) { - return visitor.visitSingleMultipartIdentifier(this); - } else { - return visitor.visitChildren(this); - } - } -} + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3466; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 445, this._ctx) ) { + case 1: + { + this.state = 3464; + this.match(SparkSqlParser.KW_TO); + this.state = 3465; + this.match(SparkSqlParser.KW_MONTH); + } + break; + } + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 3468; + this.match(SparkSqlParser.KW_INTERVAL); + this.state = 3469; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DAY || _la === SparkSqlParser.KW_HOUR || _la === SparkSqlParser.KW_MINUTE || _la === SparkSqlParser.KW_SECOND)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3472; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 446, this._ctx) ) { + case 1: + { + this.state = 3470; + this.match(SparkSqlParser.KW_TO); + this.state = 3471; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_HOUR || _la === SparkSqlParser.KW_MINUTE || _la === SparkSqlParser.KW_SECOND)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } -export class SingleDataTypeContext extends ParserRuleContext { - public dataType(): DataTypeContext { - return this.getRuleContext(0, DataTypeContext); - } - public EOF(): TerminalNode { return this.getToken(SparkSqlParser.EOF, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_singleDataType; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSingleDataType) { - listener.enterSingleDataType(this); + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } + } + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 3474; + this.type(); + this.state = 3485; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 448, this._ctx) ) { + case 1: + { + this.state = 3475; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3476; + this.match(SparkSqlParser.INTEGER_VALUE); + this.state = 3481; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3477; + this.match(SparkSqlParser.COMMA); + this.state = 3478; + this.match(SparkSqlParser.INTEGER_VALUE); + } + } + this.state = 3483; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 3484; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + } + } + break; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSingleDataType) { - listener.exitSingleDataType(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSingleDataType) { - return visitor.visitSingleDataType(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} - - -export class SingleTableSchemaContext extends ParserRuleContext { - public colTypeList(): ColTypeListContext { - return this.getRuleContext(0, ColTypeListContext); - } - public EOF(): TerminalNode { return this.getToken(SparkSqlParser.EOF, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_singleTableSchema; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSingleTableSchema) { - listener.enterSingleTableSchema(this); + // @RuleVersion(0) + public qualifiedColTypeWithPositionList(): QualifiedColTypeWithPositionListContext { + let _localctx: QualifiedColTypeWithPositionListContext = new QualifiedColTypeWithPositionListContext(this._ctx, this.state); + this.enterRule(_localctx, 302, SparkSqlParser.RULE_qualifiedColTypeWithPositionList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3489; + this.qualifiedColTypeWithPosition(); + this.state = 3494; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3490; + this.match(SparkSqlParser.COMMA); + this.state = 3491; + this.qualifiedColTypeWithPosition(); + } + } + this.state = 3496; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSingleTableSchema) { - listener.exitSingleTableSchema(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSingleTableSchema) { - return visitor.visitSingleTableSchema(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} - - -export class StatementContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_statement; } - public copyFrom(ctx: StatementContext): void { - super.copyFrom(ctx); - } -} -export class StatementDefaultContext extends StatementContext { - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterStatementDefault) { - listener.enterStatementDefault(this); + // @RuleVersion(0) + public qualifiedColTypeWithPosition(): QualifiedColTypeWithPositionContext { + let _localctx: QualifiedColTypeWithPositionContext = new QualifiedColTypeWithPositionContext(this._ctx, this.state); + this.enterRule(_localctx, 304, SparkSqlParser.RULE_qualifiedColTypeWithPosition); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 3497; + _localctx._name = this.multipartIdentifier(); + this.state = 3498; + this.dataType(); + this.state = 3502; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 451, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 3499; + this.colDefinitionDescriptorWithPosition(); + } + } + } + this.state = 3504; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 451, this._ctx); + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitStatementDefault) { - listener.exitStatementDefault(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitStatementDefault) { - return visitor.visitStatementDefault(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class DmlStatementContext extends StatementContext { - public dmlStatementNoWith(): DmlStatementNoWithContext { - return this.getRuleContext(0, DmlStatementNoWithContext); - } - public ctes(): CtesContext | undefined { - return this.tryGetRuleContext(0, CtesContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDmlStatement) { - listener.enterDmlStatement(this); + // @RuleVersion(0) + public colDefinitionDescriptorWithPosition(): ColDefinitionDescriptorWithPositionContext { + let _localctx: ColDefinitionDescriptorWithPositionContext = new ColDefinitionDescriptorWithPositionContext(this._ctx, this.state); + this.enterRule(_localctx, 306, SparkSqlParser.RULE_colDefinitionDescriptorWithPosition); + try { + this.state = 3510; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case SparkSqlParser.KW_NOT: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3505; + this.match(SparkSqlParser.KW_NOT); + this.state = 3506; + this.match(SparkSqlParser.KW_NULL); + } + break; + case SparkSqlParser.KW_DEFAULT: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3507; + this.defaultExpression(); + } + break; + case SparkSqlParser.KW_COMMENT: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3508; + this.commentSpec(); + } + break; + case SparkSqlParser.KW_AFTER: + case SparkSqlParser.KW_FIRST: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3509; + this.colPosition(); + } + break; + default: + throw new NoViableAltException(this); + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDmlStatement) { - listener.exitDmlStatement(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDmlStatement) { - return visitor.visitDmlStatement(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class UseContext extends StatementContext { - public USE(): TerminalNode { return this.getToken(SparkSqlParser.USE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public NAMESPACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NAMESPACE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterUse) { - listener.enterUse(this); + // @RuleVersion(0) + public defaultExpression(): DefaultExpressionContext { + let _localctx: DefaultExpressionContext = new DefaultExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 308, SparkSqlParser.RULE_defaultExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3512; + this.match(SparkSqlParser.KW_DEFAULT); + this.state = 3513; + this.expression(); + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitUse) { - listener.exitUse(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitUse) { - return visitor.visitUse(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class CreateNamespaceContext extends StatementContext { - public CREATE(): TerminalNode { return this.getToken(SparkSqlParser.CREATE, 0); } - public namespace(): NamespaceContext { - return this.getRuleContext(0, NamespaceContext); - } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public commentSpec(): CommentSpecContext[]; - public commentSpec(i: number): CommentSpecContext; - public commentSpec(i?: number): CommentSpecContext | CommentSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(CommentSpecContext); - } else { - return this.getRuleContext(i, CommentSpecContext); + // @RuleVersion(0) + public variableDefaultExpression(): VariableDefaultExpressionContext { + let _localctx: VariableDefaultExpressionContext = new VariableDefaultExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 310, SparkSqlParser.RULE_variableDefaultExpression); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3515; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DEFAULT || _la === SparkSqlParser.EQ)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3516; + this.expression(); + } } - } - public locationSpec(): LocationSpecContext[]; - public locationSpec(i: number): LocationSpecContext; - public locationSpec(i?: number): LocationSpecContext | LocationSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(LocationSpecContext); - } else { - return this.getRuleContext(i, LocationSpecContext); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public WITH(): TerminalNode[]; - public WITH(i: number): TerminalNode; - public WITH(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.WITH); - } else { - return this.getToken(SparkSqlParser.WITH, i); + finally { + this.exitRule(); } + return _localctx; } - public tablePropertyList(): TablePropertyListContext[]; - public tablePropertyList(i: number): TablePropertyListContext; - public tablePropertyList(i?: number): TablePropertyListContext | TablePropertyListContext[] { - if (i === undefined) { - return this.getRuleContexts(TablePropertyListContext); - } else { - return this.getRuleContext(i, TablePropertyListContext); + // @RuleVersion(0) + public colTypeList(): ColTypeListContext { + let _localctx: ColTypeListContext = new ColTypeListContext(this._ctx, this.state); + this.enterRule(_localctx, 312, SparkSqlParser.RULE_colTypeList); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 3518; + this.colType(); + this.state = 3523; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 453, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 3519; + this.match(SparkSqlParser.COMMA); + this.state = 3520; + this.colType(); + } + } + } + this.state = 3525; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 453, this._ctx); + } + } } - } - public DBPROPERTIES(): TerminalNode[]; - public DBPROPERTIES(i: number): TerminalNode; - public DBPROPERTIES(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.DBPROPERTIES); - } else { - return this.getToken(SparkSqlParser.DBPROPERTIES, i); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public PROPERTIES(): TerminalNode[]; - public PROPERTIES(i: number): TerminalNode; - public PROPERTIES(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.PROPERTIES); - } else { - return this.getToken(SparkSqlParser.PROPERTIES, i); + finally { + this.exitRule(); } + return _localctx; } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateNamespace) { - listener.enterCreateNamespace(this); + // @RuleVersion(0) + public colType(): ColTypeContext { + let _localctx: ColTypeContext = new ColTypeContext(this._ctx, this.state); + this.enterRule(_localctx, 314, SparkSqlParser.RULE_colType); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3526; + _localctx._colName = this.errorCapturingIdentifier(); + this.state = 3527; + this.dataType(); + this.state = 3530; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 454, this._ctx) ) { + case 1: + { + this.state = 3528; + this.match(SparkSqlParser.KW_NOT); + this.state = 3529; + this.match(SparkSqlParser.KW_NULL); + } + break; + } + this.state = 3533; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 455, this._ctx) ) { + case 1: + { + this.state = 3532; + this.commentSpec(); + } + break; + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateNamespace) { - listener.exitCreateNamespace(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateNamespace) { - return visitor.visitCreateNamespace(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class SetNamespacePropertiesContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public namespace(): NamespaceContext { - return this.getRuleContext(0, NamespaceContext); - } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - public tablePropertyList(): TablePropertyListContext { - return this.getRuleContext(0, TablePropertyListContext); - } - public DBPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DBPROPERTIES, 0); } - public PROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PROPERTIES, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetNamespaceProperties) { - listener.enterSetNamespaceProperties(this); + // @RuleVersion(0) + public createOrReplaceTableColTypeList(): CreateOrReplaceTableColTypeListContext { + let _localctx: CreateOrReplaceTableColTypeListContext = new CreateOrReplaceTableColTypeListContext(this._ctx, this.state); + this.enterRule(_localctx, 316, SparkSqlParser.RULE_createOrReplaceTableColTypeList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3535; + this.createOrReplaceTableColType(); + this.state = 3540; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3536; + this.match(SparkSqlParser.COMMA); + this.state = 3537; + this.createOrReplaceTableColType(); + } + } + this.state = 3542; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetNamespaceProperties) { - listener.exitSetNamespaceProperties(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetNamespaceProperties) { - return visitor.visitSetNamespaceProperties(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class SetNamespaceLocationContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public namespace(): NamespaceContext { - return this.getRuleContext(0, NamespaceContext); - } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - public locationSpec(): LocationSpecContext { - return this.getRuleContext(0, LocationSpecContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetNamespaceLocation) { - listener.enterSetNamespaceLocation(this); + // @RuleVersion(0) + public createOrReplaceTableColType(): CreateOrReplaceTableColTypeContext { + let _localctx: CreateOrReplaceTableColTypeContext = new CreateOrReplaceTableColTypeContext(this._ctx, this.state); + this.enterRule(_localctx, 318, SparkSqlParser.RULE_createOrReplaceTableColType); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3543; + _localctx._colName = this.errorCapturingIdentifier(); + this.state = 3544; + this.dataType(); + this.state = 3548; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.KW_COMMENT || _la === SparkSqlParser.KW_DEFAULT || _la === SparkSqlParser.KW_GENERATED || _la === SparkSqlParser.KW_NOT) { + { + { + this.state = 3545; + this.colDefinitionOption(); + } + } + this.state = 3550; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetNamespaceLocation) { - listener.exitSetNamespaceLocation(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetNamespaceLocation) { - return visitor.visitSetNamespaceLocation(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class DropNamespaceContext extends StatementContext { - public DROP(): TerminalNode { return this.getToken(SparkSqlParser.DROP, 0); } - public namespace(): NamespaceContext { - return this.getRuleContext(0, NamespaceContext); - } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public RESTRICT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RESTRICT, 0); } - public CASCADE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CASCADE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDropNamespace) { - listener.enterDropNamespace(this); + // @RuleVersion(0) + public colDefinitionOption(): ColDefinitionOptionContext { + let _localctx: ColDefinitionOptionContext = new ColDefinitionOptionContext(this._ctx, this.state); + this.enterRule(_localctx, 320, SparkSqlParser.RULE_colDefinitionOption); + try { + this.state = 3556; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case SparkSqlParser.KW_NOT: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3551; + this.match(SparkSqlParser.KW_NOT); + this.state = 3552; + this.match(SparkSqlParser.KW_NULL); + } + break; + case SparkSqlParser.KW_DEFAULT: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3553; + this.defaultExpression(); + } + break; + case SparkSqlParser.KW_GENERATED: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3554; + this.generationExpression(); + } + break; + case SparkSqlParser.KW_COMMENT: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3555; + this.commentSpec(); + } + break; + default: + throw new NoViableAltException(this); + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDropNamespace) { - listener.exitDropNamespace(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDropNamespace) { - return visitor.visitDropNamespace(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class ShowNamespacesContext extends StatementContext { - public _pattern!: Token; - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public DATABASES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATABASES, 0); } - public NAMESPACES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NAMESPACES, 0); } - public multipartIdentifier(): MultipartIdentifierContext | undefined { - return this.tryGetRuleContext(0, MultipartIdentifierContext); - } - public FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FROM, 0); } - public IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IN, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIKE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowNamespaces) { - listener.enterShowNamespaces(this); + // @RuleVersion(0) + public generationExpression(): GenerationExpressionContext { + let _localctx: GenerationExpressionContext = new GenerationExpressionContext(this._ctx, this.state); + this.enterRule(_localctx, 322, SparkSqlParser.RULE_generationExpression); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3558; + this.match(SparkSqlParser.KW_GENERATED); + this.state = 3559; + this.match(SparkSqlParser.KW_ALWAYS); + this.state = 3560; + this.match(SparkSqlParser.KW_AS); + this.state = 3561; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3562; + this.expression(); + this.state = 3563; + this.match(SparkSqlParser.RIGHT_PAREN); + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowNamespaces) { - listener.exitShowNamespaces(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowNamespaces) { - return visitor.visitShowNamespaces(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class CreateTableContext extends StatementContext { - public createTableHeader(): CreateTableHeaderContext { - return this.getRuleContext(0, CreateTableHeaderContext); - } - public tableProvider(): TableProviderContext { - return this.getRuleContext(0, TableProviderContext); - } - public createTableClauses(): CreateTableClausesContext { - return this.getRuleContext(0, CreateTableClausesContext); - } - public colTypeList(): ColTypeListContext | undefined { - return this.tryGetRuleContext(0, ColTypeListContext); - } - public query(): QueryContext | undefined { - return this.tryGetRuleContext(0, QueryContext); - } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateTable) { - listener.enterCreateTable(this); + // @RuleVersion(0) + public complexColTypeList(): ComplexColTypeListContext { + let _localctx: ComplexColTypeListContext = new ComplexColTypeListContext(this._ctx, this.state); + this.enterRule(_localctx, 324, SparkSqlParser.RULE_complexColTypeList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3565; + this.complexColType(); + this.state = 3570; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3566; + this.match(SparkSqlParser.COMMA); + this.state = 3567; + this.complexColType(); + } + } + this.state = 3572; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateTable) { - listener.exitCreateTable(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateTable) { - return visitor.visitCreateTable(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class CreateHiveTableContext extends StatementContext { - public _columns!: ColTypeListContext; - public _partitionColumns!: ColTypeListContext; - public _partitionColumnNames!: IdentifierListContext; - public _tableProps!: TablePropertyListContext; - public createTableHeader(): CreateTableHeaderContext { - return this.getRuleContext(0, CreateTableHeaderContext); - } - public commentSpec(): CommentSpecContext[]; - public commentSpec(i: number): CommentSpecContext; - public commentSpec(i?: number): CommentSpecContext | CommentSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(CommentSpecContext); - } else { - return this.getRuleContext(i, CommentSpecContext); + // @RuleVersion(0) + public complexColType(): ComplexColTypeContext { + let _localctx: ComplexColTypeContext = new ComplexColTypeContext(this._ctx, this.state); + this.enterRule(_localctx, 326, SparkSqlParser.RULE_complexColType); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3573; + this.identifier(); + this.state = 3575; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 460, this._ctx) ) { + case 1: + { + this.state = 3574; + this.match(SparkSqlParser.COLON); + } + break; + } + this.state = 3577; + this.dataType(); + this.state = 3580; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_NOT) { + { + this.state = 3578; + this.match(SparkSqlParser.KW_NOT); + this.state = 3579; + this.match(SparkSqlParser.KW_NULL); + } + } + + this.state = 3583; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_COMMENT) { + { + this.state = 3582; + this.commentSpec(); + } + } + + } } - } - public bucketSpec(): BucketSpecContext[]; - public bucketSpec(i: number): BucketSpecContext; - public bucketSpec(i?: number): BucketSpecContext | BucketSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(BucketSpecContext); - } else { - return this.getRuleContext(i, BucketSpecContext); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public skewSpec(): SkewSpecContext[]; - public skewSpec(i: number): SkewSpecContext; - public skewSpec(i?: number): SkewSpecContext | SkewSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(SkewSpecContext); - } else { - return this.getRuleContext(i, SkewSpecContext); + finally { + this.exitRule(); } + return _localctx; } - public rowFormat(): RowFormatContext[]; - public rowFormat(i: number): RowFormatContext; - public rowFormat(i?: number): RowFormatContext | RowFormatContext[] { - if (i === undefined) { - return this.getRuleContexts(RowFormatContext); - } else { - return this.getRuleContext(i, RowFormatContext); + // @RuleVersion(0) + public whenClause(): WhenClauseContext { + let _localctx: WhenClauseContext = new WhenClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 328, SparkSqlParser.RULE_whenClause); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3585; + this.match(SparkSqlParser.KW_WHEN); + this.state = 3586; + _localctx._condition = this.expression(); + this.state = 3587; + this.match(SparkSqlParser.KW_THEN); + this.state = 3588; + _localctx._result = this.expression(); + } } - } - public createFileFormat(): CreateFileFormatContext[]; - public createFileFormat(i: number): CreateFileFormatContext; - public createFileFormat(i?: number): CreateFileFormatContext | CreateFileFormatContext[] { - if (i === undefined) { - return this.getRuleContexts(CreateFileFormatContext); - } else { - return this.getRuleContext(i, CreateFileFormatContext); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public locationSpec(): LocationSpecContext[]; - public locationSpec(i: number): LocationSpecContext; - public locationSpec(i?: number): LocationSpecContext | LocationSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(LocationSpecContext); - } else { - return this.getRuleContext(i, LocationSpecContext); + finally { + this.exitRule(); } + return _localctx; } - public query(): QueryContext | undefined { - return this.tryGetRuleContext(0, QueryContext); - } - public colTypeList(): ColTypeListContext[]; - public colTypeList(i: number): ColTypeListContext; - public colTypeList(i?: number): ColTypeListContext | ColTypeListContext[] { - if (i === undefined) { - return this.getRuleContexts(ColTypeListContext); - } else { - return this.getRuleContext(i, ColTypeListContext); + // @RuleVersion(0) + public windowClause(): WindowClauseContext { + let _localctx: WindowClauseContext = new WindowClauseContext(this._ctx, this.state); + this.enterRule(_localctx, 330, SparkSqlParser.RULE_windowClause); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 3590; + this.match(SparkSqlParser.KW_WINDOW); + this.state = 3591; + this.namedWindow(); + this.state = 3596; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 463, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 3592; + this.match(SparkSqlParser.COMMA); + this.state = 3593; + this.namedWindow(); + } + } + } + this.state = 3598; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 463, this._ctx); + } + } } - } - public PARTITIONED(): TerminalNode[]; - public PARTITIONED(i: number): TerminalNode; - public PARTITIONED(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.PARTITIONED); - } else { - return this.getToken(SparkSqlParser.PARTITIONED, i); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public BY(): TerminalNode[]; - public BY(i: number): TerminalNode; - public BY(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.BY); - } else { - return this.getToken(SparkSqlParser.BY, i); + finally { + this.exitRule(); } + return _localctx; } - public TBLPROPERTIES(): TerminalNode[]; - public TBLPROPERTIES(i: number): TerminalNode; - public TBLPROPERTIES(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.TBLPROPERTIES); - } else { - return this.getToken(SparkSqlParser.TBLPROPERTIES, i); + // @RuleVersion(0) + public namedWindow(): NamedWindowContext { + let _localctx: NamedWindowContext = new NamedWindowContext(this._ctx, this.state); + this.enterRule(_localctx, 332, SparkSqlParser.RULE_namedWindow); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3599; + _localctx._name = this.errorCapturingIdentifier(); + this.state = 3600; + this.match(SparkSqlParser.KW_AS); + this.state = 3601; + this.windowSpec(); + } } - } - public identifierList(): IdentifierListContext[]; - public identifierList(i: number): IdentifierListContext; - public identifierList(i?: number): IdentifierListContext | IdentifierListContext[] { - if (i === undefined) { - return this.getRuleContexts(IdentifierListContext); - } else { - return this.getRuleContext(i, IdentifierListContext); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public tablePropertyList(): TablePropertyListContext[]; - public tablePropertyList(i: number): TablePropertyListContext; - public tablePropertyList(i?: number): TablePropertyListContext | TablePropertyListContext[] { - if (i === undefined) { - return this.getRuleContexts(TablePropertyListContext); - } else { - return this.getRuleContext(i, TablePropertyListContext); + finally { + this.exitRule(); } + return _localctx; } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateHiveTable) { - listener.enterCreateHiveTable(this); + // @RuleVersion(0) + public windowSpec(): WindowSpecContext { + let _localctx: WindowSpecContext = new WindowSpecContext(this._ctx, this.state); + this.enterRule(_localctx, 334, SparkSqlParser.RULE_windowSpec); + let _la: number; + try { + this.state = 3649; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 471, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3603; + _localctx._name = this.errorCapturingIdentifier(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3604; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3605; + _localctx._name = this.errorCapturingIdentifier(); + this.state = 3606; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3608; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3643; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case SparkSqlParser.KW_CLUSTER: + { + this.state = 3609; + this.match(SparkSqlParser.KW_CLUSTER); + this.state = 3610; + this.match(SparkSqlParser.KW_BY); + this.state = 3611; + _localctx._expression = this.expression(); + _localctx._partition.push(_localctx._expression); + this.state = 3616; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3612; + this.match(SparkSqlParser.COMMA); + this.state = 3613; + _localctx._expression = this.expression(); + _localctx._partition.push(_localctx._expression); + } + } + this.state = 3618; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + break; + case SparkSqlParser.RIGHT_PAREN: + case SparkSqlParser.KW_DISTRIBUTE: + case SparkSqlParser.KW_ORDER: + case SparkSqlParser.KW_PARTITION: + case SparkSqlParser.KW_RANGE: + case SparkSqlParser.KW_ROWS: + case SparkSqlParser.KW_SORT: + { + this.state = 3629; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_DISTRIBUTE || _la === SparkSqlParser.KW_PARTITION) { + { + this.state = 3619; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DISTRIBUTE || _la === SparkSqlParser.KW_PARTITION)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3620; + this.match(SparkSqlParser.KW_BY); + this.state = 3621; + _localctx._expression = this.expression(); + _localctx._partition.push(_localctx._expression); + this.state = 3626; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3622; + this.match(SparkSqlParser.COMMA); + this.state = 3623; + _localctx._expression = this.expression(); + _localctx._partition.push(_localctx._expression); + } + } + this.state = 3628; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + this.state = 3641; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_ORDER || _la === SparkSqlParser.KW_SORT) { + { + this.state = 3631; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_ORDER || _la === SparkSqlParser.KW_SORT)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3632; + this.match(SparkSqlParser.KW_BY); + this.state = 3633; + this.sortItem(); + this.state = 3638; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3634; + this.match(SparkSqlParser.COMMA); + this.state = 3635; + this.sortItem(); + } + } + this.state = 3640; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 3646; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.KW_RANGE || _la === SparkSqlParser.KW_ROWS) { + { + this.state = 3645; + this.windowFrame(); + } + } + + this.state = 3648; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateHiveTable) { - listener.exitCreateHiveTable(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateHiveTable) { - return visitor.visitCreateHiveTable(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class CreateTableLikeContext extends StatementContext { - public _target!: TableIdentifierContext; - public _source!: TableIdentifierContext; - public _tableProps!: TablePropertyListContext; - public CREATE(): TerminalNode { return this.getToken(SparkSqlParser.CREATE, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public LIKE(): TerminalNode { return this.getToken(SparkSqlParser.LIKE, 0); } - public tableIdentifier(): TableIdentifierContext[]; - public tableIdentifier(i: number): TableIdentifierContext; - public tableIdentifier(i?: number): TableIdentifierContext | TableIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(TableIdentifierContext); - } else { - return this.getRuleContext(i, TableIdentifierContext); + // @RuleVersion(0) + public windowFrame(): WindowFrameContext { + let _localctx: WindowFrameContext = new WindowFrameContext(this._ctx, this.state); + this.enterRule(_localctx, 336, SparkSqlParser.RULE_windowFrame); + try { + this.state = 3667; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 472, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3651; + _localctx._frameType = this.match(SparkSqlParser.KW_RANGE); + this.state = 3652; + _localctx._start_ = this.frameBound(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3653; + _localctx._frameType = this.match(SparkSqlParser.KW_ROWS); + this.state = 3654; + _localctx._start_ = this.frameBound(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3655; + _localctx._frameType = this.match(SparkSqlParser.KW_RANGE); + this.state = 3656; + this.match(SparkSqlParser.KW_BETWEEN); + this.state = 3657; + _localctx._start_ = this.frameBound(); + this.state = 3658; + this.match(SparkSqlParser.KW_AND); + this.state = 3659; + _localctx._end = this.frameBound(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3661; + _localctx._frameType = this.match(SparkSqlParser.KW_ROWS); + this.state = 3662; + this.match(SparkSqlParser.KW_BETWEEN); + this.state = 3663; + _localctx._start_ = this.frameBound(); + this.state = 3664; + this.match(SparkSqlParser.KW_AND); + this.state = 3665; + _localctx._end = this.frameBound(); + } + break; + } } - } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public tableProvider(): TableProviderContext[]; - public tableProvider(i: number): TableProviderContext; - public tableProvider(i?: number): TableProviderContext | TableProviderContext[] { - if (i === undefined) { - return this.getRuleContexts(TableProviderContext); - } else { - return this.getRuleContext(i, TableProviderContext); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public rowFormat(): RowFormatContext[]; - public rowFormat(i: number): RowFormatContext; - public rowFormat(i?: number): RowFormatContext | RowFormatContext[] { - if (i === undefined) { - return this.getRuleContexts(RowFormatContext); - } else { - return this.getRuleContext(i, RowFormatContext); + finally { + this.exitRule(); } + return _localctx; } - public createFileFormat(): CreateFileFormatContext[]; - public createFileFormat(i: number): CreateFileFormatContext; - public createFileFormat(i?: number): CreateFileFormatContext | CreateFileFormatContext[] { - if (i === undefined) { - return this.getRuleContexts(CreateFileFormatContext); - } else { - return this.getRuleContext(i, CreateFileFormatContext); + // @RuleVersion(0) + public frameBound(): FrameBoundContext { + let _localctx: FrameBoundContext = new FrameBoundContext(this._ctx, this.state); + this.enterRule(_localctx, 338, SparkSqlParser.RULE_frameBound); + let _la: number; + try { + this.state = 3676; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 473, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3669; + this.match(SparkSqlParser.KW_UNBOUNDED); + this.state = 3670; + _localctx._boundType = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_FOLLOWING || _la === SparkSqlParser.KW_PRECEDING)) { + _localctx._boundType = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3671; + _localctx._boundType = this.match(SparkSqlParser.KW_CURRENT); + this.state = 3672; + this.match(SparkSqlParser.KW_ROW); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3673; + this.expression(); + this.state = 3674; + _localctx._boundType = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_FOLLOWING || _la === SparkSqlParser.KW_PRECEDING)) { + _localctx._boundType = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + } } - } - public locationSpec(): LocationSpecContext[]; - public locationSpec(i: number): LocationSpecContext; - public locationSpec(i?: number): LocationSpecContext | LocationSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(LocationSpecContext); - } else { - return this.getRuleContext(i, LocationSpecContext); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public TBLPROPERTIES(): TerminalNode[]; - public TBLPROPERTIES(i: number): TerminalNode; - public TBLPROPERTIES(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.TBLPROPERTIES); - } else { - return this.getToken(SparkSqlParser.TBLPROPERTIES, i); + finally { + this.exitRule(); } + return _localctx; } - public tablePropertyList(): TablePropertyListContext[]; - public tablePropertyList(i: number): TablePropertyListContext; - public tablePropertyList(i?: number): TablePropertyListContext | TablePropertyListContext[] { - if (i === undefined) { - return this.getRuleContexts(TablePropertyListContext); - } else { - return this.getRuleContext(i, TablePropertyListContext); + // @RuleVersion(0) + public qualifiedNameList(): QualifiedNameListContext { + let _localctx: QualifiedNameListContext = new QualifiedNameListContext(this._ctx, this.state); + this.enterRule(_localctx, 340, SparkSqlParser.RULE_qualifiedNameList); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3678; + this.qualifiedName(); + this.state = 3683; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === SparkSqlParser.COMMA) { + { + { + this.state = 3679; + this.match(SparkSqlParser.COMMA); + this.state = 3680; + this.qualifiedName(); + } + } + this.state = 3685; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + } } - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateTableLike) { - listener.enterCreateTableLike(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateTableLike) { - listener.exitCreateTableLike(this); + finally { + this.exitRule(); } + return _localctx; } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateTableLike) { - return visitor.visitCreateTableLike(this); - } else { - return visitor.visitChildren(this); + // @RuleVersion(0) + public functionName(): FunctionNameContext { + let _localctx: FunctionNameContext = new FunctionNameContext(this._ctx, this.state); + this.enterRule(_localctx, 342, SparkSqlParser.RULE_functionName); + try { + this.state = 3695; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 475, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3686; + this.match(SparkSqlParser.KW_IDENTIFIER_KW); + this.state = 3687; + this.match(SparkSqlParser.LEFT_PAREN); + this.state = 3688; + this.expression(); + this.state = 3689; + this.match(SparkSqlParser.RIGHT_PAREN); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3691; + this.qualifiedName(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3692; + this.match(SparkSqlParser.KW_FILTER); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3693; + this.match(SparkSqlParser.KW_LEFT); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 3694; + this.match(SparkSqlParser.KW_RIGHT); + } + break; + } } - } -} -export class ReplaceTableContext extends StatementContext { - public replaceTableHeader(): ReplaceTableHeaderContext { - return this.getRuleContext(0, ReplaceTableHeaderContext); - } - public tableProvider(): TableProviderContext { - return this.getRuleContext(0, TableProviderContext); - } - public createTableClauses(): CreateTableClausesContext { - return this.getRuleContext(0, CreateTableClausesContext); - } - public colTypeList(): ColTypeListContext | undefined { - return this.tryGetRuleContext(0, ColTypeListContext); - } - public query(): QueryContext | undefined { - return this.tryGetRuleContext(0, QueryContext); - } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterReplaceTable) { - listener.enterReplaceTable(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitReplaceTable) { - listener.exitReplaceTable(this); + finally { + this.exitRule(); } + return _localctx; } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitReplaceTable) { - return visitor.visitReplaceTable(this); - } else { - return visitor.visitChildren(this); + // @RuleVersion(0) + public qualifiedName(): QualifiedNameContext { + let _localctx: QualifiedNameContext = new QualifiedNameContext(this._ctx, this.state); + this.enterRule(_localctx, 344, SparkSqlParser.RULE_qualifiedName); + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 3697; + this.identifier(); + this.state = 3702; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 476, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 3698; + this.match(SparkSqlParser.DOT); + this.state = 3699; + this.identifier(); + } + } + } + this.state = 3704; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 476, this._ctx); + } + } } - } -} -export class AnalyzeContext extends StatementContext { - public ANALYZE(): TerminalNode { return this.getToken(SparkSqlParser.ANALYZE, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public COMPUTE(): TerminalNode { return this.getToken(SparkSqlParser.COMPUTE, 0); } - public STATISTICS(): TerminalNode { return this.getToken(SparkSqlParser.STATISTICS, 0); } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); - } - public identifier(): IdentifierContext | undefined { - return this.tryGetRuleContext(0, IdentifierContext); - } - public FOR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FOR, 0); } - public COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMNS, 0); } - public identifierSeq(): IdentifierSeqContext | undefined { - return this.tryGetRuleContext(0, IdentifierSeqContext); - } - public ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ALL, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAnalyze) { - listener.enterAnalyze(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAnalyze) { - listener.exitAnalyze(this); + finally { + this.exitRule(); } + return _localctx; } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAnalyze) { - return visitor.visitAnalyze(this); - } else { - return visitor.visitChildren(this); + // @RuleVersion(0) + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { + let _localctx: ErrorCapturingIdentifierContext = new ErrorCapturingIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 346, SparkSqlParser.RULE_errorCapturingIdentifier); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3705; + this.identifier(); + this.state = 3706; + this.errorCapturingIdentifierExtra(); + } } - } -} -export class AddTableColumnsContext extends StatementContext { - public _columns!: QualifiedColTypeWithPositionListContext; - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public ADD(): TerminalNode { return this.getToken(SparkSqlParser.ADD, 0); } - public COLUMN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMN, 0); } - public COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMNS, 0); } - public qualifiedColTypeWithPositionList(): QualifiedColTypeWithPositionListContext { - return this.getRuleContext(0, QualifiedColTypeWithPositionListContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAddTableColumns) { - listener.enterAddTableColumns(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAddTableColumns) { - listener.exitAddTableColumns(this); + finally { + this.exitRule(); } + return _localctx; } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAddTableColumns) { - return visitor.visitAddTableColumns(this); - } else { - return visitor.visitChildren(this); + // @RuleVersion(0) + public errorCapturingIdentifierExtra(): ErrorCapturingIdentifierExtraContext { + let _localctx: ErrorCapturingIdentifierExtraContext = new ErrorCapturingIdentifierExtraContext(this._ctx, this.state); + this.enterRule(_localctx, 348, SparkSqlParser.RULE_errorCapturingIdentifierExtra); + try { + let _alt: number; + this.state = 3715; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 478, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3710; + this._errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + this.state = 3708; + this.match(SparkSqlParser.MINUS); + this.state = 3709; + this.identifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + this.state = 3712; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 477, this._ctx); + } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + // tslint:disable-next-line:no-empty + { + } + break; + } } - } -} -export class RenameTableColumnContext extends StatementContext { - public _table!: MultipartIdentifierContext; - public _from!: MultipartIdentifierContext; - public _to!: ErrorCapturingIdentifierContext; - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public RENAME(): TerminalNode { return this.getToken(SparkSqlParser.RENAME, 0); } - public COLUMN(): TerminalNode { return this.getToken(SparkSqlParser.COLUMN, 0); } - public TO(): TerminalNode { return this.getToken(SparkSqlParser.TO, 0); } - public multipartIdentifier(): MultipartIdentifierContext[]; - public multipartIdentifier(i: number): MultipartIdentifierContext; - public multipartIdentifier(i?: number): MultipartIdentifierContext | MultipartIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(MultipartIdentifierContext); - } else { - return this.getRuleContext(i, MultipartIdentifierContext); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { - return this.getRuleContext(0, ErrorCapturingIdentifierContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRenameTableColumn) { - listener.enterRenameTableColumn(this); + finally { + this.exitRule(); } + return _localctx; } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRenameTableColumn) { - listener.exitRenameTableColumn(this); + // @RuleVersion(0) + public identifier(): IdentifierContext { + let _localctx: IdentifierContext = new IdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 350, SparkSqlParser.RULE_identifier); + try { + this.state = 3720; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 479, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3717; + this.strictIdentifier(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3718; + if (!(!this.SQL_standard_keyword_behavior)) { + throw this.createFailedPredicateException("!this.SQL_standard_keyword_behavior"); + } + this.state = 3719; + this.strictNonReserved(); + } + break; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRenameTableColumn) { - return visitor.visitRenameTableColumn(this); - } else { - return visitor.visitChildren(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } -} -export class DropTableColumnsContext extends StatementContext { - public _columns!: MultipartIdentifierListContext; - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public DROP(): TerminalNode { return this.getToken(SparkSqlParser.DROP, 0); } - public COLUMN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMN, 0); } - public COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMNS, 0); } - public multipartIdentifierList(): MultipartIdentifierListContext { - return this.getRuleContext(0, MultipartIdentifierListContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDropTableColumns) { - listener.enterDropTableColumns(this); + finally { + this.exitRule(); } + return _localctx; } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDropTableColumns) { - listener.exitDropTableColumns(this); + // @RuleVersion(0) + public strictIdentifier(): StrictIdentifierContext { + let _localctx: StrictIdentifierContext = new StrictIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 352, SparkSqlParser.RULE_strictIdentifier); + try { + this.state = 3728; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 480, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3722; + this.match(SparkSqlParser.IDENTIFIER); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3723; + this.quotedIdentifier(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3724; + if (!(this.SQL_standard_keyword_behavior)) { + throw this.createFailedPredicateException("this.SQL_standard_keyword_behavior"); + } + this.state = 3725; + this.ansiNonReserved(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3726; + if (!(!this.SQL_standard_keyword_behavior)) { + throw this.createFailedPredicateException("!this.SQL_standard_keyword_behavior"); + } + this.state = 3727; + this.nonReserved(); + } + break; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDropTableColumns) { - return visitor.visitDropTableColumns(this); - } else { - return visitor.visitChildren(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; } -} -export class RenameTableContext extends StatementContext { - public _from!: MultipartIdentifierContext; - public _to!: MultipartIdentifierContext; - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public RENAME(): TerminalNode { return this.getToken(SparkSqlParser.RENAME, 0); } - public TO(): TerminalNode { return this.getToken(SparkSqlParser.TO, 0); } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEW, 0); } - public multipartIdentifier(): MultipartIdentifierContext[]; - public multipartIdentifier(i: number): MultipartIdentifierContext; - public multipartIdentifier(i?: number): MultipartIdentifierContext | MultipartIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(MultipartIdentifierContext); - } else { - return this.getRuleContext(i, MultipartIdentifierContext); - } - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRenameTable) { - listener.enterRenameTable(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRenameTable) { - listener.exitRenameTable(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRenameTable) { - return visitor.visitRenameTable(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class SetTablePropertiesContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - public TBLPROPERTIES(): TerminalNode { return this.getToken(SparkSqlParser.TBLPROPERTIES, 0); } - public tablePropertyList(): TablePropertyListContext { - return this.getRuleContext(0, TablePropertyListContext); - } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEW, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetTableProperties) { - listener.enterSetTableProperties(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetTableProperties) { - listener.exitSetTableProperties(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetTableProperties) { - return visitor.visitSetTableProperties(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class UnsetTablePropertiesContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public UNSET(): TerminalNode { return this.getToken(SparkSqlParser.UNSET, 0); } - public TBLPROPERTIES(): TerminalNode { return this.getToken(SparkSqlParser.TBLPROPERTIES, 0); } - public tablePropertyList(): TablePropertyListContext { - return this.getRuleContext(0, TablePropertyListContext); - } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEW, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterUnsetTableProperties) { - listener.enterUnsetTableProperties(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitUnsetTableProperties) { - listener.exitUnsetTableProperties(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitUnsetTableProperties) { - return visitor.visitUnsetTableProperties(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class AlterTableAlterColumnContext extends StatementContext { - public _table!: MultipartIdentifierContext; - public _column!: MultipartIdentifierContext; - public ALTER(): TerminalNode[]; - public ALTER(i: number): TerminalNode; - public ALTER(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.ALTER); - } else { - return this.getToken(SparkSqlParser.ALTER, i); - } - } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext[]; - public multipartIdentifier(i: number): MultipartIdentifierContext; - public multipartIdentifier(i?: number): MultipartIdentifierContext | MultipartIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(MultipartIdentifierContext); - } else { - return this.getRuleContext(i, MultipartIdentifierContext); - } - } - public CHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CHANGE, 0); } - public COLUMN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMN, 0); } - public alterColumnAction(): AlterColumnActionContext | undefined { - return this.tryGetRuleContext(0, AlterColumnActionContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAlterTableAlterColumn) { - listener.enterAlterTableAlterColumn(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAlterTableAlterColumn) { - listener.exitAlterTableAlterColumn(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAlterTableAlterColumn) { - return visitor.visitAlterTableAlterColumn(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class HiveChangeColumnContext extends StatementContext { - public _table!: MultipartIdentifierContext; - public _colName!: MultipartIdentifierContext; - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public CHANGE(): TerminalNode { return this.getToken(SparkSqlParser.CHANGE, 0); } - public colType(): ColTypeContext { - return this.getRuleContext(0, ColTypeContext); - } - public multipartIdentifier(): MultipartIdentifierContext[]; - public multipartIdentifier(i: number): MultipartIdentifierContext; - public multipartIdentifier(i?: number): MultipartIdentifierContext | MultipartIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(MultipartIdentifierContext); - } else { - return this.getRuleContext(i, MultipartIdentifierContext); - } - } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); - } - public COLUMN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMN, 0); } - public colPosition(): ColPositionContext | undefined { - return this.tryGetRuleContext(0, ColPositionContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterHiveChangeColumn) { - listener.enterHiveChangeColumn(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitHiveChangeColumn) { - listener.exitHiveChangeColumn(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitHiveChangeColumn) { - return visitor.visitHiveChangeColumn(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class HiveReplaceColumnsContext extends StatementContext { - public _table!: MultipartIdentifierContext; - public _columns!: QualifiedColTypeWithPositionListContext; - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public REPLACE(): TerminalNode { return this.getToken(SparkSqlParser.REPLACE, 0); } - public COLUMNS(): TerminalNode { return this.getToken(SparkSqlParser.COLUMNS, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public qualifiedColTypeWithPositionList(): QualifiedColTypeWithPositionListContext { - return this.getRuleContext(0, QualifiedColTypeWithPositionListContext); - } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterHiveReplaceColumns) { - listener.enterHiveReplaceColumns(this); + // @RuleVersion(0) + public quotedIdentifier(): QuotedIdentifierContext { + let _localctx: QuotedIdentifierContext = new QuotedIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 354, SparkSqlParser.RULE_quotedIdentifier); + try { + this.state = 3733; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 481, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3730; + this.match(SparkSqlParser.BACKQUOTED_IDENTIFIER); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3731; + if (!(this.double_quoted_identifiers)) { + throw this.createFailedPredicateException("this.double_quoted_identifiers"); + } + this.state = 3732; + this.match(SparkSqlParser.DOUBLEQUOTED_STRING); + } + break; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitHiveReplaceColumns) { - listener.exitHiveReplaceColumns(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitHiveReplaceColumns) { - return visitor.visitHiveReplaceColumns(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class SetTableSerDeContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - public SERDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDE, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); - } - public WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WITH, 0); } - public SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDEPROPERTIES, 0); } - public tablePropertyList(): TablePropertyListContext | undefined { - return this.tryGetRuleContext(0, TablePropertyListContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetTableSerDe) { - listener.enterSetTableSerDe(this); + // @RuleVersion(0) + public backQuotedIdentifier(): BackQuotedIdentifierContext { + let _localctx: BackQuotedIdentifierContext = new BackQuotedIdentifierContext(this._ctx, this.state); + this.enterRule(_localctx, 356, SparkSqlParser.RULE_backQuotedIdentifier); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3735; + this.match(SparkSqlParser.BACKQUOTED_IDENTIFIER); + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetTableSerDe) { - listener.exitSetTableSerDe(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetTableSerDe) { - return visitor.visitSetTableSerDe(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class AddTablePartitionContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public ADD(): TerminalNode { return this.getToken(SparkSqlParser.ADD, 0); } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEW, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public partitionSpecLocation(): PartitionSpecLocationContext[]; - public partitionSpecLocation(i: number): PartitionSpecLocationContext; - public partitionSpecLocation(i?: number): PartitionSpecLocationContext | PartitionSpecLocationContext[] { - if (i === undefined) { - return this.getRuleContexts(PartitionSpecLocationContext); - } else { - return this.getRuleContext(i, PartitionSpecLocationContext); + // @RuleVersion(0) + public number(): NumberContext { + let _localctx: NumberContext = new NumberContext(this._ctx, this.state); + this.enterRule(_localctx, 358, SparkSqlParser.RULE_number); + let _la: number; + try { + this.state = 3780; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 492, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3737; + if (!(!this.legacy_exponent_literal_as_decimal_enabled)) { + throw this.createFailedPredicateException("!this.legacy_exponent_literal_as_decimal_enabled"); + } + this.state = 3739; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3738; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3741; + this.match(SparkSqlParser.EXPONENT_VALUE); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3742; + if (!(!this.legacy_exponent_literal_as_decimal_enabled)) { + throw this.createFailedPredicateException("!this.legacy_exponent_literal_as_decimal_enabled"); + } + this.state = 3744; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3743; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3746; + this.match(SparkSqlParser.DECIMAL_VALUE); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3747; + if (!(this.legacy_exponent_literal_as_decimal_enabled)) { + throw this.createFailedPredicateException("this.legacy_exponent_literal_as_decimal_enabled"); + } + this.state = 3749; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3748; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3751; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.EXPONENT_VALUE || _la === SparkSqlParser.DECIMAL_VALUE)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3753; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3752; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3755; + this.match(SparkSqlParser.INTEGER_VALUE); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 3757; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3756; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3759; + this.match(SparkSqlParser.BIGINT_LITERAL); + } + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 3761; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3760; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3763; + this.match(SparkSqlParser.SMALLINT_LITERAL); + } + break; + + case 7: + this.enterOuterAlt(_localctx, 7); + { + this.state = 3765; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3764; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3767; + this.match(SparkSqlParser.TINYINT_LITERAL); + } + break; + + case 8: + this.enterOuterAlt(_localctx, 8); + { + this.state = 3769; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3768; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3771; + this.match(SparkSqlParser.DOUBLE_LITERAL); + } + break; + + case 9: + this.enterOuterAlt(_localctx, 9); + { + this.state = 3773; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3772; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3775; + this.match(SparkSqlParser.FLOAT_LITERAL); + } + break; + + case 10: + this.enterOuterAlt(_localctx, 10); + { + this.state = 3777; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === SparkSqlParser.MINUS) { + { + this.state = 3776; + this.match(SparkSqlParser.MINUS); + } + } + + this.state = 3779; + this.match(SparkSqlParser.BIGDECIMAL_LITERAL); + } + break; + } } - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAddTablePartition) { - listener.enterAddTablePartition(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAddTablePartition) { - listener.exitAddTablePartition(this); + finally { + this.exitRule(); } + return _localctx; } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAddTablePartition) { - return visitor.visitAddTablePartition(this); - } else { - return visitor.visitChildren(this); + // @RuleVersion(0) + public alterColumnAction(): AlterColumnActionContext { + let _localctx: AlterColumnActionContext = new AlterColumnActionContext(this._ctx, this.state); + this.enterRule(_localctx, 360, SparkSqlParser.RULE_alterColumnAction); + let _la: number; + try { + this.state = 3793; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 493, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3782; + this.match(SparkSqlParser.KW_TYPE); + this.state = 3783; + this.dataType(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3784; + this.commentSpec(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 3785; + this.colPosition(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 3786; + _localctx._setOrDrop = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_DROP || _la === SparkSqlParser.KW_SET)) { + _localctx._setOrDrop = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 3787; + this.match(SparkSqlParser.KW_NOT); + this.state = 3788; + this.match(SparkSqlParser.KW_NULL); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 3789; + this.match(SparkSqlParser.KW_SET); + this.state = 3790; + this.defaultExpression(); + } + break; + + case 6: + this.enterOuterAlt(_localctx, 6); + { + this.state = 3791; + _localctx._dropDefault = this.match(SparkSqlParser.KW_DROP); + this.state = 3792; + this.match(SparkSqlParser.KW_DEFAULT); + } + break; + } } - } -} -export class RenameTablePartitionContext extends StatementContext { - public _from!: PartitionSpecContext; - public _to!: PartitionSpecContext; - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public RENAME(): TerminalNode { return this.getToken(SparkSqlParser.RENAME, 0); } - public TO(): TerminalNode { return this.getToken(SparkSqlParser.TO, 0); } - public partitionSpec(): PartitionSpecContext[]; - public partitionSpec(i: number): PartitionSpecContext; - public partitionSpec(i?: number): PartitionSpecContext | PartitionSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(PartitionSpecContext); - } else { - return this.getRuleContext(i, PartitionSpecContext); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRenameTablePartition) { - listener.enterRenameTablePartition(this); + finally { + this.exitRule(); } + return _localctx; } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRenameTablePartition) { - listener.exitRenameTablePartition(this); + // @RuleVersion(0) + public stringLit(): StringLitContext { + let _localctx: StringLitContext = new StringLitContext(this._ctx, this.state); + this.enterRule(_localctx, 362, SparkSqlParser.RULE_stringLit); + try { + this.state = 3798; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 494, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3795; + this.match(SparkSqlParser.STRING_LITERAL); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3796; + if (!(!this.double_quoted_identifiers)) { + throw this.createFailedPredicateException("!this.double_quoted_identifiers"); + } + this.state = 3797; + this.match(SparkSqlParser.DOUBLEQUOTED_STRING); + } + break; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRenameTablePartition) { - return visitor.visitRenameTablePartition(this); - } else { - return visitor.visitChildren(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } -} -export class DropTablePartitionsContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public DROP(): TerminalNode { return this.getToken(SparkSqlParser.DROP, 0); } - public partitionSpec(): PartitionSpecContext[]; - public partitionSpec(i: number): PartitionSpecContext; - public partitionSpec(i?: number): PartitionSpecContext | PartitionSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(PartitionSpecContext); - } else { - return this.getRuleContext(i, PartitionSpecContext); + finally { + this.exitRule(); } + return _localctx; } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEW, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public PURGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PURGE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDropTablePartitions) { - listener.enterDropTablePartitions(this); + // @RuleVersion(0) + public comment(): CommentContext { + let _localctx: CommentContext = new CommentContext(this._ctx, this.state); + this.enterRule(_localctx, 364, SparkSqlParser.RULE_comment); + try { + this.state = 3802; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 495, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3800; + this.stringLit(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3801; + this.match(SparkSqlParser.KW_NULL); + } + break; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDropTablePartitions) { - listener.exitDropTablePartitions(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDropTablePartitions) { - return visitor.visitDropTablePartitions(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class SetTableLocationContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - public locationSpec(): LocationSpecContext { - return this.getRuleContext(0, LocationSpecContext); - } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetTableLocation) { - listener.enterSetTableLocation(this); + // @RuleVersion(0) + public version(): VersionContext { + let _localctx: VersionContext = new VersionContext(this._ctx, this.state); + this.enterRule(_localctx, 366, SparkSqlParser.RULE_version); + try { + this.state = 3806; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 496, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 3804; + this.match(SparkSqlParser.INTEGER_VALUE); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 3805; + this.stringLit(); + } + break; + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetTableLocation) { - listener.exitSetTableLocation(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetTableLocation) { - return visitor.visitSetTableLocation(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class RecoverPartitionsContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public RECOVER(): TerminalNode { return this.getToken(SparkSqlParser.RECOVER, 0); } - public PARTITIONS(): TerminalNode { return this.getToken(SparkSqlParser.PARTITIONS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRecoverPartitions) { - listener.enterRecoverPartitions(this); + // @RuleVersion(0) + public ansiNonReserved(): AnsiNonReservedContext { + let _localctx: AnsiNonReservedContext = new AnsiNonReservedContext(this._ctx, this.state); + this.enterRule(_localctx, 368, SparkSqlParser.RULE_ansiNonReserved); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3808; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << SparkSqlParser.KW_ADD) | (1 << SparkSqlParser.KW_AFTER) | (1 << SparkSqlParser.KW_ALTER) | (1 << SparkSqlParser.KW_ALWAYS) | (1 << SparkSqlParser.KW_ANALYZE) | (1 << SparkSqlParser.KW_ANTI) | (1 << SparkSqlParser.KW_ANY_VALUE) | (1 << SparkSqlParser.KW_ARCHIVE) | (1 << SparkSqlParser.KW_ARRAY) | (1 << SparkSqlParser.KW_ASC) | (1 << SparkSqlParser.KW_AT) | (1 << SparkSqlParser.KW_BETWEEN) | (1 << SparkSqlParser.KW_BIGINT) | (1 << SparkSqlParser.KW_BINARY) | (1 << SparkSqlParser.KW_BOOLEAN) | (1 << SparkSqlParser.KW_BUCKET) | (1 << SparkSqlParser.KW_BUCKETS) | (1 << SparkSqlParser.KW_BY))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (SparkSqlParser.KW_BYTE - 32)) | (1 << (SparkSqlParser.KW_CACHE - 32)) | (1 << (SparkSqlParser.KW_CASCADE - 32)) | (1 << (SparkSqlParser.KW_CATALOG - 32)) | (1 << (SparkSqlParser.KW_CATALOGS - 32)) | (1 << (SparkSqlParser.KW_CHANGE - 32)) | (1 << (SparkSqlParser.KW_CHAR - 32)) | (1 << (SparkSqlParser.KW_CHARACTER - 32)) | (1 << (SparkSqlParser.KW_CLEAR - 32)) | (1 << (SparkSqlParser.KW_CLUSTER - 32)) | (1 << (SparkSqlParser.KW_CLUSTERED - 32)) | (1 << (SparkSqlParser.KW_CODEGEN - 32)) | (1 << (SparkSqlParser.KW_COLLECTION - 32)) | (1 << (SparkSqlParser.KW_COLUMNS - 32)) | (1 << (SparkSqlParser.KW_COMMENT - 32)) | (1 << (SparkSqlParser.KW_COMMIT - 32)) | (1 << (SparkSqlParser.KW_COMPACT - 32)) | (1 << (SparkSqlParser.KW_COMPACTIONS - 32)) | (1 << (SparkSqlParser.KW_COMPUTE - 32)) | (1 << (SparkSqlParser.KW_CONCATENATE - 32)) | (1 << (SparkSqlParser.KW_COST - 32)) | (1 << (SparkSqlParser.KW_CUBE - 32)) | (1 << (SparkSqlParser.KW_CURRENT - 32)))) !== 0) || ((((_la - 67)) & ~0x1F) === 0 && ((1 << (_la - 67)) & ((1 << (SparkSqlParser.KW_DAY - 67)) | (1 << (SparkSqlParser.KW_DAYS - 67)) | (1 << (SparkSqlParser.KW_DAYOFYEAR - 67)) | (1 << (SparkSqlParser.KW_DATA - 67)) | (1 << (SparkSqlParser.KW_DATE - 67)) | (1 << (SparkSqlParser.KW_DATABASE - 67)) | (1 << (SparkSqlParser.KW_DATABASES - 67)) | (1 << (SparkSqlParser.KW_DATEADD - 67)) | (1 << (SparkSqlParser.KW_DATE_ADD - 67)) | (1 << (SparkSqlParser.KW_DATEDIFF - 67)) | (1 << (SparkSqlParser.KW_DATE_DIFF - 67)) | (1 << (SparkSqlParser.KW_DBPROPERTIES - 67)) | (1 << (SparkSqlParser.KW_DEC - 67)) | (1 << (SparkSqlParser.KW_DECIMAL - 67)) | (1 << (SparkSqlParser.KW_DECLARE - 67)) | (1 << (SparkSqlParser.KW_DEFAULT - 67)) | (1 << (SparkSqlParser.KW_DEFINED - 67)) | (1 << (SparkSqlParser.KW_DELETE - 67)) | (1 << (SparkSqlParser.KW_DELIMITED - 67)) | (1 << (SparkSqlParser.KW_DESC - 67)) | (1 << (SparkSqlParser.KW_DESCRIBE - 67)) | (1 << (SparkSqlParser.KW_DFS - 67)) | (1 << (SparkSqlParser.KW_DIRECTORIES - 67)) | (1 << (SparkSqlParser.KW_DIRECTORY - 67)) | (1 << (SparkSqlParser.KW_DISTRIBUTE - 67)) | (1 << (SparkSqlParser.KW_DIV - 67)) | (1 << (SparkSqlParser.KW_DOUBLE - 67)) | (1 << (SparkSqlParser.KW_DROP - 67)))) !== 0) || ((((_la - 99)) & ~0x1F) === 0 && ((1 << (_la - 99)) & ((1 << (SparkSqlParser.KW_ESCAPED - 99)) | (1 << (SparkSqlParser.KW_EXCHANGE - 99)) | (1 << (SparkSqlParser.KW_EXCLUDE - 99)) | (1 << (SparkSqlParser.KW_EXISTS - 99)) | (1 << (SparkSqlParser.KW_EXPLAIN - 99)) | (1 << (SparkSqlParser.KW_EXPORT - 99)) | (1 << (SparkSqlParser.KW_EXTENDED - 99)) | (1 << (SparkSqlParser.KW_EXTERNAL - 99)) | (1 << (SparkSqlParser.KW_EXTRACT - 99)) | (1 << (SparkSqlParser.KW_FIELDS - 99)) | (1 << (SparkSqlParser.KW_FILEFORMAT - 99)) | (1 << (SparkSqlParser.KW_FIRST - 99)) | (1 << (SparkSqlParser.KW_FLOAT - 99)) | (1 << (SparkSqlParser.KW_FOLLOWING - 99)) | (1 << (SparkSqlParser.KW_FORMAT - 99)) | (1 << (SparkSqlParser.KW_FORMATTED - 99)) | (1 << (SparkSqlParser.KW_FUNCTION - 99)) | (1 << (SparkSqlParser.KW_FUNCTIONS - 99)) | (1 << (SparkSqlParser.KW_GENERATED - 99)) | (1 << (SparkSqlParser.KW_GLOBAL - 99)) | (1 << (SparkSqlParser.KW_GROUPING - 99)))) !== 0) || ((((_la - 131)) & ~0x1F) === 0 && ((1 << (_la - 131)) & ((1 << (SparkSqlParser.KW_BINARY_HEX - 131)) | (1 << (SparkSqlParser.KW_HOUR - 131)) | (1 << (SparkSqlParser.KW_HOURS - 131)) | (1 << (SparkSqlParser.KW_IDENTIFIER_KW - 131)) | (1 << (SparkSqlParser.KW_IF - 131)) | (1 << (SparkSqlParser.KW_IGNORE - 131)) | (1 << (SparkSqlParser.KW_IMPORT - 131)) | (1 << (SparkSqlParser.KW_INCLUDE - 131)) | (1 << (SparkSqlParser.KW_INDEX - 131)) | (1 << (SparkSqlParser.KW_INDEXES - 131)) | (1 << (SparkSqlParser.KW_INPATH - 131)) | (1 << (SparkSqlParser.KW_INPUTFORMAT - 131)) | (1 << (SparkSqlParser.KW_INSERT - 131)) | (1 << (SparkSqlParser.KW_INTERVAL - 131)) | (1 << (SparkSqlParser.KW_INT - 131)) | (1 << (SparkSqlParser.KW_INTEGER - 131)) | (1 << (SparkSqlParser.KW_ITEMS - 131)) | (1 << (SparkSqlParser.KW_KEYS - 131)) | (1 << (SparkSqlParser.KW_LAST - 131)) | (1 << (SparkSqlParser.KW_LAZY - 131)) | (1 << (SparkSqlParser.KW_LIKE - 131)) | (1 << (SparkSqlParser.KW_ILIKE - 131)) | (1 << (SparkSqlParser.KW_LIMIT - 131)))) !== 0) || ((((_la - 163)) & ~0x1F) === 0 && ((1 << (_la - 163)) & ((1 << (SparkSqlParser.KW_LINES - 163)) | (1 << (SparkSqlParser.KW_LIST - 163)) | (1 << (SparkSqlParser.KW_LOAD - 163)) | (1 << (SparkSqlParser.KW_LOCAL - 163)) | (1 << (SparkSqlParser.KW_LOCATION - 163)) | (1 << (SparkSqlParser.KW_LOCK - 163)) | (1 << (SparkSqlParser.KW_LOCKS - 163)) | (1 << (SparkSqlParser.KW_LOGICAL - 163)) | (1 << (SparkSqlParser.KW_LONG - 163)) | (1 << (SparkSqlParser.KW_MACRO - 163)) | (1 << (SparkSqlParser.KW_MAP - 163)) | (1 << (SparkSqlParser.KW_MATCHED - 163)) | (1 << (SparkSqlParser.KW_MERGE - 163)) | (1 << (SparkSqlParser.KW_MICROSECOND - 163)) | (1 << (SparkSqlParser.KW_MICROSECONDS - 163)) | (1 << (SparkSqlParser.KW_MILLISECOND - 163)) | (1 << (SparkSqlParser.KW_MILLISECONDS - 163)) | (1 << (SparkSqlParser.KW_MINUTE - 163)) | (1 << (SparkSqlParser.KW_MINUTES - 163)) | (1 << (SparkSqlParser.KW_MONTH - 163)) | (1 << (SparkSqlParser.KW_MONTHS - 163)) | (1 << (SparkSqlParser.KW_MSCK - 163)) | (1 << (SparkSqlParser.KW_NAME - 163)) | (1 << (SparkSqlParser.KW_NAMESPACE - 163)) | (1 << (SparkSqlParser.KW_NAMESPACES - 163)) | (1 << (SparkSqlParser.KW_NANOSECOND - 163)) | (1 << (SparkSqlParser.KW_NANOSECONDS - 163)) | (1 << (SparkSqlParser.KW_NO - 163)) | (1 << (SparkSqlParser.KW_NULLS - 163)))) !== 0) || ((((_la - 195)) & ~0x1F) === 0 && ((1 << (_la - 195)) & ((1 << (SparkSqlParser.KW_NUMERIC - 195)) | (1 << (SparkSqlParser.KW_OF - 195)) | (1 << (SparkSqlParser.KW_OPTION - 195)) | (1 << (SparkSqlParser.KW_OPTIONS - 195)) | (1 << (SparkSqlParser.KW_OUT - 195)) | (1 << (SparkSqlParser.KW_OUTPUTFORMAT - 195)) | (1 << (SparkSqlParser.KW_OVER - 195)) | (1 << (SparkSqlParser.KW_OVERLAY - 195)) | (1 << (SparkSqlParser.KW_OVERWRITE - 195)) | (1 << (SparkSqlParser.KW_PARTITION - 195)) | (1 << (SparkSqlParser.KW_PARTITIONED - 195)) | (1 << (SparkSqlParser.KW_PARTITIONS - 195)) | (1 << (SparkSqlParser.KW_PERCENTLIT - 195)) | (1 << (SparkSqlParser.KW_PIVOT - 195)) | (1 << (SparkSqlParser.KW_PLACING - 195)) | (1 << (SparkSqlParser.KW_POSITION - 195)) | (1 << (SparkSqlParser.KW_PRECEDING - 195)) | (1 << (SparkSqlParser.KW_PRINCIPALS - 195)) | (1 << (SparkSqlParser.KW_PROPERTIES - 195)) | (1 << (SparkSqlParser.KW_PURGE - 195)) | (1 << (SparkSqlParser.KW_QUARTER - 195)) | (1 << (SparkSqlParser.KW_QUERY - 195)))) !== 0) || ((((_la - 227)) & ~0x1F) === 0 && ((1 << (_la - 227)) & ((1 << (SparkSqlParser.KW_RANGE - 227)) | (1 << (SparkSqlParser.KW_REAL - 227)) | (1 << (SparkSqlParser.KW_RECORDREADER - 227)) | (1 << (SparkSqlParser.KW_RECORDWRITER - 227)) | (1 << (SparkSqlParser.KW_RECOVER - 227)) | (1 << (SparkSqlParser.KW_REDUCE - 227)) | (1 << (SparkSqlParser.KW_REFRESH - 227)) | (1 << (SparkSqlParser.KW_RENAME - 227)) | (1 << (SparkSqlParser.KW_REPAIR - 227)) | (1 << (SparkSqlParser.KW_REPEATABLE - 227)) | (1 << (SparkSqlParser.KW_REPLACE - 227)) | (1 << (SparkSqlParser.KW_RESET - 227)) | (1 << (SparkSqlParser.KW_RESPECT - 227)) | (1 << (SparkSqlParser.KW_RESTRICT - 227)) | (1 << (SparkSqlParser.KW_REVOKE - 227)) | (1 << (SparkSqlParser.KW_RLIKE - 227)) | (1 << (SparkSqlParser.KW_ROLE - 227)) | (1 << (SparkSqlParser.KW_ROLES - 227)) | (1 << (SparkSqlParser.KW_ROLLBACK - 227)) | (1 << (SparkSqlParser.KW_ROLLUP - 227)) | (1 << (SparkSqlParser.KW_ROW - 227)) | (1 << (SparkSqlParser.KW_ROWS - 227)) | (1 << (SparkSqlParser.KW_SECOND - 227)) | (1 << (SparkSqlParser.KW_SECONDS - 227)) | (1 << (SparkSqlParser.KW_SCHEMA - 227)) | (1 << (SparkSqlParser.KW_SCHEMAS - 227)) | (1 << (SparkSqlParser.KW_SEMI - 227)) | (1 << (SparkSqlParser.KW_SEPARATED - 227)) | (1 << (SparkSqlParser.KW_SERDE - 227)))) !== 0) || ((((_la - 259)) & ~0x1F) === 0 && ((1 << (_la - 259)) & ((1 << (SparkSqlParser.KW_SERDEPROPERTIES - 259)) | (1 << (SparkSqlParser.KW_SET - 259)) | (1 << (SparkSqlParser.KW_SETMINUS - 259)) | (1 << (SparkSqlParser.KW_SETS - 259)) | (1 << (SparkSqlParser.KW_SHORT - 259)) | (1 << (SparkSqlParser.KW_SHOW - 259)) | (1 << (SparkSqlParser.KW_SINGLE - 259)) | (1 << (SparkSqlParser.KW_SKEWED - 259)) | (1 << (SparkSqlParser.KW_SMALLINT - 259)) | (1 << (SparkSqlParser.KW_SORT - 259)) | (1 << (SparkSqlParser.KW_SORTED - 259)) | (1 << (SparkSqlParser.KW_SOURCE - 259)) | (1 << (SparkSqlParser.KW_START - 259)) | (1 << (SparkSqlParser.KW_STATISTICS - 259)) | (1 << (SparkSqlParser.KW_STORED - 259)) | (1 << (SparkSqlParser.KW_STRATIFY - 259)) | (1 << (SparkSqlParser.KW_STRING - 259)) | (1 << (SparkSqlParser.KW_STRUCT - 259)) | (1 << (SparkSqlParser.KW_SUBSTR - 259)) | (1 << (SparkSqlParser.KW_SUBSTRING - 259)) | (1 << (SparkSqlParser.KW_SYNC - 259)) | (1 << (SparkSqlParser.KW_SYSTEM_TIME - 259)) | (1 << (SparkSqlParser.KW_SYSTEM_VERSION - 259)) | (1 << (SparkSqlParser.KW_TABLES - 259)) | (1 << (SparkSqlParser.KW_TABLESAMPLE - 259)) | (1 << (SparkSqlParser.KW_TARGET - 259)) | (1 << (SparkSqlParser.KW_TBLPROPERTIES - 259)) | (1 << (SparkSqlParser.KW_TEMPORARY - 259)) | (1 << (SparkSqlParser.KW_TERMINATED - 259)))) !== 0) || ((((_la - 293)) & ~0x1F) === 0 && ((1 << (_la - 293)) & ((1 << (SparkSqlParser.KW_TIMEDIFF - 293)) | (1 << (SparkSqlParser.KW_TIMESTAMP - 293)) | (1 << (SparkSqlParser.KW_TIMESTAMP_LTZ - 293)) | (1 << (SparkSqlParser.KW_TIMESTAMP_NTZ - 293)) | (1 << (SparkSqlParser.KW_TIMESTAMPADD - 293)) | (1 << (SparkSqlParser.KW_TIMESTAMPDIFF - 293)) | (1 << (SparkSqlParser.KW_TINYINT - 293)) | (1 << (SparkSqlParser.KW_TOUCH - 293)) | (1 << (SparkSqlParser.KW_TRANSACTION - 293)) | (1 << (SparkSqlParser.KW_TRANSACTIONS - 293)) | (1 << (SparkSqlParser.KW_TRANSFORM - 293)) | (1 << (SparkSqlParser.KW_TRIM - 293)) | (1 << (SparkSqlParser.KW_TRUE - 293)) | (1 << (SparkSqlParser.KW_TRUNCATE - 293)) | (1 << (SparkSqlParser.KW_TRY_CAST - 293)) | (1 << (SparkSqlParser.KW_TYPE - 293)) | (1 << (SparkSqlParser.KW_UNARCHIVE - 293)) | (1 << (SparkSqlParser.KW_UNBOUNDED - 293)) | (1 << (SparkSqlParser.KW_UNCACHE - 293)) | (1 << (SparkSqlParser.KW_UNLOCK - 293)) | (1 << (SparkSqlParser.KW_UNPIVOT - 293)) | (1 << (SparkSqlParser.KW_UNSET - 293)) | (1 << (SparkSqlParser.KW_UPDATE - 293)) | (1 << (SparkSqlParser.KW_USE - 293)) | (1 << (SparkSqlParser.KW_VALUES - 293)))) !== 0) || ((((_la - 325)) & ~0x1F) === 0 && ((1 << (_la - 325)) & ((1 << (SparkSqlParser.KW_VARCHAR - 325)) | (1 << (SparkSqlParser.KW_VAR - 325)) | (1 << (SparkSqlParser.KW_VARIABLE - 325)) | (1 << (SparkSqlParser.KW_VERSION - 325)) | (1 << (SparkSqlParser.KW_VIEW - 325)) | (1 << (SparkSqlParser.KW_VIEWS - 325)) | (1 << (SparkSqlParser.KW_VOID - 325)) | (1 << (SparkSqlParser.KW_WEEK - 325)) | (1 << (SparkSqlParser.KW_WEEKS - 325)) | (1 << (SparkSqlParser.KW_WINDOW - 325)) | (1 << (SparkSqlParser.KW_YEAR - 325)) | (1 << (SparkSqlParser.KW_YEARS - 325)) | (1 << (SparkSqlParser.KW_ZONE - 325)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRecoverPartitions) { - listener.exitRecoverPartitions(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRecoverPartitions) { - return visitor.visitRecoverPartitions(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class DropTableContext extends StatementContext { - public DROP(): TerminalNode { return this.getToken(SparkSqlParser.DROP, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public PURGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PURGE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDropTable) { - listener.enterDropTable(this); + // @RuleVersion(0) + public strictNonReserved(): StrictNonReservedContext { + let _localctx: StrictNonReservedContext = new StrictNonReservedContext(this._ctx, this.state); + this.enterRule(_localctx, 370, SparkSqlParser.RULE_strictNonReserved); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3810; + _la = this._input.LA(1); + if (!(_la === SparkSqlParser.KW_ANTI || _la === SparkSqlParser.KW_CROSS || _la === SparkSqlParser.KW_EXCEPT || _la === SparkSqlParser.KW_FULL || ((((_la - 142)) & ~0x1F) === 0 && ((1 << (_la - 142)) & ((1 << (SparkSqlParser.KW_INNER - 142)) | (1 << (SparkSqlParser.KW_INTERSECT - 142)) | (1 << (SparkSqlParser.KW_JOIN - 142)) | (1 << (SparkSqlParser.KW_LATERAL - 142)) | (1 << (SparkSqlParser.KW_LEFT - 142)))) !== 0) || _la === SparkSqlParser.KW_NATURAL || _la === SparkSqlParser.KW_ON || ((((_la - 243)) & ~0x1F) === 0 && ((1 << (_la - 243)) & ((1 << (SparkSqlParser.KW_RIGHT - 243)) | (1 << (SparkSqlParser.KW_SEMI - 243)) | (1 << (SparkSqlParser.KW_SETMINUS - 243)))) !== 0) || _la === SparkSqlParser.KW_UNION || _la === SparkSqlParser.KW_USING)) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDropTable) { - listener.exitDropTable(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDropTable) { - return visitor.visitDropTable(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class DropViewContext extends StatementContext { - public DROP(): TerminalNode { return this.getToken(SparkSqlParser.DROP, 0); } - public VIEW(): TerminalNode { return this.getToken(SparkSqlParser.VIEW, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDropView) { - listener.enterDropView(this); + // @RuleVersion(0) + public nonReserved(): NonReservedContext { + let _localctx: NonReservedContext = new NonReservedContext(this._ctx, this.state); + this.enterRule(_localctx, 372, SparkSqlParser.RULE_nonReserved); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 3812; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << SparkSqlParser.KW_ADD) | (1 << SparkSqlParser.KW_AFTER) | (1 << SparkSqlParser.KW_ALL) | (1 << SparkSqlParser.KW_ALTER) | (1 << SparkSqlParser.KW_ALWAYS) | (1 << SparkSqlParser.KW_ANALYZE) | (1 << SparkSqlParser.KW_AND) | (1 << SparkSqlParser.KW_ANY) | (1 << SparkSqlParser.KW_ANY_VALUE) | (1 << SparkSqlParser.KW_ARCHIVE) | (1 << SparkSqlParser.KW_ARRAY) | (1 << SparkSqlParser.KW_AS) | (1 << SparkSqlParser.KW_ASC) | (1 << SparkSqlParser.KW_AT) | (1 << SparkSqlParser.KW_AUTHORIZATION) | (1 << SparkSqlParser.KW_BETWEEN) | (1 << SparkSqlParser.KW_BIGINT) | (1 << SparkSqlParser.KW_BINARY) | (1 << SparkSqlParser.KW_BOOLEAN) | (1 << SparkSqlParser.KW_BOTH) | (1 << SparkSqlParser.KW_BUCKET) | (1 << SparkSqlParser.KW_BUCKETS) | (1 << SparkSqlParser.KW_BY))) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & ((1 << (SparkSqlParser.KW_BYTE - 32)) | (1 << (SparkSqlParser.KW_CACHE - 32)) | (1 << (SparkSqlParser.KW_CASCADE - 32)) | (1 << (SparkSqlParser.KW_CASE - 32)) | (1 << (SparkSqlParser.KW_CAST - 32)) | (1 << (SparkSqlParser.KW_CATALOG - 32)) | (1 << (SparkSqlParser.KW_CATALOGS - 32)) | (1 << (SparkSqlParser.KW_CHANGE - 32)) | (1 << (SparkSqlParser.KW_CHAR - 32)) | (1 << (SparkSqlParser.KW_CHARACTER - 32)) | (1 << (SparkSqlParser.KW_CHECK - 32)) | (1 << (SparkSqlParser.KW_CLEAR - 32)) | (1 << (SparkSqlParser.KW_CLUSTER - 32)) | (1 << (SparkSqlParser.KW_CLUSTERED - 32)) | (1 << (SparkSqlParser.KW_CODEGEN - 32)) | (1 << (SparkSqlParser.KW_COLLATE - 32)) | (1 << (SparkSqlParser.KW_COLLECTION - 32)) | (1 << (SparkSqlParser.KW_COLUMN - 32)) | (1 << (SparkSqlParser.KW_COLUMNS - 32)) | (1 << (SparkSqlParser.KW_COMMENT - 32)) | (1 << (SparkSqlParser.KW_COMMIT - 32)) | (1 << (SparkSqlParser.KW_COMPACT - 32)) | (1 << (SparkSqlParser.KW_COMPACTIONS - 32)) | (1 << (SparkSqlParser.KW_COMPUTE - 32)) | (1 << (SparkSqlParser.KW_CONCATENATE - 32)) | (1 << (SparkSqlParser.KW_CONSTRAINT - 32)) | (1 << (SparkSqlParser.KW_COST - 32)) | (1 << (SparkSqlParser.KW_CREATE - 32)) | (1 << (SparkSqlParser.KW_CUBE - 32)) | (1 << (SparkSqlParser.KW_CURRENT - 32)) | (1 << (SparkSqlParser.KW_CURRENT_DATE - 32)))) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & ((1 << (SparkSqlParser.KW_CURRENT_TIME - 64)) | (1 << (SparkSqlParser.KW_CURRENT_TIMESTAMP - 64)) | (1 << (SparkSqlParser.KW_CURRENT_USER - 64)) | (1 << (SparkSqlParser.KW_DAY - 64)) | (1 << (SparkSqlParser.KW_DAYS - 64)) | (1 << (SparkSqlParser.KW_DAYOFYEAR - 64)) | (1 << (SparkSqlParser.KW_DATA - 64)) | (1 << (SparkSqlParser.KW_DATE - 64)) | (1 << (SparkSqlParser.KW_DATABASE - 64)) | (1 << (SparkSqlParser.KW_DATABASES - 64)) | (1 << (SparkSqlParser.KW_DATEADD - 64)) | (1 << (SparkSqlParser.KW_DATE_ADD - 64)) | (1 << (SparkSqlParser.KW_DATEDIFF - 64)) | (1 << (SparkSqlParser.KW_DATE_DIFF - 64)) | (1 << (SparkSqlParser.KW_DBPROPERTIES - 64)) | (1 << (SparkSqlParser.KW_DEC - 64)) | (1 << (SparkSqlParser.KW_DECIMAL - 64)) | (1 << (SparkSqlParser.KW_DECLARE - 64)) | (1 << (SparkSqlParser.KW_DEFAULT - 64)) | (1 << (SparkSqlParser.KW_DEFINED - 64)) | (1 << (SparkSqlParser.KW_DELETE - 64)) | (1 << (SparkSqlParser.KW_DELIMITED - 64)) | (1 << (SparkSqlParser.KW_DESC - 64)) | (1 << (SparkSqlParser.KW_DESCRIBE - 64)) | (1 << (SparkSqlParser.KW_DFS - 64)) | (1 << (SparkSqlParser.KW_DIRECTORIES - 64)) | (1 << (SparkSqlParser.KW_DIRECTORY - 64)) | (1 << (SparkSqlParser.KW_DISTINCT - 64)) | (1 << (SparkSqlParser.KW_DISTRIBUTE - 64)) | (1 << (SparkSqlParser.KW_DIV - 64)) | (1 << (SparkSqlParser.KW_DOUBLE - 64)) | (1 << (SparkSqlParser.KW_DROP - 64)))) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & ((1 << (SparkSqlParser.KW_ELSE - 96)) | (1 << (SparkSqlParser.KW_END - 96)) | (1 << (SparkSqlParser.KW_ESCAPE - 96)) | (1 << (SparkSqlParser.KW_ESCAPED - 96)) | (1 << (SparkSqlParser.KW_EXCHANGE - 96)) | (1 << (SparkSqlParser.KW_EXCLUDE - 96)) | (1 << (SparkSqlParser.KW_EXISTS - 96)) | (1 << (SparkSqlParser.KW_EXPLAIN - 96)) | (1 << (SparkSqlParser.KW_EXPORT - 96)) | (1 << (SparkSqlParser.KW_EXTENDED - 96)) | (1 << (SparkSqlParser.KW_EXTERNAL - 96)) | (1 << (SparkSqlParser.KW_EXTRACT - 96)) | (1 << (SparkSqlParser.KW_FALSE - 96)) | (1 << (SparkSqlParser.KW_FETCH - 96)) | (1 << (SparkSqlParser.KW_FIELDS - 96)) | (1 << (SparkSqlParser.KW_FILTER - 96)) | (1 << (SparkSqlParser.KW_FILEFORMAT - 96)) | (1 << (SparkSqlParser.KW_FIRST - 96)) | (1 << (SparkSqlParser.KW_FLOAT - 96)) | (1 << (SparkSqlParser.KW_FOLLOWING - 96)) | (1 << (SparkSqlParser.KW_FOR - 96)) | (1 << (SparkSqlParser.KW_FOREIGN - 96)) | (1 << (SparkSqlParser.KW_FORMAT - 96)) | (1 << (SparkSqlParser.KW_FORMATTED - 96)) | (1 << (SparkSqlParser.KW_FROM - 96)) | (1 << (SparkSqlParser.KW_FUNCTION - 96)) | (1 << (SparkSqlParser.KW_FUNCTIONS - 96)) | (1 << (SparkSqlParser.KW_GENERATED - 96)) | (1 << (SparkSqlParser.KW_GLOBAL - 96)) | (1 << (SparkSqlParser.KW_GRANT - 96)))) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & ((1 << (SparkSqlParser.KW_GROUP - 128)) | (1 << (SparkSqlParser.KW_GROUPING - 128)) | (1 << (SparkSqlParser.KW_HAVING - 128)) | (1 << (SparkSqlParser.KW_BINARY_HEX - 128)) | (1 << (SparkSqlParser.KW_HOUR - 128)) | (1 << (SparkSqlParser.KW_HOURS - 128)) | (1 << (SparkSqlParser.KW_IDENTIFIER_KW - 128)) | (1 << (SparkSqlParser.KW_IF - 128)) | (1 << (SparkSqlParser.KW_IGNORE - 128)) | (1 << (SparkSqlParser.KW_IMPORT - 128)) | (1 << (SparkSqlParser.KW_IN - 128)) | (1 << (SparkSqlParser.KW_INCLUDE - 128)) | (1 << (SparkSqlParser.KW_INDEX - 128)) | (1 << (SparkSqlParser.KW_INDEXES - 128)) | (1 << (SparkSqlParser.KW_INPATH - 128)) | (1 << (SparkSqlParser.KW_INPUTFORMAT - 128)) | (1 << (SparkSqlParser.KW_INSERT - 128)) | (1 << (SparkSqlParser.KW_INTERVAL - 128)) | (1 << (SparkSqlParser.KW_INT - 128)) | (1 << (SparkSqlParser.KW_INTEGER - 128)) | (1 << (SparkSqlParser.KW_INTO - 128)) | (1 << (SparkSqlParser.KW_IS - 128)) | (1 << (SparkSqlParser.KW_ITEMS - 128)) | (1 << (SparkSqlParser.KW_KEYS - 128)) | (1 << (SparkSqlParser.KW_LAST - 128)) | (1 << (SparkSqlParser.KW_LAZY - 128)) | (1 << (SparkSqlParser.KW_LEADING - 128)))) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & ((1 << (SparkSqlParser.KW_LIKE - 160)) | (1 << (SparkSqlParser.KW_ILIKE - 160)) | (1 << (SparkSqlParser.KW_LIMIT - 160)) | (1 << (SparkSqlParser.KW_LINES - 160)) | (1 << (SparkSqlParser.KW_LIST - 160)) | (1 << (SparkSqlParser.KW_LOAD - 160)) | (1 << (SparkSqlParser.KW_LOCAL - 160)) | (1 << (SparkSqlParser.KW_LOCATION - 160)) | (1 << (SparkSqlParser.KW_LOCK - 160)) | (1 << (SparkSqlParser.KW_LOCKS - 160)) | (1 << (SparkSqlParser.KW_LOGICAL - 160)) | (1 << (SparkSqlParser.KW_LONG - 160)) | (1 << (SparkSqlParser.KW_MACRO - 160)) | (1 << (SparkSqlParser.KW_MAP - 160)) | (1 << (SparkSqlParser.KW_MATCHED - 160)) | (1 << (SparkSqlParser.KW_MERGE - 160)) | (1 << (SparkSqlParser.KW_MICROSECOND - 160)) | (1 << (SparkSqlParser.KW_MICROSECONDS - 160)) | (1 << (SparkSqlParser.KW_MILLISECOND - 160)) | (1 << (SparkSqlParser.KW_MILLISECONDS - 160)) | (1 << (SparkSqlParser.KW_MINUTE - 160)) | (1 << (SparkSqlParser.KW_MINUTES - 160)) | (1 << (SparkSqlParser.KW_MONTH - 160)) | (1 << (SparkSqlParser.KW_MONTHS - 160)) | (1 << (SparkSqlParser.KW_MSCK - 160)) | (1 << (SparkSqlParser.KW_NAME - 160)) | (1 << (SparkSqlParser.KW_NAMESPACE - 160)) | (1 << (SparkSqlParser.KW_NAMESPACES - 160)) | (1 << (SparkSqlParser.KW_NANOSECOND - 160)) | (1 << (SparkSqlParser.KW_NANOSECONDS - 160)) | (1 << (SparkSqlParser.KW_NO - 160)))) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & ((1 << (SparkSqlParser.KW_NOT - 192)) | (1 << (SparkSqlParser.KW_NULL - 192)) | (1 << (SparkSqlParser.KW_NULLS - 192)) | (1 << (SparkSqlParser.KW_NUMERIC - 192)) | (1 << (SparkSqlParser.KW_OF - 192)) | (1 << (SparkSqlParser.KW_OFFSET - 192)) | (1 << (SparkSqlParser.KW_ONLY - 192)) | (1 << (SparkSqlParser.KW_OPTION - 192)) | (1 << (SparkSqlParser.KW_OPTIONS - 192)) | (1 << (SparkSqlParser.KW_OR - 192)) | (1 << (SparkSqlParser.KW_ORDER - 192)) | (1 << (SparkSqlParser.KW_OUT - 192)) | (1 << (SparkSqlParser.KW_OUTER - 192)) | (1 << (SparkSqlParser.KW_OUTPUTFORMAT - 192)) | (1 << (SparkSqlParser.KW_OVER - 192)) | (1 << (SparkSqlParser.KW_OVERLAPS - 192)) | (1 << (SparkSqlParser.KW_OVERLAY - 192)) | (1 << (SparkSqlParser.KW_OVERWRITE - 192)) | (1 << (SparkSqlParser.KW_PARTITION - 192)) | (1 << (SparkSqlParser.KW_PARTITIONED - 192)) | (1 << (SparkSqlParser.KW_PARTITIONS - 192)) | (1 << (SparkSqlParser.KW_PERCENTILE_CONT - 192)) | (1 << (SparkSqlParser.KW_PERCENTILE_DISC - 192)) | (1 << (SparkSqlParser.KW_PERCENTLIT - 192)) | (1 << (SparkSqlParser.KW_PIVOT - 192)) | (1 << (SparkSqlParser.KW_PLACING - 192)) | (1 << (SparkSqlParser.KW_POSITION - 192)) | (1 << (SparkSqlParser.KW_PRECEDING - 192)) | (1 << (SparkSqlParser.KW_PRIMARY - 192)) | (1 << (SparkSqlParser.KW_PRINCIPALS - 192)) | (1 << (SparkSqlParser.KW_PROPERTIES - 192)))) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & ((1 << (SparkSqlParser.KW_PURGE - 224)) | (1 << (SparkSqlParser.KW_QUARTER - 224)) | (1 << (SparkSqlParser.KW_QUERY - 224)) | (1 << (SparkSqlParser.KW_RANGE - 224)) | (1 << (SparkSqlParser.KW_REAL - 224)) | (1 << (SparkSqlParser.KW_RECORDREADER - 224)) | (1 << (SparkSqlParser.KW_RECORDWRITER - 224)) | (1 << (SparkSqlParser.KW_RECOVER - 224)) | (1 << (SparkSqlParser.KW_REDUCE - 224)) | (1 << (SparkSqlParser.KW_REFERENCES - 224)) | (1 << (SparkSqlParser.KW_REFRESH - 224)) | (1 << (SparkSqlParser.KW_RENAME - 224)) | (1 << (SparkSqlParser.KW_REPAIR - 224)) | (1 << (SparkSqlParser.KW_REPEATABLE - 224)) | (1 << (SparkSqlParser.KW_REPLACE - 224)) | (1 << (SparkSqlParser.KW_RESET - 224)) | (1 << (SparkSqlParser.KW_RESPECT - 224)) | (1 << (SparkSqlParser.KW_RESTRICT - 224)) | (1 << (SparkSqlParser.KW_REVOKE - 224)) | (1 << (SparkSqlParser.KW_RLIKE - 224)) | (1 << (SparkSqlParser.KW_ROLE - 224)) | (1 << (SparkSqlParser.KW_ROLES - 224)) | (1 << (SparkSqlParser.KW_ROLLBACK - 224)) | (1 << (SparkSqlParser.KW_ROLLUP - 224)) | (1 << (SparkSqlParser.KW_ROW - 224)) | (1 << (SparkSqlParser.KW_ROWS - 224)) | (1 << (SparkSqlParser.KW_SECOND - 224)) | (1 << (SparkSqlParser.KW_SECONDS - 224)) | (1 << (SparkSqlParser.KW_SCHEMA - 224)) | (1 << (SparkSqlParser.KW_SCHEMAS - 224)) | (1 << (SparkSqlParser.KW_SELECT - 224)))) !== 0) || ((((_la - 257)) & ~0x1F) === 0 && ((1 << (_la - 257)) & ((1 << (SparkSqlParser.KW_SEPARATED - 257)) | (1 << (SparkSqlParser.KW_SERDE - 257)) | (1 << (SparkSqlParser.KW_SERDEPROPERTIES - 257)) | (1 << (SparkSqlParser.KW_SESSION_USER - 257)) | (1 << (SparkSqlParser.KW_SET - 257)) | (1 << (SparkSqlParser.KW_SETS - 257)) | (1 << (SparkSqlParser.KW_SHORT - 257)) | (1 << (SparkSqlParser.KW_SHOW - 257)) | (1 << (SparkSqlParser.KW_SINGLE - 257)) | (1 << (SparkSqlParser.KW_SKEWED - 257)) | (1 << (SparkSqlParser.KW_SMALLINT - 257)) | (1 << (SparkSqlParser.KW_SOME - 257)) | (1 << (SparkSqlParser.KW_SORT - 257)) | (1 << (SparkSqlParser.KW_SORTED - 257)) | (1 << (SparkSqlParser.KW_SOURCE - 257)) | (1 << (SparkSqlParser.KW_START - 257)) | (1 << (SparkSqlParser.KW_STATISTICS - 257)) | (1 << (SparkSqlParser.KW_STORED - 257)) | (1 << (SparkSqlParser.KW_STRATIFY - 257)) | (1 << (SparkSqlParser.KW_STRING - 257)) | (1 << (SparkSqlParser.KW_STRUCT - 257)) | (1 << (SparkSqlParser.KW_SUBSTR - 257)) | (1 << (SparkSqlParser.KW_SUBSTRING - 257)) | (1 << (SparkSqlParser.KW_SYNC - 257)) | (1 << (SparkSqlParser.KW_SYSTEM_TIME - 257)) | (1 << (SparkSqlParser.KW_SYSTEM_VERSION - 257)) | (1 << (SparkSqlParser.KW_TABLE - 257)) | (1 << (SparkSqlParser.KW_TABLES - 257)) | (1 << (SparkSqlParser.KW_TABLESAMPLE - 257)) | (1 << (SparkSqlParser.KW_TARGET - 257)) | (1 << (SparkSqlParser.KW_TBLPROPERTIES - 257)))) !== 0) || ((((_la - 289)) & ~0x1F) === 0 && ((1 << (_la - 289)) & ((1 << (SparkSqlParser.KW_TEMPORARY - 289)) | (1 << (SparkSqlParser.KW_TERMINATED - 289)) | (1 << (SparkSqlParser.KW_THEN - 289)) | (1 << (SparkSqlParser.KW_TIME - 289)) | (1 << (SparkSqlParser.KW_TIMEDIFF - 289)) | (1 << (SparkSqlParser.KW_TIMESTAMP - 289)) | (1 << (SparkSqlParser.KW_TIMESTAMP_LTZ - 289)) | (1 << (SparkSqlParser.KW_TIMESTAMP_NTZ - 289)) | (1 << (SparkSqlParser.KW_TIMESTAMPADD - 289)) | (1 << (SparkSqlParser.KW_TIMESTAMPDIFF - 289)) | (1 << (SparkSqlParser.KW_TINYINT - 289)) | (1 << (SparkSqlParser.KW_TO - 289)) | (1 << (SparkSqlParser.KW_TOUCH - 289)) | (1 << (SparkSqlParser.KW_TRAILING - 289)) | (1 << (SparkSqlParser.KW_TRANSACTION - 289)) | (1 << (SparkSqlParser.KW_TRANSACTIONS - 289)) | (1 << (SparkSqlParser.KW_TRANSFORM - 289)) | (1 << (SparkSqlParser.KW_TRIM - 289)) | (1 << (SparkSqlParser.KW_TRUE - 289)) | (1 << (SparkSqlParser.KW_TRUNCATE - 289)) | (1 << (SparkSqlParser.KW_TRY_CAST - 289)) | (1 << (SparkSqlParser.KW_TYPE - 289)) | (1 << (SparkSqlParser.KW_UNARCHIVE - 289)) | (1 << (SparkSqlParser.KW_UNBOUNDED - 289)) | (1 << (SparkSqlParser.KW_UNCACHE - 289)) | (1 << (SparkSqlParser.KW_UNIQUE - 289)) | (1 << (SparkSqlParser.KW_UNKNOWN - 289)) | (1 << (SparkSqlParser.KW_UNLOCK - 289)) | (1 << (SparkSqlParser.KW_UNPIVOT - 289)) | (1 << (SparkSqlParser.KW_UNSET - 289)) | (1 << (SparkSqlParser.KW_UPDATE - 289)))) !== 0) || ((((_la - 321)) & ~0x1F) === 0 && ((1 << (_la - 321)) & ((1 << (SparkSqlParser.KW_USE - 321)) | (1 << (SparkSqlParser.KW_USER - 321)) | (1 << (SparkSqlParser.KW_VALUES - 321)) | (1 << (SparkSqlParser.KW_VARCHAR - 321)) | (1 << (SparkSqlParser.KW_VAR - 321)) | (1 << (SparkSqlParser.KW_VARIABLE - 321)) | (1 << (SparkSqlParser.KW_VERSION - 321)) | (1 << (SparkSqlParser.KW_VIEW - 321)) | (1 << (SparkSqlParser.KW_VIEWS - 321)) | (1 << (SparkSqlParser.KW_VOID - 321)) | (1 << (SparkSqlParser.KW_WEEK - 321)) | (1 << (SparkSqlParser.KW_WEEKS - 321)) | (1 << (SparkSqlParser.KW_WHEN - 321)) | (1 << (SparkSqlParser.KW_WHERE - 321)) | (1 << (SparkSqlParser.KW_WINDOW - 321)) | (1 << (SparkSqlParser.KW_WITH - 321)) | (1 << (SparkSqlParser.KW_WITHIN - 321)) | (1 << (SparkSqlParser.KW_YEAR - 321)) | (1 << (SparkSqlParser.KW_YEARS - 321)) | (1 << (SparkSqlParser.KW_ZONE - 321)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDropView) { - listener.exitDropView(this); + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDropView) { - return visitor.visitDropView(this); - } else { - return visitor.visitChildren(this); + finally { + this.exitRule(); } + return _localctx; } -} -export class CreateViewContext extends StatementContext { - public CREATE(): TerminalNode { return this.getToken(SparkSqlParser.CREATE, 0); } - public VIEW(): TerminalNode { return this.getToken(SparkSqlParser.VIEW, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public AS(): TerminalNode { return this.getToken(SparkSqlParser.AS, 0); } - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); - } - public OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OR, 0); } - public REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REPLACE, 0); } - public TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TEMPORARY, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public identifierCommentList(): IdentifierCommentListContext | undefined { - return this.tryGetRuleContext(0, IdentifierCommentListContext); - } - public commentSpec(): CommentSpecContext[]; - public commentSpec(i: number): CommentSpecContext; - public commentSpec(i?: number): CommentSpecContext | CommentSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(CommentSpecContext); - } else { - return this.getRuleContext(i, CommentSpecContext); + + public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 46: + return this.queryTerm_sempred(_localctx as QueryTermContext, predIndex); + + case 129: + return this.booleanExpression_sempred(_localctx as BooleanExpressionContext, predIndex); + + case 131: + return this.valueExpression_sempred(_localctx as ValueExpressionContext, predIndex); + + case 133: + return this.primaryExpression_sempred(_localctx as PrimaryExpressionContext, predIndex); + + case 175: + return this.identifier_sempred(_localctx as IdentifierContext, predIndex); + + case 176: + return this.strictIdentifier_sempred(_localctx as StrictIdentifierContext, predIndex); + + case 177: + return this.quotedIdentifier_sempred(_localctx as QuotedIdentifierContext, predIndex); + + case 179: + return this.number_sempred(_localctx as NumberContext, predIndex); + + case 181: + return this.stringLit_sempred(_localctx as StringLitContext, predIndex); } + return true; } - public PARTITIONED(): TerminalNode[]; - public PARTITIONED(i: number): TerminalNode; - public PARTITIONED(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.PARTITIONED); - } else { - return this.getToken(SparkSqlParser.PARTITIONED, i); + private queryTerm_sempred(_localctx: QueryTermContext, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.precpred(this._ctx, 3); + + case 1: + return this.legacy_setops_precedence_enabled; + + case 2: + return this.precpred(this._ctx, 2); + + case 3: + return !this.legacy_setops_precedence_enabled; + + case 4: + return this.precpred(this._ctx, 1); + + case 5: + return !this.legacy_setops_precedence_enabled; } + return true; } - public ON(): TerminalNode[]; - public ON(i: number): TerminalNode; - public ON(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.ON); - } else { - return this.getToken(SparkSqlParser.ON, i); + private booleanExpression_sempred(_localctx: BooleanExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 6: + return this.precpred(this._ctx, 2); + + case 7: + return this.precpred(this._ctx, 1); } + return true; } - public identifierList(): IdentifierListContext[]; - public identifierList(i: number): IdentifierListContext; - public identifierList(i?: number): IdentifierListContext | IdentifierListContext[] { - if (i === undefined) { - return this.getRuleContexts(IdentifierListContext); - } else { - return this.getRuleContext(i, IdentifierListContext); + private valueExpression_sempred(_localctx: ValueExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 8: + return this.precpred(this._ctx, 6); + + case 9: + return this.precpred(this._ctx, 5); + + case 10: + return this.precpred(this._ctx, 4); + + case 11: + return this.precpred(this._ctx, 3); + + case 12: + return this.precpred(this._ctx, 2); + + case 13: + return this.precpred(this._ctx, 1); } + return true; } - public TBLPROPERTIES(): TerminalNode[]; - public TBLPROPERTIES(i: number): TerminalNode; - public TBLPROPERTIES(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.TBLPROPERTIES); - } else { - return this.getToken(SparkSqlParser.TBLPROPERTIES, i); + private primaryExpression_sempred(_localctx: PrimaryExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 14: + return this.precpred(this._ctx, 9); + + case 15: + return this.precpred(this._ctx, 7); } + return true; } - public tablePropertyList(): TablePropertyListContext[]; - public tablePropertyList(i: number): TablePropertyListContext; - public tablePropertyList(i?: number): TablePropertyListContext | TablePropertyListContext[] { - if (i === undefined) { - return this.getRuleContexts(TablePropertyListContext); - } else { - return this.getRuleContext(i, TablePropertyListContext); + private identifier_sempred(_localctx: IdentifierContext, predIndex: number): boolean { + switch (predIndex) { + case 16: + return !this.SQL_standard_keyword_behavior; } + return true; } - public GLOBAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GLOBAL, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateView) { - listener.enterCreateView(this); + private strictIdentifier_sempred(_localctx: StrictIdentifierContext, predIndex: number): boolean { + switch (predIndex) { + case 17: + return this.SQL_standard_keyword_behavior; + + case 18: + return !this.SQL_standard_keyword_behavior; } + return true; } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateView) { - listener.exitCreateView(this); + private quotedIdentifier_sempred(_localctx: QuotedIdentifierContext, predIndex: number): boolean { + switch (predIndex) { + case 19: + return this.double_quoted_identifiers; } + return true; } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateView) { - return visitor.visitCreateView(this); - } else { - return visitor.visitChildren(this); + private number_sempred(_localctx: NumberContext, predIndex: number): boolean { + switch (predIndex) { + case 20: + return !this.legacy_exponent_literal_as_decimal_enabled; + + case 21: + return !this.legacy_exponent_literal_as_decimal_enabled; + + case 22: + return this.legacy_exponent_literal_as_decimal_enabled; } + return true; } -} -export class CreateTempViewUsingContext extends StatementContext { - public CREATE(): TerminalNode { return this.getToken(SparkSqlParser.CREATE, 0); } - public TEMPORARY(): TerminalNode { return this.getToken(SparkSqlParser.TEMPORARY, 0); } - public VIEW(): TerminalNode { return this.getToken(SparkSqlParser.VIEW, 0); } - public tableIdentifier(): TableIdentifierContext { - return this.getRuleContext(0, TableIdentifierContext); - } - public tableProvider(): TableProviderContext { - return this.getRuleContext(0, TableProviderContext); - } - public OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OR, 0); } - public REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REPLACE, 0); } - public GLOBAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GLOBAL, 0); } - public colTypeList(): ColTypeListContext | undefined { - return this.tryGetRuleContext(0, ColTypeListContext); - } - public OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OPTIONS, 0); } - public tablePropertyList(): TablePropertyListContext | undefined { - return this.tryGetRuleContext(0, TablePropertyListContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateTempViewUsing) { - listener.enterCreateTempViewUsing(this); + private stringLit_sempred(_localctx: StringLitContext, predIndex: number): boolean { + switch (predIndex) { + case 23: + return !this.double_quoted_identifiers; } + return true; } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateTempViewUsing) { - listener.exitCreateTempViewUsing(this); + + private static readonly _serializedATNSegments: number = 8; + private static readonly _serializedATNSegment0: string = + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03\u0180\u0EE9\x04" + + "\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04" + + "\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r" + + "\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12" + + "\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17" + + "\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t\x1C" + + "\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t\"\x04" + + "#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04+\t" + + "+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" + + "4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x04<\t<\x04" + + "=\t=\x04>\t>\x04?\t?\x04@\t@\x04A\tA\x04B\tB\x04C\tC\x04D\tD\x04E\tE\x04" + + "F\tF\x04G\tG\x04H\tH\x04I\tI\x04J\tJ\x04K\tK\x04L\tL\x04M\tM\x04N\tN\x04" + + "O\tO\x04P\tP\x04Q\tQ\x04R\tR\x04S\tS\x04T\tT\x04U\tU\x04V\tV\x04W\tW\x04" + + "X\tX\x04Y\tY\x04Z\tZ\x04[\t[\x04\\\t\\\x04]\t]\x04^\t^\x04_\t_\x04`\t" + + "`\x04a\ta\x04b\tb\x04c\tc\x04d\td\x04e\te\x04f\tf\x04g\tg\x04h\th\x04" + + "i\ti\x04j\tj\x04k\tk\x04l\tl\x04m\tm\x04n\tn\x04o\to\x04p\tp\x04q\tq\x04" + + "r\tr\x04s\ts\x04t\tt\x04u\tu\x04v\tv\x04w\tw\x04x\tx\x04y\ty\x04z\tz\x04" + + "{\t{\x04|\t|\x04}\t}\x04~\t~\x04\x7F\t\x7F\x04\x80\t\x80\x04\x81\t\x81" + + "\x04\x82\t\x82\x04\x83\t\x83\x04\x84\t\x84\x04\x85\t\x85\x04\x86\t\x86" + + "\x04\x87\t\x87\x04\x88\t\x88\x04\x89\t\x89\x04\x8A\t\x8A\x04\x8B\t\x8B" + + "\x04\x8C\t\x8C\x04\x8D\t\x8D\x04\x8E\t\x8E\x04\x8F\t\x8F\x04\x90\t\x90" + + "\x04\x91\t\x91\x04\x92\t\x92\x04\x93\t\x93\x04\x94\t\x94\x04\x95\t\x95" + + "\x04\x96\t\x96\x04\x97\t\x97\x04\x98\t\x98\x04\x99\t\x99\x04\x9A\t\x9A" + + "\x04\x9B\t\x9B\x04\x9C\t\x9C\x04\x9D\t\x9D\x04\x9E\t\x9E\x04\x9F\t\x9F" + + "\x04\xA0\t\xA0\x04\xA1\t\xA1\x04\xA2\t\xA2\x04\xA3\t\xA3\x04\xA4\t\xA4" + + "\x04\xA5\t\xA5\x04\xA6\t\xA6\x04\xA7\t\xA7\x04\xA8\t\xA8\x04\xA9\t\xA9" + + "\x04\xAA\t\xAA\x04\xAB\t\xAB\x04\xAC\t\xAC\x04\xAD\t\xAD\x04\xAE\t\xAE" + + "\x04\xAF\t\xAF\x04\xB0\t\xB0\x04\xB1\t\xB1\x04\xB2\t\xB2\x04\xB3\t\xB3" + + "\x04\xB4\t\xB4\x04\xB5\t\xB5\x04\xB6\t\xB6\x04\xB7\t\xB7\x04\xB8\t\xB8" + + "\x04\xB9\t\xB9\x04\xBA\t\xBA\x04\xBB\t\xBB\x04\xBC\t\xBC\x03\x02\x07\x02" + + "\u017A\n\x02\f\x02\x0E\x02\u017D\v\x02\x03\x02\x03\x02\x03\x03\x03\x03" + + "\x05\x03\u0183\n\x03\x03\x04\x03\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03" + + "\x07\x03\x07\x03\b\x03\b\x05\b\u018F\n\b\x03\b\x03\b\x03\b\x03\b\x03\b" + + "\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u019C\n\b\x03\b\x03\b\x03\b" + + "\x03\b\x03\b\x05\b\u01A3\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x07\b" + + "\u01AB\n\b\f\b\x0E\b\u01AE\v\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u01C1" + + "\n\b\x03\b\x03\b\x05\b\u01C5\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u01CB\n" + + "\b\x03\b\x05\b\u01CE\n\b\x03\b\x05\b\u01D1\n\b\x03\b\x03\b\x03\b\x03\b" + + "\x03\b\x05\b\u01D8\n\b\x03\b\x05\b\u01DB\n\b\x03\b\x03\b\x05\b\u01DF\n" + + "\b\x03\b\x05\b\u01E2\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u01E9\n\b" + + "\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x07\b\u01F4\n\b" + + "\f\b\x0E\b\u01F7\v\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u01FE\n\b\x03" + + "\b\x05\b\u0201\n\b\x03\b\x03\b\x05\b\u0205\n\b\x03\b\x05\b\u0208\n\b\x03" + + "\b\x03\b\x03\b\x03\b\x05\b\u020E\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x05\b\u0219\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u021F" + + "\n\b\x03\b\x03\b\x03\b\x05\b\u0224\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x05\b\u0246\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0253\n\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x05\b\u025B\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x05\b\u0265\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05" + + "\b\u026F\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0275\n\b\x03\b\x03\b\x03\b" + + "\x03\b\x03\b\x03\b\x03\b\x05\b\u027E\n\b\x03\b\x03\b\x05\b\u0282\n\b\x03" + + "\b\x03\b\x03\b\x03\b\x05\b\u0288\n\b\x03\b\x03\b\x05\b\u028C\n\b\x03\b" + + "\x03\b\x03\b\x05\b\u0291\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0297\n\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u02A3\n" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u02AB\n\b\x03\b\x03\b\x03" + + "\b\x03\b\x05\b\u02B1\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x05\b\u02BB\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u02C1\n\b\x03\b\x06\b" + + "\u02C4\n\b\r\b\x0E\b\u02C5\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x05\b\u02D4\n\b\x03\b\x03\b\x03\b\x05\b\u02D9" + + "\n\b\x03\b\x03\b\x03\b\x07\b\u02DE\n\b\f\b\x0E\b\u02E1\v\b\x03\b\x05\b" + + "\u02E4\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u02EA\n\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u02F9\n" + + "\b\x03\b\x03\b\x05\b\u02FD\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0303\n\b" + + "\x03\b\x03\b\x03\b\x03\b\x05\b\u0309\n\b\x03\b\x05\b\u030C\n\b\x03\b\x05" + + "\b\u030F\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0315\n\b\x03\b\x03\b\x05\b" + + "\u0319\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x07\b\u0321\n\b\f\b\x0E" + + "\b\u0324\v\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u032C\n\b\x03\b" + + "\x05\b\u032F\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0338" + + "\n\b\x03\b\x03\b\x03\b\x05\b\u033D\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0343" + + "\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u034A\n\b\x03\b\x05\b\u034D\n" + + "\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0353\n\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x07\b\u035C\n\b\f\b\x0E\b\u035F\v\b\x05\b\u0361\n\b\x03" + + "\b\x03\b\x05\b\u0365\n\b\x03\b\x03\b\x03\b\x05\b\u036A\n\b\x03\b\x03\b" + + "\x03\b\x03\b\x05\b\u0370\n\b\x03\b\x05\b\u0373\n\b\x03\b\x03\b\x05\b\u0377" + + "\n\b\x03\b\x05\b\u037A\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0381\n" + + "\b\x03\b\x03\b\x03\b\x05\b\u0386\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05" + + "\b\u038D\n\b\x03\b\x05\b\u0390\n\b\x03\b\x05\b\u0393\n\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x05\b\u039A\n\b\x03\b\x03\b\x03\b\x05\b\u039F\n\b\x03\b" + + "\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u03A8\n\b\x03\b\x03\b\x03\b" + + "\x03\b\x03\b\x03\b\x05\b\u03B0\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u03B6" + + "\n\b\x03\b\x05\b\u03B9\n\b\x03\b\x05\b\u03BC\n\b\x03\b\x03\b\x03\b\x03" + + "\b\x05\b\u03C2\n\b\x03\b\x03\b\x05\b\u03C6\n\b\x03\b\x03\b\x03\b\x05\b" + + "\u03CB\n\b\x03\b\x05\b\u03CE\n\b\x03\b\x03\b\x05\b\u03D2\n\b\x05\b\u03D4" + + "\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u03DC\n\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x05\b\u03E4\n\b\x03\b\x05\b\u03E7\n\b\x03\b\x03\b" + + "\x03\b\x05\b\u03EC\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u03F2\n\b\x03\b\x03" + + "\b\x03\b\x03\b\x05\b\u03F8\n\b\x03\b\x05\b\u03FB\n\b\x03\b\x03\b\x05\b" + + "\u03FF\n\b\x03\b\x05\b\u0402\n\b\x03\b\x03\b\x05\b\u0406\n\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x07\b\u0420" + + "\n\b\f\b\x0E\b\u0423\v\b\x05\b\u0425\n\b\x03\b\x03\b\x05\b\u0429\n\b\x03" + + "\b\x03\b\x03\b\x03\b\x05\b\u042F\n\b\x03\b\x05\b\u0432\n\b\x03\b\x05\b" + + "\u0435\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u043B\n\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x05\b\u0443\n\b\x03\b\x03\b\x03\b\x05\b\u0448\n\b\x03\b" + + "\x03\b\x03\b\x03\b\x05\b\u044E\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u0454" + + "\n\b\x03\b\x05\b\u0457\n\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u045E\n" + + "\b\x03\b\x03\b\x03\b\x07\b\u0463\n\b\f\b\x0E\b\u0466\v\b\x03\b\x03\b\x03" + + "\b\x07\b\u046B\n\b\f\b\x0E\b\u046E\v\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x07\b\u047C\n\b\f\b\x0E\b\u047F" + + "\v\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b" + + "\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x07" + + "\b\u0497\n\b\f\b\x0E\b\u049A\v\b\x05\b\u049C\n\b\x03\b\x03\b\x07\b\u04A0" + + "\n\b\f\b\x0E\b\u04A3\v\b\x03\b\x03\b\x03\b\x03\b\x07\b\u04A9\n\b\f\b\x0E" + + "\b\u04AC\v\b\x03\b\x03\b\x03\b\x03\b\x07\b\u04B2\n\b\f\b\x0E\b\u04B5\v" + + "\b\x03\b\x03\b\x03\b\x03\b\x03\b\x05\b\u04BC\n\b\x03\b\x03\b\x03\b\x05" + + "\b\u04C1\n\b\x03\b\x03\b\x03\b\x05\b\u04C6\n\b\x03\b\x03\b\x03\b\x03\b" + + "\x03\b\x05\b\u04CD\n\b\x03\b\x03\b\x03\b\x03\b\x05\b\u04D3\n\b\x03\b\x03" + + "\b\x03\b\x05\b\u04D8\n\b\x03\b\x03\b\x03\b\x03\b\x07\b\u04DE\n\b\f\b\x0E" + + "\b\u04E1\v\b\x05\b\u04E3\n\b\x03\t\x03\t\x05\t\u04E7\n\t\x03\n\x03\n\x03" + + "\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u04F3\n\f\x03\f\x03" + + "\f\x05\f\u04F7\n\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u04FE\n\f\x03\f" + + "\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u0572\n\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x05\f\u057A\n\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05" + + "\f\u0582\n\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u058B\n\f" + + "\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x03\f\x05\f\u0595\n\f\x03\r" + + "\x03\r\x05\r\u0599\n\r\x03\r\x05\r\u059C\n\r\x03\r\x03\r\x03\r\x03\r\x05" + + "\r\u05A2\n\r\x03\r\x03\r\x03\x0E\x03\x0E\x05\x0E\u05A8\n\x0E\x03\x0E\x03" + + "\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x05" + + "\x0F\u05B4\n\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10" + + "\x03\x10\x03\x10\x03\x10\x05\x10\u05C0\n\x10\x03\x10\x03\x10\x03\x10\x05" + + "\x10\u05C5\n\x10\x03\x11\x03\x11\x03\x11\x03\x12\x03\x12\x03\x12\x03\x13" + + "\x05\x13\u05CE\n\x13\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x05" + + "\x14\u05D6\n\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x05\x14\u05DD" + + "\n\x14\x05\x14\u05DF\n\x14\x03\x14\x03\x14\x03\x14\x05\x14\u05E4\n\x14" + + "\x03\x14\x03\x14\x03\x14\x05\x14\u05E9\n\x14\x03\x14\x03\x14\x05\x14\u05ED" + + "\n\x14\x03\x14\x03\x14\x03\x14\x05\x14\u05F2\n\x14\x03\x14\x03\x14\x03" + + "\x14\x05\x14\u05F7\n\x14\x03\x14\x03\x14\x03\x14\x05\x14\u05FC\n\x14\x03" + + "\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x03\x14\x05\x14\u0605\n\x14" + + "\x03\x14\x03\x14\x03\x14\x05\x14\u060A\n\x14\x03\x14\x05\x14\u060D\n\x14" + + "\x03\x14\x03\x14\x03\x14\x05\x14\u0612\n\x14\x03\x14\x03\x14\x05\x14\u0616" + + "\n\x14\x03\x14\x03\x14\x03\x14\x05\x14\u061B\n\x14\x05\x14\u061D\n\x14" + + "\x03\x15\x03\x15\x05\x15\u0621\n\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03" + + "\x16\x07\x16\u0628\n\x16\f\x16\x0E\x16\u062B\v\x16\x03\x16\x03\x16\x03" + + "\x17\x03\x17\x03\x17\x05\x17\u0632\n\x17\x03\x17\x03\x17\x03\x17\x03\x17" + + "\x05\x17\u0638\n\x17\x03\x18\x03\x18\x03\x19\x03\x19\x03\x1A\x03\x1A\x03" + + "\x1A\x03\x1A\x03\x1A\x05\x1A\u0643\n\x1A\x03\x1B\x03\x1B\x03\x1B\x07\x1B" + + "\u0648\n\x1B\f\x1B\x0E\x1B\u064B\v\x1B\x03\x1C\x03\x1C\x03\x1C\x03\x1C" + + "\x07\x1C\u0651\n\x1C\f\x1C\x0E\x1C\u0654\v\x1C\x03\x1D\x03\x1D\x05\x1D" + + "\u0658\n\x1D\x03\x1D\x05\x1D\u065B\n\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1D" + + "\x03\x1E\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F" + + "\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x03\x1F\x07\x1F\u0671" + + "\n\x1F\f\x1F\x0E\x1F\u0674\v\x1F\x03 \x03 \x03 \x03 \x07 \u067A\n \f " + + "\x0E \u067D\v \x03 \x03 \x03!\x03!\x05!\u0683\n!\x03!\x05!\u0686\n!\x03" + + "\"\x03\"\x03\"\x07\"\u068B\n\"\f\"\x0E\"\u068E\v\"\x03\"\x05\"\u0691\n" + + "\"\x03#\x03#\x03#\x03#\x05#\u0697\n#\x03$\x03$\x03$\x03$\x07$\u069D\n" + + "$\f$\x0E$\u06A0\v$\x03$\x03$\x03%\x03%\x05%\u06A6\n%\x03%\x05%\u06A9\n" + + "%\x03&\x03&\x03&\x03&\x07&\u06AF\n&\f&\x0E&\u06B2\v&\x03&\x03&\x03\'\x03" + + "\'\x03\'\x03\'\x07\'\u06BA\n\'\f\'\x0E\'\u06BD\v\'\x03\'\x03\'\x03(\x03" + + "(\x03(\x03(\x03(\x03(\x05(\u06C7\n(\x03)\x03)\x03)\x03)\x03)\x03)\x05" + + ")\u06CF\n)\x03*\x03*\x03*\x03*\x05*\u06D5\n*\x03+\x03+\x03+\x03,\x03," + + "\x03,\x03,\x03,\x06,\u06DF\n,\r,\x0E,\u06E0\x03,\x03,\x03,\x03,\x03,\x05" + + ",\u06E8\n,\x03,\x03,\x03,\x03,\x03,\x05,\u06EF\n,\x03,\x03,\x03,\x03," + + "\x03,\x03,\x03,\x03,\x03,\x03,\x05,\u06FB\n,\x03,\x03,\x03,\x03,\x07," + + "\u0701\n,\f,\x0E,\u0704\v,\x03,\x07,\u0707\n,\f,\x0E,\u070A\v,\x03,\x07" + + ",\u070D\n,\f,\x0E,\u0710\v,\x05,\u0712\n,\x03-\x03-\x03-\x03-\x03-\x03" + + "-\x05-\u071A\n-\x03.\x03.\x03.\x03.\x03.\x07.\u0721\n.\f.\x0E.\u0724\v" + + ".\x05.\u0726\n.\x03.\x03.\x03.\x03.\x03.\x07.\u072D\n.\f.\x0E.\u0730\v" + + ".\x05.\u0732\n.\x03.\x03.\x03.\x03.\x03.\x07.\u0739\n.\f.\x0E.\u073C\v" + + ".\x05.\u073E\n.\x03.\x03.\x03.\x03.\x03.\x07.\u0745\n.\f.\x0E.\u0748\v" + + ".\x05.\u074A\n.\x03.\x05.\u074D\n.\x03.\x03.\x03.\x05.\u0752\n.\x05.\u0754" + + "\n.\x03.\x03.\x05.\u0758\n.\x03/\x03/\x03/\x030\x030\x030\x030\x030\x03" + + "0\x030\x050\u0764\n0\x030\x030\x030\x030\x030\x050\u076B\n0\x030\x030" + + "\x030\x030\x030\x050\u0772\n0\x030\x070\u0775\n0\f0\x0E0\u0778\v0\x03" + + "1\x031\x031\x031\x031\x031\x031\x031\x031\x051\u0783\n1\x032\x032\x05" + + "2\u0787\n2\x032\x032\x052\u078B\n2\x033\x033\x063\u078F\n3\r3\x0E3\u0790" + + "\x034\x034\x054\u0795\n4\x034\x034\x034\x034\x074\u079B\n4\f4\x0E4\u079E" + + "\v4\x034\x054\u07A1\n4\x034\x054\u07A4\n4\x034\x054\u07A7\n4\x034\x05" + + "4\u07AA\n4\x034\x034\x054\u07AE\n4\x035\x035\x055\u07B2\n5\x035\x075\u07B5" + + "\n5\f5\x0E5\u07B8\v5\x035\x055\u07BB\n5\x035\x055\u07BE\n5\x035\x055\u07C1" + + "\n5\x035\x055\u07C4\n5\x035\x035\x055\u07C8\n5\x035\x075\u07CB\n5\f5\x0E" + + "5\u07CE\v5\x035\x055\u07D1\n5\x035\x055\u07D4\n5\x035\x055\u07D7\n5\x03" + + "5\x055\u07DA\n5\x055\u07DC\n5\x036\x036\x036\x036\x056\u07E2\n6\x036\x03" + + "6\x036\x036\x036\x056\u07E9\n6\x036\x036\x036\x056\u07EE\n6\x036\x056" + + "\u07F1\n6\x036\x056\u07F4\n6\x036\x036\x056\u07F8\n6\x036\x036\x036\x03" + + "6\x036\x036\x036\x036\x056\u0802\n6\x036\x036\x056\u0806\n6\x056\u0808" + + "\n6\x036\x056\u080B\n6\x036\x036\x056\u080F\n6\x037\x037\x077\u0813\n" + + "7\f7\x0E7\u0816\v7\x037\x057\u0819\n7\x037\x037\x038\x038\x038\x039\x03" + + "9\x039\x039\x059\u0824\n9\x039\x039\x039\x03:\x03:\x03:\x03:\x03:\x05" + + ":\u082E\n:\x03:\x03:\x05:\u0832\n:\x03:\x03:\x03:\x03;\x03;\x03;\x03;" + + "\x03;\x03;\x03;\x05;\u083E\n;\x03;\x03;\x03;\x03<\x03<\x03<\x03<\x03<" + + "\x03<\x03<\x05<\u084A\n<\x03=\x03=\x03=\x03=\x03=\x03=\x03=\x03=\x03=" + + "\x03=\x03=\x07=\u0857\n=\f=\x0E=\u085A\v=\x03=\x03=\x05=\u085E\n=\x03" + + ">\x03>\x03>\x03>\x05>\u0864\n>\x03?\x03?\x03?\x07?\u0869\n?\f?\x0E?\u086C" + + "\v?\x03@\x03@\x03@\x03@\x03A\x03A\x03A\x03B\x03B\x03B\x03C\x03C\x03C\x05" + + "C\u087B\nC\x03C\x07C\u087E\nC\fC\x0EC\u0881\vC\x03C\x03C\x03D\x03D\x03" + + "D\x03D\x03D\x03D\x07D\u088B\nD\fD\x0ED\u088E\vD\x03D\x03D\x05D\u0892\n" + + "D\x03E\x03E\x03E\x03E\x07E\u0898\nE\fE\x0EE\u089B\vE\x03E\x07E\u089E\n" + + "E\fE\x0EE\u08A1\vE\x03E\x05E\u08A4\nE\x03E\x05E\u08A7\nE\x03F\x05F\u08AA" + + "\nF\x03F\x03F\x03F\x03F\x03F\x05F\u08B1\nF\x03F\x03F\x03F\x03F\x05F\u08B7" + + "\nF\x03G\x03G\x03G\x03G\x03G\x07G\u08BE\nG\fG\x0EG\u08C1\vG\x03G\x03G" + + "\x03G\x03G\x03G\x07G\u08C8\nG\fG\x0EG\u08CB\vG\x03G\x03G\x03G\x03G\x03" + + "G\x03G\x03G\x03G\x03G\x03G\x07G\u08D7\nG\fG\x0EG\u08DA\vG\x03G\x03G\x05" + + "G\u08DE\nG\x05G\u08E0\nG\x03H\x03H\x05H\u08E4\nH\x03I\x03I\x03I\x03I\x03" + + "I\x07I\u08EB\nI\fI\x0EI\u08EE\vI\x03I\x03I\x03I\x03I\x03I\x03I\x03I\x03" + + "I\x07I\u08F8\nI\fI\x0EI\u08FB\vI\x03I\x03I\x05I\u08FF\nI\x03J\x03J\x05" + + "J\u0903\nJ\x03K\x03K\x03K\x03K\x07K\u0909\nK\fK\x0EK\u090C\vK\x05K\u090E" + + "\nK\x03K\x03K\x05K\u0912\nK\x03L\x03L\x03L\x03L\x03L\x03L\x03"; + private static readonly _serializedATNSegment1: string = + "L\x03L\x03L\x03L\x07L\u091E\nL\fL\x0EL\u0921\vL\x03L\x03L\x03L\x03M\x03" + + "M\x03M\x03M\x03M\x07M\u092B\nM\fM\x0EM\u092E\vM\x03M\x03M\x05M\u0932\n" + + "M\x03N\x03N\x05N\u0936\nN\x03N\x05N\u0939\nN\x03O\x03O\x05O\u093D\nO\x03" + + "O\x03O\x03O\x03O\x05O\u0943\nO\x03O\x05O\u0946\nO\x03P\x03P\x03P\x03Q" + + "\x03Q\x05Q\u094D\nQ\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x03R\x07R\u0957" + + "\nR\fR\x0ER\u095A\vR\x03R\x03R\x03S\x03S\x03S\x03S\x07S\u0962\nS\fS\x0E" + + "S\u0965\vS\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x03S\x07S\u096F\nS\fS\x0E" + + "S\u0972\vS\x03S\x03S\x03T\x03T\x03T\x03T\x07T\u097A\nT\fT\x0ET\u097D\v" + + "T\x03T\x03T\x05T\u0981\nT\x03U\x03U\x03V\x03V\x03W\x03W\x05W\u0989\nW" + + "\x03X\x03X\x03Y\x05Y\u098E\nY\x03Y\x03Y\x03Z\x03Z\x03Z\x05Z\u0995\nZ\x03" + + "Z\x03Z\x03Z\x03Z\x03Z\x07Z\u099C\nZ\fZ\x0EZ\u099F\vZ\x05Z\u09A1\nZ\x03" + + "Z\x03Z\x03Z\x05Z\u09A6\nZ\x03Z\x03Z\x03Z\x07Z\u09AB\nZ\fZ\x0EZ\u09AE\v" + + "Z\x05Z\u09B0\nZ\x03[\x03[\x03\\\x05\\\u09B5\n\\\x03\\\x03\\\x07\\\u09B9" + + "\n\\\f\\\x0E\\\u09BC\v\\\x03]\x03]\x03]\x05]\u09C1\n]\x03^\x03^\x03^\x05" + + "^\u09C6\n^\x03^\x03^\x05^\u09CA\n^\x03^\x03^\x03^\x03^\x05^\u09D0\n^\x03" + + "^\x03^\x05^\u09D4\n^\x03_\x05_\u09D7\n_\x03_\x03_\x03_\x05_\u09DC\n_\x03" + + "_\x05_\u09DF\n_\x03_\x03_\x03_\x05_\u09E4\n_\x03_\x03_\x05_\u09E8\n_\x03" + + "_\x05_\u09EB\n_\x03_\x05_\u09EE\n_\x03`\x03`\x03`\x03`\x05`\u09F4\n`\x03" + + "a\x03a\x03a\x05a\u09F9\na\x03a\x03a\x03a\x03a\x03a\x05a\u0A00\na\x03b" + + "\x05b\u0A03\nb\x03b\x03b\x03b\x03b\x03b\x03b\x03b\x03b\x03b\x03b\x03b" + + "\x03b\x03b\x03b\x03b\x03b\x05b\u0A15\nb\x05b\u0A17\nb\x03b\x05b\u0A1A" + + "\nb\x03c\x03c\x03c\x03c\x03d\x03d\x03d\x07d\u0A23\nd\fd\x0Ed\u0A26\vd" + + "\x03e\x03e\x03e\x03e\x07e\u0A2C\ne\fe\x0Ee\u0A2F\ve\x03e\x03e\x03f\x03" + + "f\x05f\u0A35\nf\x03g\x03g\x03g\x03g\x07g\u0A3B\ng\fg\x0Eg\u0A3E\vg\x03" + + "g\x03g\x03h\x03h\x05h\u0A44\nh\x03i\x03i\x05i\u0A48\ni\x03i\x05i\u0A4B" + + "\ni\x03i\x03i\x03i\x03i\x03i\x03i\x05i\u0A53\ni\x03i\x03i\x03i\x03i\x03" + + "i\x03i\x05i\u0A5B\ni\x03i\x03i\x03i\x03i\x05i\u0A61\ni\x03j\x03j\x03j" + + "\x03j\x07j\u0A67\nj\fj\x0Ej\u0A6A\vj\x03j\x03j\x03k\x03k\x03k\x05k\u0A71" + + "\nk\x03k\x03k\x03k\x03k\x03k\x05k\u0A78\nk\x03k\x03k\x03k\x03k\x03k\x05" + + "k\u0A7F\nk\x05k\u0A81\nk\x03l\x03l\x03l\x03l\x03l\x03l\x03l\x03l\x03l" + + "\x07l\u0A8C\nl\fl\x0El\u0A8F\vl\x03l\x03l\x03l\x05l\u0A94\nl\x05l\u0A96" + + "\nl\x03l\x03l\x03l\x03l\x03l\x03l\x07l\u0A9E\nl\fl\x0El\u0AA1\vl\x03l" + + "\x03l\x03l\x05l\u0AA6\nl\x05l\u0AA8\nl\x03m\x03m\x03m\x03m\x03n\x03n\x05" + + "n\u0AB0\nn\x03o\x03o\x05o\u0AB4\no\x03p\x03p\x03p\x03p\x03p\x07p\u0ABB" + + "\np\fp\x0Ep\u0ABE\vp\x05p\u0AC0\np\x03p\x03p\x03p\x03q\x05q\u0AC6\nq\x03" + + "q\x03q\x05q\u0ACA\nq\x05q\u0ACC\nq\x03r\x03r\x03r\x03r\x03r\x03r\x03r" + + "\x05r\u0AD5\nr\x03r\x03r\x03r\x03r\x03r\x03r\x03r\x03r\x03r\x03r\x05r" + + "\u0AE1\nr\x05r\u0AE3\nr\x03r\x03r\x03r\x03r\x03r\x05r\u0AEA\nr\x03r\x03" + + "r\x03r\x03r\x03r\x05r\u0AF1\nr\x03r\x03r\x03r\x03r\x05r\u0AF7\nr\x03r" + + "\x03r\x03r\x03r\x05r\u0AFD\nr\x05r\u0AFF\nr\x03s\x03s\x03s\x07s\u0B04" + + "\ns\fs\x0Es\u0B07\vs\x03t\x03t\x03t\x07t\u0B0C\nt\ft\x0Et\u0B0F\vt\x03" + + "u\x03u\x03u\x07u\u0B14\nu\fu\x0Eu\u0B17\vu\x03v\x03v\x03v\x05v\u0B1C\n" + + "v\x03w\x03w\x03w\x05w\u0B21\nw\x03w\x03w\x03x\x03x\x03x\x05x\u0B28\nx" + + "\x03x\x03x\x03y\x03y\x05y\u0B2E\ny\x03y\x03y\x05y\u0B32\ny\x05y\u0B34" + + "\ny\x03z\x03z\x03z\x07z\u0B39\nz\fz\x0Ez\u0B3C\vz\x03{\x03{\x03{\x03{" + + "\x07{\u0B42\n{\f{\x0E{\u0B45\v{\x03{\x03{\x03|\x03|\x05|\u0B4B\n|\x03" + + "}\x03}\x03}\x03}\x03}\x03}\x07}\u0B53\n}\f}\x0E}\u0B56\v}\x03}\x03}\x05" + + "}\u0B5A\n}\x03~\x03~\x05~\u0B5E\n~\x03\x7F\x03\x7F\x03\x80\x03\x80\x03" + + "\x80\x03\x80\x03\x81\x03\x81\x05\x81\u0B68\n\x81\x03\x82\x03\x82\x03\x82" + + "\x07\x82\u0B6D\n\x82\f\x82\x0E\x82\u0B70\v\x82\x03\x83\x03\x83\x03\x83" + + "\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x05\x83\u0B7C" + + "\n\x83\x05\x83\u0B7E\n\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03\x83\x03" + + "\x83\x07\x83\u0B86\n\x83\f\x83\x0E\x83\u0B89\v\x83\x03\x84\x05\x84\u0B8C" + + "\n\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x05\x84\u0B94\n" + + "\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x07\x84\u0B9B\n\x84\f\x84" + + "\x0E\x84\u0B9E\v\x84\x03\x84\x03\x84\x03\x84\x05\x84\u0BA3\n\x84\x03\x84" + + "\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84\x05\x84\u0BAB\n\x84\x03\x84\x03" + + "\x84\x03\x84\x05\x84\u0BB0\n\x84\x03\x84\x03\x84\x03\x84\x03\x84\x03\x84" + + "\x03\x84\x03\x84\x03\x84\x07\x84\u0BBA\n\x84\f\x84\x0E\x84\u0BBD\v\x84" + + "\x03\x84\x03\x84\x05\x84\u0BC1\n\x84\x03\x84\x05\x84\u0BC4\n\x84\x03\x84" + + "\x03\x84\x03\x84\x03\x84\x05\x84\u0BCA\n\x84\x03\x84\x03\x84\x05\x84\u0BCE" + + "\n\x84\x03\x84\x03\x84\x03\x84\x05\x84\u0BD3\n\x84\x03\x84\x03\x84\x03" + + "\x84\x05\x84\u0BD8\n\x84\x03\x84\x03\x84\x03\x84\x05\x84\u0BDD\n\x84\x03" + + "\x85\x03\x85\x03\x85\x03\x85\x05\x85\u0BE3\n\x85\x03\x85\x03\x85\x03\x85" + + "\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85" + + "\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x03\x85\x07\x85\u0BF8" + + "\n\x85\f\x85\x0E\x85\u0BFB\v\x85\x03\x86\x03\x86\x03\x87\x03\x87\x03\x87" + + "\x03\x87\x03\x87\x03\x87\x05\x87\u0C05\n\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87\u0C11\n\x87" + + "\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x06\x87" + + "\u0C1B\n\x87\r\x87\x0E\x87\u0C1C\x03\x87\x03\x87\x05\x87\u0C21\n\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x06\x87\u0C28\n\x87\r\x87\x0E\x87" + + "\u0C29\x03\x87\x03\x87\x05\x87\u0C2E\n\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x07\x87\u0C3E\n\x87\f\x87\x0E\x87\u0C41\v\x87\x05\x87\u0C43" + + "\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87\u0C4B\n" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87\u0C54" + + "\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87" + + "\u0C5D\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x06\x87\u0C72\n\x87\r\x87\x0E\x87\u0C73\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x05\x87\u0C84\n\x87\x03\x87\x03\x87\x03\x87" + + "\x07\x87\u0C89\n\x87\f\x87\x0E\x87\u0C8C\v\x87\x05\x87\u0C8E\n\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87\u0C97\n\x87" + + "\x03\x87\x03\x87\x05\x87\u0C9B\n\x87\x03\x87\x03\x87\x05\x87\u0C9F\n\x87" + + "\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x06\x87" + + "\u0CA9\n\x87\r\x87\x0E\x87\u0CAA\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87" + + "\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87" + + "\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87" + + "\x05\x87\u0CC4\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05\x87\u0CCB" + + "\n\x87\x03\x87\x05\x87\u0CCE\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x05" + + "\x87\u0CDD\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87" + + "\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87" + + "\x03\x87\x03\x87\x03\x87\x05\x87\u0CF2\n\x87\x03\x87\x03\x87\x05\x87\u0CF6" + + "\n\x87\x05\x87\u0CF8\n\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03\x87\x03" + + "\x87\x03\x87\x03\x87\x07\x87\u0D02\n\x87\f\x87\x0E\x87\u0D05\v\x87\x03" + + "\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x03\x88\x05\x88\u0D0E\n\x88" + + "\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89\x03\x89" + + "\x03\x89\x03\x89\x06\x89\u0D1B\n\x89\r\x89\x0E\x89\u0D1C\x05\x89\u0D1F" + + "\n\x89\x03\x8A\x03\x8A\x03\x8B\x03\x8B\x03\x8C\x03\x8C\x03\x8D\x03\x8D" + + "\x03\x8E\x03\x8E\x03\x8E\x05\x8E\u0D2C\n\x8E\x03\x8F\x03\x8F\x05\x8F\u0D30" + + "\n\x8F\x03\x90\x03\x90\x03\x90\x06\x90\u0D35\n\x90\r\x90\x0E\x90\u0D36" + + "\x03\x91\x03\x91\x03\x91\x05\x91\u0D3C\n\x91\x03\x92\x03\x92\x03\x92\x03" + + "\x92\x03\x92\x03\x93\x05\x93\u0D44\n\x93\x03\x93\x03\x93\x03\x93\x05\x93" + + "\u0D49\n\x93\x03\x94\x03\x94\x03\x95\x03\x95\x03\x96\x03\x96\x03\x96\x05" + + "\x96\u0D52\n\x96\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97" + + "\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97" + + "\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97" + + "\x03\x97\x03\x97\x03\x97\x03\x97\x03\x97\x05\x97\u0D72\n\x97\x03\x98\x03" + + "\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03\x98\x03" + + "\x98\x03\x98\x03\x98\x03\x98\x03\x98\x05\x98\u0D83\n\x98\x03\x98\x03\x98" + + "\x05\x98\u0D87\n\x98\x03\x98\x03\x98\x03\x98\x03\x98\x05\x98\u0D8D\n\x98" + + "\x03\x98\x03\x98\x03\x98\x03\x98\x05\x98\u0D93\n\x98\x03\x98\x03\x98\x03" + + "\x98\x03\x98\x03\x98\x07\x98\u0D9A\n\x98\f\x98\x0E\x98\u0D9D\v\x98\x03" + + "\x98\x05\x98\u0DA0\n\x98\x05\x98\u0DA2\n\x98\x03\x99\x03\x99\x03\x99\x07" + + "\x99\u0DA7\n\x99\f\x99\x0E\x99\u0DAA\v\x99\x03\x9A\x03\x9A\x03\x9A\x07" + + "\x9A\u0DAF\n\x9A\f\x9A\x0E\x9A\u0DB2\v\x9A\x03\x9B\x03\x9B\x03\x9B\x03" + + "\x9B\x03\x9B\x05\x9B\u0DB9\n\x9B\x03\x9C\x03\x9C\x03\x9C\x03\x9D\x03\x9D" + + "\x03\x9D\x03\x9E\x03\x9E\x03\x9E\x07\x9E\u0DC4\n\x9E\f\x9E\x0E\x9E\u0DC7" + + "\v\x9E\x03\x9F\x03\x9F\x03\x9F\x03\x9F\x05\x9F\u0DCD\n\x9F\x03\x9F\x05" + + "\x9F\u0DD0\n\x9F\x03\xA0\x03\xA0\x03\xA0\x07\xA0\u0DD5\n\xA0\f\xA0\x0E" + + "\xA0\u0DD8\v\xA0\x03\xA1\x03\xA1\x03\xA1\x07\xA1\u0DDD\n\xA1\f\xA1\x0E" + + "\xA1\u0DE0\v\xA1\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x03\xA2\x05\xA2\u0DE7" + + "\n\xA2\x03\xA3\x03\xA3\x03\xA3\x03\xA3\x03\xA3\x03\xA3\x03\xA3\x03\xA4" + + "\x03\xA4\x03\xA4\x07\xA4\u0DF3\n\xA4\f\xA4\x0E\xA4\u0DF6\v\xA4\x03\xA5" + + "\x03\xA5\x05\xA5\u0DFA\n\xA5\x03\xA5\x03\xA5\x03\xA5\x05\xA5\u0DFF\n\xA5" + + "\x03\xA5\x05\xA5\u0E02\n\xA5\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03\xA6\x03" + + "\xA7\x03\xA7\x03\xA7\x03\xA7\x07\xA7\u0E0D\n\xA7\f\xA7\x0E\xA7\u0E10\v" + + "\xA7\x03\xA8\x03\xA8\x03\xA8\x03\xA8\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03" + + "\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x07\xA9\u0E21\n\xA9" + + "\f\xA9\x0E\xA9\u0E24\v\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x07" + + "\xA9\u0E2B\n\xA9\f\xA9\x0E\xA9\u0E2E\v\xA9\x05\xA9\u0E30\n\xA9\x03\xA9" + + "\x03\xA9\x03\xA9\x03\xA9\x03\xA9\x07\xA9\u0E37\n\xA9\f\xA9\x0E\xA9\u0E3A" + + "\v\xA9\x05\xA9\u0E3C\n\xA9\x05\xA9\u0E3E\n\xA9\x03\xA9\x05\xA9\u0E41\n" + + "\xA9\x03\xA9\x05\xA9\u0E44\n\xA9\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA" + + "\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA\x03\xAA" + + "\x03\xAA\x03\xAA\x05\xAA\u0E56\n\xAA\x03\xAB\x03\xAB\x03\xAB\x03\xAB\x03" + + "\xAB\x03\xAB\x03\xAB\x05\xAB\u0E5F\n\xAB\x03\xAC\x03\xAC\x03\xAC\x07\xAC" + + "\u0E64\n\xAC\f\xAC\x0E\xAC\u0E67\v\xAC\x03\xAD\x03\xAD\x03\xAD\x03\xAD" + + "\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x03\xAD\x05\xAD\u0E72\n\xAD\x03\xAE\x03" + + "\xAE\x03\xAE\x07\xAE\u0E77\n\xAE\f\xAE\x0E\xAE\u0E7A\v\xAE\x03\xAF\x03" + + "\xAF\x03\xAF\x03\xB0\x03\xB0\x06\xB0\u0E81\n\xB0\r\xB0\x0E\xB0\u0E82\x03" + + "\xB0\x05\xB0\u0E86\n\xB0\x03\xB1\x03\xB1\x03\xB1\x05\xB1\u0E8B\n\xB1\x03" + + "\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x05\xB2\u0E93\n\xB2\x03\xB3" + + "\x03\xB3\x03\xB3\x05\xB3\u0E98\n\xB3\x03\xB4\x03\xB4\x03\xB5\x03\xB5\x05" + + "\xB5\u0E9E\n\xB5\x03\xB5\x03\xB5\x03\xB5\x05\xB5\u0EA3\n\xB5\x03\xB5\x03" + + "\xB5\x03\xB5\x05\xB5\u0EA8\n\xB5\x03\xB5\x03\xB5\x05\xB5\u0EAC\n\xB5\x03" + + "\xB5\x03\xB5\x05\xB5\u0EB0\n\xB5\x03\xB5\x03\xB5\x05\xB5\u0EB4\n\xB5\x03" + + "\xB5\x03\xB5\x05\xB5\u0EB8\n\xB5\x03\xB5\x03\xB5\x05\xB5\u0EBC\n\xB5\x03" + + "\xB5\x03\xB5\x05\xB5\u0EC0\n\xB5\x03\xB5\x03\xB5\x05\xB5\u0EC4\n\xB5\x03" + + "\xB5\x05\xB5\u0EC7\n\xB5\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6" + + "\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x03\xB6\x05\xB6\u0ED4\n\xB6\x03\xB7\x03" + + "\xB7\x03\xB7\x05\xB7\u0ED9\n\xB7\x03\xB8\x03\xB8\x05\xB8\u0EDD\n\xB8\x03" + + "\xB9\x03\xB9\x05\xB9\u0EE1\n\xB9\x03\xBA\x03\xBA\x03\xBB\x03\xBB\x03\xBC" + + "\x03\xBC\x03\xBC\v\u0421\u0464\u046C\u047D\u0498\u04A1\u04AA\u04B3\u04DF" + + "\x02\x06^\u0104\u0108\u010C\xBD\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f" + + "\x02\x0E\x02\x10\x02\x12\x02\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E" + + "\x02 \x02\"\x02$\x02&\x02(\x02*\x02,\x02.\x020\x022\x024\x026\x028\x02" + + ":\x02<\x02>\x02@\x02B\x02D\x02F\x02H\x02J\x02L\x02N\x02P\x02R\x02T\x02" + + "V\x02X\x02Z\x02\\\x02^\x02`\x02b\x02d\x02f\x02h\x02j\x02l\x02n\x02p\x02" + + "r\x02t\x02v\x02x\x02z\x02|\x02~\x02\x80\x02\x82\x02\x84\x02\x86\x02\x88" + + "\x02\x8A\x02\x8C\x02\x8E\x02\x90\x02\x92\x02\x94\x02\x96\x02\x98\x02\x9A" + + "\x02\x9C\x02\x9E\x02\xA0\x02\xA2\x02\xA4\x02\xA6\x02\xA8\x02\xAA\x02\xAC" + + "\x02\xAE\x02\xB0\x02\xB2\x02\xB4\x02\xB6\x02\xB8\x02\xBA\x02\xBC\x02\xBE" + + "\x02\xC0\x02\xC2\x02\xC4\x02\xC6\x02\xC8\x02\xCA\x02\xCC\x02\xCE\x02\xD0" + + "\x02\xD2\x02\xD4\x02\xD6\x02\xD8\x02\xDA\x02\xDC\x02\xDE\x02\xE0\x02\xE2" + + "\x02\xE4\x02\xE6\x02\xE8\x02\xEA\x02\xEC\x02\xEE\x02\xF0\x02\xF2\x02\xF4" + + "\x02\xF6\x02\xF8\x02\xFA\x02\xFC\x02\xFE\x02\u0100\x02\u0102\x02\u0104" + + "\x02\u0106\x02\u0108\x02\u010A\x02\u010C\x02\u010E\x02\u0110\x02\u0112" + + "\x02\u0114\x02\u0116\x02\u0118\x02\u011A\x02\u011C\x02\u011E\x02\u0120" + + "\x02\u0122\x02\u0124\x02\u0126\x02\u0128\x02\u012A\x02\u012C\x02\u012E" + + "\x02\u0130\x02\u0132\x02\u0134\x02\u0136\x02\u0138\x02\u013A\x02\u013C" + + "\x02\u013E\x02\u0140\x02\u0142\x02\u0144\x02\u0146\x02\u0148\x02\u014A" + + "\x02\u014C\x02\u014E\x02\u0150\x02\u0152\x02\u0154\x02\u0156\x02\u0158" + + "\x02\u015A\x02\u015C\x02\u015E\x02\u0160\x02\u0162\x02\u0164\x02\u0166" + + "\x02\u0168\x02\u016A\x02\u016C\x02\u016E\x02\u0170\x02\u0172\x02\u0174" + + "\x02\u0176\x02\x02>\x04\x02PP\xE1\xE1\x04\x02$$\xF3\xF3\x04\x02{{\x8C" + + "\x8C\x03\x0234\x04\x02\u011E\u011E\u014B\u014B\x04\x02\r\r))\x07\x020" + + "0<>ff||\x90\x90\x94" + + "\x94\x9B\x9B\x9E\x9E\xA1\xA1\xC0\xC0\xC8\xC8\xF5\xF5\u0102\u0102\u0108" + + "\u0108\u013C\u013C\u0145\u0145\x13\x02\n\x10\x12=?eg{}\x8F\x91\x93\x95" + + "\x9A\x9C\x9D\x9F\xA0\xA2\xBF\xC1\xC7\xC9\xF4\xF6\u0101\u0103\u0107\u0109" + + "\u013B\u013D\u0144\u0146\u0157\x02\u1135\x02\u017B\x03\x02\x02\x02\x04" + + "\u0180\x03\x02\x02\x02\x06\u0184\x03\x02\x02\x02\b\u0186\x03\x02\x02\x02" + + "\n\u0188\x03\x02\x02\x02\f\u018A\x03\x02\x02\x02\x0E\u04E2\x03\x02\x02" + + "\x02\x10\u04E6\x03\x02\x02\x02\x12\u04E8\x03\x02\x02\x02\x14\u04EA\x03" + + "\x02\x02\x02\x16\u0594\x03\x02\x02\x02\x18\u0596\x03\x02\x02\x02\x1A\u05A7" + + "\x03\x02\x02\x02\x1C\u05AD\x03\x02\x02\x02\x1E\u05B9\x03\x02\x02\x02 " + + "\u05C6\x03\x02\x02\x02\"\u05C9\x03\x02\x02\x02$\u05CD\x03\x02\x02\x02" + + "&\u061C\x03\x02\x02\x02(\u061E\x03\x02\x02\x02*\u0622\x03\x02\x02\x02" + + ",\u0637\x03\x02\x02\x02.\u0639\x03\x02\x02\x020\u063B\x03\x02\x02\x02" + + "2\u0642\x03\x02\x02\x024\u0644\x03\x02\x02\x026\u064C\x03\x02\x02\x02" + + "8\u0655\x03\x02\x02\x02:\u0660\x03\x02\x02\x02<\u0672\x03\x02\x02\x02" + + ">\u0675\x03\x02\x02\x02@\u0680\x03\x02\x02\x02B\u0690\x03\x02\x02\x02" + + "D\u0696\x03\x02\x02\x02F\u0698\x03\x02\x02\x02H\u06A3\x03\x02\x02\x02" + + "J\u06AA\x03\x02\x02\x02L\u06B5\x03\x02\x02\x02N\u06C6\x03\x02\x02\x02" + + "P\u06CE\x03\x02\x02\x02R\u06D0\x03\x02\x02\x02T\u06D6\x03\x02\x02\x02" + + "V\u0711\x03\x02\x02\x02X\u0719\x03\x02\x02\x02Z\u0725\x03\x02\x02\x02" + + "\\\u0759\x03\x02\x02\x02^\u075C\x03\x02\x02\x02`\u0782\x03\x02\x02\x02" + + "b\u0784\x03\x02\x02\x02d\u078C\x03\x02\x02\x02f\u07AD\x03\x02\x02\x02" + + "h\u07DB\x03\x02\x02\x02j\u07F0\x03\x02\x02\x02l\u0810\x03\x02\x02\x02" + + "n\u081C\x03\x02\x02\x02p\u081F\x03\x02\x02\x02r\u0828\x03\x02\x02\x02" + + "t\u0836\x03\x02\x02\x02v\u0849\x03\x02\x02\x02x\u085D\x03\x02\x02\x02" + + "z\u0863\x03\x02\x02\x02|\u0865\x03\x02\x02\x02~\u086D\x03\x02\x02\x02" + + "\x80\u0871\x03\x02\x02\x02\x82\u0874\x03\x02\x02\x02\x84\u0877\x03\x02" + + "\x02\x02\x86\u0891\x03\x02\x02\x02\x88\u0893\x03\x02\x02\x02\x8A\u08B6" + + "\x03\x02\x02\x02\x8C\u08DF\x03\x02\x02\x02\x8E\u08E3\x03\x02\x02\x02\x90" + + "\u08FE\x03\x02\x02\x02\x92\u0902\x03\x02\x02\x02\x94\u0911\x03\x02\x02" + + "\x02\x96\u0913\x03\x02\x02\x02\x98\u0931\x03\x02\x02\x02\x9A\u0933\x03" + + "\x02\x02\x02\x9C\u093A\x03\x02\x02\x02\x9E\u0947\x03\x02\x02\x02\xA0\u094C" + + "\x03\x02\x02\x02\xA2\u094E\x03\x02\x02\x02\xA4\u095D\x03\x02\x02\x02\xA6" + + "\u0975\x03\x02\x02\x02\xA8\u0982\x03\x02\x02\x02\xAA\u0984\x03\x02\x02" + + "\x02\xAC\u0986\x03\x02\x02\x02\xAE\u098A\x03\x02\x02\x02\xB0\u098D\x03" + + "\x02\x02\x02\xB2\u0991\x03\x02\x02\x02\xB4\u09B1\x03\x02\x02\x02\xB6\u09B4" + + "\x03\x02\x02\x02\xB8\u09C0\x03\x02\x02\x02\xBA\u09D3\x03\x02\x02\x02\xBC" + + "\u09ED\x03\x02\x02\x02\xBE\u09F3\x03\x02\x02\x02\xC0\u09F5\x03\x02\x02" + + "\x02\xC2\u0A19\x03\x02\x02\x02\xC4\u0A1B\x03\x02\x02\x02\xC6\u0A1F\x03" + + "\x02\x02\x02\xC8\u0A27\x03\x02\x02\x02\xCA\u0A32\x03\x02\x02\x02\xCC\u0A36" + + "\x03\x02\x02\x02\xCE\u0A41\x03\x02\x02\x02\xD0\u0A60\x03\x02\x02\x02\xD2" + + "\u0A62\x03\x02\x02\x02\xD4\u0A80\x03\x02\x02\x02\xD6\u0A95\x03\x02\x02" + + "\x02\xD8\u0AA9\x03\x02\x02\x02\xDA\u0AAF\x03\x02\x02\x02\xDC\u0AB3\x03" + + "\x02\x02\x02\xDE\u0AB5\x03\x02\x02\x02\xE0\u0ACB\x03\x02\x02\x02\xE2\u0AFE" + + "\x03\x02\x02\x02\xE4\u0B00\x03\x02\x02\x02\xE6\u0B08\x03\x02\x02\x02\xE8" + + "\u0B10\x03\x02\x02\x02\xEA\u0B18\x03\x02\x02\x02\xEC\u0B20\x03\x02\x02" + + "\x02\xEE\u0B27\x03\x02\x02\x02\xF0\u0B2B\x03\x02\x02\x02\xF2\u0B35\x03" + + "\x02\x02\x02\xF4\u0B3D\x03\x02\x02\x02\xF6\u0B4A\x03\x02\x02\x02\xF8\u0B59" + + "\x03\x02\x02\x02\xFA\u0B5D\x03\x02\x02\x02\xFC\u0B5F\x03\x02\x02\x02\xFE" + + "\u0B61\x03\x02\x02\x02\u0100\u0B67\x03\x02\x02\x02\u0102\u0B69\x03\x02" + + "\x02\x02\u0104\u0B7D\x03\x02\x02\x02\u0106\u0BDC\x03\x02\x02\x02\u0108" + + "\u0BE2\x03\x02\x02\x02\u010A\u0BFC\x03\x02\x02\x02\u010C"; + private static readonly _serializedATNSegment2: string = + "\u0CF7\x03\x02\x02\x02\u010E\u0D0D\x03\x02\x02\x02\u0110\u0D1E\x03\x02" + + "\x02\x02\u0112\u0D20\x03\x02\x02\x02\u0114\u0D22\x03\x02\x02\x02\u0116" + + "\u0D24\x03\x02\x02\x02\u0118\u0D26\x03\x02\x02\x02\u011A\u0D28\x03\x02" + + "\x02\x02\u011C\u0D2D\x03\x02\x02\x02\u011E\u0D34\x03\x02\x02\x02\u0120" + + "\u0D38\x03\x02\x02\x02\u0122\u0D3D\x03\x02\x02\x02\u0124\u0D43\x03\x02" + + "\x02\x02\u0126\u0D4A\x03\x02\x02\x02\u0128\u0D4C\x03\x02\x02\x02\u012A" + + "\u0D51\x03\x02\x02\x02\u012C\u0D71\x03\x02\x02\x02\u012E\u0DA1\x03\x02" + + "\x02\x02\u0130\u0DA3\x03\x02\x02\x02\u0132\u0DAB\x03\x02\x02\x02\u0134" + + "\u0DB8\x03\x02\x02\x02\u0136\u0DBA\x03\x02\x02\x02\u0138\u0DBD\x03\x02" + + "\x02\x02\u013A\u0DC0\x03\x02\x02\x02\u013C\u0DC8\x03\x02\x02\x02\u013E" + + "\u0DD1\x03\x02\x02\x02\u0140\u0DD9\x03\x02\x02\x02\u0142\u0DE6\x03\x02" + + "\x02\x02\u0144\u0DE8\x03\x02\x02\x02\u0146\u0DEF\x03\x02\x02\x02\u0148" + + "\u0DF7\x03\x02\x02\x02\u014A\u0E03\x03\x02\x02\x02\u014C\u0E08\x03\x02" + + "\x02\x02\u014E\u0E11\x03\x02\x02\x02\u0150\u0E43\x03\x02\x02\x02\u0152" + + "\u0E55\x03\x02\x02\x02\u0154\u0E5E\x03\x02\x02\x02\u0156\u0E60\x03\x02" + + "\x02\x02\u0158\u0E71\x03\x02\x02\x02\u015A\u0E73\x03\x02\x02\x02\u015C" + + "\u0E7B\x03\x02\x02\x02\u015E\u0E85\x03\x02\x02\x02\u0160\u0E8A\x03\x02" + + "\x02\x02\u0162\u0E92\x03\x02\x02\x02\u0164\u0E97\x03\x02\x02\x02\u0166" + + "\u0E99\x03\x02\x02\x02\u0168\u0EC6\x03\x02\x02\x02\u016A\u0ED3\x03\x02" + + "\x02\x02\u016C\u0ED8\x03\x02\x02\x02\u016E\u0EDC\x03\x02\x02\x02\u0170" + + "\u0EE0\x03\x02\x02\x02\u0172\u0EE2\x03\x02\x02\x02\u0174\u0EE4\x03\x02" + + "\x02\x02\u0176\u0EE6\x03\x02\x02\x02\u0178\u017A\x05\x04\x03\x02\u0179" + + "\u0178\x03\x02\x02\x02\u017A\u017D\x03\x02\x02\x02\u017B\u0179\x03\x02" + + "\x02\x02\u017B\u017C\x03\x02\x02\x02\u017C\u017E\x03\x02\x02\x02\u017D" + + "\u017B\x03\x02\x02\x02\u017E\u017F\x07\x02\x02\x03\u017F\x03\x03\x02\x02" + + "\x02\u0180\u0182\x05\x0E\b\x02\u0181\u0183\x07\x03\x02\x02\u0182\u0181" + + "\x03\x02\x02\x02\u0182\u0183\x03\x02\x02\x02\u0183\x05\x03\x02\x02\x02" + + "\u0184\u0185\x05X-\x02\u0185\x07\x03\x02\x02\x02\u0186\u0187\x05X-\x02" + + "\u0187\t\x03\x02\x02\x02\u0188\u0189\x05X-\x02\u0189\v\x03\x02\x02\x02" + + "\u018A\u018B\x05X-\x02\u018B\r\x03\x02\x02\x02\u018C\u04E3\x05$\x13\x02" + + "\u018D\u018F\x056\x1C\x02\u018E\u018D\x03\x02\x02\x02\u018E\u018F\x03" + + "\x02\x02\x02\u018F\u0190\x03\x02\x02\x02\u0190\u04E3\x05V,\x02\u0191\u0192" + + "\x07\u0143\x02\x02\u0192\u04E3\x05X-\x02\u0193\u0194\x07\u0143\x02\x02" + + "\u0194\u0195\x05.\x18\x02\u0195\u0196\x05\f\x07\x02\u0196\u04E3\x03\x02" + + "\x02\x02\u0197\u0198\x07\u0107\x02\x02\u0198\u019B\x07\'\x02\x02\u0199" + + "\u019C\x05\u0160\xB1\x02\u019A\u019C\x05\u016C\xB7\x02\u019B\u0199\x03" + + "\x02\x02\x02\u019B\u019A\x03\x02\x02\x02\u019C\u04E3\x03\x02\x02\x02\u019D" + + "\u019E\x07=\x02\x02\u019E\u01A2\x05.\x18\x02\u019F\u01A0\x07\x89\x02\x02" + + "\u01A0\u01A1\x07\xC2\x02\x02\u01A1\u01A3\x07i\x02\x02\u01A2\u019F\x03" + + "\x02\x02\x02\u01A2\u01A3\x03\x02\x02\x02\u01A3\u01A4\x03\x02\x02\x02\u01A4" + + "\u01AC\x05\f\x07\x02\u01A5\u01AB\x05\"\x12\x02\u01A6\u01AB\x05 \x11\x02" + + "\u01A7\u01A8\x07\u0153\x02\x02\u01A8\u01A9\t\x02\x02\x02\u01A9\u01AB\x05" + + "> \x02\u01AA\u01A5\x03\x02\x02\x02\u01AA\u01A6\x03\x02\x02\x02\u01AA\u01A7" + + "\x03\x02\x02\x02\u01AB\u01AE\x03\x02\x02\x02\u01AC\u01AA\x03\x02\x02\x02" + + "\u01AC\u01AD\x03\x02\x02\x02\u01AD\u04E3\x03\x02\x02\x02\u01AE\u01AC\x03" + + "\x02\x02\x02\u01AF\u01B0\x07\r\x02\x02\u01B0\u01B1\x05.\x18\x02\u01B1" + + "\u01B2\x05\f\x07\x02\u01B2\u01B3\x07\u0107\x02\x02\u01B3\u01B4\t\x02\x02" + + "\x02\u01B4\u01B5\x05> \x02\u01B5\u04E3\x03\x02\x02\x02\u01B6\u01B7\x07" + + "\r\x02\x02\u01B7\u01B8\x05.\x18\x02\u01B8\u01B9\x05\f\x07\x02\u01B9\u01BA" + + "\x07\u0107\x02\x02\u01BA\u01BB\x05 \x11\x02\u01BB\u04E3\x03\x02\x02\x02" + + "\u01BC\u01BD\x07a\x02\x02\u01BD\u01C0\x05.\x18\x02\u01BE\u01BF\x07\x89" + + "\x02\x02\u01BF\u01C1\x07i\x02\x02\u01C0\u01BE\x03\x02\x02\x02\u01C0\u01C1" + + "\x03\x02\x02\x02\u01C1\u01C2\x03\x02\x02\x02\u01C2\u01C4\x05\f\x07\x02" + + "\u01C3\u01C5\t\x03\x02\x02\u01C4\u01C3\x03\x02\x02\x02\u01C4\u01C5\x03" + + "\x02\x02\x02\u01C5\u04E3\x03\x02\x02\x02\u01C6\u01C7\x07\u010B\x02\x02" + + "\u01C7\u01CA\x050\x19\x02\u01C8\u01C9\t\x04\x02\x02\u01C9\u01CB\x05\xE6" + + "t\x02\u01CA\u01C8\x03\x02\x02\x02\u01CA\u01CB\x03\x02\x02\x02\u01CB\u01D0" + + "\x03\x02\x02\x02\u01CC\u01CE\x07\xA2\x02\x02\u01CD\u01CC\x03\x02\x02\x02" + + "\u01CD\u01CE\x03\x02\x02\x02\u01CE\u01CF\x03\x02\x02\x02\u01CF\u01D1\x05" + + "\u016C\xB7\x02\u01D0\u01CD\x03\x02\x02\x02\u01D0\u01D1\x03\x02\x02\x02" + + "\u01D1\u04E3\x03\x02\x02\x02\u01D2\u01D7\x05\x18\r\x02\u01D3\u01D4\x07" + + "\x04\x02\x02\u01D4\u01D5\x05\u013E\xA0\x02\u01D5\u01D6\x07\x05\x02\x02" + + "\u01D6\u01D8\x03\x02\x02\x02\u01D7\u01D3\x03\x02\x02\x02\u01D7\u01D8\x03" + + "\x02\x02\x02\u01D8\u01DA\x03\x02\x02\x02\u01D9\u01DB\x05:\x1E\x02\u01DA" + + "\u01D9\x03\x02\x02\x02\u01DA\u01DB\x03\x02\x02\x02\u01DB\u01DC\x03\x02" + + "\x02\x02\u01DC\u01E1\x05<\x1F\x02\u01DD\u01DF\x07\x16\x02\x02\u01DE\u01DD" + + "\x03\x02\x02\x02\u01DE\u01DF\x03\x02\x02\x02\u01DF\u01E0\x03\x02\x02\x02" + + "\u01E0\u01E2\x05$\x13\x02\u01E1\u01DE\x03\x02\x02\x02\u01E1\u01E2\x03" + + "\x02\x02\x02\u01E2\u04E3\x03\x02\x02\x02\u01E3\u01E4\x07=\x02\x02\u01E4" + + "\u01E8\x07\u011E\x02\x02\u01E5\u01E6\x07\x89\x02\x02\u01E6\u01E7\x07\xC2" + + "\x02\x02\u01E7\u01E9\x07i\x02\x02\u01E8\u01E5\x03\x02\x02\x02\u01E8\u01E9" + + "\x03\x02\x02\x02\u01E9\u01EA\x03\x02\x02\x02\u01EA\u01EB\x05\xECw\x02" + + "\u01EB\u01EC\x07\xA2\x02\x02\u01EC\u01F5\x05\xECw\x02\u01ED\u01F4\x05" + + ":\x1E\x02\u01EE\u01F4\x05\xE2r\x02\u01EF\u01F4\x05N(\x02\u01F0\u01F4\x05" + + " \x11\x02\u01F1\u01F2\x07\u0122\x02\x02\u01F2\u01F4\x05> \x02\u01F3\u01ED" + + "\x03\x02\x02\x02\u01F3\u01EE\x03\x02\x02\x02\u01F3\u01EF\x03\x02\x02\x02" + + "\u01F3\u01F0\x03\x02\x02\x02\u01F3\u01F1\x03\x02\x02\x02\u01F4\u01F7\x03" + + "\x02\x02\x02\u01F5\u01F3\x03\x02\x02\x02\u01F5\u01F6\x03\x02\x02\x02\u01F6" + + "\u04E3\x03\x02\x02\x02\u01F7\u01F5\x03\x02\x02\x02\u01F8\u01FD\x05\x1A" + + "\x0E\x02\u01F9\u01FA\x07\x04\x02\x02\u01FA\u01FB\x05\u013E\xA0\x02\u01FB" + + "\u01FC\x07\x05\x02\x02\u01FC\u01FE\x03\x02\x02\x02\u01FD\u01F9\x03\x02" + + "\x02\x02\u01FD\u01FE\x03\x02\x02\x02\u01FE\u0200\x03\x02\x02\x02\u01FF" + + "\u0201\x05:\x1E\x02\u0200\u01FF\x03\x02\x02\x02\u0200\u0201\x03\x02\x02" + + "\x02\u0201\u0202\x03\x02\x02\x02\u0202\u0207\x05<\x1F\x02\u0203\u0205" + + "\x07\x16\x02\x02\u0204\u0203\x03\x02\x02\x02\u0204\u0205\x03\x02\x02\x02" + + "\u0205\u0206\x03\x02\x02\x02\u0206\u0208\x05$\x13\x02\u0207\u0204\x03" + + "\x02\x02\x02\u0207\u0208\x03\x02\x02\x02\u0208\u04E3\x03\x02\x02\x02\u0209" + + "\u020A\x07\x0F\x02\x02\u020A\u020B\x07\u011E\x02\x02\u020B\u020D\x05\x06" + + "\x04\x02\u020C\u020E\x05*\x16\x02\u020D\u020C\x03\x02\x02\x02\u020D\u020E" + + "\x03\x02\x02\x02\u020E\u020F\x03\x02\x02\x02\u020F\u0210\x079\x02\x02" + + "\u0210\u0218\x07\u0114\x02\x02\u0211\u0219\x05\u0160\xB1\x02\u0212\u0213" + + "\x07w\x02\x02\u0213\u0214\x074\x02\x02\u0214\u0219\x05\xC6d\x02\u0215" + + "\u0216\x07w\x02\x02\u0216\u0217\x07\f\x02\x02\u0217\u0219\x074\x02\x02" + + "\u0218\u0211\x03\x02\x02\x02\u0218\u0212\x03\x02\x02\x02\u0218\u0215\x03" + + "\x02\x02\x02\u0218\u0219\x03\x02\x02\x02\u0219\u04E3\x03\x02\x02\x02\u021A" + + "\u021B\x07\x0F\x02\x02\u021B\u021E\x07\u011F\x02\x02\u021C\u021D\t\x04" + + "\x02\x02\u021D\u021F\x05\x06\x04\x02\u021E\u021C\x03\x02\x02\x02\u021E" + + "\u021F\x03\x02\x02\x02\u021F\u0220\x03\x02\x02\x02\u0220\u0221\x079\x02" + + "\x02\u0221\u0223\x07\u0114\x02\x02\u0222\u0224\x05\u0160\xB1\x02\u0223" + + "\u0222\x03\x02\x02\x02\u0223\u0224\x03\x02\x02\x02\u0224\u04E3\x03\x02" + + "\x02\x02\u0225\u0226\x07\r\x02\x02\u0226\u0227\x07\u011E\x02\x02\u0227" + + "\u0228\x05\x06\x04\x02\u0228\u0229\x07\n\x02\x02\u0229\u022A\t\x05\x02" + + "\x02\u022A\u022B\x05\u0130\x99\x02\u022B\u04E3\x03\x02\x02\x02\u022C\u022D" + + "\x07\r\x02\x02\u022D\u022E\x07\u011E\x02\x02\u022E\u022F\x05\x06\x04\x02" + + "\u022F\u0230\x07\n\x02\x02\u0230\u0231\t\x05\x02\x02\u0231\u0232\x07\x04" + + "\x02\x02\u0232\u0233\x05\u0130\x99\x02\u0233\u0234\x07\x05\x02\x02\u0234" + + "\u04E3\x03\x02\x02\x02\u0235\u0236\x07\r\x02\x02\u0236\u0237\x07\u011E" + + "\x02\x02\u0237\u0238\x05\x06\x04\x02\u0238\u0239\x07\xED\x02\x02\u0239" + + "\u023A\x073\x02\x02\u023A\u023B\x05\xE6t\x02\u023B\u023C\x07\u012E\x02" + + "\x02\u023C\u023D\x05\u015C\xAF\x02\u023D\u04E3\x03\x02\x02\x02\u023E\u023F" + + "\x07\r\x02\x02\u023F\u0240\x07\u011E\x02\x02\u0240\u0241\x05\x06\x04\x02" + + "\u0241\u0242\x07a\x02\x02\u0242\u0245\t\x05\x02\x02\u0243\u0244\x07\x89" + + "\x02\x02\u0244\u0246\x07i\x02\x02\u0245\u0243\x03\x02\x02\x02\u0245\u0246" + + "\x03\x02\x02\x02\u0246\u0247\x03\x02\x02\x02\u0247\u0248\x07\x04\x02\x02" + + "\u0248\u0249\x05\xE4s\x02\u0249\u024A\x07\x05\x02\x02\u024A\u04E3\x03" + + "\x02\x02\x02\u024B\u024C\x07\r\x02\x02\u024C\u024D\x07\u011E\x02\x02\u024D" + + "\u024E\x05\x06\x04\x02\u024E\u024F\x07a\x02\x02\u024F\u0252\t\x05\x02" + + "\x02\u0250\u0251\x07\x89\x02\x02\u0251\u0253\x07i\x02\x02\u0252\u0250" + + "\x03\x02\x02\x02\u0252\u0253\x03\x02\x02\x02\u0253\u0254\x03\x02\x02\x02" + + "\u0254\u0255\x05\xE4s\x02\u0255\u04E3\x03\x02\x02\x02\u0256\u0257\x07" + + "\r\x02\x02\u0257\u025A\t\x06\x02\x02\u0258\u025B\x05\x06\x04\x02\u0259" + + "\u025B\x05\b\x05\x02\u025A\u0258\x03\x02\x02\x02\u025A\u0259\x03\x02\x02" + + "\x02\u025B\u025C\x03\x02\x02\x02\u025C\u025D\x07\xED\x02\x02\u025D\u025E" + + "\x07\u012E\x02\x02\u025E\u025F\x05\xE6t\x02\u025F\u04E3\x03\x02\x02\x02" + + "\u0260\u0261\x07\r\x02\x02\u0261\u0264\t\x06\x02\x02\u0262\u0265\x05\x06" + + "\x04\x02\u0263\u0265\x05\b\x05\x02\u0264\u0262\x03\x02\x02\x02\u0264\u0263" + + "\x03\x02\x02\x02\u0265\u0266\x03\x02\x02\x02\u0266\u0267\x07\u0107\x02" + + "\x02\u0267\u0268\x07\u0122\x02\x02\u0268\u0269\x05> \x02\u0269\u04E3\x03" + + "\x02\x02\x02\u026A\u026B\x07\r\x02\x02\u026B\u026E\t\x06\x02\x02\u026C" + + "\u026F\x05\x06\x04\x02\u026D\u026F\x05\b\x05\x02\u026E\u026C\x03\x02\x02" + + "\x02\u026E\u026D\x03\x02\x02\x02\u026F\u0270\x03\x02\x02\x02\u0270\u0271" + + "\x07\u0141\x02\x02\u0271\u0274\x07\u0122\x02\x02\u0272\u0273\x07\x89\x02" + + "\x02\u0273\u0275\x07i\x02\x02\u0274\u0272\x03\x02\x02\x02\u0274\u0275" + + "\x03\x02\x02\x02\u0275\u0276\x03\x02\x02\x02\u0276\u0277\x05> \x02\u0277" + + "\u04E3\x03\x02\x02\x02\u0278\u0279\x07\r\x02\x02\u0279\u027A\x07\u011E" + + "\x02\x02\u027A\u027B\x05\x06\x04\x02\u027B\u027D\t\x07\x02\x02\u027C\u027E" + + "\x073\x02\x02\u027D\u027C\x03\x02\x02\x02\u027D\u027E\x03\x02\x02\x02" + + "\u027E\u027F\x03\x02\x02\x02\u027F\u0281\x05\xE6t\x02\u0280\u0282\x05" + + "\u016A\xB6\x02\u0281\u0280\x03\x02\x02\x02\u0281\u0282\x03\x02\x02\x02" + + "\u0282\u04E3\x03\x02\x02\x02\u0283\u0284\x07\r\x02\x02\u0284\u0285\x07" + + "\u011E\x02\x02\u0285\u0287\x05\x06\x04\x02\u0286\u0288\x05*\x16\x02\u0287" + + "\u0286\x03\x02\x02\x02\u0287\u0288\x03\x02\x02\x02\u0288\u0289\x03\x02" + + "\x02\x02\u0289\u028B\x07)\x02\x02\u028A\u028C\x073\x02\x02\u028B\u028A" + + "\x03\x02\x02\x02\u028B\u028C\x03\x02\x02\x02\u028C\u028D\x03\x02\x02\x02" + + "\u028D\u028E\x05\xE6t\x02\u028E\u0290\x05\u013C\x9F\x02\u028F\u0291\x05" + + "\u012A\x96\x02\u0290\u028F\x03\x02\x02\x02\u0290\u0291\x03\x02\x02\x02" + + "\u0291\u04E3\x03\x02\x02\x02\u0292\u0293\x07\r\x02\x02\u0293\u0294\x07" + + "\u011E\x02\x02\u0294\u0296\x05\x06\x04\x02\u0295\u0297\x05*\x16\x02\u0296" + + "\u0295\x03\x02\x02\x02\u0296\u0297\x03\x02\x02\x02\u0297\u0298\x03\x02" + + "\x02\x02\u0298\u0299\x07\xF0\x02\x02\u0299\u029A\x074\x02\x02\u029A\u029B" + + "\x07\x04\x02\x02\u029B\u029C\x05\u0130\x99\x02\u029C\u029D\x07\x05\x02" + + "\x02\u029D\u04E3\x03\x02\x02\x02\u029E\u029F\x07\r\x02\x02\u029F\u02A0" + + "\x07\u011E\x02\x02\u02A0\u02A2\x05\x06\x04\x02\u02A1\u02A3\x05*\x16\x02" + + "\u02A2\u02A1\x03\x02\x02\x02\u02A2\u02A3\x03\x02\x02\x02\u02A3\u02A4\x03" + + "\x02\x02\x02\u02A4\u02A5\x07\u0107\x02\x02\u02A5\u02A6\x07\u0104\x02\x02" + + "\u02A6\u02AA\x05\u016C\xB7\x02\u02A7\u02A8\x07\u0153\x02\x02\u02A8\u02A9" + + "\x07\u0105\x02\x02\u02A9\u02AB\x05> \x02\u02AA\u02A7\x03\x02\x02\x02\u02AA" + + "\u02AB\x03\x02\x02\x02\u02AB\u04E3\x03\x02\x02\x02\u02AC\u02AD\x07\r\x02" + + "\x02\u02AD\u02AE\x07\u011E\x02\x02\u02AE\u02B0\x05\x06\x04\x02\u02AF\u02B1" + + "\x05*\x16\x02\u02B0\u02AF\x03\x02\x02\x02\u02B0\u02B1\x03\x02\x02\x02" + + "\u02B1\u02B2\x03\x02\x02\x02\u02B2\u02B3\x07\u0107\x02\x02\u02B3\u02B4" + + "\x07\u0105\x02\x02\u02B4\u02B5\x05> \x02\u02B5\u04E3\x03\x02\x02\x02\u02B6" + + "\u02B7\x07\r\x02\x02\u02B7\u02BA\t\x06\x02\x02\u02B8\u02BB\x05\x06\x04" + + "\x02\u02B9\u02BB\x05\b\x05\x02\u02BA\u02B8\x03\x02\x02\x02\u02BA\u02B9" + + "\x03\x02\x02\x02\u02BB\u02BC\x03\x02\x02\x02\u02BC\u02C0\x07\n\x02\x02" + + "\u02BD\u02BE\x07\x89\x02\x02\u02BE\u02BF\x07\xC2\x02\x02\u02BF\u02C1\x07" + + "i\x02\x02\u02C0\u02BD\x03\x02\x02\x02\u02C0\u02C1\x03\x02\x02\x02\u02C1" + + "\u02C3\x03\x02\x02\x02\u02C2\u02C4\x05(\x15\x02\u02C3\u02C2\x03\x02\x02" + + "\x02\u02C4\u02C5\x03\x02\x02\x02\u02C5\u02C3\x03\x02\x02\x02\u02C5\u02C6" + + "\x03\x02\x02\x02\u02C6\u04E3\x03\x02\x02\x02\u02C7\u02C8\x07\r\x02\x02" + + "\u02C8\u02C9\x07\u011E\x02\x02\u02C9\u02CA\x05\x06\x04\x02\u02CA\u02CB" + + "\x05*\x16\x02\u02CB\u02CC\x07\xED\x02\x02\u02CC\u02CD\x07\u012E\x02\x02" + + "\u02CD\u02CE\x05*\x16\x02\u02CE\u04E3\x03\x02\x02\x02\u02CF\u02D0\x07" + + "\r\x02\x02\u02D0\u02D3\t\x06\x02\x02\u02D1\u02D4\x05\x06\x04\x02\u02D2" + + "\u02D4\x05\b\x05\x02\u02D3\u02D1\x03\x02\x02\x02\u02D3\u02D2\x03\x02\x02" + + "\x02\u02D4\u02D5\x03\x02\x02\x02\u02D5\u02D8\x07a\x02\x02\u02D6\u02D7" + + "\x07\x89\x02\x02\u02D7\u02D9\x07i\x02\x02\u02D8\u02D6\x03\x02\x02\x02" + + "\u02D8\u02D9\x03\x02\x02\x02\u02D9\u02DA\x03\x02\x02\x02\u02DA\u02DF\x05" + + "*\x16\x02\u02DB\u02DC\x07\x06\x02\x02\u02DC\u02DE\x05*\x16\x02\u02DD\u02DB" + + "\x03\x02\x02\x02\u02DE\u02E1\x03\x02\x02\x02\u02DF\u02DD\x03\x02\x02\x02" + + "\u02DF\u02E0\x03\x02\x02\x02\u02E0\u02E3\x03\x02\x02\x02\u02E1\u02DF\x03" + + "\x02\x02\x02\u02E2\u02E4\x07\xE2\x02\x02\u02E3\u02E2\x03\x02\x02\x02\u02E3" + + "\u02E4\x03\x02\x02\x02\u02E4\u04E3\x03\x02\x02\x02\u02E5\u02E6\x07\r\x02" + + "\x02\u02E6\u02E7\x07\u011E\x02\x02\u02E7\u02E9\x05\x06\x04\x02\u02E8\u02EA" + + "\x05*\x16\x02\u02E9\u02E8\x03\x02\x02\x02\u02E9\u02EA\x03\x02\x02\x02" + + "\u02EA\u02EB\x03\x02\x02\x02\u02EB\u02EC\x07\u0107\x02\x02\u02EC\u02ED" + + "\x05 \x11\x02\u02ED\u04E3\x03\x02\x02\x02\u02EE\u02EF\x07\r\x02\x02\u02EF" + + "\u02F0\x07\u011E\x02\x02\u02F0\u02F1\x05\x06\x04\x02\u02F1\u02F2\x07\xE9" + + "\x02\x02\u02F2\u02F3\x07\xD7\x02\x02\u02F3\u04E3\x03\x02\x02\x02\u02F4" + + "\u02F5\x07a\x02\x02\u02F5\u02F8\x07\u011E\x02\x02\u02F6\u02F7\x07\x89" + + "\x02\x02\u02F7\u02F9\x07i\x02\x02\u02F8\u02F6\x03\x02\x02\x02\u02F8\u02F9" + + "\x03\x02\x02\x02\u02F9\u02FA\x03\x02\x02\x02\u02FA\u02FC\x05\x06\x04\x02" + + "\u02FB\u02FD\x07\xE2\x02\x02\u02FC\u02FB\x03\x02\x02\x02\u02FC\u02FD\x03" + + "\x02\x02\x02\u02FD\u04E3\x03\x02\x02\x02\u02FE\u02FF\x07a\x02\x02\u02FF" + + "\u0302\x07\u014B\x02\x02\u0300\u0301\x07\x89\x02\x02\u0301\u0303\x07i" + + "\x02\x02\u0302\u0300\x03\x02\x02\x02\u0302\u0303\x03\x02\x02\x02\u0303" + + "\u0304\x03\x02\x02\x02\u0304\u04E3\x05\b\x05\x02\u0305\u0308\x07=\x02" + + "\x02\u0306\u0307\x07\xCC\x02\x02\u0307\u0309\x07\xF0\x02\x02\u0308\u0306" + + "\x03\x02\x02\x02\u0308\u0309\x03\x02\x02\x02\u0309\u030E\x03\x02\x02\x02" + + "\u030A\u030C\x07\x80\x02\x02\u030B\u030A\x03\x02\x02\x02\u030B\u030C\x03" + + "\x02\x02\x02\u030C\u030D\x03\x02\x02\x02\u030D\u030F\x07\u0123\x02\x02" + + "\u030E\u030B\x03\x02\x02\x02\u030E\u030F\x03\x02\x02\x02\u030F\u0310\x03" + + "\x02\x02\x02\u0310\u0314\x07\u014B\x02\x02\u0311\u0312\x07\x89\x02\x02" + + "\u0312\u0313\x07\xC2\x02\x02\u0313\u0315\x07i\x02\x02\u0314\u0311\x03" + + "\x02\x02\x02\u0314\u0315\x03\x02\x02\x02\u0315\u0316\x03\x02\x02\x02\u0316" + + "\u0318\x05\b\x05\x02\u0317\u0319\x05\xCCg\x02\u0318\u0317\x03\x02\x02" + + "\x02\u0318\u0319\x03\x02\x02\x02\u0319\u0322\x03\x02\x02\x02\u031A\u0321" + + "\x05\"\x12\x02\u031B\u031C\x07\xD6\x02\x02\u031C\u031D\x07\xC8\x02\x02" + + "\u031D\u0321\x05\xC4c\x02\u031E\u031F\x07\u0122\x02\x02\u031F\u0321\x05" + + "> \x02\u0320\u031A\x03\x02\x02\x02\u0320\u031B\x03\x02\x02\x02\u0320\u031E" + + "\x03\x02\x02\x02\u0321\u0324\x03\x02\x02\x02\u0322\u0320\x03\x02\x02\x02" + + "\u0322\u0323\x03\x02\x02\x02\u0323\u0325\x03\x02\x02\x02\u0324\u0322\x03" + + "\x02\x02\x02\u0325\u0326\x07\x16\x02\x02\u0326\u0327\x05$\x13\x02\u0327" + + "\u04E3\x03\x02\x02\x02\u0328\u032B\x07=\x02\x02\u0329\u032A\x07\xCC\x02" + + "\x02\u032A\u032C\x07\xF0\x02\x02\u032B\u0329\x03\x02\x02\x02\u032B\u032C" + + "\x03\x02\x02\x02\u032C\u032E\x03\x02\x02\x02\u032D\u032F\x07\x80\x02\x02" + + "\u032E\u032D\x03\x02\x02\x02\u032E\u032F\x03\x02\x02\x02\u032F\u0330\x03" + + "\x02\x02\x02\u0330\u0331\x07\u0123\x02\x02\u0331\u0332\x07\u014B\x02\x02" + + "\u0332\u0337\x05\xECw\x02\u0333\u0334\x07\x04\x02\x02\u0334\u0335\x05" + + "\u013A\x9E\x02\u0335\u0336\x07\x05\x02\x02\u0336\u0338\x03\x02\x02\x02" + + "\u0337\u0333\x03\x02\x02\x02\u0337\u0338\x03\x02\x02\x02\u0338\u0339\x03" + + "\x02\x02\x02\u0339\u033C\x05:\x1E\x02\u033A\u033B\x07\xCB\x02\x02\u033B" + + "\u033D\x05> \x02\u033C\u033A\x03\x02\x02\x02\u033C\u033D\x03\x02\x02\x02" + + "\u033D\u04E3\x03\x02\x02\x02\u033E\u033F\x07\r\x02\x02\u033F\u0340\x07" + + "\u014B\x02\x02\u0340\u0342\x05\b\x05\x02\u0341\u0343\x07\x16\x02\x02\u0342" + + "\u0341\x03\x02\x02\x02\u0342\u0343\x03\x02\x02\x02\u0343\u0344\x03\x02" + + "\x02\x02\u0344\u0345\x05$\x13\x02\u0345\u04E3\x03\x02\x02\x02\u0346\u0349" + + "\x07=\x02\x02\u0347\u0348\x07\xCC\x02\x02\u0348\u034A\x07\xF0\x02\x02" + + "\u0349\u0347\x03\x02\x02\x02\u0349\u034A\x03\x02\x02\x02\u034A\u034C\x03" + + "\x02\x02\x02\u034B\u034D\x07\u0123\x02\x02\u034C\u034B\x03\x02\x02\x02" + + "\u034C\u034D\x03\x02\x02\x02\u034D\u034E\x03\x02\x02\x02\u034E\u0352\x07" + + "}\x02\x02\u034F\u0350\x07\x89\x02\x02\u0350\u0351\x07\xC2\x02\x02\u0351" + + "\u0353\x07i\x02\x02\u0352\u034F\x03\x02\x02\x02\u0352\u0353\x03\x02\x02" + + "\x02\u0353\u0354\x03\x02\x02\x02\u0354\u0355\x05\n\x06\x02\u0355\u0356" + + "\x07\x16\x02\x02\u0356\u0360\x05\u016C\xB7\x02\u0357\u0358\x07\u0145\x02" + + "\x02\u0358\u035D\x05T+\x02\u0359\u035A\x07\x06\x02\x02\u035A\u035C\x05" + + "T+\x02\u035B\u0359\x03\x02\x02\x02\u035C\u035F\x03\x02\x02\x02\u035D\u035B" + + "\x03\x02\x02\x02\u035D\u035E\x03\x02\x02\x02\u035E\u0361\x03\x02\x02\x02" + + "\u035F\u035D\x03\x02\x02\x02\u0360\u0357\x03\x02\x02\x02\u0360\u0361\x03" + + "\x02\x02\x02\u0361\u04E3\x03\x02\x02\x02\u0362\u0364\x07a\x02\x02\u0363" + + "\u0365\x07\u0123\x02\x02\u0364\u0363\x03\x02\x02\x02\u0364\u0365\x03\x02" + + "\x02\x02\u0365\u0366\x03\x02\x02\x02\u0366\u0369\x07}\x02\x02\u0367\u0368" + + "\x07\x89\x02\x02\u0368\u036A\x07i\x02\x02\u0369\u0367\x03\x02\x02\x02" + + "\u0369\u036A\x03\x02\x02\x02\u036A\u036B\x03\x02\x02\x02\u036B\u04E3\x05" + + "\n\x06\x02\u036C\u036F\x07S\x02\x02\u036D\u036E\x07\xCC\x02\x02\u036E" + + "\u0370\x07\xF0\x02\x02\u036F\u036D\x03\x02\x02\x02\u036F\u0370\x03\x02" + + "\x02\x02\u0370\u0372\x03\x02\x02\x02\u0371\u0373\x07\u0149\x02\x02\u0372" + + "\u0371\x03\x02\x02\x02\u0372\u0373\x03\x02\x02\x02\u0373\u0374\x03\x02" + + "\x02\x02\u0374\u0376\x05\n\x06\x02\u0375\u0377\x05\u012E\x98\x02\u0376" + + "\u0375\x03\x02\x02\x02\u0376\u0377\x03\x02\x02\x02\u0377\u0379\x03\x02" + + "\x02\x02\u0378\u037A\x05\u0138\x9D\x02\u0379\u0378\x03\x02\x02\x02\u0379" + + "\u037A\x03\x02\x02\x02\u037A\u04E3\x03\x02\x02\x02\u037B\u037C\x07a\x02" + + "\x02\u037C\u037D\x07\u0123\x02\x02\u037D\u0380\x07\u0149\x02\x02\u037E" + + "\u037F\x07\x89\x02\x02\u037F\u0381\x07i\x02\x02\u0380\u037E\x03\x02\x02" + + "\x02\u0380\u0381\x03\x02\x02\x02\u0381\u0382\x03\x02\x02\x02\u0382\u04E3" + + "\x05X-\x02\u0383\u0385\x07j\x02\x02\u0384\u0386\t\b\x02\x02\u0385\u0384" + + "\x03\x02\x02\x02\u0385\u0386\x03\x02\x02\x02\u0386\u0387\x03\x02\x02\x02" + + "\u0387\u04E3\x05\x0E\b\x02\u0388\u0389\x07\u010B\x02\x02\u0389\u038C\x07" + + "\u011F\x02\x02\u038A\u038B\t\x04\x02\x02\u038B\u038D\x05\x06\x04\x02\u038C" + + "\u038A\x03\x02\x02\x02\u038C\u038D\x03\x02\x02\x02\u038D\u0392\x03\x02" + + "\x02\x02\u038E\u0390\x07\xA2\x02\x02\u038F\u038E\x03\x02\x02\x02\u038F" + + "\u0390\x03\x02\x02\x02\u0390\u0391\x03\x02\x02\x02\u0391\u0393\x05\u016C" + + "\xB7\x02\u0392\u038F\x03\x02\x02\x02\u0392\u0393\x03\x02\x02\x02\u0393" + + "\u04E3\x03\x02\x02\x02\u0394\u0395\x07\u010B\x02\x02\u0395\u0396\x07\u011E" + + "\x02\x02\u0396\u0399\x07l\x02\x02\u0397\u0398\t\x04\x02\x02\u0398\u039A" + + "\x05\x06\x04\x02\u0399\u0397\x03\x02\x02\x02\u0399\u039A\x03\x02\x02\x02" + + "\u039A\u039B\x03\x02\x02\x02\u039B\u039C\x07\xA2\x02\x02\u039C\u039E\x05" + + "\u016C\xB7\x02\u039D\u039F\x05*\x16\x02\u039E\u039D\x03\x02\x02\x02\u039E" + + "\u039F\x03\x02\x02\x02\u039F\u04E3\x03\x02\x02\x02\u03A0\u03A1\x07\u010B" + + "\x02\x02\u03A1\u03A2\x07\u0122\x02\x02\u03A2\u03A7\x05\x06\x04\x02\u03A3" + + "\u03A4\x07\x04\x02\x02\u03A4\u03A5\x05B\"\x02\u03A5\u03A6\x07\x05\x02" + + "\x02\u03A6\u03A8\x03\x02\x02\x02\u03A7\u03A3\x03\x02\x02\x02\u03A7\u03A8" + + "\x03\x02\x02\x02\u03A8\u04E3\x03\x02\x02\x02\u03A9\u03AA\x07\u010B\x02" + + "\x02\u03AA\u03AB\x074\x02\x02\u03AB\u03AC\t\x04\x02\x02\u03AC\u03AF\x05" + + "\x06\x04\x02\u03AD\u03AE\t\x04\x02\x02\u03AE\u03B0\x05\xE6t\x02\u03AF" + + "\u03AD\x03\x02\x02\x02\u03AF\u03B0\x03\x02\x02\x02\u03B0\u04E3\x03\x02" + + "\x02\x02\u03B1\u03B2\x07\u010B\x02\x02\u03B2\u03B5\x07\u014C\x02\x02\u03B3" + + "\u03B4\t\x04\x02\x02\u03B4\u03B6\x05\b\x05\x02\u03B5\u03B3\x03\x02\x02" + + "\x02\u03B5\u03B6\x03\x02\x02\x02\u03B6\u03BB\x03\x02\x02\x02\u03B7\u03B9" + + "\x07\xA2\x02\x02\u03B8\u03B7\x03\x02\x02\x02\u03B8\u03B9\x03\x02\x02\x02" + + "\u03B9\u03BA\x03\x02\x02\x02\u03BA\u03BC\x05\u016C\xB7\x02\u03BB\u03B8" + + "\x03\x02\x02\x02\u03BB\u03BC\x03\x02\x02\x02\u03BC\u04E3\x03\x02\x02\x02" + + "\u03BD\u03BE\x07\u010B\x02\x02\u03BE\u03BF\x07\xD7\x02\x02\u03BF\u03C1" + + "\x05X-\x02\u03C0\u03C2\x05*\x16\x02\u03C1\u03C0\x03\x02\x02\x02\u03C1" + + "\u03C2\x03\x02\x02\x02\u03C2\u04E3\x03\x02\x02\x02\u03C3\u03C5\x07\u010B" + + "\x02\x02\u03C4\u03C6\x05\u0160\xB1\x02\u03C5\u03C4\x03\x02\x02\x02\u03C5" + + "\u03C6\x03\x02\x02\x02\u03C6\u03C7\x03\x02\x02\x02\u03C7\u03CA\x07~\x02" + + "\x02\u03C8\u03C9\t\x04\x02\x02\u03C9\u03CB\x05\x06\x04\x02\u03CA\u03C8" + + "\x03\x02\x02\x02\u03CA\u03CB\x03\x02\x02\x02\u03CB\u03D3\x03\x02\x02\x02" + + "\u03CC\u03CE\x07\xA2\x02\x02\u03CD\u03CC\x03\x02\x02\x02\u03CD\u03CE\x03" + + "\x02\x02\x02\u03CE\u03D1\x03\x02\x02\x02\u03CF\u03D2\x05\xE6t\x02\u03D0" + + "\u03D2\x05\u016C\xB7\x02\u03D1\u03CF\x03\x02\x02\x02\u03D1\u03D0\x03\x02" + + "\x02\x02\u03D2\u03D4\x03\x02\x02\x02\u03D3\u03CD\x03\x02\x02\x02\u03D3" + + "\u03D4\x03\x02\x02\x02\u03D4\u04E3\x03\x02\x02\x02\u03D5\u03D6\x07\u010B" + + "\x02\x02\u03D6\u03D7\x07=\x02\x02\u03D7\u03D8\x07\u011E\x02\x02\u03D8" + + "\u03DB\x05\x06\x04\x02\u03D9\u03DA\x07\x16\x02\x02\u03DA\u03DC\x07\u0104" + + "\x02\x02\u03DB\u03D9\x03\x02\x02\x02\u03DB\u03DC\x03\x02\x02\x02\u03DC" + + "\u04E3\x03\x02\x02\x02\u03DD\u03DE\x07\u010B\x02\x02\u03DE\u03DF\x07@" + + "\x02\x02\u03DF\u04E3\x05.\x18\x02\u03E0\u03E1\x07\u010B\x02\x02\u03E1" + + "\u03E6\x07(\x02\x02\u03E2\u03E4\x07\xA2\x02\x02\u03E3\u03E2\x03\x02\x02" + + "\x02\u03E3\u03E4\x03\x02\x02\x02\u03E4\u03E5\x03\x02\x02\x02\u03E5\u03E7" + + "\x05\u016C\xB7\x02\u03E6\u03E3\x03\x02\x02\x02\u03E6\u03E7\x03\x02\x02" + + "\x02\u03E7\u04E3\x03\x02\x02\x02\u03E8\u03E9\t\t\x02\x02\u03E9\u03EB\x07" + + "}\x02\x02\u03EA\u03EC\x07l\x02\x02\u03EB\u03EA\x03\x02\x02\x02\u03EB\u03EC" + + "\x03\x02\x02\x02\u03EC\u03ED\x03\x02\x02\x02\u03ED\u04E3\x052\x1A\x02" + + "\u03EE\u03EF\t\t\x02\x02\u03EF\u03F1\x05.\x18\x02\u03F0\u03F2\x07l\x02" + + "\x02\u03F1\u03F0\x03\x02\x02\x02\u03F1\u03F2\x03\x02\x02\x02\u03F2\u03F3" + + "\x03\x02\x02\x02\u03F3\u03F4\x05\f\x07\x02\u03F4\u04E3\x03\x02\x02\x02" + + "\u03F5\u03F7\t\t\x02\x02\u03F6\u03F8\x07\u011E\x02\x02\u03F7\u03F6\x03" + + "\x02\x02\x02\u03F7\u03F8\x03\x02\x02\x02\u03F8\u03FA\x03\x02\x02\x02\u03F9" + + "\u03FB\t\n\x02\x02\u03FA\u03F9\x03\x02\x02\x02\u03FA\u03FB\x03\x02\x02" + + "\x02\u03FB\u03FC\x03\x02\x02\x02\u03FC\u03FE\x05\x06\x04\x02\u03FD\u03FF" + + "\x05*\x16\x02\u03FE\u03FD\x03\x02\x02\x02\u03FE\u03FF\x03\x02\x02\x02" + + "\u03FF\u0401\x03\x02\x02\x02\u0400\u0402\x054\x1B\x02\u0401\u0400\x03" + + "\x02\x02\x02\u0401\u0402\x03\x02\x02\x02\u0402\u04E3\x03\x02\x02\x02\u0403" + + "\u0405\t\t\x02\x02\u0404\u0406\x07\xE4\x02\x02\u0405\u0404\x03\x02\x02" + + "\x02\u0405\u0406\x03\x02\x02\x02\u0406\u0407\x03\x02\x02\x02\u0407\u04E3" + + "\x05$\x13\x02\u0408\u0409\x075\x02\x02\u0409\u040A\x07\xC8\x02\x02\u040A" + + "\u040B\x05.\x18\x02\u040B\u040C\x05\f\x07\x02\u040C\u040D\x07\x99\x02" + + "\x02\u040D\u040E\x05\u016E\xB8\x02\u040E\u04E3\x03\x02\x02\x02\u040F\u0410" + + "\x075\x02\x02\u0410\u0411\x07\xC8\x02\x02\u0411\u0412\x07\u011E\x02\x02" + + "\u0412\u0413\x05\x06\x04\x02\u0413\u0414\x07\x99\x02\x02\u0414\u0415\x05"; + private static readonly _serializedATNSegment3: string = + "\u016E\xB8\x02\u0415\u04E3\x03\x02\x02\x02\u0416\u0417\x07\xEC\x02\x02" + + "\u0417\u0418\x07\u011E\x02\x02\u0418\u04E3\x05\x06\x04\x02\u0419\u041A" + + "\x07\xEC\x02\x02\u041A\u041B\x07}\x02\x02\u041B\u04E3\x05\n\x06\x02\u041C" + + "\u0424\x07\xEC\x02\x02\u041D\u0425\x05\u016C\xB7\x02\u041E\u0420\v\x02" + + "\x02\x02\u041F\u041E\x03\x02\x02\x02\u0420\u0423\x03\x02\x02\x02\u0421" + + "\u0422\x03\x02\x02\x02\u0421\u041F\x03\x02\x02\x02\u0422\u0425\x03\x02" + + "\x02\x02\u0423\u0421\x03\x02\x02\x02\u0424\u041D\x03\x02\x02\x02\u0424" + + "\u0421\x03\x02\x02\x02\u0425\u04E3\x03\x02\x02\x02\u0426\u0428\x07#\x02" + + "\x02\u0427\u0429\x07\x9F\x02\x02\u0428\u0427\x03\x02\x02\x02\u0428\u0429" + + "\x03\x02\x02\x02\u0429\u042A\x03\x02\x02\x02\u042A\u042B\x07\u011E\x02" + + "\x02\u042B\u042E\x05\x06\x04\x02\u042C\u042D\x07\xCB\x02\x02\u042D\u042F" + + "\x05> \x02\u042E\u042C\x03\x02\x02\x02\u042E\u042F\x03\x02\x02\x02\u042F" + + "\u0434\x03\x02\x02\x02\u0430\u0432\x07\x16\x02\x02\u0431\u0430\x03\x02" + + "\x02\x02\u0431\u0432\x03\x02\x02\x02\u0432\u0433\x03\x02\x02\x02\u0433" + + "\u0435\x05$\x13\x02\u0434\u0431\x03\x02\x02\x02\u0434\u0435\x03\x02\x02" + + "\x02\u0435\u04E3\x03\x02\x02\x02\u0436\u0437\x07\u013B\x02\x02\u0437\u043A" + + "\x07\u011E\x02\x02\u0438\u0439\x07\x89\x02\x02\u0439\u043B\x07i\x02\x02" + + "\u043A\u0438\x03\x02\x02\x02\u043A\u043B\x03\x02\x02\x02\u043B\u043C\x03" + + "\x02\x02\x02\u043C\u04E3\x05\x06\x04\x02\u043D\u043E\x07-\x02\x02\u043E" + + "\u04E3\x07#\x02\x02\u043F\u0440\x07\xA7\x02\x02\u0440\u0442\x07H\x02\x02" + + "\u0441\u0443\x07\xA8\x02\x02\u0442\u0441\x03\x02\x02\x02\u0442\u0443\x03" + + "\x02\x02\x02\u0443\u0444\x03\x02\x02\x02\u0444\u0445\x07\x91\x02\x02\u0445" + + "\u0447\x05\u016C\xB7\x02\u0446\u0448\x07\xD4\x02\x02\u0447\u0446\x03\x02" + + "\x02\x02\u0447\u0448\x03\x02\x02\x02\u0448\u0449\x03\x02\x02\x02\u0449" + + "\u044A\x07\x98\x02\x02\u044A\u044B\x07\u011E\x02\x02\u044B\u044D\x05\x06" + + "\x04\x02\u044C\u044E\x05*\x16\x02\u044D\u044C\x03\x02\x02\x02\u044D\u044E" + + "\x03\x02\x02\x02\u044E\u04E3\x03\x02\x02\x02\u044F\u0450\x07\u0136\x02" + + "\x02\u0450\u0451\x07\u011E\x02\x02\u0451\u0453\x05\x06\x04\x02\u0452\u0454" + + "\x05*\x16\x02\u0453\u0452\x03\x02\x02\x02\u0453\u0454\x03\x02\x02\x02" + + "\u0454\u04E3\x03\x02\x02\x02\u0455\u0457\x07\xBA\x02\x02\u0456\u0455\x03" + + "\x02\x02\x02\u0456\u0457\x03\x02\x02\x02\u0457\u0458\x03\x02\x02\x02\u0458" + + "\u0459\x07\xEE\x02\x02\u0459\u045A\x07\u011E\x02\x02\u045A\u045D\x05\x06" + + "\x04\x02\u045B\u045C\t\v\x02\x02\u045C\u045E\x07\xD7\x02\x02\u045D\u045B" + + "\x03\x02\x02\x02\u045D\u045E\x03\x02\x02\x02\u045E\u04E3\x03\x02\x02\x02" + + "\u045F\u0460\t\f\x02\x02\u0460\u0464\x05\u0160\xB1\x02\u0461\u0463\v\x02" + + "\x02\x02\u0462\u0461\x03\x02\x02\x02\u0463\u0466\x03\x02\x02\x02\u0464" + + "\u0465\x03\x02\x02\x02\u0464\u0462\x03\x02\x02\x02\u0465\u04E3\x03\x02" + + "\x02\x02\u0466\u0464\x03\x02\x02\x02\u0467\u0468\x07\u0107\x02\x02\u0468" + + "\u046C\x07\xF7\x02\x02\u0469\u046B\v\x02\x02\x02\u046A\u0469\x03\x02\x02" + + "\x02\u046B\u046E\x03\x02\x02\x02\u046C\u046D\x03\x02\x02\x02\u046C\u046A" + + "\x03\x02\x02\x02\u046D\u04E3\x03\x02\x02\x02\u046E\u046C\x03\x02\x02\x02" + + "\u046F\u0470\x07\u0107\x02\x02\u0470\u0471\x07\u0126\x02\x02\u0471\u0472" + + "\x07\u0157\x02\x02\u0472\u04E3\x05\u011A\x8E\x02\u0473\u0474\x07\u0107" + + "\x02\x02\u0474\u0475\x07\u0126\x02\x02\u0475\u0476\x07\u0157\x02\x02\u0476" + + "\u04E3\x05\x10\t\x02\u0477\u0478\x07\u0107\x02\x02\u0478\u0479\x07\u0126" + + "\x02\x02\u0479\u047D\x07\u0157\x02\x02\u047A\u047C\v\x02\x02\x02\u047B" + + "\u047A\x03\x02\x02\x02\u047C\u047F\x03\x02\x02\x02\u047D\u047E\x03\x02" + + "\x02\x02\u047D\u047B\x03\x02\x02\x02\u047E\u04E3\x03\x02\x02\x02\u047F" + + "\u047D\x03\x02\x02\x02\u0480\u0481\x07\u0107\x02\x02\u0481\u0482\t\r\x02" + + "\x02\u0482\u04E3\x05|?\x02\u0483\u0484\x07\u0107\x02\x02\u0484\u0485\t" + + "\r\x02\x02\u0485\u0486\x07\x04\x02\x02\u0486\u0487\x05\xE4s\x02\u0487" + + "\u0488\x07\x05\x02\x02\u0488\u0489\x07\u0158\x02\x02\u0489\u048A\x07\x04" + + "\x02\x02\u048A\u048B\x05$\x13\x02\u048B\u048C\x07\x05\x02\x02\u048C\u04E3" + + "\x03\x02\x02\x02\u048D\u048E\x07\u0107\x02\x02\u048E\u048F\x05\x12\n\x02" + + "\u048F\u0490\x07\u0158\x02\x02\u0490\u0491\x05\x14\v\x02\u0491\u04E3\x03" + + "\x02\x02\x02\u0492\u0493\x07\u0107\x02\x02\u0493\u049B\x05\x12\n\x02\u0494" + + "\u0498\x07\u0158\x02\x02\u0495\u0497\v\x02\x02\x02\u0496\u0495\x03\x02" + + "\x02\x02\u0497\u049A\x03\x02\x02\x02\u0498\u0499\x03\x02\x02\x02\u0498" + + "\u0496\x03\x02\x02\x02\u0499\u049C\x03\x02\x02\x02\u049A\u0498\x03\x02" + + "\x02\x02\u049B\u0494\x03\x02\x02\x02\u049B\u049C\x03\x02\x02\x02\u049C" + + "\u04E3\x03\x02\x02\x02\u049D\u04A1\x07\u0107\x02\x02\u049E\u04A0\v\x02" + + "\x02\x02\u049F\u049E\x03\x02\x02\x02\u04A0\u04A3\x03\x02\x02\x02\u04A1" + + "\u04A2\x03\x02\x02\x02\u04A1\u049F\x03\x02\x02\x02\u04A2\u04A4\x03\x02" + + "\x02\x02\u04A3\u04A1\x03\x02\x02\x02\u04A4\u04A5\x07\u0158\x02\x02\u04A5" + + "\u04E3\x05\x14\v\x02\u04A6\u04AA\x07\u0107\x02\x02\u04A7\u04A9\v\x02\x02" + + "\x02\u04A8\u04A7\x03\x02\x02\x02\u04A9\u04AC\x03\x02\x02\x02\u04AA\u04AB" + + "\x03\x02\x02\x02\u04AA\u04A8\x03\x02\x02\x02\u04AB\u04E3\x03\x02\x02\x02" + + "\u04AC\u04AA\x03\x02\x02\x02\u04AD\u04AE\x07\xF1\x02\x02\u04AE\u04E3\x05" + + "\x12\n\x02\u04AF\u04B3\x07\xF1\x02\x02\u04B0\u04B2\v\x02\x02\x02\u04B1" + + "\u04B0\x03\x02\x02\x02\u04B2\u04B5\x03\x02\x02\x02\u04B3\u04B4\x03\x02" + + "\x02\x02\u04B3\u04B1\x03\x02\x02\x02\u04B4\u04E3\x03\x02\x02\x02\u04B5" + + "\u04B3\x03\x02\x02\x02\u04B6\u04B7\x07=\x02\x02\u04B7\u04BB\x07\x8E\x02" + + "\x02\u04B8\u04B9\x07\x89\x02\x02\u04B9\u04BA\x07\xC2\x02\x02\u04BA\u04BC" + + "\x07i\x02\x02\u04BB\u04B8\x03\x02\x02\x02\u04BB\u04BC\x03\x02\x02\x02" + + "\u04BC\u04BD\x03\x02\x02\x02\u04BD\u04BE\x05\u0160\xB1\x02\u04BE\u04C0" + + "\x07\xC8\x02\x02\u04BF\u04C1\x07\u011E\x02\x02\u04C0\u04BF\x03\x02\x02" + + "\x02\u04C0\u04C1\x03\x02\x02\x02\u04C1\u04C2\x03\x02\x02\x02\u04C2\u04C5" + + "\x05\x06\x04\x02\u04C3\u04C4\x07\u0145\x02\x02\u04C4\u04C6\x05\u0160\xB1" + + "\x02\u04C5\u04C3\x03\x02\x02\x02\u04C5\u04C6\x03\x02\x02\x02\u04C6\u04C7" + + "\x03\x02\x02\x02\u04C7\u04C8\x07\x04\x02\x02\u04C8\u04C9\x05\xE8u\x02" + + "\u04C9\u04CC\x07\x05\x02\x02\u04CA\u04CB\x07\xCB\x02\x02\u04CB\u04CD\x05" + + "> \x02\u04CC\u04CA\x03\x02\x02\x02\u04CC\u04CD\x03\x02\x02\x02\u04CD\u04E3" + + "\x03\x02\x02\x02\u04CE\u04CF\x07a\x02\x02\u04CF\u04D2\x07\x8E\x02\x02" + + "\u04D0\u04D1\x07\x89\x02\x02\u04D1\u04D3\x07i\x02\x02\u04D2\u04D0\x03" + + "\x02\x02\x02\u04D2\u04D3\x03\x02\x02\x02\u04D3\u04D4\x03\x02\x02\x02\u04D4" + + "\u04D5\x05\u0160\xB1\x02\u04D5\u04D7\x07\xC8\x02\x02\u04D6\u04D8\x07\u011E" + + "\x02\x02\u04D7\u04D6\x03\x02\x02\x02\u04D7\u04D8\x03\x02\x02\x02\u04D8" + + "\u04D9\x03\x02\x02\x02\u04D9\u04DA\x05\x06\x04\x02\u04DA\u04E3\x03\x02" + + "\x02\x02\u04DB\u04DF\x05\x16\f\x02\u04DC\u04DE\v\x02\x02\x02\u04DD\u04DC" + + "\x03\x02\x02\x02\u04DE\u04E1\x03\x02\x02\x02\u04DF\u04E0\x03\x02\x02\x02" + + "\u04DF\u04DD\x03\x02\x02\x02\u04E0\u04E3\x03\x02\x02\x02\u04E1\u04DF\x03" + + "\x02\x02\x02\u04E2\u018C\x03\x02\x02\x02\u04E2\u018E\x03\x02\x02\x02\u04E2" + + "\u0191\x03\x02\x02\x02\u04E2\u0193\x03\x02\x02\x02\u04E2\u0197\x03\x02" + + "\x02\x02\u04E2\u019D\x03\x02\x02\x02\u04E2\u01AF\x03\x02\x02\x02\u04E2" + + "\u01B6\x03\x02\x02\x02\u04E2\u01BC\x03\x02\x02\x02\u04E2\u01C6\x03\x02" + + "\x02\x02\u04E2\u01D2\x03\x02\x02\x02\u04E2\u01E3\x03\x02\x02\x02\u04E2" + + "\u01F8\x03\x02\x02\x02\u04E2\u0209\x03\x02\x02\x02\u04E2\u021A\x03\x02" + + "\x02\x02\u04E2\u0225\x03\x02\x02\x02\u04E2\u022C\x03\x02\x02\x02\u04E2" + + "\u0235\x03\x02\x02\x02\u04E2\u023E\x03\x02\x02\x02\u04E2\u024B\x03\x02" + + "\x02\x02\u04E2\u0256\x03\x02\x02\x02\u04E2\u0260\x03\x02\x02\x02\u04E2" + + "\u026A\x03\x02\x02\x02\u04E2\u0278\x03\x02\x02\x02\u04E2\u0283\x03\x02" + + "\x02\x02\u04E2\u0292\x03\x02\x02\x02\u04E2\u029E\x03\x02\x02\x02\u04E2" + + "\u02AC\x03\x02\x02\x02\u04E2\u02B6\x03\x02\x02\x02\u04E2\u02C7\x03\x02" + + "\x02\x02\u04E2\u02CF\x03\x02\x02\x02\u04E2\u02E5\x03\x02\x02\x02\u04E2" + + "\u02EE\x03\x02\x02\x02\u04E2\u02F4\x03\x02\x02\x02\u04E2\u02FE\x03\x02" + + "\x02\x02\u04E2\u0305\x03\x02\x02\x02\u04E2\u0328\x03\x02\x02\x02\u04E2" + + "\u033E\x03\x02\x02\x02\u04E2\u0346\x03\x02\x02\x02\u04E2\u0362\x03\x02" + + "\x02\x02\u04E2\u036C\x03\x02\x02\x02\u04E2\u037B\x03\x02\x02\x02\u04E2" + + "\u0383\x03\x02\x02\x02\u04E2\u0388\x03\x02\x02\x02\u04E2\u0394\x03\x02" + + "\x02\x02\u04E2\u03A0\x03\x02\x02\x02\u04E2\u03A9\x03\x02\x02\x02\u04E2" + + "\u03B1\x03\x02\x02\x02\u04E2\u03BD\x03\x02\x02\x02\u04E2\u03C3\x03\x02" + + "\x02\x02\u04E2\u03D5\x03\x02\x02\x02\u04E2\u03DD\x03\x02\x02\x02\u04E2" + + "\u03E0\x03\x02\x02\x02\u04E2\u03E8\x03\x02\x02\x02\u04E2\u03EE\x03\x02" + + "\x02\x02\u04E2\u03F5\x03\x02\x02\x02\u04E2\u0403\x03\x02\x02\x02\u04E2" + + "\u0408\x03\x02\x02\x02\u04E2\u040F\x03\x02\x02\x02\u04E2\u0416\x03\x02" + + "\x02\x02\u04E2\u0419\x03\x02\x02\x02\u04E2\u041C\x03\x02\x02\x02\u04E2" + + "\u0426\x03\x02\x02\x02\u04E2\u0436\x03\x02\x02\x02\u04E2\u043D\x03\x02" + + "\x02\x02\u04E2\u043F\x03\x02\x02\x02\u04E2\u044F\x03\x02\x02\x02\u04E2" + + "\u0456\x03\x02\x02\x02\u04E2\u045F\x03\x02\x02\x02\u04E2\u0467\x03\x02" + + "\x02\x02\u04E2\u046F\x03\x02\x02\x02\u04E2\u0473\x03\x02\x02\x02\u04E2" + + "\u0477\x03\x02\x02\x02\u04E2\u0480\x03\x02\x02\x02\u04E2\u0483\x03\x02" + + "\x02\x02\u04E2\u048D\x03\x02\x02\x02\u04E2\u0492\x03\x02\x02\x02\u04E2" + + "\u049D\x03\x02\x02\x02\u04E2\u04A6\x03\x02\x02\x02\u04E2\u04AD\x03\x02" + + "\x02\x02\u04E2\u04AF\x03\x02\x02\x02\u04E2\u04B6\x03\x02\x02\x02\u04E2" + + "\u04CE\x03\x02\x02\x02\u04E2\u04DB\x03\x02\x02\x02\u04E3\x0F\x03\x02\x02" + + "\x02\u04E4\u04E7\x05\u016C\xB7\x02\u04E5\u04E7\x07\xA8\x02\x02\u04E6\u04E4" + + "\x03\x02\x02\x02\u04E6\u04E5\x03\x02\x02\x02\u04E7\x11\x03\x02\x02\x02" + + "\u04E8\u04E9\x05\u0164\xB3\x02\u04E9\x13\x03\x02\x02\x02\u04EA\u04EB\x05" + + "\u0166\xB4\x02\u04EB\x15\x03\x02\x02\x02\u04EC\u04ED\x07=\x02\x02\u04ED" + + "\u0595\x07\xF7\x02\x02\u04EE\u04EF\x07a\x02\x02\u04EF\u0595\x07\xF7\x02" + + "\x02\u04F0\u04F2\x07\x81\x02\x02\u04F1\u04F3\x07\xF7\x02\x02\u04F2\u04F1" + + "\x03\x02\x02\x02\u04F2\u04F3\x03\x02\x02\x02\u04F3\u0595\x03\x02\x02\x02" + + "\u04F4\u04F6\x07\xF4\x02\x02\u04F5\u04F7\x07\xF7\x02\x02\u04F6\u04F5\x03" + + "\x02\x02\x02\u04F6\u04F7\x03\x02\x02\x02\u04F7\u0595\x03\x02\x02\x02\u04F8" + + "\u04F9\x07\u010B\x02\x02\u04F9\u0595\x07\x81\x02\x02\u04FA\u04FB\x07\u010B" + + "\x02\x02\u04FB\u04FD\x07\xF7\x02\x02\u04FC\u04FE\x07\x81\x02\x02\u04FD" + + "\u04FC\x03\x02\x02\x02\u04FD\u04FE\x03\x02\x02\x02\u04FE\u0595\x03\x02" + + "\x02\x02\u04FF\u0500\x07\u010B\x02\x02\u0500\u0595\x07\xE0\x02\x02\u0501" + + "\u0502\x07\u010B\x02\x02\u0502\u0595\x07\xF8\x02\x02\u0503\u0504\x07\u010B" + + "\x02\x02\u0504\u0505\x07@\x02\x02\u0505\u0595\x07\xF8\x02\x02\u0506\u0507" + + "\x07k\x02\x02\u0507\u0595\x07\u011E\x02\x02\u0508\u0509\x07\x8B\x02\x02" + + "\u0509\u0595\x07\u011E\x02\x02\u050A\u050B\x07\u010B\x02\x02\u050B\u0595" + + "\x078\x02\x02\u050C\u050D\x07\u010B\x02\x02\u050D\u050E\x07=\x02\x02\u050E" + + "\u0595\x07\u011E\x02\x02\u050F\u0510\x07\u010B\x02\x02\u0510\u0595\x07" + + "\u0132\x02\x02\u0511\u0512\x07\u010B\x02\x02\u0512\u0595\x07\x8F\x02\x02" + + "\u0513\u0514\x07\u010B\x02\x02\u0514\u0595\x07\xAB\x02\x02\u0515\u0516" + + "\x07=\x02\x02\u0516\u0595\x07\x8E\x02\x02\u0517\u0518\x07a\x02\x02\u0518" + + "\u0595\x07\x8E\x02\x02\u0519\u051A\x07\r\x02\x02\u051A\u0595\x07\x8E\x02" + + "\x02\u051B\u051C\x07\xAA\x02\x02\u051C\u0595\x07\u011E\x02\x02\u051D\u051E" + + "\x07\xAA\x02\x02\u051E\u0595\x07J\x02\x02\u051F\u0520\x07\u013F\x02\x02" + + "\u0520\u0595\x07\u011E\x02\x02\u0521\u0522\x07\u013F\x02\x02\u0522\u0595" + + "\x07J\x02\x02\u0523\u0524\x07=\x02\x02\u0524\u0525\x07\u0123\x02\x02\u0525" + + "\u0595\x07\xAE\x02\x02\u0526\u0527\x07a\x02\x02\u0527\u0528\x07\u0123" + + "\x02\x02\u0528\u0595\x07\xAE\x02\x02\u0529\u052A\x07\r\x02\x02\u052A\u052B" + + "\x07\u011E\x02\x02\u052B\u052C\x05\xECw\x02\u052C\u052D\x07\xC2\x02\x02" + + "\u052D\u052E\x07/\x02\x02\u052E\u0595\x03\x02\x02\x02\u052F\u0530\x07" + + "\r\x02\x02\u0530\u0531\x07\u011E\x02\x02\u0531\u0532\x05\xECw\x02\u0532" + + "\u0533\x07/\x02\x02\u0533\u0534\x07!\x02\x02\u0534\u0595\x03\x02\x02\x02" + + "\u0535\u0536\x07\r\x02\x02\u0536\u0537\x07\u011E\x02\x02\u0537\u0538\x05" + + "\xECw\x02\u0538\u0539\x07\xC2\x02\x02\u0539\u053A\x07\u0111\x02\x02\u053A" + + "\u0595\x03\x02\x02\x02\u053B\u053C\x07\r\x02\x02\u053C\u053D\x07\u011E" + + "\x02\x02\u053D\u053E\x05\xECw\x02\u053E\u053F\x07\u010D\x02\x02\u053F" + + "\u0540\x07!\x02\x02\u0540\u0595\x03\x02\x02\x02\u0541\u0542\x07\r\x02" + + "\x02\u0542\u0543\x07\u011E\x02\x02\u0543\u0544\x05\xECw\x02\u0544\u0545" + + "\x07\xC2\x02\x02\u0545\u0546\x07\u010D\x02\x02\u0546\u0595\x03\x02\x02" + + "\x02\u0547\u0548\x07\r\x02\x02\u0548\u0549\x07\u011E\x02\x02\u0549\u054A" + + "\x05\xECw\x02\u054A\u054B\x07\xC2\x02\x02\u054B\u054C\x07\u0115\x02\x02" + + "\u054C\u054D\x07\x16\x02\x02\u054D\u054E\x07[\x02\x02\u054E\u0595\x03" + + "\x02\x02\x02\u054F\u0550\x07\r\x02\x02\u0550\u0551\x07\u011E\x02\x02\u0551" + + "\u0552\x05\xECw\x02\u0552\u0553\x07\u0107\x02\x02\u0553\u0554\x07\u010D" + + "\x02\x02\u0554\u0555\x07\xA9\x02\x02\u0555\u0595\x03\x02\x02\x02\u0556" + + "\u0557\x07\r\x02\x02\u0557\u0558\x07\u011E\x02\x02\u0558\u0559\x05\xEC" + + "w\x02\u0559\u055A\x07g\x02\x02\u055A\u055B\x07\xD5\x02\x02\u055B\u0595" + + "\x03\x02\x02\x02\u055C\u055D\x07\r\x02\x02\u055D\u055E\x07\u011E\x02\x02" + + "\u055E\u055F\x05\xECw\x02\u055F\u0560\x07\x14\x02\x02\u0560\u0561\x07" + + "\xD5\x02\x02\u0561\u0595\x03\x02\x02\x02\u0562\u0563\x07\r\x02\x02\u0563" + + "\u0564\x07\u011E\x02\x02\u0564\u0565\x05\xECw\x02\u0565\u0566\x07\u0139" + + "\x02\x02\u0566\u0567\x07\xD5\x02\x02\u0567\u0595\x03\x02\x02\x02\u0568" + + "\u0569\x07\r\x02\x02\u0569\u056A\x07\u011E\x02\x02\u056A\u056B\x05\xEC" + + "w\x02\u056B\u056C\x07\u012F\x02\x02\u056C\u0595\x03\x02\x02\x02\u056D" + + "\u056E\x07\r\x02\x02\u056E\u056F\x07\u011E\x02\x02\u056F\u0571\x05\xEC" + + "w\x02\u0570\u0572\x05*\x16\x02\u0571\u0570\x03\x02\x02\x02\u0571\u0572" + + "\x03\x02\x02\x02\u0572\u0573\x03\x02\x02\x02\u0573\u0574\x077\x02\x02" + + "\u0574\u0595\x03\x02\x02\x02\u0575\u0576\x07\r\x02\x02\u0576\u0577\x07" + + "\u011E\x02\x02\u0577\u0579\x05\xECw\x02\u0578\u057A\x05*\x16\x02\u0579" + + "\u0578\x03\x02\x02\x02\u0579\u057A\x03\x02\x02\x02\u057A\u057B\x03\x02" + + "\x02\x02\u057B\u057C\x07:\x02\x02\u057C\u0595\x03\x02\x02\x02\u057D\u057E" + + "\x07\r\x02\x02\u057E\u057F\x07\u011E\x02\x02\u057F\u0581\x05\xECw\x02" + + "\u0580\u0582\x05*\x16\x02\u0581\u0580\x03\x02\x02\x02\u0581\u0582\x03" + + "\x02\x02\x02\u0582\u0583\x03\x02\x02\x02\u0583\u0584\x07\u0107\x02\x02" + + "\u0584\u0585\x07s\x02\x02\u0585\u0595\x03\x02\x02\x02\u0586\u0587\x07" + + "\r\x02\x02\u0587\u0588\x07\u011E\x02\x02\u0588\u058A\x05\xECw\x02\u0589" + + "\u058B\x05*\x16\x02\u058A\u0589\x03\x02\x02\x02\u058A\u058B\x03\x02\x02" + + "\x02\u058B\u058C\x03\x02\x02\x02\u058C\u058D\x07\xF0\x02\x02\u058D\u058E" + + "\x074\x02\x02\u058E\u0595\x03\x02\x02\x02\u058F\u0590\x07\u0113\x02\x02" + + "\u0590\u0595\x07\u0131\x02\x02\u0591\u0595\x076\x02\x02\u0592\u0595\x07" + + "\xF9\x02\x02\u0593\u0595\x07Z\x02\x02\u0594\u04EC\x03\x02\x02\x02\u0594" + + "\u04EE\x03\x02\x02\x02\u0594\u04F0\x03\x02\x02\x02\u0594\u04F4\x03\x02" + + "\x02\x02\u0594\u04F8\x03\x02\x02\x02\u0594\u04FA\x03\x02\x02\x02\u0594" + + "\u04FF\x03\x02\x02\x02\u0594\u0501\x03\x02\x02\x02\u0594\u0503\x03\x02" + + "\x02\x02\u0594\u0506\x03\x02\x02\x02\u0594\u0508\x03\x02\x02\x02\u0594" + + "\u050A\x03\x02\x02\x02\u0594\u050C\x03\x02\x02\x02\u0594\u050F\x03\x02" + + "\x02\x02\u0594\u0511\x03\x02\x02\x02\u0594\u0513\x03\x02\x02\x02\u0594" + + "\u0515\x03\x02\x02\x02\u0594\u0517\x03\x02\x02\x02\u0594\u0519\x03\x02" + + "\x02\x02\u0594\u051B\x03\x02\x02\x02\u0594\u051D\x03\x02\x02\x02\u0594" + + "\u051F\x03\x02\x02\x02\u0594\u0521\x03\x02\x02\x02\u0594\u0523\x03\x02" + + "\x02\x02\u0594\u0526\x03\x02\x02\x02\u0594\u0529\x03\x02\x02\x02\u0594" + + "\u052F\x03\x02\x02\x02\u0594\u0535\x03\x02\x02\x02\u0594\u053B\x03\x02" + + "\x02\x02\u0594\u0541\x03\x02\x02\x02\u0594\u0547\x03\x02\x02\x02\u0594" + + "\u054F\x03\x02\x02\x02\u0594\u0556\x03\x02\x02\x02\u0594\u055C\x03\x02" + + "\x02\x02\u0594\u0562\x03\x02\x02\x02\u0594\u0568\x03\x02\x02\x02\u0594" + + "\u056D\x03\x02\x02\x02\u0594\u0575\x03\x02\x02\x02\u0594\u057D\x03\x02" + + "\x02\x02\u0594\u0586\x03\x02\x02\x02\u0594\u058F\x03\x02\x02\x02\u0594" + + "\u0591\x03\x02\x02\x02\u0594\u0592\x03\x02\x02\x02\u0594\u0593\x03\x02" + + "\x02\x02\u0595\x17\x03\x02\x02\x02\u0596\u0598\x07=\x02\x02\u0597\u0599" + + "\x07\u0123\x02\x02\u0598\u0597\x03\x02\x02\x02\u0598\u0599\x03\x02\x02" + + "\x02\u0599\u059B\x03\x02\x02\x02\u059A\u059C\x07m\x02\x02\u059B\u059A" + + "\x03\x02\x02\x02\u059B\u059C\x03\x02\x02\x02\u059C\u059D\x03\x02\x02\x02" + + "\u059D\u05A1\x07\u011E\x02\x02\u059E\u059F\x07\x89\x02\x02\u059F\u05A0" + + "\x07\xC2\x02\x02\u05A0\u05A2\x07i\x02\x02\u05A1\u059E\x03\x02\x02\x02" + + "\u05A1\u05A2\x03\x02\x02\x02\u05A2\u05A3\x03\x02\x02\x02\u05A3\u05A4\x05" + + "\x06\x04\x02\u05A4\x19\x03\x02\x02\x02\u05A5\u05A6\x07=\x02\x02\u05A6" + + "\u05A8\x07\xCC\x02\x02\u05A7\u05A5\x03\x02\x02\x02\u05A7\u05A8\x03\x02" + + "\x02\x02\u05A8\u05A9\x03\x02\x02\x02\u05A9\u05AA\x07\xF0\x02\x02\u05AA" + + "\u05AB\x07\u011E\x02\x02\u05AB\u05AC\x05\x06\x04\x02\u05AC\x1B\x03\x02" + + "\x02\x02\u05AD\u05AE\x07/\x02\x02\u05AE\u05AF\x07!\x02\x02\u05AF\u05B3" + + "\x05\xC4c\x02\u05B0\u05B1\x07\u0111\x02\x02\u05B1\u05B2\x07!\x02\x02\u05B2" + + "\u05B4\x05\xC8e\x02\u05B3\u05B0\x03\x02\x02\x02\u05B3\u05B4\x03\x02\x02" + + "\x02\u05B4\u05B5\x03\x02\x02\x02\u05B5\u05B6\x07\x98\x02\x02\u05B6\u05B7" + + "\x07\u0175\x02\x02\u05B7\u05B8\x07 \x02\x02\u05B8\x1D\x03\x02\x02\x02" + + "\u05B9\u05BA\x07\u010D\x02\x02\u05BA\u05BB\x07!\x02\x02\u05BB\u05BC\x05" + + "\xC4c\x02\u05BC\u05BF\x07\xC8\x02\x02\u05BD\u05C0\x05J&\x02\u05BE\u05C0" + + "\x05L\'\x02\u05BF\u05BD\x03\x02\x02\x02\u05BF\u05BE\x03\x02\x02\x02\u05C0" + + "\u05C4\x03\x02\x02\x02\u05C1\u05C2\x07\u0115\x02\x02\u05C2\u05C3\x07\x16" + + "\x02\x02\u05C3\u05C5\x07[\x02\x02\u05C4\u05C1\x03\x02\x02\x02\u05C4\u05C5" + + "\x03\x02\x02\x02\u05C5\x1F\x03\x02\x02\x02\u05C6\u05C7\x07\xA9\x02\x02" + + "\u05C7\u05C8\x05\u016C\xB7\x02\u05C8!\x03\x02\x02\x02\u05C9\u05CA\x07" + + "5\x02\x02\u05CA\u05CB\x05\u016C\xB7\x02\u05CB#\x03\x02\x02\x02\u05CC\u05CE" + + "\x056\x1C\x02\u05CD\u05CC\x03\x02\x02\x02\u05CD\u05CE\x03\x02\x02\x02" + + "\u05CE\u05CF\x03\x02\x02\x02\u05CF\u05D0\x05^0\x02\u05D0\u05D1\x05Z.\x02" + + "\u05D1%\x03\x02\x02\x02\u05D2\u05D3\x07\x93\x02\x02\u05D3\u05D5\x07\xD4" + + "\x02\x02\u05D4\u05D6\x07\u011E\x02\x02\u05D5\u05D4\x03\x02\x02\x02\u05D5" + + "\u05D6\x03\x02\x02\x02\u05D6\u05D7\x03\x02\x02\x02\u05D7\u05DE\x05\x06" + + "\x04\x02\u05D8\u05DC\x05*\x16\x02\u05D9\u05DA\x07\x89\x02\x02\u05DA\u05DB" + + "\x07\xC2\x02\x02\u05DB\u05DD\x07i\x02\x02\u05DC\u05D9\x03\x02\x02\x02" + + "\u05DC\u05DD\x03\x02\x02\x02\u05DD\u05DF\x03\x02\x02\x02\u05DE\u05D8\x03" + + "\x02\x02\x02\u05DE\u05DF\x03\x02\x02\x02\u05DF\u05E3\x03\x02\x02\x02\u05E0" + + "\u05E1\x07!\x02\x02\u05E1\u05E4\x07\xBB\x02\x02\u05E2\u05E4\x05\xC4c\x02" + + "\u05E3\u05E0\x03\x02\x02\x02\u05E3\u05E2\x03\x02\x02\x02\u05E3\u05E4\x03" + + "\x02\x02\x02\u05E4\u061D\x03\x02\x02\x02\u05E5\u05E6\x07\x93\x02\x02\u05E6" + + "\u05E8\x07\x98\x02\x02\u05E7\u05E9\x07\u011E\x02\x02\u05E8\u05E7\x03\x02" + + "\x02\x02\u05E8\u05E9\x03\x02\x02\x02\u05E9\u05EA\x03\x02\x02\x02\u05EA" + + "\u05EC\x05\x06\x04\x02\u05EB\u05ED\x05*\x16\x02\u05EC\u05EB\x03\x02\x02" + + "\x02\u05EC\u05ED\x03\x02\x02\x02\u05ED\u05F1\x03\x02\x02\x02\u05EE\u05EF" + + "\x07\x89\x02\x02\u05EF\u05F0\x07\xC2\x02\x02\u05F0\u05F2\x07i\x02\x02" + + "\u05F1\u05EE\x03\x02\x02\x02\u05F1\u05F2\x03\x02\x02\x02\u05F2\u05F6\x03" + + "\x02\x02\x02\u05F3\u05F4\x07!\x02\x02\u05F4\u05F7\x07\xBB\x02\x02\u05F5" + + "\u05F7\x05\xC4c\x02\u05F6\u05F3\x03\x02\x02\x02\u05F6\u05F5\x03\x02\x02" + + "\x02\u05F6\u05F7\x03\x02\x02\x02\u05F7\u061D\x03\x02\x02\x02\u05F8\u05F9" + + "\x07\x93\x02\x02\u05F9\u05FB\x07\x98\x02\x02\u05FA\u05FC\x07\u011E\x02" + + "\x02\u05FB\u05FA\x03\x02\x02\x02\u05FB\u05FC\x03\x02\x02\x02\u05FC\u05FD" + + "\x03\x02\x02\x02\u05FD\u05FE\x05\x06\x04\x02\u05FE\u05FF\x07\xF0\x02\x02" + + "\u05FF\u0600\x05\x80A\x02\u0600\u061D\x03\x02\x02\x02\u0601\u0602\x07" + + "\x93\x02\x02\u0602\u0604\x07\xD4\x02\x02\u0603\u0605\x07\xA8\x02\x02\u0604" + + "\u0603\x03\x02\x02\x02\u0604\u0605\x03\x02\x02\x02\u0605\u0606\x03\x02" + + "\x02\x02\u0606\u0607\x07\\\x02\x02\u0607\u0609\x05\u016C\xB7\x02\u0608" + + "\u060A\x05\xE2r\x02\u0609\u0608\x03\x02\x02\x02\u0609\u060A\x03\x02\x02" + + "\x02\u060A\u060C\x03\x02\x02\x02\u060B\u060D\x05N(\x02\u060C\u060B\x03" + + "\x02\x02\x02\u060C\u060D\x03\x02\x02\x02\u060D\u061D\x03\x02\x02\x02\u060E" + + "\u060F\x07\x93\x02\x02\u060F\u0611\x07\xD4\x02\x02\u0610\u0612\x07\xA8" + + "\x02\x02\u0611\u0610\x03\x02\x02\x02\u0611\u0612\x03\x02\x02\x02\u0612" + + "\u0613\x03\x02\x02\x02\u0613\u0615\x07\\\x02\x02\u0614\u0616\x05\u016C" + + "\xB7\x02\u0615\u0614\x03\x02\x02\x02\u0615\u0616\x03\x02\x02\x02\u0616" + + "\u0617\x03\x02\x02\x02\u0617\u061A\x05:\x1E\x02\u0618\u0619\x07\xCB\x02" + + "\x02\u0619\u061B\x05> \x02\u061A\u0618\x03\x02\x02\x02\u061A\u061B\x03" + + "\x02\x02\x02\u061B\u061D\x03\x02\x02\x02\u061C\u05D2\x03\x02\x02\x02\u061C" + + "\u05E5\x03\x02\x02\x02\u061C\u05F8\x03\x02\x02\x02\u061C\u0601\x03\x02" + + "\x02\x02\u061C\u060E\x03\x02\x02\x02\u061D\'\x03\x02\x02\x02\u061E\u0620" + + "\x05*\x16\x02\u061F\u0621\x05 \x11\x02\u0620\u061F\x03\x02\x02\x02\u0620" + + "\u0621\x03\x02\x02\x02\u0621)\x03\x02\x02\x02\u0622\u0623\x07\xD5\x02" + + "\x02\u0623\u0624\x07\x04\x02\x02\u0624\u0629\x05,\x17\x02\u0625\u0626" + + "\x07\x06\x02\x02\u0626\u0628\x05,\x17\x02\u0627\u0625\x03\x02\x02\x02" + + "\u0628\u062B\x03\x02\x02\x02\u0629\u0627\x03\x02\x02\x02\u0629\u062A\x03" + + "\x02\x02\x02\u062A\u062C\x03\x02\x02\x02\u062B\u0629\x03\x02\x02\x02\u062C" + + "\u062D\x07\x05\x02\x02\u062D+\x03\x02\x02\x02\u062E\u0631\x05\u0160\xB1" + + "\x02\u062F\u0630\x07\u0158\x02\x02\u0630\u0632\x05\u0110\x89\x02\u0631" + + "\u062F\x03\x02\x02\x02\u0631\u0632\x03\x02\x02\x02\u0632\u0638\x03\x02" + + "\x02\x02\u0633\u0634\x05\u0160\xB1\x02\u0634\u0635\x07\u0158\x02\x02\u0635" + + "\u0636\x07T\x02\x02\u0636\u0638\x03\x02\x02\x02\u0637\u062E\x03\x02\x02" + + "\x02\u0637\u0633\x03\x02\x02\x02\u0638-\x03\x02\x02\x02\u0639\u063A\t" + + "\x0E\x02\x02\u063A/\x03\x02\x02\x02\u063B\u063C\t\x0F\x02\x02\u063C1\x03" + + "\x02\x02\x02\u063D\u0643\x05X-\x02\u063E\u0643\x05\u016C\xB7\x02\u063F" + + "\u0643\x05\u0112\x8A\x02\u0640\u0643\x05\u0114\x8B\x02\u0641\u0643\x05" + + "\u0116\x8C\x02\u0642\u063D\x03\x02\x02\x02\u0642\u063E\x03\x02\x02\x02" + + "\u0642\u063F\x03\x02\x02\x02\u0642\u0640\x03\x02\x02\x02\u0642\u0641\x03" + + "\x02\x02\x02\u06433\x03\x02\x02\x02\u0644\u0649\x05\u0160\xB1\x02\u0645" + + "\u0646\x07\x07\x02\x02\u0646\u0648\x05\u0160\xB1\x02\u0647\u0645\x03\x02" + + "\x02\x02\u0648\u064B\x03\x02\x02\x02\u0649\u0647\x03\x02\x02\x02\u0649" + + "\u064A\x03\x02\x02\x02\u064A5\x03\x02\x02\x02\u064B\u0649\x03\x02\x02" + + "\x02\u064C\u064D\x07\u0153\x02\x02\u064D\u0652\x058\x1D\x02\u064E\u064F" + + "\x07\x06\x02\x02\u064F\u0651\x058\x1D\x02\u0650\u064E\x03\x02\x02\x02" + + "\u0651\u0654\x03\x02\x02\x02\u0652\u0650\x03\x02\x02\x02\u0652\u0653\x03" + + "\x02\x02\x02\u06537\x03\x02\x02\x02\u0654\u0652\x03\x02\x02\x02\u0655" + + "\u0657\x05\u015C\xAF\x02\u0656\u0658\x05\xC4c\x02\u0657\u0656\x03\x02" + + "\x02\x02\u0657\u0658\x03\x02\x02\x02\u0658\u065A\x03\x02\x02\x02\u0659" + + "\u065B\x07\x16\x02\x02\u065A\u0659\x03\x02\x02\x02\u065A\u065B\x03\x02" + + "\x02\x02\u065B\u065C\x03\x02\x02\x02\u065C\u065D\x07\x04\x02\x02\u065D" + + "\u065E\x05$\x13\x02\u065E\u065F\x07\x05\x02\x02\u065F9\x03\x02\x02\x02" + + "\u0660\u0661\x07\u0145\x02\x02\u0661\u0662\x05\xE6t\x02\u0662;\x03\x02" + + "\x02\x02\u0663\u0664\x07\xCB\x02\x02\u0664\u0671\x05F$\x02\u0665\u0666" + + "\x07\xD6\x02\x02\u0666\u0667\x07!\x02\x02\u0667\u0671\x05\xF4{\x02\u0668" + + "\u0671\x05\x1E\x10\x02\u0669\u0671\x05\x1C\x0F\x02\u066A\u0671\x05\xE2" + + "r\x02\u066B\u0671\x05N(\x02\u066C\u0671\x05 \x11\x02\u066D\u0671\x05\"" + + "\x12\x02\u066E\u066F\x07\u0122\x02\x02\u066F\u0671\x05> \x02\u0670\u0663" + + "\x03\x02\x02\x02\u0670\u0665\x03\x02\x02\x02\u0670\u0668\x03\x02\x02\x02" + + "\u0670\u0669\x03\x02\x02\x02\u0670\u066A\x03\x02\x02\x02\u0670\u066B\x03" + + "\x02\x02\x02\u0670\u066C\x03\x02\x02\x02\u0670\u066D\x03\x02\x02\x02\u0670" + + "\u066E\x03\x02\x02\x02\u0671\u0674\x03\x02\x02\x02\u0672\u0670\x03\x02" + + "\x02\x02\u0672\u0673\x03\x02\x02\x02\u0673=\x03\x02\x02\x02\u0674\u0672" + + "\x03\x02\x02\x02\u0675\u0676\x07\x04\x02\x02\u0676\u067B\x05@!\x02\u0677" + + "\u0678\x07\x06\x02\x02\u0678\u067A\x05@!\x02\u0679\u0677\x03\x02\x02\x02" + + "\u067A\u067D\x03\x02\x02\x02\u067B\u0679\x03\x02\x02\x02\u067B\u067C\x03" + + "\x02\x02\x02\u067C\u067E\x03\x02\x02\x02\u067D\u067B\x03\x02\x02\x02\u067E" + + "\u067F\x07\x05\x02\x02\u067F?\x03\x02\x02\x02\u0680\u0685\x05B\""; + private static readonly _serializedATNSegment4: string = + "\x02\u0681\u0683\x07\u0158\x02\x02\u0682\u0681\x03\x02\x02\x02\u0682\u0683" + + "\x03\x02\x02\x02\u0683\u0684\x03\x02\x02\x02\u0684\u0686\x05D#\x02\u0685" + + "\u0682\x03\x02\x02\x02\u0685\u0686\x03\x02\x02\x02\u0686A\x03\x02\x02" + + "\x02\u0687\u068C\x05\u0160\xB1\x02\u0688\u0689\x07\x07\x02\x02\u0689\u068B" + + "\x05\u0160\xB1\x02\u068A\u0688\x03\x02\x02\x02\u068B\u068E\x03\x02\x02" + + "\x02\u068C\u068A\x03\x02\x02\x02\u068C\u068D\x03\x02\x02\x02\u068D\u0691" + + "\x03\x02\x02\x02\u068E\u068C\x03\x02\x02\x02\u068F\u0691\x05\u016C\xB7" + + "\x02\u0690\u0687\x03\x02\x02\x02\u0690\u068F\x03\x02\x02\x02\u0691C\x03" + + "\x02\x02\x02\u0692\u0697\x07\u0175\x02\x02\u0693\u0697\x07\u0177\x02\x02" + + "\u0694\u0697\x05\u0118\x8D\x02\u0695\u0697\x05\u016C\xB7\x02\u0696\u0692" + + "\x03\x02\x02\x02\u0696\u0693\x03\x02\x02\x02\u0696\u0694\x03\x02\x02\x02" + + "\u0696\u0695\x03\x02\x02\x02\u0697E\x03\x02\x02\x02\u0698\u0699\x07\x04" + + "\x02\x02\u0699\u069E\x05H%\x02\u069A\u069B\x07\x06\x02\x02\u069B\u069D" + + "\x05H%\x02\u069C\u069A\x03\x02\x02\x02\u069D\u06A0\x03\x02\x02\x02\u069E" + + "\u069C\x03\x02\x02\x02\u069E\u069F\x03\x02\x02\x02\u069F\u06A1\x03\x02" + + "\x02\x02\u06A0\u069E\x03\x02\x02\x02\u06A1\u06A2\x07\x05\x02\x02\u06A2" + + "G\x03\x02\x02\x02\u06A3\u06A8\x05B\"\x02\u06A4\u06A6\x07\u0158\x02\x02" + + "\u06A5\u06A4\x03\x02\x02\x02\u06A5\u06A6\x03\x02\x02\x02\u06A6\u06A7\x03" + + "\x02\x02\x02\u06A7\u06A9\x05\xFC\x7F\x02\u06A8\u06A5\x03\x02\x02\x02\u06A8" + + "\u06A9\x03\x02\x02\x02\u06A9I\x03\x02\x02\x02\u06AA\u06AB\x07\x04\x02" + + "\x02\u06AB\u06B0\x05\u0110\x89\x02\u06AC\u06AD\x07\x06\x02\x02\u06AD\u06AF" + + "\x05\u0110\x89\x02\u06AE\u06AC\x03\x02\x02\x02\u06AF\u06B2\x03\x02\x02" + + "\x02\u06B0\u06AE\x03\x02\x02\x02\u06B0\u06B1\x03\x02\x02\x02\u06B1\u06B3" + + "\x03\x02\x02\x02\u06B2\u06B0\x03\x02\x02\x02\u06B3\u06B4\x07\x05\x02\x02" + + "\u06B4K\x03\x02\x02\x02\u06B5\u06B6\x07\x04\x02\x02\u06B6\u06BB\x05J&" + + "\x02\u06B7\u06B8\x07\x06\x02\x02\u06B8\u06BA\x05J&\x02\u06B9\u06B7\x03" + + "\x02\x02\x02\u06BA\u06BD\x03\x02\x02\x02\u06BB\u06B9\x03\x02\x02\x02\u06BB" + + "\u06BC\x03\x02\x02\x02\u06BC\u06BE\x03\x02\x02\x02\u06BD\u06BB\x03\x02" + + "\x02\x02\u06BE\u06BF\x07\x05\x02\x02\u06BFM\x03\x02\x02\x02\u06C0\u06C1" + + "\x07\u0115\x02\x02\u06C1\u06C2\x07\x16\x02\x02\u06C2\u06C7\x05P)\x02\u06C3" + + "\u06C4\x07\u0115\x02\x02\u06C4\u06C5\x07!\x02\x02\u06C5\u06C7\x05R*\x02" + + "\u06C6\u06C0\x03\x02\x02\x02\u06C6\u06C3\x03\x02\x02\x02\u06C7O\x03\x02" + + "\x02\x02\u06C8\u06C9\x07\x92\x02\x02\u06C9\u06CA\x05\u016C\xB7\x02\u06CA" + + "\u06CB\x07\xD0\x02\x02\u06CB\u06CC\x05\u016C\xB7\x02\u06CC\u06CF\x03\x02" + + "\x02\x02\u06CD\u06CF\x05\u0160\xB1\x02\u06CE\u06C8\x03\x02\x02\x02\u06CE" + + "\u06CD\x03\x02\x02\x02\u06CFQ\x03\x02\x02\x02\u06D0\u06D4\x05\u016C\xB7" + + "\x02\u06D1\u06D2\x07\u0153\x02\x02\u06D2\u06D3\x07\u0105\x02\x02\u06D3" + + "\u06D5\x05> \x02\u06D4\u06D1\x03\x02\x02\x02\u06D4\u06D5\x03\x02\x02\x02" + + "\u06D5S\x03\x02\x02\x02\u06D6\u06D7\x05\u0160\xB1\x02\u06D7\u06D8\x05" + + "\u016C\xB7\x02\u06D8U\x03\x02\x02\x02\u06D9\u06DA\x05&\x14\x02\u06DA\u06DB" + + "\x05$\x13\x02\u06DB\u0712\x03\x02\x02\x02\u06DC\u06DE\x05\x88E\x02\u06DD" + + "\u06DF\x05\\/\x02\u06DE\u06DD\x03\x02\x02\x02\u06DF\u06E0\x03\x02\x02" + + "\x02\u06E0\u06DE\x03\x02\x02\x02\u06E0\u06E1\x03\x02\x02\x02\u06E1\u0712" + + "\x03\x02\x02\x02\u06E2\u06E3\x07V\x02\x02\u06E3\u06E4\x07{\x02\x02\u06E4" + + "\u06E5\x05X-\x02\u06E5\u06E7\x05\xE0q\x02\u06E6\u06E8\x05\x80A\x02\u06E7" + + "\u06E6\x03\x02\x02\x02\u06E7\u06E8\x03\x02\x02\x02\u06E8\u0712\x03\x02" + + "\x02\x02\u06E9\u06EA\x07\u0142\x02\x02\u06EA\u06EB\x05X-\x02\u06EB\u06EC" + + "\x05\xE0q\x02\u06EC\u06EE\x05n8\x02\u06ED\u06EF\x05\x80A\x02\u06EE\u06ED" + + "\x03\x02\x02\x02\u06EE\u06EF\x03\x02\x02\x02\u06EF\u0712\x03\x02\x02\x02" + + "\u06F0\u06F1\x07\xB1\x02\x02\u06F1\u06F2\x07\x98\x02\x02\u06F2\u06F3\x05" + + "X-\x02\u06F3\u06F4\x05\xE0q\x02\u06F4\u06FA\x07\u0145\x02\x02\u06F5\u06FB" + + "\x05X-\x02\u06F6\u06F7\x07\x04\x02\x02\u06F7\u06F8\x05$\x13\x02\u06F8" + + "\u06F9\x07\x05\x02\x02\u06F9\u06FB\x03\x02\x02\x02\u06FA\u06F5\x03\x02" + + "\x02\x02\u06FA\u06F6\x03\x02\x02\x02\u06FB\u06FC\x03\x02\x02\x02\u06FC" + + "\u06FD\x05\xE0q\x02\u06FD\u06FE\x07\xC8\x02\x02\u06FE\u0702\x05\u0104" + + "\x83\x02\u06FF\u0701\x05p9\x02\u0700\u06FF\x03\x02\x02\x02\u0701\u0704" + + "\x03\x02\x02\x02\u0702\u0700\x03\x02\x02\x02\u0702\u0703\x03\x02\x02\x02" + + "\u0703\u0708\x03\x02\x02\x02\u0704\u0702\x03\x02\x02\x02\u0705\u0707\x05" + + "r:\x02\u0706\u0705\x03\x02\x02\x02\u0707\u070A\x03\x02\x02\x02\u0708\u0706" + + "\x03\x02\x02\x02\u0708\u0709\x03\x02\x02\x02\u0709\u070E\x03\x02\x02\x02" + + "\u070A\u0708\x03\x02\x02\x02\u070B\u070D\x05t;\x02\u070C\u070B\x03\x02" + + "\x02\x02\u070D\u0710\x03\x02\x02\x02\u070E\u070C\x03\x02\x02\x02\u070E" + + "\u070F\x03\x02\x02\x02\u070F\u0712\x03\x02\x02\x02\u0710\u070E\x03\x02" + + "\x02\x02\u0711\u06D9\x03\x02\x02\x02\u0711\u06DC\x03\x02\x02\x02\u0711" + + "\u06E2\x03\x02\x02\x02\u0711\u06E9\x03\x02\x02\x02\u0711\u06F0\x03\x02" + + "\x02\x02\u0712W\x03\x02\x02\x02\u0713\u0714\x07\x88\x02\x02\u0714\u0715" + + "\x07\x04\x02\x02\u0715\u0716\x05\xFC\x7F\x02\u0716\u0717\x07\x05\x02\x02" + + "\u0717\u071A\x03\x02\x02\x02\u0718\u071A\x05\xE6t\x02\u0719\u0713\x03" + + "\x02\x02\x02\u0719\u0718\x03\x02\x02\x02\u071AY\x03\x02\x02\x02\u071B" + + "\u071C\x07\xCD\x02\x02\u071C\u071D\x07!\x02\x02\u071D\u0722\x05b2\x02" + + "\u071E\u071F\x07\x06\x02\x02\u071F\u0721\x05b2\x02\u0720\u071E\x03\x02" + + "\x02\x02\u0721\u0724\x03\x02\x02\x02\u0722\u0720\x03\x02\x02\x02\u0722" + + "\u0723\x03\x02\x02\x02\u0723\u0726\x03\x02\x02\x02\u0724\u0722\x03\x02" + + "\x02\x02\u0725\u071B\x03\x02\x02\x02\u0725\u0726\x03\x02\x02\x02\u0726" + + "\u0731\x03\x02\x02\x02\u0727\u0728\x07.\x02\x02\u0728\u0729\x07!\x02\x02" + + "\u0729\u072E\x05\xFC\x7F\x02\u072A\u072B\x07\x06\x02\x02\u072B\u072D\x05" + + "\xFC\x7F\x02\u072C\u072A\x03\x02\x02\x02\u072D\u0730\x03\x02\x02\x02\u072E" + + "\u072C\x03\x02\x02\x02\u072E\u072F\x03\x02\x02\x02\u072F\u0732\x03\x02" + + "\x02\x02\u0730\u072E\x03\x02\x02\x02\u0731\u0727\x03\x02\x02\x02\u0731" + + "\u0732\x03\x02\x02\x02\u0732\u073D\x03\x02\x02\x02\u0733\u0734\x07^\x02" + + "\x02\u0734\u0735\x07!\x02\x02\u0735\u073A\x05\xFC\x7F\x02\u0736\u0737" + + "\x07\x06\x02\x02\u0737\u0739\x05\xFC\x7F\x02\u0738\u0736\x03\x02\x02\x02" + + "\u0739\u073C\x03\x02\x02\x02\u073A\u0738\x03\x02\x02\x02\u073A\u073B\x03" + + "\x02\x02\x02\u073B\u073E\x03\x02\x02\x02\u073C\u073A\x03\x02\x02\x02\u073D" + + "\u0733\x03\x02\x02\x02\u073D\u073E\x03\x02\x02\x02\u073E\u0749\x03\x02" + + "\x02\x02\u073F\u0740\x07\u0110\x02\x02\u0740\u0741\x07!\x02\x02\u0741" + + "\u0746\x05b2\x02\u0742\u0743\x07\x06\x02\x02\u0743\u0745\x05b2\x02\u0744" + + "\u0742\x03\x02\x02\x02\u0745\u0748\x03\x02\x02\x02\u0746\u0744\x03\x02" + + "\x02\x02\u0746\u0747\x03\x02\x02\x02\u0747\u074A\x03\x02\x02\x02\u0748" + + "\u0746\x03\x02\x02\x02\u0749\u073F\x03\x02\x02\x02\u0749\u074A\x03\x02" + + "\x02\x02\u074A\u074C\x03\x02\x02\x02\u074B\u074D\x05\u014C\xA7\x02\u074C" + + "\u074B\x03\x02\x02\x02\u074C\u074D\x03\x02\x02\x02\u074D\u0753\x03\x02" + + "\x02\x02\u074E\u0751\x07\xA4\x02\x02\u074F\u0752\x07\f\x02\x02\u0750\u0752" + + "\x05\xFC\x7F\x02\u0751\u074F\x03\x02\x02\x02\u0751\u0750\x03\x02\x02\x02" + + "\u0752\u0754\x03\x02\x02\x02\u0753\u074E\x03\x02\x02\x02\u0753\u0754\x03" + + "\x02\x02\x02\u0754\u0757\x03\x02\x02\x02\u0755\u0756\x07\xC7\x02\x02\u0756" + + "\u0758\x05\xFC\x7F\x02\u0757\u0755\x03\x02\x02\x02\u0757\u0758\x03\x02" + + "\x02\x02\u0758[\x03\x02\x02\x02\u0759\u075A\x05&\x14\x02\u075A\u075B\x05" + + "f4\x02\u075B]\x03\x02\x02\x02\u075C\u075D\b0\x01\x02\u075D\u075E\x05`" + + "1\x02\u075E\u0776\x03\x02\x02\x02\u075F\u0760\f\x05\x02\x02\u0760\u0761" + + "\x060\x03\x02\u0761\u0763\t\x10\x02\x02\u0762\u0764\x05\xB4[\x02\u0763" + + "\u0762\x03\x02\x02\x02\u0763\u0764\x03\x02\x02\x02\u0764\u0765\x03\x02" + + "\x02\x02\u0765\u0775\x05^0\x06\u0766\u0767\f\x04\x02\x02\u0767\u0768\x06" + + "0\x05\x02\u0768\u076A\x07\x94\x02\x02\u0769\u076B\x05\xB4[\x02\u076A\u0769" + + "\x03\x02\x02\x02\u076A\u076B\x03\x02\x02\x02\u076B\u076C\x03\x02\x02\x02" + + "\u076C\u0775\x05^0\x05\u076D\u076E\f\x03\x02\x02\u076E\u076F\x060\x07" + + "\x02\u076F\u0771\t\x11\x02\x02\u0770\u0772\x05\xB4[\x02\u0771\u0770\x03" + + "\x02\x02\x02\u0771\u0772\x03\x02\x02\x02\u0772\u0773\x03\x02\x02\x02\u0773" + + "\u0775\x05^0\x04\u0774\u075F\x03\x02\x02\x02\u0774\u0766\x03\x02\x02\x02" + + "\u0774\u076D\x03\x02\x02\x02\u0775\u0778\x03\x02\x02\x02\u0776\u0774\x03" + + "\x02\x02\x02\u0776\u0777\x03\x02\x02\x02\u0777_\x03\x02\x02\x02\u0778" + + "\u0776\x03\x02\x02\x02\u0779\u0783\x05h5\x02\u077A\u0783\x05d3\x02\u077B" + + "\u077C\x07\u011E\x02\x02\u077C\u0783\x05\x06\x04\x02\u077D\u0783\x05\xD2" + + "j\x02\u077E\u077F\x07\x04\x02\x02\u077F\u0780\x05$\x13\x02\u0780\u0781" + + "\x07\x05\x02\x02\u0781\u0783\x03\x02\x02\x02\u0782\u0779\x03\x02\x02\x02" + + "\u0782\u077A\x03\x02\x02\x02\u0782\u077B\x03\x02\x02\x02\u0782\u077D\x03" + + "\x02\x02\x02\u0782\u077E\x03\x02\x02\x02\u0783a\x03\x02\x02\x02\u0784" + + "\u0786\x05\xFC\x7F\x02\u0785\u0787\t\x12\x02\x02\u0786\u0785\x03\x02\x02" + + "\x02\u0786\u0787\x03\x02\x02\x02\u0787\u078A\x03\x02\x02\x02\u0788\u0789" + + "\x07\xC4\x02\x02\u0789\u078B\t\x13\x02\x02\u078A\u0788\x03\x02\x02\x02" + + "\u078A\u078B\x03\x02\x02\x02\u078Bc\x03\x02\x02\x02\u078C\u078E\x05\x88" + + "E\x02\u078D\u078F\x05f4\x02\u078E\u078D\x03\x02\x02\x02\u078F\u0790\x03" + + "\x02\x02\x02\u0790\u078E\x03\x02\x02\x02\u0790\u0791\x03\x02\x02\x02\u0791" + + "e\x03\x02\x02\x02\u0792\u0794\x05j6\x02\u0793\u0795\x05\x80A\x02\u0794" + + "\u0793\x03\x02\x02\x02\u0794\u0795\x03\x02\x02\x02\u0795\u0796\x03\x02" + + "\x02\x02\u0796\u0797\x05Z.\x02\u0797\u07AE\x03\x02\x02\x02\u0798\u079C" + + "\x05l7\x02\u0799\u079B\x05\xB2Z\x02\u079A\u0799\x03\x02\x02\x02\u079B" + + "\u079E\x03\x02\x02\x02\u079C\u079A\x03\x02\x02\x02\u079C\u079D\x03\x02" + + "\x02\x02\u079D\u07A0\x03\x02\x02\x02\u079E\u079C\x03\x02\x02\x02\u079F" + + "\u07A1\x05\x80A\x02\u07A0\u079F\x03\x02\x02\x02\u07A0\u07A1\x03\x02\x02" + + "\x02\u07A1\u07A3\x03\x02\x02\x02\u07A2\u07A4\x05\x8CG\x02\u07A3\u07A2" + + "\x03\x02\x02\x02\u07A3\u07A4\x03\x02\x02\x02\u07A4\u07A6\x03\x02\x02\x02" + + "\u07A5\u07A7\x05\x82B\x02\u07A6\u07A5\x03\x02\x02\x02\u07A6\u07A7\x03" + + "\x02\x02\x02\u07A7\u07A9\x03\x02\x02\x02\u07A8\u07AA\x05\u014C\xA7\x02" + + "\u07A9\u07A8\x03\x02\x02\x02\u07A9\u07AA\x03\x02\x02\x02\u07AA\u07AB\x03" + + "\x02\x02\x02\u07AB\u07AC\x05Z.\x02\u07AC\u07AE\x03\x02\x02\x02\u07AD\u0792" + + "\x03\x02\x02\x02\u07AD\u0798\x03\x02\x02\x02\u07AEg\x03\x02\x02\x02\u07AF" + + "\u07B1\x05j6\x02\u07B0\u07B2\x05\x88E\x02\u07B1\u07B0\x03\x02\x02\x02" + + "\u07B1\u07B2\x03\x02\x02\x02\u07B2\u07B6\x03\x02\x02\x02\u07B3\u07B5\x05" + + "\xB2Z\x02\u07B4\u07B3\x03\x02\x02\x02\u07B5\u07B8\x03\x02\x02\x02\u07B6" + + "\u07B4\x03\x02\x02\x02\u07B6\u07B7\x03\x02\x02\x02\u07B7\u07BA\x03\x02" + + "\x02\x02\u07B8\u07B6\x03\x02\x02\x02\u07B9\u07BB\x05\x80A\x02\u07BA\u07B9" + + "\x03\x02\x02\x02\u07BA\u07BB\x03\x02\x02\x02\u07BB\u07BD\x03\x02\x02\x02" + + "\u07BC\u07BE\x05\x8CG\x02\u07BD\u07BC\x03\x02\x02\x02\u07BD\u07BE\x03" + + "\x02\x02\x02\u07BE\u07C0\x03\x02\x02\x02\u07BF\u07C1\x05\x82B\x02\u07C0" + + "\u07BF\x03\x02\x02\x02\u07C0\u07C1\x03\x02\x02\x02\u07C1\u07C3\x03\x02" + + "\x02\x02\u07C2\u07C4\x05\u014C\xA7\x02\u07C3\u07C2\x03\x02\x02\x02\u07C3" + + "\u07C4\x03\x02\x02\x02\u07C4\u07DC\x03\x02\x02\x02\u07C5\u07C7\x05l7\x02" + + "\u07C6\u07C8\x05\x88E\x02\u07C7\u07C6\x03\x02\x02\x02\u07C7\u07C8\x03" + + "\x02\x02\x02\u07C8\u07CC\x03\x02\x02\x02\u07C9\u07CB\x05\xB2Z\x02\u07CA" + + "\u07C9\x03\x02\x02\x02\u07CB\u07CE\x03\x02\x02\x02\u07CC\u07CA\x03\x02" + + "\x02\x02\u07CC\u07CD\x03\x02\x02\x02\u07CD\u07D0\x03\x02\x02\x02\u07CE" + + "\u07CC\x03\x02\x02\x02\u07CF\u07D1\x05\x80A\x02\u07D0\u07CF\x03\x02\x02" + + "\x02\u07D0\u07D1\x03\x02\x02\x02\u07D1\u07D3\x03\x02\x02\x02\u07D2\u07D4" + + "\x05\x8CG\x02\u07D3\u07D2\x03\x02\x02\x02\u07D3\u07D4\x03\x02\x02\x02" + + "\u07D4\u07D6\x03\x02\x02\x02\u07D5\u07D7\x05\x82B\x02\u07D6\u07D5\x03" + + "\x02\x02\x02\u07D6\u07D7\x03\x02\x02\x02\u07D7\u07D9\x03\x02\x02\x02\u07D8" + + "\u07DA\x05\u014C\xA7\x02\u07D9\u07D8\x03\x02\x02\x02\u07D9\u07DA\x03\x02" + + "\x02\x02\u07DA\u07DC\x03\x02\x02\x02\u07DB\u07AF\x03\x02\x02\x02\u07DB" + + "\u07C5\x03\x02\x02\x02\u07DCi\x03\x02\x02\x02\u07DD\u07DE\x07\u0101\x02" + + "\x02\u07DE\u07DF\x07\u0133\x02\x02\u07DF\u07E1\x07\x04\x02\x02\u07E0\u07E2" + + "\x05\xB4[\x02\u07E1\u07E0\x03\x02\x02\x02\u07E1\u07E2\x03\x02\x02\x02" + + "\u07E2\u07E3\x03\x02\x02\x02\u07E3\u07E4\x05\u0102\x82\x02\u07E4\u07E5" + + "\x07\x05\x02\x02\u07E5\u07F1\x03\x02\x02\x02\u07E6\u07E8\x07\xAF\x02\x02" + + "\u07E7\u07E9\x05\xB4[\x02\u07E8\u07E7\x03\x02\x02\x02\u07E8\u07E9\x03" + + "\x02\x02\x02\u07E9\u07EA\x03\x02\x02\x02\u07EA\u07F1\x05\u0102\x82\x02" + + "\u07EB\u07ED\x07\xEA\x02\x02\u07EC\u07EE\x05\xB4[\x02\u07ED\u07EC\x03" + + "\x02\x02\x02\u07ED\u07EE\x03\x02\x02\x02\u07EE\u07EF\x03\x02\x02\x02\u07EF" + + "\u07F1\x05\u0102\x82\x02\u07F0\u07DD\x03\x02\x02\x02\u07F0\u07E6\x03\x02" + + "\x02\x02\u07F0\u07EB\x03\x02\x02\x02\u07F1\u07F3\x03\x02\x02\x02\u07F2" + + "\u07F4\x05\xE2r\x02\u07F3\u07F2\x03\x02\x02\x02\u07F3\u07F4\x03\x02\x02" + + "\x02\u07F4\u07F7\x03\x02\x02\x02\u07F5\u07F6\x07\xE8\x02\x02\u07F6\u07F8" + + "\x05\u016C\xB7\x02\u07F7\u07F5\x03\x02\x02\x02\u07F7\u07F8\x03\x02\x02" + + "\x02\u07F8\u07F9\x03\x02\x02\x02\u07F9\u07FA\x07\u0145\x02\x02\u07FA\u0807" + + "\x05\u016C\xB7\x02\u07FB\u0805\x07\x16\x02\x02\u07FC\u0806\x05\xC6d\x02" + + "\u07FD\u0806\x05\u013A\x9E\x02\u07FE\u0801\x07\x04\x02\x02\u07FF\u0802" + + "\x05\xC6d\x02\u0800\u0802\x05\u013A\x9E\x02\u0801\u07FF\x03\x02\x02\x02" + + "\u0801\u0800\x03\x02\x02\x02\u0802\u0803\x03\x02\x02\x02\u0803\u0804\x07" + + "\x05\x02\x02\u0804\u0806\x03\x02\x02\x02\u0805\u07FC\x03\x02\x02\x02\u0805" + + "\u07FD\x03\x02\x02\x02\u0805\u07FE\x03\x02\x02\x02\u0806\u0808\x03\x02" + + "\x02\x02\u0807\u07FB\x03\x02\x02\x02\u0807\u0808\x03\x02\x02\x02\u0808" + + "\u080A\x03\x02\x02\x02\u0809\u080B\x05\xE2r\x02\u080A\u0809\x03\x02\x02" + + "\x02\u080A\u080B\x03\x02\x02\x02\u080B\u080E\x03\x02\x02\x02\u080C\u080D" + + "\x07\xE7\x02\x02\u080D\u080F\x05\u016C\xB7\x02\u080E\u080C\x03\x02\x02" + + "\x02\u080E\u080F\x03\x02\x02\x02\u080Fk\x03\x02\x02\x02\u0810\u0814\x07" + + "\u0101\x02\x02\u0811\u0813\x05\x84C\x02\u0812\u0811\x03\x02\x02\x02\u0813" + + "\u0816\x03\x02\x02\x02\u0814\u0812\x03\x02\x02\x02\u0814\u0815\x03\x02" + + "\x02\x02\u0815\u0818\x03\x02\x02\x02\u0816\u0814\x03\x02\x02\x02\u0817" + + "\u0819\x05\xB4[\x02\u0818\u0817\x03\x02\x02\x02\u0818\u0819\x03\x02\x02" + + "\x02\u0819\u081A\x03\x02\x02\x02\u081A\u081B\x05\xF2z\x02\u081Bm\x03\x02" + + "\x02\x02\u081C\u081D\x07\u0107\x02\x02\u081D\u081E\x05|?\x02\u081Eo\x03" + + "\x02\x02\x02\u081F\u0820\x07\u0150\x02\x02\u0820\u0823\x07\xB0\x02\x02" + + "\u0821\u0822\x07\x10\x02\x02\u0822\u0824\x05\u0104\x83\x02\u0823\u0821" + + "\x03\x02\x02\x02\u0823\u0824\x03\x02\x02\x02\u0824\u0825\x03\x02\x02\x02" + + "\u0825\u0826\x07\u0125\x02\x02\u0826\u0827\x05v<\x02\u0827q\x03\x02\x02" + + "\x02\u0828\u0829\x07\u0150\x02\x02\u0829\u082A\x07\xC2\x02\x02\u082A\u082D" + + "\x07\xB0\x02\x02\u082B\u082C\x07!\x02\x02\u082C\u082E\x07\u0121\x02\x02" + + "\u082D\u082B\x03\x02\x02\x02\u082D\u082E\x03\x02\x02\x02\u082E\u0831\x03" + + "\x02\x02\x02\u082F\u0830\x07\x10\x02\x02\u0830\u0832\x05\u0104\x83\x02" + + "\u0831\u082F\x03\x02\x02\x02\u0831\u0832\x03\x02\x02\x02\u0832\u0833\x03" + + "\x02\x02\x02\u0833\u0834\x07\u0125\x02\x02\u0834\u0835\x05x=\x02\u0835" + + "s\x03\x02\x02\x02\u0836\u0837\x07\u0150\x02\x02\u0837\u0838\x07\xC2\x02" + + "\x02\u0838\u0839\x07\xB0\x02\x02\u0839\u083A\x07!\x02\x02\u083A\u083D" + + "\x07\u0112\x02\x02\u083B\u083C\x07\x10\x02\x02\u083C\u083E\x05\u0104\x83" + + "\x02\u083D\u083B\x03\x02\x02\x02\u083D\u083E\x03\x02\x02\x02\u083E\u083F" + + "\x03\x02\x02\x02\u083F\u0840\x07\u0125\x02\x02\u0840\u0841\x05z>\x02\u0841" + + "u\x03\x02\x02\x02\u0842\u084A\x07V\x02\x02\u0843\u0844\x07\u0142\x02\x02" + + "\u0844\u0845\x07\u0107\x02\x02\u0845\u084A\x07\u0162\x02\x02\u0846\u0847" + + "\x07\u0142\x02\x02\u0847\u0848\x07\u0107\x02\x02\u0848\u084A\x05|?\x02" + + "\u0849\u0842\x03\x02\x02\x02\u0849\u0843\x03\x02\x02\x02\u0849\u0846\x03" + + "\x02\x02\x02\u084Aw\x03\x02\x02\x02\u084B\u084C\x07\x93\x02\x02\u084C" + + "\u085E\x07\u0162\x02\x02\u084D\u084E\x07\x93\x02\x02\u084E\u084F\x07\x04" + + "\x02\x02\u084F\u0850\x05\xE4s\x02\u0850\u0851\x07\x05\x02\x02\u0851\u0852" + + "\x07\u0146\x02\x02\u0852\u0853\x07\x04\x02\x02\u0853\u0858\x05\xFC\x7F" + + "\x02\u0854\u0855\x07\x06\x02\x02\u0855\u0857\x05\xFC\x7F\x02\u0856\u0854" + + "\x03\x02\x02\x02\u0857\u085A\x03\x02\x02\x02\u0858\u0856\x03\x02\x02\x02" + + "\u0858\u0859\x03\x02\x02\x02\u0859\u085B\x03\x02\x02\x02\u085A\u0858\x03" + + "\x02\x02\x02\u085B\u085C\x07\x05\x02\x02\u085C\u085E\x03\x02\x02\x02\u085D" + + "\u084B\x03\x02\x02\x02\u085D\u084D\x03\x02\x02\x02\u085Ey\x03\x02\x02" + + "\x02\u085F\u0864\x07V\x02\x02\u0860\u0861\x07\u0142\x02\x02\u0861\u0862" + + "\x07\u0107\x02\x02\u0862\u0864\x05|?\x02\u0863\u085F\x03\x02\x02\x02\u0863" + + "\u0860\x03\x02\x02\x02\u0864{\x03\x02\x02\x02\u0865\u086A\x05~@\x02\u0866" + + "\u0867\x07\x06\x02\x02\u0867\u0869\x05~@\x02\u0868\u0866\x03\x02\x02\x02" + + "\u0869\u086C\x03\x02\x02\x02\u086A\u0868\x03\x02\x02\x02\u086A\u086B\x03" + + "\x02\x02\x02\u086B}\x03\x02\x02\x02\u086C\u086A\x03\x02\x02\x02\u086D" + + "\u086E\x05\xE6t\x02\u086E\u086F\x07\u0158\x02\x02\u086F\u0870\x05\xFC" + + "\x7F\x02\u0870\x7F\x03\x02\x02\x02\u0871\u0872\x07\u0151\x02\x02\u0872" + + "\u0873\x05\u0104\x83\x02\u0873\x81\x03\x02\x02\x02\u0874\u0875\x07\x84" + + "\x02\x02\u0875\u0876\x05\u0104\x83\x02\u0876\x83\x03\x02\x02\x02\u0877" + + "\u0878\x07\u016D\x02\x02\u0878\u087F\x05\x86D\x02\u0879\u087B\x07\x06" + + "\x02\x02\u087A\u0879\x03\x02\x02\x02\u087A\u087B\x03\x02\x02\x02\u087B" + + "\u087C\x03\x02\x02\x02\u087C\u087E\x05\x86D\x02\u087D\u087A\x03\x02\x02" + + "\x02\u087E\u0881\x03\x02\x02\x02\u087F\u087D\x03\x02\x02\x02\u087F\u0880" + + "\x03\x02\x02\x02\u0880\u0882\x03\x02\x02\x02\u0881\u087F\x03\x02\x02\x02" + + "\u0882\u0883\x07\u016E\x02\x02\u0883\x85\x03\x02\x02\x02\u0884\u0892\x05" + + "\u0160\xB1\x02\u0885\u0886\x05\u0160\xB1\x02\u0886\u0887\x07\x04\x02\x02" + + "\u0887\u088C\x05\u010C\x87\x02\u0888\u0889\x07\x06\x02\x02\u0889\u088B" + + "\x05\u010C\x87\x02\u088A\u0888\x03\x02\x02\x02\u088B\u088E\x03\x02\x02" + + "\x02\u088C\u088A\x03\x02\x02\x02\u088C\u088D\x03\x02\x02\x02\u088D\u088F" + + "\x03\x02\x02\x02\u088E\u088C\x03\x02\x02\x02\u088F\u0890\x07\x05\x02\x02" + + "\u0890\u0892\x03\x02\x02\x02\u0891\u0884\x03\x02\x02\x02\u0891\u0885\x03" + + "\x02\x02\x02\u0892\x87\x03\x02\x02\x02\u0893\u0894\x07{\x02\x02\u0894" + + "\u0899\x05\xB6\\\x02\u0895\u0896\x07\x06\x02\x02\u0896\u0898\x05\xB6\\" + + "\x02\u0897\u0895\x03\x02\x02\x02\u0898\u089B\x03\x02\x02\x02\u0899\u0897" + + "\x03\x02\x02\x02\u0899\u089A\x03\x02\x02\x02\u089A\u089F\x03\x02\x02\x02" + + "\u089B\u0899\x03\x02\x02\x02\u089C\u089E\x05\xB2Z\x02\u089D\u089C\x03" + + "\x02\x02\x02\u089E\u08A1\x03\x02\x02\x02\u089F\u089D\x03\x02\x02\x02\u089F" + + "\u08A0\x03\x02\x02\x02\u08A0\u08A3\x03\x02\x02\x02\u08A1\u089F\x03\x02" + + "\x02\x02\u08A2\u08A4\x05\x96L\x02\u08A3\u08A2\x03\x02\x02\x02\u08A3\u08A4" + + "\x03\x02\x02\x02\u08A4\u08A6\x03\x02\x02\x02\u08A5\u08A7\x05\x9CO\x02" + + "\u08A6\u08A5\x03\x02\x02\x02\u08A6\u08A7\x03\x02\x02\x02\u08A7\x89\x03" + + "\x02\x02\x02\u08A8\u08AA\x07w\x02\x02\u08A9\u08A8\x03\x02\x02\x02\u08A9" + + "\u08AA\x03\x02\x02\x02\u08AA\u08AB\x03\x02\x02\x02\u08AB\u08AC\t\x14\x02" + + "\x02\u08AC\u08AD\x07\x16\x02\x02\u08AD\u08AE\x07\xC6\x02\x02\u08AE\u08B7" + + "\x05\u0170\xB9\x02\u08AF\u08B1\x07w\x02\x02\u08B0\u08AF\x03\x02\x02\x02" + + "\u08B0\u08B1\x03\x02\x02\x02\u08B1\u08B2\x03\x02\x02\x02\u08B2\u08B3\t" + + "\x15\x02\x02\u08B3\u08B4\x07\x16\x02\x02\u08B4\u08B5\x07\xC6\x02\x02\u08B5" + + "\u08B7\x05\u0108\x85\x02\u08B6\u08A9\x03\x02\x02\x02\u08B6\u08B0\x03\x02" + + "\x02\x02\u08B7\x8B\x03\x02\x02\x02\u08B8\u08B9\x07\x82\x02\x02\u08B9\u08BA" + + "\x07!\x02\x02\u08BA\u08BF\x05\x8EH\x02\u08BB\u08BC\x07\x06\x02\x02\u08BC" + + "\u08BE\x05\x8EH\x02\u08BD\u08BB\x03\x02\x02\x02\u08BE\u08C1\x03\x02\x02" + + "\x02\u08BF\u08BD\x03\x02\x02\x02\u08BF\u08C0\x03\x02\x02\x02\u08C0\u08E0" + + "\x03\x02\x02\x02\u08C1\u08BF\x03\x02\x02\x02\u08C2\u08C3\x07\x82\x02\x02" + + "\u08C3\u08C4\x07!\x02\x02\u08C4\u08C9\x05\xFC\x7F\x02\u08C5\u08C6\x07" + + "\x06\x02\x02\u08C6\u08C8\x05\xFC\x7F\x02\u08C7\u08C5\x03\x02\x02\x02\u08C8" + + "\u08CB\x03\x02\x02\x02\u08C9\u08C7\x03\x02\x02\x02\u08C9\u08CA\x03\x02" + + "\x02\x02\u08CA\u08DD\x03\x02\x02\x02\u08CB\u08C9\x03\x02\x02\x02\u08CC" + + "\u08CD\x07\u0153\x02\x02\u08CD\u08DE\x07\xFA\x02\x02\u08CE\u08CF\x07\u0153" + + "\x02\x02\u08CF\u08DE\x07?\x02\x02\u08D0\u08D1\x07\x83\x02\x02\u08D1\u08D2" + + "\x07\u0109\x02\x02\u08D2\u08D3\x07\x04\x02\x02\u08D3\u08D8\x05\x94K\x02" + + "\u08D4\u08D5\x07\x06\x02\x02\u08D5\u08D7\x05\x94K\x02\u08D6\u08D4\x03" + + "\x02\x02\x02\u08D7\u08DA\x03\x02\x02\x02\u08D8\u08D6\x03\x02\x02\x02\u08D8" + + "\u08D9\x03\x02\x02\x02\u08D9\u08DB\x03\x02\x02\x02\u08DA\u08D8\x03\x02" + + "\x02\x02\u08DB\u08DC\x07\x05\x02\x02\u08DC\u08DE\x03\x02\x02\x02\u08DD" + + "\u08CC\x03\x02\x02\x02\u08DD\u08CE\x03\x02\x02\x02\u08DD\u08D0\x03\x02" + + "\x02\x02\u08DD\u08DE\x03\x02\x02\x02\u08DE\u08E0\x03\x02\x02\x02\u08DF" + + "\u08B8\x03\x02\x02\x02\u08DF\u08C2\x03\x02\x02\x02\u08E0\x8D\x03\x02\x02" + + "\x02\u08E1\u08E4\x05\x90I\x02\u08E2\u08E4\x05\xFC\x7F\x02\u08E3\u08E1" + + "\x03\x02\x02\x02\u08E3\u08E2\x03\x02\x02\x02\u08E4\x8F\x03\x02\x02\x02" + + "\u08E5\u08E6\t\x16\x02\x02\u08E6\u08E7\x07\x04\x02\x02\u08E7\u08EC\x05" + + "\x94K\x02\u08E8\u08E9\x07\x06\x02\x02\u08E9\u08EB\x05\x94K\x02\u08EA\u08E8" + + "\x03\x02\x02\x02\u08EB\u08EE\x03\x02\x02\x02\u08EC\u08EA\x03\x02\x02\x02" + + "\u08EC\u08ED\x03\x02\x02\x02\u08ED\u08EF\x03\x02\x02\x02\u08EE\u08EC\x03" + + "\x02\x02\x02\u08EF\u08F0\x07\x05\x02\x02\u08F0\u08FF\x03\x02\x02\x02\u08F1" + + "\u08F2\x07\x83\x02\x02\u08F2\u08F3\x07\u0109\x02\x02\u08F3\u08F4\x07\x04" + + "\x02\x02\u08F4\u08F9\x05\x92J\x02\u08F5\u08F6\x07\x06\x02\x02\u08F6\u08F8" + + "\x05\x92J\x02\u08F7\u08F5\x03\x02\x02\x02\u08F8\u08FB\x03\x02\x02\x02" + + "\u08F9\u08F7\x03\x02\x02\x02\u08F9\u08FA\x03\x02\x02\x02\u08FA\u08FC\x03" + + "\x02\x02\x02\u08FB\u08F9\x03\x02\x02\x02\u08FC\u08FD\x07\x05\x02\x02\u08FD" + + "\u08FF\x03\x02\x02\x02\u08FE\u08E5\x03\x02\x02\x02\u08FE\u08F1\x03\x02" + + "\x02\x02\u08FF\x91\x03\x02\x02\x02\u0900\u0903\x05\x90I\x02\u0901\u0903" + + "\x05\x94K\x02\u0902\u0900\x03\x02\x02\x02\u0902\u0901\x03\x02\x02\x02" + + "\u0903\x93\x03\x02\x02\x02\u0904\u090D\x07\x04\x02\x02\u0905\u090A\x05" + + "\xFC\x7F\x02\u0906\u0907\x07\x06\x02\x02\u0907\u0909\x05\xFC\x7F\x02\u0908" + + "\u0906\x03\x02\x02\x02\u0909\u090C\x03\x02\x02\x02\u090A\u0908\x03\x02" + + "\x02\x02\u090A\u090B\x03\x02\x02\x02\u090B\u090E\x03\x02\x02\x02\u090C" + + "\u090A\x03\x02\x02\x02\u090D\u0905\x03\x02\x02\x02\u090D\u090E\x03\x02" + + "\x02\x02\u090E\u090F\x03\x02\x02\x02\u090F\u0912\x07\x05\x02\x02\u0910" + + "\u0912\x05\xFC\x7F\x02\u0911\u0904\x03\x02\x02\x02\u0911\u0910\x03\x02" + + "\x02\x02\u0912\x95\x03\x02\x02\x02\u0913\u0914\x07\xDB\x02\x02\u0914\u0915" + + "\x07\x04\x02\x02\u0915\u0916\x05\xF2z\x02\u0916\u0917\x07w\x02\x02\u0917" + + "\u0918\x05\x98M\x02\u0918\u0919\x07\x8C\x02\x02\u0919\u091A\x07\x04\x02" + + "\x02\u091A\u091F\x05\x9AN\x02\u091B\u091C\x07\x06\x02\x02\u091C\u091E" + + "\x05\x9AN\x02\u091D\u091B\x03\x02\x02\x02\u091E\u0921\x03\x02\x02\x02" + + "\u091F\u091D\x03\x02\x02\x02\u091F\u0920\x03\x02\x02\x02\u0920\u0922\x03" + + "\x02\x02\x02\u0921\u091F\x03\x02\x02\x02\u0922\u0923\x07\x05\x02\x02\u0923" + + "\u0924\x07\x05\x02\x02\u0924\x97\x03\x02\x02\x02\u0925\u0932\x05\u0160" + + "\xB1\x02\u0926\u0927\x07\x04\x02\x02\u0927\u092C\x05\u0160\xB1\x02\u0928" + + "\u0929\x07\x06\x02\x02\u0929\u092B\x05\u0160\xB1\x02\u092A\u0928\x03\x02" + + "\x02\x02\u092B\u092E\x03\x02\x02\x02\u092C\u092A\x03\x02\x02\x02\u092C" + + "\u092D\x03\x02\x02\x02\u092D\u092F\x03\x02\x02\x02\u092E\u092C\x03\x02" + + "\x02\x02\u092F\u0930\x07\x05\x02\x02\u0930\u0932\x03\x02\x02\x02\u0931" + + "\u0925\x03\x02\x02\x02\u0931\u0926\x03\x02\x02\x02\u0932\x99\x03\x02\x02" + + "\x02\u0933\u0938\x05\xFC\x7F\x02\u0934\u0936\x07\x16\x02\x02\u0935\u0934" + + "\x03\x02\x02\x02\u0935\u0936\x03\x02\x02\x02\u0936\u0937\x03\x02\x02\x02" + + "\u0937\u0939\x05\u0160\xB1\x02\u0938\u0935\x03\x02\x02\x02\u0938\u0939" + + "\x03\x02\x02\x02\u0939\x9B\x03\x02\x02\x02\u093A\u093C\x07\u0140\x02\x02" + + "\u093B\u093D\x05\x9EP\x02\u093C\u093B\x03\x02\x02\x02\u093C\u093D\x03" + + "\x02\x02\x02\u093D\u093E\x03\x02\x02\x02\u093E\u093F\x07\x04\x02\x02\u093F" + + "\u0940\x05\xA0Q\x02\u0940\u0945\x07\x05\x02\x02\u0941"; + private static readonly _serializedATNSegment5: string = + "\u0943\x07\x16\x02\x02\u0942\u0941\x03\x02\x02\x02\u0942\u0943\x03\x02" + + "\x02\x02\u0943\u0944\x03\x02\x02\x02\u0944\u0946\x05\u0160\xB1\x02\u0945" + + "\u0942\x03\x02\x02\x02\u0945\u0946\x03\x02\x02\x02\u0946\x9D\x03\x02\x02" + + "\x02\u0947\u0948\t\x17\x02\x02\u0948\u0949\x07\xC4\x02\x02\u0949\x9F\x03" + + "\x02\x02\x02\u094A\u094D\x05\xA2R\x02\u094B\u094D\x05\xA4S\x02\u094C\u094A" + + "\x03\x02\x02\x02\u094C\u094B\x03\x02\x02\x02\u094D\xA1\x03\x02\x02\x02" + + "\u094E\u094F\x05\xA8U\x02\u094F\u0950\x07w\x02\x02\u0950\u0951\x05\xAA" + + "V\x02\u0951\u0952\x07\x8C\x02\x02\u0952\u0953\x07\x04\x02\x02\u0953\u0958" + + "\x05\xACW\x02\u0954\u0955\x07\x06\x02\x02\u0955\u0957\x05\xACW\x02\u0956" + + "\u0954\x03\x02\x02\x02\u0957\u095A\x03\x02\x02\x02\u0958\u0956\x03\x02" + + "\x02\x02\u0958\u0959\x03\x02\x02\x02\u0959\u095B\x03\x02\x02\x02\u095A" + + "\u0958\x03\x02\x02\x02\u095B\u095C\x07\x05\x02\x02\u095C\xA3\x03\x02\x02" + + "\x02\u095D\u095E\x07\x04\x02\x02\u095E\u0963\x05\xA8U\x02\u095F\u0960" + + "\x07\x06\x02\x02\u0960\u0962\x05\xA8U\x02\u0961\u095F\x03\x02\x02\x02" + + "\u0962\u0965\x03\x02\x02\x02\u0963\u0961\x03\x02\x02\x02\u0963\u0964\x03" + + "\x02\x02\x02\u0964\u0966\x03\x02\x02\x02\u0965\u0963\x03\x02\x02\x02\u0966" + + "\u0967\x07\x05\x02\x02\u0967\u0968\x07w\x02\x02\u0968\u0969\x05\xAAV\x02" + + "\u0969\u096A\x07\x8C\x02\x02\u096A\u096B\x07\x04\x02\x02\u096B\u0970\x05" + + "\xA6T\x02\u096C\u096D\x07\x06\x02\x02\u096D\u096F\x05\xA6T\x02\u096E\u096C" + + "\x03\x02\x02\x02\u096F\u0972\x03\x02\x02\x02\u0970\u096E\x03\x02\x02\x02" + + "\u0970\u0971\x03\x02\x02\x02\u0971\u0973\x03\x02\x02\x02\u0972\u0970\x03" + + "\x02\x02\x02\u0973\u0974\x07\x05\x02\x02\u0974\xA5\x03\x02\x02\x02\u0975" + + "\u0976\x07\x04\x02\x02\u0976\u097B\x05\xAEX\x02\u0977\u0978\x07\x06\x02" + + "\x02\u0978\u097A\x05\xAEX\x02\u0979\u0977\x03\x02\x02\x02\u097A\u097D" + + "\x03\x02\x02\x02\u097B\u0979\x03\x02\x02\x02\u097B\u097C\x03\x02\x02\x02" + + "\u097C\u097E\x03\x02\x02\x02\u097D\u097B\x03\x02\x02\x02\u097E\u0980\x07" + + "\x05\x02\x02\u097F\u0981\x05\xB0Y\x02\u0980\u097F\x03\x02\x02\x02\u0980" + + "\u0981\x03\x02\x02\x02\u0981\xA7\x03\x02\x02\x02\u0982\u0983\x05\u0160" + + "\xB1\x02\u0983\xA9\x03\x02\x02\x02\u0984\u0985\x05\u0160\xB1\x02\u0985" + + "\xAB\x03\x02\x02\x02\u0986\u0988\x05\xAEX\x02\u0987\u0989\x05\xB0Y\x02" + + "\u0988\u0987\x03\x02\x02\x02\u0988\u0989\x03\x02\x02\x02\u0989\xAD\x03" + + "\x02\x02\x02\u098A\u098B\x05\xE6t\x02\u098B\xAF\x03\x02\x02\x02\u098C" + + "\u098E\x07\x16\x02\x02\u098D\u098C\x03\x02\x02\x02\u098D\u098E\x03\x02" + + "\x02\x02\u098E\u098F\x03\x02\x02\x02\u098F\u0990\x05\u0160\xB1\x02\u0990" + + "\xB1\x03\x02\x02\x02\u0991\u0992\x07\x9E\x02\x02\u0992\u0994\x07\u014B" + + "\x02\x02\u0993\u0995\x07\xCF\x02\x02\u0994\u0993\x03\x02\x02\x02\u0994" + + "\u0995\x03\x02\x02\x02\u0995\u0996\x03\x02\x02\x02\u0996\u0997\x05\u015A" + + "\xAE\x02\u0997\u09A0\x07\x04\x02\x02\u0998\u099D\x05\xFC\x7F\x02\u0999" + + "\u099A\x07\x06\x02\x02\u099A\u099C\x05\xFC\x7F\x02\u099B\u0999\x03\x02" + + "\x02\x02\u099C\u099F\x03\x02\x02\x02\u099D\u099B\x03\x02\x02\x02\u099D" + + "\u099E\x03\x02\x02\x02\u099E\u09A1\x03\x02\x02\x02\u099F\u099D\x03\x02" + + "\x02\x02\u09A0\u0998\x03\x02\x02\x02\u09A0\u09A1\x03\x02\x02\x02\u09A1" + + "\u09A2\x03\x02\x02\x02\u09A2\u09A3\x07\x05\x02\x02\u09A3\u09AF\x05\u0160" + + "\xB1\x02\u09A4\u09A6\x07\x16\x02\x02\u09A5\u09A4\x03\x02\x02\x02\u09A5" + + "\u09A6\x03\x02\x02\x02\u09A6\u09A7\x03\x02\x02\x02\u09A7\u09AC\x05\u0160" + + "\xB1\x02\u09A8\u09A9\x07\x06\x02\x02\u09A9\u09AB\x05\u0160\xB1\x02\u09AA" + + "\u09A8\x03\x02\x02\x02\u09AB\u09AE\x03\x02\x02\x02\u09AC\u09AA\x03\x02" + + "\x02\x02\u09AC\u09AD\x03\x02\x02\x02\u09AD\u09B0\x03\x02\x02\x02\u09AE" + + "\u09AC\x03\x02\x02\x02\u09AF\u09A5\x03\x02\x02\x02\u09AF\u09B0\x03\x02" + + "\x02\x02\u09B0\xB3\x03\x02\x02\x02\u09B1\u09B2\t\x18\x02\x02\u09B2\xB5" + + "\x03\x02\x02\x02\u09B3\u09B5\x07\x9E\x02\x02\u09B4\u09B3\x03\x02\x02\x02" + + "\u09B4\u09B5\x03\x02\x02\x02\u09B5\u09B6\x03\x02\x02\x02\u09B6\u09BA\x05" + + "\xD0i\x02\u09B7\u09B9\x05\xB8]\x02\u09B8\u09B7\x03\x02\x02\x02\u09B9\u09BC" + + "\x03\x02\x02\x02\u09BA\u09B8\x03\x02\x02\x02\u09BA\u09BB\x03\x02\x02\x02" + + "\u09BB\xB7\x03\x02\x02\x02\u09BC\u09BA\x03\x02\x02\x02\u09BD\u09C1\x05" + + "\xBA^\x02\u09BE\u09C1\x05\x96L\x02\u09BF\u09C1\x05\x9CO\x02\u09C0\u09BD" + + "\x03\x02\x02\x02\u09C0\u09BE\x03\x02\x02\x02\u09C0\u09BF\x03\x02\x02\x02" + + "\u09C1\xB9\x03\x02\x02\x02\u09C2\u09C3\x05\xBC_\x02\u09C3\u09C5\x07\x9B" + + "\x02\x02\u09C4\u09C6\x07\x9E\x02\x02\u09C5\u09C4\x03\x02\x02\x02\u09C5" + + "\u09C6\x03\x02\x02\x02\u09C6\u09C7\x03\x02\x02\x02\u09C7\u09C9\x05\xD0" + + "i\x02\u09C8\u09CA\x05\xBE`\x02\u09C9\u09C8\x03\x02\x02\x02\u09C9\u09CA" + + "\x03\x02\x02\x02\u09CA\u09D4\x03\x02\x02\x02\u09CB\u09CC\x07\xC0\x02\x02" + + "\u09CC\u09CD\x05\xBC_\x02\u09CD\u09CF\x07\x9B\x02\x02\u09CE\u09D0\x07" + + "\x9E\x02\x02\u09CF\u09CE\x03\x02\x02\x02\u09CF\u09D0\x03\x02\x02\x02\u09D0" + + "\u09D1\x03\x02\x02\x02\u09D1\u09D2\x05\xD0i\x02\u09D2\u09D4\x03\x02\x02" + + "\x02\u09D3\u09C2\x03\x02\x02\x02\u09D3\u09CB\x03\x02\x02\x02\u09D4\xBB" + + "\x03\x02\x02\x02\u09D5\u09D7\x07\x90\x02\x02\u09D6\u09D5\x03\x02\x02\x02" + + "\u09D6\u09D7\x03\x02\x02\x02\u09D7\u09EE\x03\x02\x02\x02\u09D8\u09EE\x07" + + ">\x02\x02\u09D9\u09DB\x07\xA1\x02\x02\u09DA\u09DC\x07\xCF\x02\x02\u09DB" + + "\u09DA\x03\x02\x02\x02\u09DB\u09DC\x03\x02\x02\x02\u09DC\u09EE\x03\x02" + + "\x02\x02\u09DD\u09DF\x07\xA1\x02\x02\u09DE\u09DD\x03\x02\x02\x02\u09DE" + + "\u09DF\x03\x02\x02\x02\u09DF\u09E0\x03\x02\x02\x02\u09E0\u09EE\x07\u0102" + + "\x02\x02\u09E1\u09E3\x07\xF5\x02\x02\u09E2\u09E4\x07\xCF\x02\x02\u09E3" + + "\u09E2\x03\x02\x02\x02\u09E3\u09E4\x03\x02\x02\x02\u09E4\u09EE\x03\x02" + + "\x02\x02\u09E5\u09E7\x07|\x02\x02\u09E6\u09E8\x07\xCF\x02\x02\u09E7\u09E6" + + "\x03\x02\x02\x02\u09E7\u09E8\x03\x02\x02\x02\u09E8\u09EE\x03\x02\x02\x02" + + "\u09E9\u09EB\x07\xA1\x02\x02\u09EA\u09E9\x03\x02\x02\x02\u09EA\u09EB\x03" + + "\x02\x02\x02\u09EB\u09EC\x03\x02\x02\x02\u09EC\u09EE\x07\x11\x02\x02\u09ED" + + "\u09D6\x03\x02\x02\x02\u09ED\u09D8\x03\x02\x02\x02\u09ED\u09D9\x03\x02" + + "\x02\x02\u09ED\u09DE\x03\x02\x02\x02\u09ED\u09E1\x03\x02\x02\x02\u09ED" + + "\u09E5\x03\x02\x02\x02\u09ED\u09EA\x03\x02\x02\x02\u09EE\xBD\x03\x02\x02" + + "\x02\u09EF\u09F0\x07\xC8\x02\x02\u09F0\u09F4\x05\u0104\x83\x02\u09F1\u09F2" + + "\x07\u0145\x02\x02\u09F2\u09F4\x05\xC4c\x02\u09F3\u09EF\x03\x02\x02\x02" + + "\u09F3\u09F1\x03\x02\x02\x02\u09F4\xBF\x03\x02\x02\x02\u09F5\u09F6\x07" + + "\u0120\x02\x02\u09F6\u09F8\x07\x04\x02\x02\u09F7\u09F9\x05\xC2b\x02\u09F8" + + "\u09F7\x03\x02\x02\x02\u09F8\u09F9\x03\x02\x02\x02\u09F9\u09FA\x03\x02" + + "\x02\x02\u09FA\u09FF\x07\x05\x02\x02\u09FB\u09FC\x07\xEF\x02\x02\u09FC" + + "\u09FD\x07\x04\x02\x02\u09FD\u09FE\x07\u0175\x02\x02\u09FE\u0A00\x07\x05" + + "\x02\x02\u09FF\u09FB\x03\x02\x02\x02\u09FF\u0A00\x03\x02\x02\x02\u0A00" + + "\xC1\x03\x02\x02\x02\u0A01\u0A03\x07\u0161\x02\x02\u0A02\u0A01\x03\x02" + + "\x02\x02\u0A02\u0A03\x03\x02\x02\x02\u0A03\u0A04\x03\x02\x02\x02\u0A04" + + "\u0A05\t\x19\x02\x02\u0A05\u0A1A\x07\xDA\x02\x02\u0A06\u0A07\x05\xFC\x7F" + + "\x02\u0A07\u0A08\x07\xFC\x02\x02\u0A08\u0A1A\x03\x02\x02\x02\u0A09\u0A0A" + + "\x07\x1F\x02\x02\u0A0A\u0A0B\x07\u0175\x02\x02\u0A0B\u0A0C\x07\xCE\x02" + + "\x02\u0A0C\u0A0D\x07\xC6\x02\x02\u0A0D\u0A16\x07\u0175\x02\x02\u0A0E\u0A14" + + "\x07\xC8\x02\x02\u0A0F\u0A15\x05\u0160\xB1\x02\u0A10\u0A11\x05\u015A\xAE" + + "\x02\u0A11\u0A12\x07\x04\x02\x02\u0A12\u0A13\x07\x05\x02\x02\u0A13\u0A15" + + "\x03\x02\x02\x02\u0A14\u0A0F\x03\x02\x02\x02\u0A14\u0A10\x03\x02\x02\x02" + + "\u0A15\u0A17\x03\x02\x02\x02\u0A16\u0A0E\x03\x02\x02\x02\u0A16\u0A17\x03" + + "\x02\x02\x02\u0A17\u0A1A\x03\x02\x02\x02\u0A18\u0A1A\x05\xFC\x7F\x02\u0A19" + + "\u0A02\x03\x02\x02\x02\u0A19\u0A06\x03\x02\x02\x02\u0A19\u0A09\x03\x02" + + "\x02\x02\u0A19\u0A18\x03\x02\x02\x02\u0A1A\xC3\x03\x02\x02\x02\u0A1B\u0A1C" + + "\x07\x04\x02\x02\u0A1C\u0A1D\x05\xC6d\x02\u0A1D\u0A1E\x07\x05\x02\x02" + + "\u0A1E\xC5\x03\x02\x02\x02\u0A1F\u0A24\x05\u015C\xAF\x02\u0A20\u0A21\x07" + + "\x06\x02\x02\u0A21\u0A23\x05\u015C\xAF\x02\u0A22\u0A20\x03\x02\x02\x02" + + "\u0A23\u0A26\x03\x02\x02\x02\u0A24\u0A22\x03\x02\x02\x02\u0A24\u0A25\x03" + + "\x02\x02\x02\u0A25\xC7\x03\x02\x02\x02\u0A26\u0A24\x03\x02\x02\x02\u0A27" + + "\u0A28\x07\x04\x02\x02\u0A28\u0A2D\x05\xCAf\x02\u0A29\u0A2A\x07\x06\x02" + + "\x02\u0A2A\u0A2C\x05\xCAf\x02\u0A2B\u0A29\x03\x02\x02\x02\u0A2C\u0A2F" + + "\x03\x02\x02\x02\u0A2D\u0A2B\x03\x02\x02\x02\u0A2D\u0A2E\x03\x02\x02\x02" + + "\u0A2E\u0A30\x03\x02\x02\x02\u0A2F\u0A2D\x03\x02\x02\x02\u0A30\u0A31\x07" + + "\x05\x02\x02\u0A31\xC9\x03\x02\x02\x02\u0A32\u0A34\x05\u015C\xAF\x02\u0A33" + + "\u0A35\t\x12\x02\x02\u0A34\u0A33\x03\x02\x02\x02\u0A34\u0A35\x03\x02\x02" + + "\x02\u0A35\xCB\x03\x02\x02\x02\u0A36\u0A37\x07\x04\x02\x02\u0A37\u0A3C" + + "\x05\xCEh\x02\u0A38\u0A39\x07\x06\x02\x02\u0A39\u0A3B\x05\xCEh\x02\u0A3A" + + "\u0A38\x03\x02\x02\x02\u0A3B\u0A3E\x03\x02\x02\x02\u0A3C\u0A3A\x03\x02" + + "\x02\x02\u0A3C\u0A3D\x03\x02\x02\x02\u0A3D\u0A3F\x03\x02\x02\x02\u0A3E" + + "\u0A3C\x03\x02\x02\x02\u0A3F\u0A40\x07\x05\x02\x02\u0A40\xCD\x03\x02\x02" + + "\x02\u0A41\u0A43\x05\u0160\xB1\x02\u0A42\u0A44\x05\"\x12\x02\u0A43\u0A42" + + "\x03\x02\x02\x02\u0A43\u0A44\x03\x02\x02\x02\u0A44\xCF\x03\x02\x02\x02" + + "\u0A45\u0A47\x05X-\x02\u0A46\u0A48\x05\x8AF\x02\u0A47\u0A46\x03\x02\x02" + + "\x02\u0A47\u0A48\x03\x02\x02\x02\u0A48\u0A4A\x03\x02\x02\x02\u0A49\u0A4B" + + "\x05\xC0a\x02\u0A4A\u0A49\x03\x02\x02\x02\u0A4A\u0A4B\x03\x02\x02\x02" + + "\u0A4B\u0A4C\x03\x02\x02\x02\u0A4C\u0A4D\x05\xE0q\x02\u0A4D\u0A61\x03" + + "\x02\x02\x02\u0A4E\u0A4F\x07\x04\x02\x02\u0A4F\u0A50\x05$\x13\x02\u0A50" + + "\u0A52\x07\x05\x02\x02\u0A51\u0A53\x05\xC0a\x02\u0A52\u0A51\x03\x02\x02" + + "\x02\u0A52\u0A53\x03\x02\x02\x02\u0A53\u0A54\x03\x02\x02\x02\u0A54\u0A55" + + "\x05\xE0q\x02\u0A55\u0A61\x03\x02\x02\x02\u0A56\u0A57\x07\x04\x02\x02" + + "\u0A57\u0A58\x05\xB6\\\x02\u0A58\u0A5A\x07\x05\x02\x02\u0A59\u0A5B\x05" + + "\xC0a\x02\u0A5A\u0A59\x03\x02\x02\x02\u0A5A\u0A5B\x03\x02\x02\x02\u0A5B" + + "\u0A5C\x03\x02\x02\x02\u0A5C\u0A5D\x05\xE0q\x02\u0A5D\u0A61\x03\x02\x02" + + "\x02\u0A5E\u0A61\x05\xD2j\x02\u0A5F\u0A61\x05\xDEp\x02\u0A60\u0A45\x03" + + "\x02\x02\x02\u0A60\u0A4E\x03\x02\x02\x02\u0A60\u0A56\x03\x02\x02\x02\u0A60" + + "\u0A5E\x03\x02\x02\x02\u0A60\u0A5F\x03\x02\x02\x02\u0A61\xD1\x03\x02\x02" + + "\x02\u0A62\u0A63\x07\u0146\x02\x02\u0A63\u0A68\x05\xFC\x7F\x02\u0A64\u0A65" + + "\x07\x06\x02\x02\u0A65\u0A67\x05\xFC\x7F\x02\u0A66\u0A64\x03\x02\x02\x02" + + "\u0A67\u0A6A\x03\x02\x02\x02\u0A68\u0A66\x03\x02\x02\x02\u0A68\u0A69\x03" + + "\x02\x02\x02\u0A69\u0A6B\x03\x02\x02\x02\u0A6A\u0A68\x03\x02\x02\x02\u0A6B" + + "\u0A6C\x05\xE0q\x02\u0A6C\xD3\x03\x02\x02\x02\u0A6D\u0A6E\x07\u011E\x02" + + "\x02\u0A6E\u0A70\x05\x06\x04\x02\u0A6F\u0A71\x05\xD6l\x02\u0A70\u0A6F" + + "\x03\x02\x02\x02\u0A70\u0A71\x03\x02\x02\x02\u0A71\u0A81\x03\x02\x02\x02" + + "\u0A72\u0A73\x07\u011E\x02\x02\u0A73\u0A74\x07\x04\x02\x02\u0A74\u0A75" + + "\x05\x06\x04\x02\u0A75\u0A77\x07\x05\x02\x02\u0A76\u0A78\x05\xD6l\x02" + + "\u0A77\u0A76\x03\x02\x02\x02\u0A77\u0A78\x03\x02\x02\x02\u0A78\u0A81\x03" + + "\x02\x02\x02\u0A79\u0A7A\x07\u011E\x02\x02\u0A7A\u0A7B\x07\x04\x02\x02" + + "\u0A7B\u0A7C\x05$\x13\x02\u0A7C\u0A7E\x07\x05\x02\x02\u0A7D\u0A7F\x05" + + "\xD6l\x02\u0A7E\u0A7D\x03\x02\x02\x02\u0A7E\u0A7F\x03\x02\x02\x02\u0A7F" + + "\u0A81\x03\x02\x02\x02\u0A80\u0A6D\x03\x02\x02\x02\u0A80\u0A72\x03\x02" + + "\x02\x02\u0A80\u0A79\x03\x02\x02\x02\u0A81\xD5\x03\x02\x02\x02\u0A82\u0A83" + + "\x07\u0153\x02\x02\u0A83\u0A84\x07\u010C\x02\x02\u0A84\u0A96\x07\xD5\x02" + + "\x02\u0A85\u0A86\t\x1A\x02\x02\u0A86\u0A93\x07!\x02\x02\u0A87\u0A88\x07" + + "\x04\x02\x02\u0A88\u0A8D\x05\xFC\x7F\x02\u0A89\u0A8A\x07\x06\x02\x02\u0A8A" + + "\u0A8C\x05\xFC\x7F\x02\u0A8B\u0A89\x03\x02\x02\x02\u0A8C\u0A8F\x03\x02" + + "\x02\x02\u0A8D\u0A8B\x03\x02\x02\x02\u0A8D\u0A8E\x03\x02\x02\x02\u0A8E" + + "\u0A90\x03\x02\x02\x02\u0A8F\u0A8D\x03\x02\x02\x02\u0A90\u0A91\x07\x05" + + "\x02\x02\u0A91\u0A94\x03\x02\x02\x02\u0A92\u0A94\x05\xFC\x7F\x02\u0A93" + + "\u0A87\x03\x02\x02\x02\u0A93\u0A92\x03\x02\x02\x02\u0A94\u0A96\x03\x02" + + "\x02\x02\u0A95\u0A82\x03\x02\x02\x02\u0A95\u0A85\x03\x02\x02\x02\u0A96" + + "\u0AA7\x03\x02\x02\x02\u0A97\u0A98\t\x1B\x02\x02\u0A98\u0AA5\x07!\x02" + + "\x02\u0A99\u0A9A\x07\x04\x02\x02\u0A9A\u0A9F\x05b2\x02\u0A9B\u0A9C\x07" + + "\x06\x02\x02\u0A9C\u0A9E\x05b2\x02\u0A9D\u0A9B\x03\x02\x02\x02\u0A9E\u0AA1" + + "\x03\x02\x02\x02\u0A9F\u0A9D\x03\x02\x02\x02\u0A9F\u0AA0\x03\x02\x02\x02" + + "\u0AA0\u0AA2\x03\x02\x02\x02\u0AA1\u0A9F\x03\x02\x02\x02\u0AA2\u0AA3\x07" + + "\x05\x02\x02\u0AA3\u0AA6\x03\x02\x02\x02\u0AA4\u0AA6\x05b2\x02\u0AA5\u0A99" + + "\x03\x02\x02\x02\u0AA5\u0AA4\x03\x02\x02\x02\u0AA6\u0AA8\x03\x02\x02\x02" + + "\u0AA7\u0A97\x03\x02\x02\x02\u0AA7\u0AA8\x03\x02\x02\x02\u0AA8\xD7\x03" + + "\x02\x02\x02\u0AA9\u0AAA\x05\u0160\xB1\x02\u0AAA\u0AAB\x07\u016C\x02\x02" + + "\u0AAB\u0AAC\x05\xD4k\x02\u0AAC\xD9\x03\x02\x02\x02\u0AAD\u0AB0\x05\xD4" + + "k\x02\u0AAE\u0AB0\x05\xD8m\x02\u0AAF\u0AAD\x03\x02\x02\x02\u0AAF\u0AAE" + + "\x03\x02\x02\x02\u0AB0\xDB\x03\x02\x02\x02\u0AB1\u0AB4\x05\xDAn\x02\u0AB2" + + "\u0AB4\x05\u0100\x81\x02\u0AB3\u0AB1\x03\x02\x02\x02\u0AB3\u0AB2\x03\x02" + + "\x02\x02\u0AB4\xDD\x03\x02\x02\x02\u0AB5\u0AB6\x05\u0158\xAD\x02\u0AB6" + + "\u0ABF\x07\x04\x02\x02\u0AB7\u0ABC\x05\xDCo\x02\u0AB8\u0AB9\x07\x06\x02" + + "\x02\u0AB9\u0ABB\x05\xDCo\x02\u0ABA\u0AB8\x03\x02\x02\x02\u0ABB\u0ABE" + + "\x03\x02\x02\x02\u0ABC\u0ABA\x03\x02\x02\x02\u0ABC\u0ABD\x03\x02\x02\x02" + + "\u0ABD\u0AC0\x03\x02\x02\x02\u0ABE\u0ABC\x03\x02\x02\x02\u0ABF\u0AB7\x03" + + "\x02\x02\x02\u0ABF\u0AC0\x03\x02\x02\x02\u0AC0\u0AC1\x03\x02\x02\x02\u0AC1" + + "\u0AC2\x07\x05\x02\x02\u0AC2\u0AC3\x05\xE0q\x02\u0AC3\xDF\x03\x02\x02" + + "\x02\u0AC4\u0AC6\x07\x16\x02\x02\u0AC5\u0AC4\x03\x02\x02\x02\u0AC5\u0AC6" + + "\x03\x02\x02\x02\u0AC6\u0AC7\x03\x02\x02\x02\u0AC7\u0AC9\x05\u0162\xB2" + + "\x02\u0AC8\u0ACA\x05\xC4c\x02\u0AC9\u0AC8\x03\x02\x02\x02\u0AC9\u0ACA" + + "\x03\x02\x02\x02\u0ACA\u0ACC\x03\x02\x02\x02\u0ACB\u0AC5\x03\x02\x02\x02" + + "\u0ACB\u0ACC\x03\x02\x02\x02\u0ACC\xE1\x03\x02\x02\x02\u0ACD\u0ACE\x07" + + "\xFB\x02\x02\u0ACE\u0ACF\x07y\x02\x02\u0ACF\u0AD0\x07\u0104\x02\x02\u0AD0" + + "\u0AD4\x05\u016C\xB7\x02\u0AD1\u0AD2\x07\u0153\x02\x02\u0AD2\u0AD3\x07" + + "\u0105\x02\x02\u0AD3\u0AD5\x05> \x02\u0AD4\u0AD1\x03\x02\x02\x02\u0AD4" + + "\u0AD5\x03\x02\x02\x02\u0AD5\u0AFF\x03\x02\x02\x02\u0AD6\u0AD7\x07\xFB" + + "\x02\x02\u0AD7\u0AD8\x07y\x02\x02\u0AD8\u0AE2\x07W\x02\x02\u0AD9\u0ADA" + + "\x07q\x02\x02\u0ADA\u0ADB\x07\u0124\x02\x02\u0ADB\u0ADC\x07!\x02\x02\u0ADC" + + "\u0AE0\x05\u016C\xB7\x02\u0ADD\u0ADE\x07e\x02\x02\u0ADE\u0ADF\x07!\x02" + + "\x02\u0ADF\u0AE1\x05\u016C\xB7\x02\u0AE0\u0ADD\x03\x02\x02\x02\u0AE0\u0AE1" + + "\x03\x02\x02\x02\u0AE1\u0AE3\x03\x02\x02\x02\u0AE2\u0AD9\x03\x02\x02\x02" + + "\u0AE2\u0AE3\x03\x02\x02\x02\u0AE3\u0AE9\x03\x02\x02\x02\u0AE4\u0AE5\x07" + + "2\x02\x02\u0AE5\u0AE6\x07\x9A\x02\x02\u0AE6\u0AE7\x07\u0124\x02\x02\u0AE7" + + "\u0AE8\x07!\x02\x02\u0AE8\u0AEA\x05\u016C\xB7\x02\u0AE9\u0AE4\x03\x02" + + "\x02\x02\u0AE9\u0AEA\x03\x02\x02\x02\u0AEA\u0AF0\x03\x02\x02\x02\u0AEB" + + "\u0AEC\x07\xAF\x02\x02\u0AEC\u0AED\x07\x9C\x02\x02\u0AED\u0AEE\x07\u0124" + + "\x02\x02\u0AEE\u0AEF\x07!\x02\x02\u0AEF\u0AF1\x05\u016C\xB7\x02\u0AF0" + + "\u0AEB\x03\x02\x02\x02\u0AF0\u0AF1\x03\x02\x02\x02\u0AF1\u0AF6\x03\x02" + + "\x02\x02\u0AF2\u0AF3\x07\xA5\x02\x02\u0AF3\u0AF4\x07\u0124\x02\x02\u0AF4" + + "\u0AF5\x07!\x02\x02\u0AF5\u0AF7\x05\u016C\xB7\x02\u0AF6\u0AF2\x03\x02" + + "\x02\x02\u0AF6\u0AF7\x03\x02\x02\x02\u0AF7\u0AFC\x03\x02\x02\x02\u0AF8" + + "\u0AF9\x07\xC3\x02\x02\u0AF9\u0AFA\x07U\x02\x02\u0AFA\u0AFB\x07\x16\x02" + + "\x02\u0AFB\u0AFD\x05\u016C\xB7\x02\u0AFC\u0AF8\x03\x02\x02\x02\u0AFC\u0AFD" + + "\x03\x02\x02\x02\u0AFD\u0AFF\x03\x02\x02\x02\u0AFE\u0ACD\x03\x02\x02\x02" + + "\u0AFE\u0AD6\x03\x02\x02\x02\u0AFF\xE3\x03\x02\x02\x02\u0B00\u0B05\x05" + + "\xE6t\x02\u0B01\u0B02\x07\x06\x02\x02\u0B02\u0B04\x05\xE6t\x02\u0B03\u0B01" + + "\x03\x02\x02\x02\u0B04\u0B07\x03\x02\x02\x02\u0B05\u0B03\x03\x02\x02\x02" + + "\u0B05\u0B06\x03\x02\x02\x02\u0B06\xE5\x03\x02\x02\x02\u0B07\u0B05\x03" + + "\x02\x02\x02\u0B08\u0B0D\x05\u015C\xAF\x02\u0B09\u0B0A\x07\x07\x02\x02" + + "\u0B0A\u0B0C\x05\u015C\xAF\x02\u0B0B\u0B09\x03\x02\x02\x02\u0B0C\u0B0F" + + "\x03\x02\x02\x02\u0B0D\u0B0B\x03\x02\x02\x02\u0B0D\u0B0E\x03\x02\x02\x02" + + "\u0B0E\xE7\x03\x02\x02\x02\u0B0F\u0B0D\x03\x02\x02\x02\u0B10\u0B15\x05" + + "\xEAv\x02\u0B11\u0B12\x07\x06\x02\x02\u0B12\u0B14\x05\xEAv\x02\u0B13\u0B11" + + "\x03\x02\x02\x02\u0B14\u0B17\x03\x02\x02\x02\u0B15\u0B13\x03\x02\x02\x02" + + "\u0B15\u0B16\x03\x02\x02\x02\u0B16\xE9\x03\x02\x02\x02\u0B17\u0B15\x03" + + "\x02\x02\x02\u0B18\u0B1B\x05\xE6t\x02\u0B19\u0B1A\x07\xCB\x02\x02\u0B1A" + + "\u0B1C\x05> \x02\u0B1B\u0B19\x03\x02\x02\x02\u0B1B\u0B1C\x03\x02\x02\x02" + + "\u0B1C\xEB\x03\x02\x02\x02\u0B1D\u0B1E\x05\u015C\xAF\x02\u0B1E\u0B1F\x07" + + "\x07\x02\x02\u0B1F\u0B21\x03\x02\x02\x02\u0B20\u0B1D\x03\x02\x02\x02\u0B20" + + "\u0B21\x03\x02\x02\x02\u0B21\u0B22\x03\x02\x02\x02\u0B22\u0B23\x05\u015C" + + "\xAF\x02\u0B23\xED\x03\x02\x02\x02\u0B24\u0B25\x05\u015C\xAF\x02\u0B25" + + "\u0B26\x07\x07\x02\x02\u0B26\u0B28\x03\x02\x02\x02\u0B27\u0B24\x03\x02" + + "\x02\x02\u0B27\u0B28\x03\x02\x02\x02\u0B28\u0B29\x03\x02\x02\x02\u0B29" + + "\u0B2A\x05\u015C\xAF\x02\u0B2A\xEF\x03\x02\x02\x02\u0B2B\u0B33\x05\xFC" + + "\x7F\x02\u0B2C\u0B2E\x07\x16\x02\x02\u0B2D\u0B2C\x03\x02\x02\x02\u0B2D" + + "\u0B2E\x03\x02\x02\x02\u0B2E\u0B31\x03\x02\x02\x02\u0B2F\u0B32\x05\u015C" + + "\xAF\x02\u0B30\u0B32\x05\xC4c\x02\u0B31\u0B2F\x03\x02\x02\x02\u0B31\u0B30" + + "\x03\x02\x02\x02\u0B32\u0B34\x03\x02\x02\x02\u0B33\u0B2D\x03\x02\x02\x02" + + "\u0B33\u0B34\x03\x02\x02\x02\u0B34\xF1\x03\x02\x02\x02\u0B35\u0B3A\x05" + + "\xF0y\x02\u0B36\u0B37\x07\x06\x02\x02\u0B37\u0B39\x05\xF0y\x02\u0B38\u0B36" + + "\x03\x02\x02\x02\u0B39\u0B3C\x03\x02\x02\x02\u0B3A\u0B38\x03\x02\x02\x02" + + "\u0B3A\u0B3B\x03\x02\x02\x02\u0B3B\xF3\x03\x02\x02\x02\u0B3C\u0B3A\x03" + + "\x02\x02\x02\u0B3D\u0B3E\x07\x04\x02\x02\u0B3E\u0B43\x05\xF6|\x02\u0B3F" + + "\u0B40\x07\x06\x02\x02\u0B40\u0B42\x05\xF6|\x02\u0B41\u0B3F\x03\x02\x02" + + "\x02\u0B42\u0B45\x03\x02\x02\x02\u0B43\u0B41\x03\x02\x02\x02\u0B43\u0B44" + + "\x03\x02\x02\x02\u0B44\u0B46\x03\x02\x02\x02\u0B45\u0B43\x03\x02\x02\x02" + + "\u0B46\u0B47\x07\x05\x02\x02\u0B47\xF5\x03\x02\x02\x02\u0B48\u0B4B\x05" + + "\xF8}\x02\u0B49\u0B4B\x05\u013C\x9F\x02\u0B4A\u0B48\x03\x02\x02\x02\u0B4A" + + "\u0B49\x03\x02\x02\x02\u0B4B\xF7\x03\x02\x02\x02\u0B4C\u0B5A\x05\u015A" + + "\xAE\x02\u0B4D\u0B4E\x05\u0160\xB1\x02\u0B4E\u0B4F\x07\x04\x02\x02\u0B4F" + + "\u0B54\x05\xFA~\x02\u0B50\u0B51\x07\x06\x02\x02\u0B51\u0B53\x05\xFA~\x02" + + "\u0B52\u0B50\x03\x02\x02\x02\u0B53\u0B56\x03\x02\x02\x02\u0B54\u0B52\x03" + + "\x02\x02\x02\u0B54\u0B55\x03\x02\x02\x02\u0B55\u0B57\x03\x02\x02\x02\u0B56" + + "\u0B54\x03\x02\x02\x02\u0B57\u0B58\x07\x05\x02\x02\u0B58\u0B5A\x03\x02" + + "\x02\x02\u0B59\u0B4C\x03\x02\x02\x02\u0B59\u0B4D\x03\x02\x02\x02\u0B5A" + + "\xF9\x03\x02\x02\x02\u0B5B\u0B5E\x05\u015A\xAE\x02\u0B5C\u0B5E\x05\u0110" + + "\x89\x02\u0B5D\u0B5B\x03\x02\x02\x02\u0B5D\u0B5C\x03\x02\x02\x02\u0B5E" + + "\xFB\x03\x02\x02\x02\u0B5F\u0B60\x05\u0104\x83\x02\u0B60\xFD\x03\x02\x02" + + "\x02\u0B61\u0B62\x05\u0160\xB1\x02\u0B62\u0B63\x07\u016C\x02\x02\u0B63" + + "\u0B64\x05\xFC\x7F\x02\u0B64\xFF\x03\x02\x02\x02\u0B65\u0B68\x05\xFC\x7F" + + "\x02\u0B66\u0B68\x05\xFE\x80\x02\u0B67\u0B65\x03\x02\x02\x02\u0B67\u0B66" + + "\x03\x02\x02\x02\u0B68\u0101\x03\x02\x02\x02\u0B69\u0B6E\x05\xFC\x7F\x02" + + "\u0B6A\u0B6B\x07\x06\x02\x02\u0B6B\u0B6D\x05\xFC\x7F\x02\u0B6C\u0B6A\x03" + + "\x02\x02\x02\u0B6D\u0B70\x03\x02\x02\x02\u0B6E\u0B6C\x03\x02\x02\x02\u0B6E" + + "\u0B6F\x03\x02\x02\x02\u0B6F\u0103\x03\x02\x02\x02\u0B70\u0B6E\x03\x02" + + "\x02\x02\u0B71\u0B72\b\x83\x01\x02\u0B72\u0B73\x07\xC2\x02\x02\u0B73\u0B7E" + + "\x05\u0104\x83\x07\u0B74\u0B75\x07i\x02\x02\u0B75\u0B76\x07\x04\x02\x02" + + "\u0B76\u0B77\x05$\x13\x02\u0B77\u0B78\x07\x05\x02\x02\u0B78\u0B7E\x03" + + "\x02\x02\x02\u0B79\u0B7B\x05\u0108\x85\x02\u0B7A\u0B7C\x05\u0106\x84\x02" + + "\u0B7B\u0B7A\x03\x02\x02\x02\u0B7B\u0B7C\x03\x02\x02\x02\u0B7C\u0B7E\x03" + + "\x02\x02\x02\u0B7D\u0B71\x03\x02\x02\x02\u0B7D\u0B74\x03\x02\x02\x02\u0B7D" + + "\u0B79\x03\x02\x02\x02\u0B7E\u0B87\x03\x02\x02\x02\u0B7F\u0B80\f\x04\x02" + + "\x02\u0B80\u0B81\x07\x10\x02\x02\u0B81\u0B86\x05\u0104\x83\x05\u0B82\u0B83" + + "\f\x03\x02\x02\u0B83\u0B84\x07\xCC\x02\x02\u0B84\u0B86\x05\u0104\x83\x04" + + "\u0B85\u0B7F\x03\x02\x02\x02\u0B85\u0B82\x03\x02\x02\x02\u0B86\u0B89\x03" + + "\x02\x02\x02\u0B87\u0B85\x03\x02\x02\x02\u0B87\u0B88\x03\x02\x02\x02\u0B88" + + "\u0105\x03\x02\x02\x02\u0B89\u0B87\x03\x02\x02\x02\u0B8A\u0B8C\x07\xC2" + + "\x02\x02\u0B8B\u0B8A\x03\x02\x02\x02\u0B8B\u0B8C\x03\x02\x02\x02\u0B8C" + + "\u0B8D\x03\x02\x02\x02\u0B8D\u0B8E\x07\x1A\x02\x02\u0B8E\u0B8F\x05\u0108" + + "\x85\x02\u0B8F\u0B90\x07\x10\x02\x02\u0B90\u0B91\x05\u0108\x85\x02\u0B91" + + "\u0BDD\x03\x02\x02\x02\u0B92\u0B94\x07\xC2\x02\x02\u0B93\u0B92\x03\x02" + + "\x02\x02\u0B93\u0B94\x03\x02\x02\x02\u0B94\u0B95\x03\x02\x02\x02\u0B95" + + "\u0B96\x07\x8C\x02\x02\u0B96\u0B97\x07\x04\x02\x02\u0B97\u0B9C\x05\xFC" + + "\x7F\x02\u0B98\u0B99\x07\x06\x02\x02\u0B99\u0B9B\x05\xFC\x7F\x02\u0B9A" + + "\u0B98\x03\x02\x02\x02\u0B9B\u0B9E\x03\x02\x02\x02\u0B9C\u0B9A\x03\x02" + + "\x02\x02\u0B9C\u0B9D\x03\x02\x02\x02\u0B9D\u0B9F\x03\x02\x02\x02\u0B9E" + + "\u0B9C\x03\x02\x02\x02\u0B9F\u0BA0\x07\x05\x02\x02\u0BA0\u0BDD\x03\x02" + + "\x02\x02\u0BA1\u0BA3\x07\xC2\x02\x02\u0BA2\u0BA1\x03\x02\x02\x02\u0BA2" + + "\u0BA3\x03\x02\x02\x02\u0BA3\u0BA4\x03\x02\x02\x02\u0BA4\u0BA5\x07\x8C" + + "\x02\x02\u0BA5\u0BA6\x07\x04\x02\x02\u0BA6\u0BA7\x05$\x13\x02\u0BA7\u0BA8" + + "\x07\x05\x02\x02\u0BA8\u0BDD\x03\x02\x02\x02\u0BA9\u0BAB\x07\xC2\x02\x02" + + "\u0BAA\u0BA9\x03\x02\x02\x02\u0BAA\u0BAB\x03\x02\x02\x02\u0BAB\u0BAC\x03" + + "\x02\x02\x02\u0BAC\u0BAD\x07\xF6\x02\x02\u0BAD\u0BDD\x05\u0108\x85\x02" + + "\u0BAE\u0BB0\x07\xC2\x02\x02\u0BAF\u0BAE\x03\x02\x02\x02\u0BAF\u0BB0\x03" + + "\x02\x02\x02\u0BB0\u0BB1\x03\x02\x02\x02\u0BB1\u0BB2\t\x1C\x02\x02\u0BB2" + + "\u0BC0\t\x1D\x02\x02\u0BB3\u0BB4\x07\x04\x02\x02\u0BB4\u0BC1\x07\x05\x02" + + "\x02\u0BB5\u0BB6\x07\x04\x02\x02\u0BB6\u0BBB\x05\xFC\x7F\x02\u0BB7\u0BB8" + + "\x07\x06\x02\x02\u0BB8\u0BBA\x05\xFC\x7F\x02\u0BB9\u0BB7\x03\x02\x02\x02" + + "\u0BBA\u0BBD\x03\x02\x02\x02\u0BBB\u0BB9\x03\x02\x02\x02\u0BBB\u0BBC\x03" + + "\x02\x02\x02\u0BBC\u0BBE\x03\x02\x02\x02\u0BBD\u0BBB\x03\x02\x02\x02\u0BBE" + + "\u0BBF\x07\x05\x02\x02\u0BBF\u0BC1\x03\x02\x02\x02\u0BC0\u0BB3\x03\x02" + + "\x02\x02\u0BC0\u0BB5\x03\x02\x02\x02\u0BC1\u0BDD\x03\x02\x02\x02\u0BC2" + + "\u0BC4\x07\xC2\x02\x02\u0BC3\u0BC2\x03\x02\x02\x02\u0BC3\u0BC4\x03\x02" + + "\x02\x02\u0BC4\u0BC5\x03\x02\x02\x02\u0BC5\u0BC6\t\x1C\x02\x02\u0BC6\u0BC9" + + "\x05\u0108\x85\x02\u0BC7\u0BC8\x07d\x02\x02\u0BC8\u0BCA\x05\u016C\xB7" + + "\x02\u0BC9\u0BC7\x03\x02\x02\x02\u0BC9\u0BCA\x03\x02\x02\x02\u0BCA\u0BDD" + + "\x03\x02\x02\x02\u0BCB\u0BCD\x07\x99\x02\x02\u0BCC\u0BCE\x07\xC2\x02\x02" + + "\u0BCD\u0BCC\x03\x02\x02\x02\u0BCD\u0BCE\x03\x02\x02\x02\u0BCE\u0BCF\x03" + + "\x02\x02\x02\u0BCF\u0BDD\x07\xC3\x02\x02\u0BD0\u0BD2\x07\x99\x02\x02\u0BD1" + + "\u0BD3\x07\xC2\x02\x02\u0BD2\u0BD1\x03\x02\x02\x02\u0BD2\u0BD3\x03\x02" + + "\x02\x02\u0BD3\u0BD4\x03\x02\x02\x02\u0BD4\u0BDD\t\x1E\x02\x02\u0BD5\u0BD7" + + "\x07\x99\x02\x02\u0BD6\u0BD8\x07\xC2\x02\x02\u0BD7\u0BD6\x03\x02\x02\x02" + + "\u0BD7\u0BD8\x03\x02\x02\x02\u0BD8\u0BD9\x03\x02\x02\x02\u0BD9\u0BDA\x07" + + "]\x02\x02\u0BDA\u0BDB\x07{\x02\x02\u0BDB\u0BDD\x05\u0108\x85\x02\u0BDC" + + "\u0B8B\x03\x02\x02\x02\u0BDC\u0B93\x03\x02\x02\x02\u0BDC\u0BA2\x03\x02" + + "\x02\x02\u0BDC\u0BAA\x03\x02\x02\x02\u0BDC\u0BAF\x03\x02\x02\x02\u0BDC" + + "\u0BC3\x03\x02\x02\x02\u0BDC\u0BCB\x03\x02\x02\x02\u0BDC\u0BD0\x03\x02" + + "\x02\x02\u0BDC\u0BD5\x03\x02\x02\x02\u0BDD\u0107\x03\x02\x02\x02\u0BDE" + + "\u0BDF\b\x85\x01\x02\u0BDF\u0BE3\x05\u010C\x87\x02\u0BE0\u0BE1\t\x1F\x02" + + "\x02\u0BE1\u0BE3\x05\u0108\x85\t\u0BE2\u0BDE\x03\x02\x02\x02\u0BE2\u0BE0" + + "\x03\x02\x02\x02\u0BE3\u0BF9\x03\x02\x02\x02\u0BE4\u0BE5\f\b\x02\x02\u0BE5" + + "\u0BE6\t \x02\x02\u0BE6\u0BF8\x05\u0108\x85\t\u0BE7\u0BE8\f\x07\x02\x02" + + "\u0BE8\u0BE9\t!\x02\x02\u0BE9\u0BF8\x05\u0108\x85\b\u0BEA\u0BEB\f\x06" + + "\x02\x02\u0BEB\u0BEC\x07\u0166\x02\x02\u0BEC\u0BF8\x05\u0108\x85\x07\u0BED" + + "\u0BEE\f\x05\x02\x02\u0BEE\u0BEF\x07\u0169\x02\x02\u0BEF\u0BF8\x05\u0108" + + "\x85\x06\u0BF0\u0BF1\f\x04\x02\x02\u0BF1\u0BF2\x07\u0167\x02\x02\u0BF2" + + "\u0BF8\x05\u0108\x85\x05\u0BF3\u0BF4\f\x03\x02\x02\u0BF4\u0BF5\x05\u0112" + + "\x8A\x02\u0BF5\u0BF6\x05\u0108\x85\x04\u0BF6\u0BF8\x03\x02\x02\x02\u0BF7" + + "\u0BE4\x03\x02\x02\x02\u0BF7\u0BE7\x03\x02\x02\x02\u0BF7\u0BEA\x03\x02" + + "\x02\x02\u0BF7\u0BED\x03\x02\x02\x02\u0BF7\u0BF0\x03\x02\x02\x02\u0BF7" + + "\u0BF3\x03\x02\x02\x02\u0BF8\u0BFB\x03\x02\x02\x02\u0BF9\u0BF7\x03\x02" + + "\x02\x02\u0BF9\u0BFA\x03\x02\x02\x02\u0BFA\u0109\x03\x02\x02\x02\u0BFB" + + "\u0BF9\x03"; + private static readonly _serializedATNSegment6: string = + "\x02\x02\x02\u0BFC\u0BFD\t\"\x02\x02\u0BFD\u010B\x03\x02\x02\x02\u0BFE" + + "\u0BFF\b\x87\x01\x02\u0BFF\u0CF8\t#\x02\x02\u0C00\u0C01\t$\x02\x02\u0C01" + + "\u0C04\x07\x04\x02\x02\u0C02\u0C05\x05\u010A\x86\x02\u0C03\u0C05\x05\u016C" + + "\xB7\x02\u0C04\u0C02\x03\x02\x02\x02\u0C04\u0C03\x03\x02\x02\x02\u0C05" + + "\u0C06\x03\x02\x02\x02\u0C06\u0C07\x07\x06\x02\x02\u0C07\u0C08\x05\u0108" + + "\x85\x02\u0C08\u0C09\x07\x06\x02\x02\u0C09\u0C0A\x05\u0108\x85\x02\u0C0A" + + "\u0C0B\x07\x05\x02\x02\u0C0B\u0CF8\x03\x02\x02\x02\u0C0C\u0C0D\t%\x02" + + "\x02\u0C0D\u0C10\x07\x04\x02\x02\u0C0E\u0C11\x05\u010A\x86\x02\u0C0F\u0C11" + + "\x05\u016C\xB7\x02\u0C10\u0C0E\x03\x02\x02\x02\u0C10\u0C0F\x03\x02\x02" + + "\x02\u0C11\u0C12\x03\x02\x02\x02\u0C12\u0C13\x07\x06\x02\x02\u0C13\u0C14" + + "\x05\u0108\x85\x02\u0C14\u0C15\x07\x06\x02\x02\u0C15\u0C16\x05\u0108\x85" + + "\x02\u0C16\u0C17\x07\x05\x02\x02\u0C17\u0CF8\x03\x02\x02\x02\u0C18\u0C1A" + + "\x07%\x02\x02\u0C19\u0C1B\x05\u014A\xA6\x02\u0C1A\u0C19\x03\x02\x02\x02" + + "\u0C1B\u0C1C\x03\x02\x02\x02\u0C1C\u0C1A\x03\x02\x02\x02\u0C1C\u0C1D\x03" + + "\x02\x02\x02\u0C1D\u0C20\x03\x02\x02\x02\u0C1E\u0C1F\x07b\x02\x02\u0C1F" + + "\u0C21\x05\xFC\x7F\x02\u0C20\u0C1E\x03\x02\x02\x02\u0C20\u0C21\x03\x02" + + "\x02\x02\u0C21\u0C22\x03\x02\x02\x02\u0C22\u0C23\x07c\x02\x02\u0C23\u0CF8" + + "\x03\x02\x02\x02\u0C24\u0C25\x07%\x02\x02\u0C25\u0C27\x05\xFC\x7F\x02" + + "\u0C26\u0C28\x05\u014A\xA6\x02\u0C27\u0C26\x03\x02\x02\x02\u0C28\u0C29" + + "\x03\x02\x02\x02\u0C29\u0C27\x03\x02\x02\x02\u0C29\u0C2A\x03\x02\x02\x02" + + "\u0C2A\u0C2D\x03\x02\x02\x02\u0C2B\u0C2C\x07b\x02\x02\u0C2C\u0C2E\x05" + + "\xFC\x7F\x02\u0C2D\u0C2B\x03\x02\x02\x02\u0C2D\u0C2E\x03\x02\x02\x02\u0C2E" + + "\u0C2F\x03\x02\x02\x02\u0C2F\u0C30\x07c\x02\x02\u0C30\u0CF8\x03\x02\x02" + + "\x02\u0C31\u0C32\t&\x02\x02\u0C32\u0C33\x07\x04\x02\x02\u0C33\u0C34\x05" + + "\xFC\x7F\x02\u0C34\u0C35\x07\x16\x02\x02\u0C35\u0C36\x05\u012E\x98\x02" + + "\u0C36\u0C37\x07\x05\x02\x02\u0C37\u0CF8\x03\x02\x02\x02\u0C38\u0C39\x07" + + "\u0118\x02\x02\u0C39\u0C42\x07\x04\x02\x02\u0C3A\u0C3F\x05\xF0y\x02\u0C3B" + + "\u0C3C\x07\x06\x02\x02\u0C3C\u0C3E\x05\xF0y\x02\u0C3D\u0C3B\x03\x02\x02" + + "\x02\u0C3E\u0C41\x03\x02\x02\x02\u0C3F\u0C3D\x03\x02\x02\x02\u0C3F\u0C40" + + "\x03\x02\x02\x02\u0C40\u0C43\x03\x02\x02\x02\u0C41\u0C3F\x03\x02\x02\x02" + + "\u0C42\u0C3A\x03\x02\x02\x02\u0C42\u0C43\x03\x02\x02\x02\u0C43\u0C44\x03" + + "\x02\x02\x02\u0C44\u0CF8\x07\x05\x02\x02\u0C45\u0C46\x07t\x02\x02\u0C46" + + "\u0C47\x07\x04\x02\x02\u0C47\u0C4A\x05\xFC\x7F\x02\u0C48\u0C49\x07\x8A" + + "\x02\x02\u0C49\u0C4B\x07\xC4\x02\x02\u0C4A\u0C48\x03\x02\x02\x02\u0C4A" + + "\u0C4B\x03\x02\x02\x02\u0C4B\u0C4C\x03\x02\x02\x02\u0C4C\u0C4D\x07\x05" + + "\x02\x02\u0C4D\u0CF8\x03\x02\x02\x02\u0C4E\u0C4F\x07\x13\x02\x02\u0C4F" + + "\u0C50\x07\x04\x02\x02\u0C50\u0C53\x05\xFC\x7F\x02\u0C51\u0C52\x07\x8A" + + "\x02\x02\u0C52\u0C54\x07\xC4\x02\x02\u0C53\u0C51\x03\x02\x02\x02\u0C53" + + "\u0C54\x03\x02\x02\x02\u0C54\u0C55\x03\x02\x02\x02\u0C55\u0C56\x07\x05" + + "\x02\x02\u0C56\u0CF8\x03\x02\x02\x02\u0C57\u0C58\x07\x9D\x02\x02\u0C58" + + "\u0C59\x07\x04\x02\x02\u0C59\u0C5C\x05\xFC\x7F\x02\u0C5A\u0C5B\x07\x8A" + + "\x02\x02\u0C5B\u0C5D\x07\xC4\x02\x02\u0C5C\u0C5A\x03\x02\x02\x02\u0C5C" + + "\u0C5D\x03\x02\x02\x02\u0C5D\u0C5E\x03\x02\x02\x02\u0C5E\u0C5F\x07\x05" + + "\x02\x02\u0C5F\u0CF8\x03\x02\x02\x02\u0C60\u0C61\x07\xDD\x02\x02\u0C61" + + "\u0C62\x07\x04\x02\x02\u0C62\u0C63\x05\u0108\x85\x02\u0C63\u0C64\x07\x8C" + + "\x02\x02\u0C64\u0C65\x05\u0108\x85\x02\u0C65\u0C66\x07\x05\x02\x02\u0C66" + + "\u0CF8\x03\x02\x02\x02\u0C67\u0CF8\x05\u0110\x89\x02\u0C68\u0CF8\x07\u0162" + + "\x02\x02\u0C69\u0C6A\x05\u015A\xAE\x02\u0C6A\u0C6B\x07\x07\x02\x02\u0C6B" + + "\u0C6C\x07\u0162\x02\x02\u0C6C\u0CF8\x03\x02\x02\x02\u0C6D\u0C6E\x07\x04" + + "\x02\x02\u0C6E\u0C71\x05\xF0y\x02\u0C6F\u0C70\x07\x06\x02\x02\u0C70\u0C72" + + "\x05\xF0y\x02\u0C71\u0C6F\x03\x02\x02\x02\u0C72\u0C73\x03\x02\x02\x02" + + "\u0C73\u0C71\x03\x02\x02\x02\u0C73\u0C74\x03\x02\x02\x02\u0C74\u0C75\x03" + + "\x02\x02\x02\u0C75\u0C76\x07\x05\x02\x02\u0C76\u0CF8\x03\x02\x02\x02\u0C77" + + "\u0C78\x07\x04\x02\x02\u0C78\u0C79\x05$\x13\x02\u0C79\u0C7A\x07\x05\x02" + + "\x02\u0C7A\u0CF8\x03\x02\x02\x02\u0C7B\u0C7C\x07\x88\x02\x02\u0C7C\u0C7D" + + "\x07\x04\x02\x02\u0C7D\u0C7E\x05\xFC\x7F\x02\u0C7E\u0C7F\x07\x05\x02\x02" + + "\u0C7F\u0CF8\x03\x02\x02\x02\u0C80\u0C81\x05\u0158\xAD\x02\u0C81\u0C8D" + + "\x07\x04\x02\x02\u0C82\u0C84\x05\xB4[\x02\u0C83\u0C82\x03\x02\x02\x02" + + "\u0C83\u0C84\x03\x02\x02\x02\u0C84\u0C85\x03\x02\x02\x02\u0C85\u0C8A\x05" + + "\u0100\x81\x02\u0C86\u0C87\x07\x06\x02\x02\u0C87\u0C89\x05\u0100\x81\x02" + + "\u0C88\u0C86\x03\x02\x02\x02\u0C89\u0C8C\x03\x02\x02\x02\u0C8A\u0C88\x03" + + "\x02\x02\x02\u0C8A\u0C8B\x03\x02\x02\x02\u0C8B\u0C8E\x03\x02\x02\x02\u0C8C" + + "\u0C8A\x03\x02\x02\x02\u0C8D\u0C83\x03\x02\x02\x02\u0C8D\u0C8E\x03\x02" + + "\x02\x02\u0C8E\u0C8F\x03\x02\x02\x02\u0C8F\u0C96\x07\x05\x02\x02\u0C90" + + "\u0C91\x07r\x02\x02\u0C91\u0C92\x07\x04\x02\x02\u0C92\u0C93\x07\u0151" + + "\x02\x02\u0C93\u0C94\x05\u0104\x83\x02\u0C94\u0C95\x07\x05\x02\x02\u0C95" + + "\u0C97\x03\x02\x02\x02\u0C96\u0C90\x03\x02\x02\x02\u0C96\u0C97\x03\x02" + + "\x02\x02\u0C97\u0C9A\x03\x02\x02\x02\u0C98\u0C99\t\'\x02\x02\u0C99\u0C9B" + + "\x07\xC4\x02\x02\u0C9A\u0C98\x03\x02\x02\x02\u0C9A\u0C9B\x03\x02\x02\x02" + + "\u0C9B\u0C9E\x03\x02\x02\x02\u0C9C\u0C9D\x07\xD1\x02\x02\u0C9D\u0C9F\x05" + + "\u0150\xA9\x02\u0C9E\u0C9C\x03\x02\x02\x02\u0C9E\u0C9F\x03\x02\x02\x02" + + "\u0C9F\u0CF8\x03\x02\x02\x02\u0CA0\u0CA1\x05\u0160\xB1\x02\u0CA1\u0CA2" + + "\x07\u016B\x02\x02\u0CA2\u0CA3\x05\xFC\x7F\x02\u0CA3\u0CF8\x03\x02\x02" + + "\x02\u0CA4\u0CA5\x07\x04\x02\x02\u0CA5\u0CA8\x05\u0160\xB1\x02\u0CA6\u0CA7" + + "\x07\x06\x02\x02\u0CA7\u0CA9\x05\u0160\xB1\x02\u0CA8\u0CA6\x03\x02\x02" + + "\x02\u0CA9\u0CAA\x03\x02\x02\x02\u0CAA\u0CA8\x03\x02\x02\x02\u0CAA\u0CAB" + + "\x03\x02\x02\x02\u0CAB\u0CAC\x03\x02\x02\x02\u0CAC\u0CAD\x07\x05\x02\x02" + + "\u0CAD\u0CAE\x07\u016B\x02\x02\u0CAE\u0CAF\x05\xFC\x7F\x02\u0CAF\u0CF8" + + "\x03\x02\x02\x02\u0CB0\u0CF8\x05\u0160\xB1\x02\u0CB1\u0CB2\x07\x04\x02" + + "\x02\u0CB2\u0CB3\x05\xFC\x7F\x02\u0CB3\u0CB4\x07\x05\x02\x02\u0CB4\u0CF8" + + "\x03\x02\x02\x02\u0CB5\u0CB6\x07n\x02\x02\u0CB6\u0CB7\x07\x04\x02\x02" + + "\u0CB7\u0CB8\x05\u0160\xB1\x02\u0CB8\u0CB9\x07{\x02\x02\u0CB9\u0CBA\x05" + + "\u0108\x85\x02\u0CBA\u0CBB\x07\x05\x02\x02\u0CBB\u0CF8\x03\x02\x02\x02" + + "\u0CBC\u0CBD\t(\x02\x02\u0CBD\u0CBE\x07\x04\x02\x02\u0CBE\u0CBF\x05\u0108" + + "\x85\x02\u0CBF\u0CC0\t)\x02\x02\u0CC0\u0CC3\x05\u0108\x85\x02\u0CC1\u0CC2" + + "\t*\x02\x02\u0CC2\u0CC4\x05\u0108\x85\x02\u0CC3\u0CC1\x03\x02\x02\x02" + + "\u0CC3\u0CC4\x03\x02\x02\x02\u0CC4\u0CC5\x03\x02\x02\x02\u0CC5\u0CC6\x07" + + "\x05\x02\x02\u0CC6\u0CF8\x03\x02\x02\x02\u0CC7\u0CC8\x07\u0134\x02\x02" + + "\u0CC8\u0CCA\x07\x04\x02\x02\u0CC9\u0CCB\t+\x02\x02\u0CCA\u0CC9\x03\x02" + + "\x02\x02\u0CCA\u0CCB\x03\x02\x02\x02\u0CCB\u0CCD\x03\x02\x02\x02\u0CCC" + + "\u0CCE\x05\u0108\x85\x02\u0CCD\u0CCC\x03\x02\x02\x02\u0CCD\u0CCE\x03\x02" + + "\x02\x02\u0CCE\u0CCF\x03\x02\x02\x02\u0CCF\u0CD0\x07{\x02\x02\u0CD0\u0CD1" + + "\x05\u0108\x85\x02\u0CD1\u0CD2\x07\x05\x02\x02\u0CD2\u0CF8\x03\x02\x02" + + "\x02\u0CD3\u0CD4\x07\xD3\x02\x02\u0CD4\u0CD5\x07\x04\x02\x02\u0CD5\u0CD6" + + "\x05\u0108\x85\x02\u0CD6\u0CD7\x07\xDC\x02\x02\u0CD7\u0CD8\x05\u0108\x85" + + "\x02\u0CD8\u0CD9\x07{\x02\x02\u0CD9\u0CDC\x05\u0108\x85\x02\u0CDA\u0CDB" + + "\x07w\x02\x02\u0CDB\u0CDD\x05\u0108\x85\x02\u0CDC\u0CDA\x03\x02\x02\x02" + + "\u0CDC\u0CDD\x03\x02\x02\x02\u0CDD\u0CDE\x03\x02\x02\x02\u0CDE\u0CDF\x07" + + "\x05\x02\x02\u0CDF\u0CF8\x03\x02\x02\x02\u0CE0\u0CE1\t,\x02\x02\u0CE1" + + "\u0CE2\x07\x04\x02\x02\u0CE2\u0CE3\x05\u0108\x85\x02\u0CE3\u0CE4\x07\x05" + + "\x02\x02\u0CE4\u0CE5\x07\u0154\x02\x02\u0CE5\u0CE6\x07\x82\x02\x02\u0CE6" + + "\u0CE7\x07\x04\x02\x02\u0CE7\u0CE8\x07\xCD\x02\x02\u0CE8\u0CE9\x07!\x02" + + "\x02\u0CE9\u0CEA\x05b2\x02\u0CEA\u0CF1\x07\x05\x02\x02\u0CEB\u0CEC\x07" + + "r\x02\x02\u0CEC\u0CED\x07\x04\x02\x02\u0CED\u0CEE\x07\u0151\x02\x02\u0CEE" + + "\u0CEF\x05\u0104\x83\x02\u0CEF\u0CF0\x07\x05\x02\x02\u0CF0\u0CF2\x03\x02" + + "\x02\x02\u0CF1\u0CEB\x03\x02\x02\x02\u0CF1\u0CF2\x03\x02\x02\x02\u0CF2" + + "\u0CF5\x03\x02\x02\x02\u0CF3\u0CF4\x07\xD1\x02\x02\u0CF4\u0CF6\x05\u0150" + + "\xA9\x02\u0CF5\u0CF3\x03\x02\x02\x02\u0CF5\u0CF6\x03\x02\x02\x02\u0CF6" + + "\u0CF8\x03\x02\x02\x02\u0CF7\u0BFE\x03\x02\x02\x02\u0CF7\u0C00\x03\x02" + + "\x02\x02\u0CF7\u0C0C\x03\x02\x02\x02\u0CF7\u0C18\x03\x02\x02\x02\u0CF7" + + "\u0C24\x03\x02\x02\x02\u0CF7\u0C31\x03\x02\x02\x02\u0CF7\u0C38\x03\x02" + + "\x02\x02\u0CF7\u0C45\x03\x02\x02\x02\u0CF7\u0C4E\x03\x02\x02\x02\u0CF7" + + "\u0C57\x03\x02\x02\x02\u0CF7\u0C60\x03\x02\x02\x02\u0CF7\u0C67\x03\x02" + + "\x02\x02\u0CF7\u0C68\x03\x02\x02\x02\u0CF7\u0C69\x03\x02\x02\x02\u0CF7" + + "\u0C6D\x03\x02\x02\x02\u0CF7\u0C77\x03\x02\x02\x02\u0CF7\u0C7B\x03\x02" + + "\x02\x02\u0CF7\u0C80\x03\x02\x02\x02\u0CF7\u0CA0\x03\x02\x02\x02\u0CF7" + + "\u0CA4\x03\x02\x02\x02\u0CF7\u0CB0\x03\x02\x02\x02\u0CF7\u0CB1\x03\x02" + + "\x02\x02\u0CF7\u0CB5\x03\x02\x02\x02\u0CF7\u0CBC\x03\x02\x02\x02\u0CF7" + + "\u0CC7\x03\x02\x02\x02\u0CF7\u0CD3\x03\x02\x02\x02\u0CF7\u0CE0\x03\x02" + + "\x02\x02\u0CF8\u0D03\x03\x02\x02\x02\u0CF9\u0CFA\f\v\x02\x02\u0CFA\u0CFB" + + "\x07\b\x02\x02\u0CFB\u0CFC\x05\u0108\x85\x02\u0CFC\u0CFD\x07\t\x02\x02" + + "\u0CFD\u0D02\x03\x02\x02\x02\u0CFE\u0CFF\f\t\x02\x02\u0CFF\u0D00\x07\x07" + + "\x02\x02\u0D00\u0D02\x05\u0160\xB1\x02\u0D01\u0CF9\x03\x02\x02\x02\u0D01" + + "\u0CFE\x03\x02\x02\x02\u0D02\u0D05\x03\x02\x02\x02\u0D03\u0D01\x03\x02" + + "\x02\x02\u0D03\u0D04\x03\x02\x02\x02\u0D04\u010D\x03\x02\x02\x02\u0D05" + + "\u0D03\x03\x02\x02\x02\u0D06\u0D0E\x07I\x02\x02\u0D07\u0D0E\x07\u0128" + + "\x02\x02\u0D08\u0D0E\x07\u0129\x02\x02\u0D09\u0D0E\x07\u012A\x02\x02\u0D0A" + + "\u0D0E\x07\x95\x02\x02\u0D0B\u0D0E\x07\x85\x02\x02\u0D0C\u0D0E\x05\u0160" + + "\xB1\x02\u0D0D\u0D06\x03\x02\x02\x02\u0D0D\u0D07\x03\x02\x02\x02\u0D0D" + + "\u0D08\x03\x02\x02\x02\u0D0D\u0D09\x03\x02\x02\x02\u0D0D\u0D0A\x03\x02" + + "\x02\x02\u0D0D\u0D0B\x03\x02\x02\x02\u0D0D\u0D0C\x03\x02\x02\x02\u0D0E" + + "\u010F\x03\x02\x02\x02\u0D0F\u0D1F\x07\xC3\x02\x02\u0D10\u0D1F\x07\u016F" + + "\x02\x02\u0D11\u0D12\x07\u016A\x02\x02\u0D12\u0D1F\x05\u0160\xB1\x02\u0D13" + + "\u0D1F\x05\u011A\x8E\x02\u0D14\u0D15\x05\u010E\x88\x02\u0D15\u0D16\x05" + + "\u016C\xB7\x02\u0D16\u0D1F\x03\x02\x02\x02\u0D17\u0D1F\x05\u0168\xB5\x02" + + "\u0D18\u0D1F\x05\u0118\x8D\x02\u0D19\u0D1B\x05\u016C\xB7\x02\u0D1A\u0D19" + + "\x03\x02\x02\x02\u0D1B\u0D1C\x03\x02\x02\x02\u0D1C\u0D1A\x03\x02\x02\x02" + + "\u0D1C\u0D1D\x03\x02\x02\x02\u0D1D\u0D1F\x03\x02\x02\x02\u0D1E\u0D0F\x03" + + "\x02\x02\x02\u0D1E\u0D10\x03\x02\x02\x02\u0D1E\u0D11\x03\x02\x02\x02\u0D1E" + + "\u0D13\x03\x02\x02\x02\u0D1E\u0D14\x03\x02\x02\x02\u0D1E\u0D17\x03\x02" + + "\x02\x02\u0D1E\u0D18\x03\x02\x02\x02\u0D1E\u0D1A\x03\x02\x02\x02\u0D1F" + + "\u0111\x03\x02\x02\x02\u0D20\u0D21\t-\x02\x02\u0D21\u0113\x03\x02\x02" + + "\x02\u0D22\u0D23\t.\x02\x02\u0D23\u0115\x03\x02\x02\x02\u0D24\u0D25\t" + + "/\x02\x02\u0D25\u0117\x03\x02\x02\x02\u0D26\u0D27\t0\x02\x02\u0D27\u0119" + + "\x03\x02\x02\x02\u0D28\u0D2B\x07\x95\x02\x02\u0D29\u0D2C\x05\u011C\x8F" + + "\x02\u0D2A\u0D2C\x05\u0120\x91\x02\u0D2B\u0D29\x03\x02\x02\x02\u0D2B\u0D2A" + + "\x03\x02\x02\x02\u0D2C\u011B\x03\x02\x02\x02\u0D2D\u0D2F\x05\u011E\x90" + + "\x02\u0D2E\u0D30\x05\u0122\x92\x02\u0D2F\u0D2E\x03\x02\x02\x02\u0D2F\u0D30" + + "\x03\x02\x02\x02\u0D30\u011D\x03\x02\x02\x02\u0D31\u0D32\x05\u0124\x93" + + "\x02\u0D32\u0D33\x05\u0126\x94\x02\u0D33\u0D35\x03\x02\x02\x02\u0D34\u0D31" + + "\x03\x02\x02\x02\u0D35\u0D36\x03\x02\x02\x02\u0D36\u0D34\x03\x02\x02\x02" + + "\u0D36\u0D37\x03\x02\x02\x02\u0D37\u011F\x03\x02\x02\x02\u0D38\u0D3B\x05" + + "\u0122\x92\x02\u0D39\u0D3C\x05\u011E\x90\x02\u0D3A\u0D3C\x05\u0122\x92" + + "\x02\u0D3B\u0D39\x03\x02\x02\x02\u0D3B\u0D3A\x03\x02\x02\x02\u0D3B\u0D3C" + + "\x03\x02\x02\x02\u0D3C\u0121\x03\x02\x02\x02\u0D3D\u0D3E\x05\u0124\x93" + + "\x02\u0D3E\u0D3F\x05\u0128\x95\x02\u0D3F\u0D40\x07\u012E\x02\x02\u0D40" + + "\u0D41\x05\u0128\x95\x02\u0D41\u0123\x03\x02\x02\x02\u0D42\u0D44\t1\x02" + + "\x02\u0D43\u0D42\x03\x02\x02\x02\u0D43\u0D44\x03\x02\x02\x02\u0D44\u0D48" + + "\x03\x02\x02\x02\u0D45\u0D49\x07\u0175\x02\x02\u0D46\u0D49\x07\u0177\x02" + + "\x02\u0D47\u0D49\x05\u016C\xB7\x02\u0D48\u0D45\x03\x02\x02\x02\u0D48\u0D46" + + "\x03\x02\x02\x02\u0D48\u0D47\x03\x02\x02\x02\u0D49\u0125\x03\x02\x02\x02" + + "\u0D4A\u0D4B\t2\x02\x02\u0D4B\u0127\x03\x02\x02\x02\u0D4C\u0D4D\t3\x02" + + "\x02\u0D4D\u0129\x03\x02\x02\x02\u0D4E\u0D52\x07t\x02\x02\u0D4F\u0D50" + + "\x07\v\x02\x02\u0D50\u0D52\x05\u015C\xAF\x02\u0D51\u0D4E\x03\x02\x02\x02" + + "\u0D51\u0D4F\x03\x02\x02\x02\u0D52\u012B\x03\x02\x02\x02\u0D53\u0D72\x07" + + "\x1D\x02\x02\u0D54\u0D72\x07\u012D\x02\x02\u0D55\u0D72\x07\"\x02\x02\u0D56" + + "\u0D72\x07\u010E\x02\x02\u0D57\u0D72\x07\u010A\x02\x02\u0D58\u0D72\x07" + + "\x96\x02\x02\u0D59\u0D72\x07\x97\x02\x02\u0D5A\u0D72\x07\x1B\x02\x02\u0D5B" + + "\u0D72\x07\xAD\x02\x02\u0D5C\u0D72\x07u\x02\x02\u0D5D\u0D72\x07\xE6\x02" + + "\x02\u0D5E\u0D72\x07`\x02\x02\u0D5F\u0D72\x07I\x02\x02\u0D60\u0D72\x07" + + "\u0128\x02\x02\u0D61\u0D72\x07\u012A\x02\x02\u0D62\u0D72\x07\u0129\x02" + + "\x02\u0D63\u0D72\x07\u0117\x02\x02\u0D64\u0D72\x07+\x02\x02\u0D65\u0D72" + + "\x07*\x02\x02\u0D66\u0D72\x07\u0147\x02\x02\u0D67\u0D72\x07\x1C\x02\x02" + + "\u0D68\u0D72\x07R\x02\x02\u0D69\u0D72\x07Q\x02\x02\u0D6A\u0D72\x07\xC5" + + "\x02\x02\u0D6B\u0D72\x07\u014D\x02\x02\u0D6C\u0D72\x07\x95\x02\x02\u0D6D" + + "\u0D72\x07\x15\x02\x02\u0D6E\u0D72\x07\u0118\x02\x02\u0D6F\u0D72\x07\xAF" + + "\x02\x02\u0D70\u0D72\x05\u0160\xB1\x02\u0D71\u0D53\x03\x02\x02\x02\u0D71" + + "\u0D54\x03\x02\x02\x02\u0D71\u0D55\x03\x02\x02\x02\u0D71\u0D56\x03\x02" + + "\x02\x02\u0D71\u0D57\x03\x02\x02\x02\u0D71\u0D58\x03\x02\x02\x02\u0D71" + + "\u0D59\x03\x02\x02\x02\u0D71\u0D5A\x03\x02\x02\x02\u0D71\u0D5B\x03\x02" + + "\x02\x02\u0D71\u0D5C\x03\x02\x02\x02\u0D71\u0D5D\x03\x02\x02\x02\u0D71" + + "\u0D5E\x03\x02\x02\x02\u0D71\u0D5F\x03\x02\x02\x02\u0D71\u0D60\x03\x02" + + "\x02\x02\u0D71\u0D61\x03\x02\x02\x02\u0D71\u0D62\x03\x02\x02\x02\u0D71" + + "\u0D63\x03\x02\x02\x02\u0D71\u0D64\x03\x02\x02\x02\u0D71\u0D65\x03\x02" + + "\x02\x02\u0D71\u0D66\x03\x02\x02\x02\u0D71\u0D67\x03\x02\x02\x02\u0D71" + + "\u0D68\x03\x02\x02\x02\u0D71\u0D69\x03\x02\x02\x02\u0D71\u0D6A\x03\x02" + + "\x02\x02\u0D71\u0D6B\x03\x02\x02\x02\u0D71\u0D6C\x03\x02\x02\x02\u0D71" + + "\u0D6D\x03\x02\x02\x02\u0D71\u0D6E\x03\x02\x02\x02\u0D71\u0D6F\x03\x02" + + "\x02\x02\u0D71\u0D70\x03\x02\x02\x02\u0D72\u012D\x03\x02\x02\x02\u0D73" + + "\u0D74\x07\x15\x02\x02\u0D74\u0D75\x07\u015C\x02\x02\u0D75\u0D76\x05\u012E" + + "\x98\x02\u0D76\u0D77\x07\u015E\x02\x02\u0D77\u0DA2\x03\x02\x02\x02\u0D78" + + "\u0D79\x07\xAF\x02\x02\u0D79\u0D7A\x07\u015C\x02\x02\u0D7A\u0D7B\x05\u012E" + + "\x98\x02\u0D7B\u0D7C\x07\x06\x02\x02\u0D7C\u0D7D\x05\u012E\x98\x02\u0D7D" + + "\u0D7E\x07\u015E\x02\x02\u0D7E\u0DA2\x03\x02\x02\x02\u0D7F\u0D86\x07\u0118" + + "\x02\x02\u0D80\u0D82\x07\u015C\x02\x02\u0D81\u0D83\x05\u0146\xA4\x02\u0D82" + + "\u0D81\x03\x02\x02\x02\u0D82\u0D83\x03\x02\x02\x02\u0D83\u0D84\x03\x02" + + "\x02\x02\u0D84\u0D87\x07\u015E\x02\x02\u0D85\u0D87\x07\u015A\x02\x02\u0D86" + + "\u0D80\x03\x02\x02\x02\u0D86\u0D85\x03\x02\x02\x02\u0D87\u0DA2\x03\x02" + + "\x02\x02\u0D88\u0D89\x07\x95\x02\x02\u0D89\u0D8C\t4\x02\x02\u0D8A\u0D8B" + + "\x07\u012E\x02\x02\u0D8B\u0D8D\x07\xB8\x02\x02\u0D8C\u0D8A\x03\x02\x02" + + "\x02\u0D8C\u0D8D\x03\x02\x02\x02\u0D8D\u0DA2\x03\x02\x02\x02\u0D8E\u0D8F" + + "\x07\x95\x02\x02\u0D8F\u0D92\t5\x02\x02\u0D90\u0D91\x07\u012E\x02\x02" + + "\u0D91\u0D93\t6\x02\x02\u0D92\u0D90\x03\x02\x02\x02\u0D92\u0D93\x03\x02" + + "\x02\x02\u0D93\u0DA2\x03\x02\x02\x02\u0D94\u0D9F\x05\u012C\x97\x02\u0D95" + + "\u0D96\x07\x04\x02\x02\u0D96\u0D9B\x07\u0175\x02\x02\u0D97\u0D98\x07\x06" + + "\x02\x02\u0D98\u0D9A\x07\u0175\x02\x02\u0D99\u0D97\x03\x02\x02\x02\u0D9A" + + "\u0D9D\x03\x02\x02\x02\u0D9B\u0D99\x03\x02\x02\x02\u0D9B\u0D9C\x03\x02" + + "\x02\x02\u0D9C\u0D9E\x03\x02\x02\x02\u0D9D\u0D9B\x03\x02\x02\x02\u0D9E" + + "\u0DA0\x07\x05\x02\x02\u0D9F\u0D95\x03\x02\x02\x02\u0D9F\u0DA0\x03\x02" + + "\x02\x02\u0DA0\u0DA2\x03\x02\x02\x02\u0DA1\u0D73\x03\x02\x02\x02\u0DA1" + + "\u0D78\x03\x02\x02\x02\u0DA1\u0D7F\x03\x02\x02\x02\u0DA1\u0D88\x03\x02" + + "\x02\x02\u0DA1\u0D8E\x03\x02\x02\x02\u0DA1\u0D94\x03\x02\x02\x02\u0DA2" + + "\u012F\x03\x02\x02\x02\u0DA3\u0DA8\x05\u0132\x9A\x02\u0DA4\u0DA5\x07\x06" + + "\x02\x02\u0DA5\u0DA7\x05\u0132\x9A\x02\u0DA6\u0DA4\x03\x02\x02\x02\u0DA7" + + "\u0DAA\x03\x02\x02\x02\u0DA8\u0DA6\x03\x02\x02\x02\u0DA8\u0DA9\x03\x02" + + "\x02\x02\u0DA9\u0131\x03\x02\x02\x02\u0DAA\u0DA8\x03\x02\x02\x02\u0DAB" + + "\u0DAC\x05\xE6t\x02\u0DAC\u0DB0\x05\u012E\x98\x02\u0DAD\u0DAF\x05\u0134" + + "\x9B\x02\u0DAE\u0DAD\x03\x02\x02\x02\u0DAF\u0DB2\x03\x02\x02\x02\u0DB0" + + "\u0DAE\x03\x02\x02\x02\u0DB0\u0DB1\x03\x02\x02\x02\u0DB1\u0133\x03\x02" + + "\x02\x02\u0DB2\u0DB0\x03\x02\x02\x02\u0DB3\u0DB4\x07\xC2\x02\x02\u0DB4" + + "\u0DB9\x07\xC3\x02\x02\u0DB5\u0DB9\x05\u0136\x9C\x02\u0DB6\u0DB9\x05\"" + + "\x12\x02\u0DB7\u0DB9\x05\u012A\x96\x02\u0DB8\u0DB3\x03\x02\x02\x02\u0DB8" + + "\u0DB5\x03\x02\x02\x02\u0DB8\u0DB6\x03\x02\x02\x02\u0DB8\u0DB7\x03\x02" + + "\x02\x02\u0DB9\u0135\x03\x02\x02\x02\u0DBA\u0DBB\x07T\x02\x02\u0DBB\u0DBC" + + "\x05\xFC\x7F\x02\u0DBC\u0137\x03\x02\x02\x02\u0DBD\u0DBE\t7\x02\x02\u0DBE" + + "\u0DBF\x05\xFC\x7F\x02\u0DBF\u0139\x03\x02\x02\x02\u0DC0\u0DC5\x05\u013C" + + "\x9F\x02\u0DC1\u0DC2\x07\x06\x02\x02\u0DC2\u0DC4\x05\u013C\x9F\x02\u0DC3" + + "\u0DC1\x03\x02\x02\x02\u0DC4\u0DC7\x03\x02\x02\x02\u0DC5\u0DC3\x03\x02" + + "\x02\x02\u0DC5\u0DC6\x03\x02\x02\x02\u0DC6\u013B\x03\x02\x02\x02\u0DC7" + + "\u0DC5\x03\x02\x02\x02\u0DC8\u0DC9\x05\u015C\xAF\x02\u0DC9\u0DCC\x05\u012E" + + "\x98\x02\u0DCA\u0DCB\x07\xC2\x02\x02\u0DCB\u0DCD\x07\xC3\x02\x02\u0DCC" + + "\u0DCA\x03\x02\x02\x02\u0DCC\u0DCD\x03\x02\x02\x02\u0DCD\u0DCF\x03\x02" + + "\x02\x02\u0DCE\u0DD0\x05\"\x12\x02\u0DCF\u0DCE\x03\x02\x02\x02\u0DCF\u0DD0" + + "\x03\x02\x02\x02\u0DD0\u013D\x03\x02\x02\x02\u0DD1\u0DD6\x05\u0140\xA1" + + "\x02\u0DD2\u0DD3\x07\x06\x02\x02\u0DD3\u0DD5\x05\u0140\xA1\x02\u0DD4\u0DD2" + + "\x03\x02\x02\x02\u0DD5\u0DD8\x03\x02\x02\x02\u0DD6\u0DD4\x03\x02\x02\x02" + + "\u0DD6\u0DD7\x03\x02\x02\x02\u0DD7\u013F\x03\x02\x02\x02\u0DD8\u0DD6\x03" + + "\x02\x02\x02\u0DD9\u0DDA\x05\u015C\xAF\x02\u0DDA\u0DDE\x05\u012E\x98\x02" + + "\u0DDB\u0DDD\x05\u0142\xA2\x02\u0DDC\u0DDB\x03\x02\x02\x02\u0DDD\u0DE0" + + "\x03\x02\x02\x02\u0DDE\u0DDC\x03\x02\x02\x02\u0DDE\u0DDF\x03\x02\x02\x02" + + "\u0DDF\u0141\x03\x02\x02\x02\u0DE0\u0DDE\x03\x02\x02\x02\u0DE1\u0DE2\x07" + + "\xC2\x02\x02\u0DE2\u0DE7\x07\xC3\x02\x02\u0DE3\u0DE7\x05\u0136\x9C\x02" + + "\u0DE4\u0DE7\x05\u0144\xA3\x02\u0DE5\u0DE7\x05\"\x12\x02\u0DE6\u0DE1\x03" + + "\x02\x02\x02\u0DE6\u0DE3\x03\x02\x02\x02\u0DE6\u0DE4\x03\x02\x02\x02\u0DE6" + + "\u0DE5\x03\x02\x02\x02\u0DE7\u0143\x03\x02\x02\x02\u0DE8\u0DE9\x07\x7F" + + "\x02\x02\u0DE9\u0DEA\x07\x0E\x02\x02\u0DEA\u0DEB\x07\x16\x02\x02\u0DEB" + + "\u0DEC\x07\x04\x02\x02\u0DEC\u0DED\x05\xFC\x7F\x02\u0DED\u0DEE\x07\x05" + + "\x02\x02\u0DEE\u0145\x03\x02\x02\x02\u0DEF\u0DF4\x05\u0148\xA5\x02\u0DF0" + + "\u0DF1\x07\x06\x02\x02\u0DF1\u0DF3\x05\u0148\xA5\x02\u0DF2\u0DF0\x03\x02" + + "\x02\x02\u0DF3\u0DF6\x03\x02\x02\x02\u0DF4\u0DF2\x03\x02\x02\x02\u0DF4" + + "\u0DF5\x03\x02\x02\x02\u0DF5\u0147\x03\x02\x02\x02\u0DF6\u0DF4\x03\x02" + + "\x02\x02\u0DF7\u0DF9\x05\u0160\xB1\x02\u0DF8\u0DFA\x07\u016A\x02\x02\u0DF9" + + "\u0DF8\x03\x02\x02\x02\u0DF9\u0DFA\x03\x02\x02\x02\u0DFA\u0DFB\x03\x02" + + "\x02\x02\u0DFB\u0DFE\x05\u012E\x98\x02\u0DFC\u0DFD\x07\xC2\x02\x02\u0DFD" + + "\u0DFF\x07\xC3\x02\x02\u0DFE\u0DFC\x03\x02\x02\x02\u0DFE\u0DFF\x03\x02" + + "\x02\x02\u0DFF\u0E01\x03\x02\x02\x02\u0E00\u0E02\x05\"\x12\x02\u0E01\u0E00" + + "\x03\x02\x02\x02\u0E01\u0E02\x03\x02\x02\x02\u0E02\u0149\x03\x02\x02\x02" + + "\u0E03\u0E04\x07\u0150\x02\x02\u0E04\u0E05\x05\xFC\x7F\x02\u0E05\u0E06" + + "\x07\u0125\x02\x02\u0E06\u0E07\x05\xFC\x7F\x02\u0E07\u014B\x03\x02\x02" + + "\x02\u0E08\u0E09\x07\u0152\x02\x02\u0E09\u0E0E\x05\u014E\xA8\x02\u0E0A" + + "\u0E0B\x07\x06\x02\x02\u0E0B\u0E0D\x05\u014E\xA8\x02\u0E0C\u0E0A\x03\x02" + + "\x02\x02\u0E0D\u0E10\x03\x02\x02\x02\u0E0E\u0E0C\x03\x02\x02\x02\u0E0E" + + "\u0E0F\x03\x02\x02\x02\u0E0F\u014D\x03\x02\x02\x02\u0E10\u0E0E\x03\x02" + + "\x02\x02\u0E11\u0E12\x05\u015C\xAF\x02\u0E12\u0E13\x07\x16\x02\x02\u0E13" + + "\u0E14\x05\u0150\xA9\x02\u0E14\u014F\x03\x02\x02\x02\u0E15\u0E44\x05\u015C" + + "\xAF\x02\u0E16\u0E17\x07\x04\x02\x02\u0E17\u0E18\x05\u015C\xAF\x02\u0E18" + + "\u0E19\x07\x05\x02\x02\u0E19\u0E44\x03\x02\x02\x02\u0E1A\u0E3D\x07\x04" + + "\x02\x02\u0E1B\u0E1C\x07.\x02\x02\u0E1C\u0E1D\x07!\x02\x02\u0E1D\u0E22" + + "\x05\xFC\x7F\x02\u0E1E\u0E1F\x07\x06\x02\x02\u0E1F\u0E21\x05\xFC\x7F\x02" + + "\u0E20\u0E1E\x03\x02\x02\x02\u0E21\u0E24\x03\x02\x02\x02\u0E22\u0E20\x03" + + "\x02\x02\x02\u0E22\u0E23\x03\x02\x02\x02\u0E23\u0E3E\x03\x02\x02\x02\u0E24" + + "\u0E22\x03\x02\x02\x02\u0E25\u0E26\t\x1A\x02\x02\u0E26\u0E27\x07!\x02" + + "\x02\u0E27\u0E2C\x05\xFC\x7F\x02\u0E28\u0E29\x07\x06\x02\x02\u0E29\u0E2B" + + "\x05\xFC\x7F\x02\u0E2A\u0E28\x03\x02\x02\x02\u0E2B\u0E2E\x03\x02\x02\x02" + + "\u0E2C\u0E2A\x03\x02\x02\x02\u0E2C\u0E2D\x03\x02\x02\x02\u0E2D\u0E30\x03" + + "\x02\x02\x02\u0E2E\u0E2C\x03\x02\x02\x02\u0E2F\u0E25\x03\x02\x02\x02\u0E2F" + + "\u0E30\x03\x02\x02\x02\u0E30\u0E3B\x03\x02\x02\x02\u0E31\u0E32\t\x1B\x02" + + "\x02\u0E32\u0E33\x07!\x02\x02\u0E33\u0E38\x05b2\x02\u0E34\u0E35\x07\x06" + + "\x02\x02\u0E35\u0E37\x05b2\x02\u0E36\u0E34\x03\x02\x02\x02\u0E37\u0E3A" + + "\x03\x02\x02\x02\u0E38\u0E36\x03\x02\x02\x02\u0E38\u0E39\x03\x02\x02\x02" + + "\u0E39\u0E3C\x03\x02\x02\x02\u0E3A\u0E38\x03\x02\x02\x02\u0E3B\u0E31\x03" + + "\x02\x02\x02\u0E3B\u0E3C\x03\x02\x02\x02\u0E3C\u0E3E\x03\x02\x02\x02\u0E3D" + + "\u0E1B\x03\x02\x02\x02\u0E3D\u0E2F\x03\x02\x02\x02\u0E3E\u0E40\x03\x02" + + "\x02\x02\u0E3F\u0E41\x05\u0152\xAA\x02\u0E40\u0E3F\x03\x02\x02\x02\u0E40" + + "\u0E41\x03\x02\x02\x02\u0E41\u0E42\x03\x02\x02\x02\u0E42\u0E44\x07\x05" + + "\x02\x02\u0E43\u0E15\x03\x02\x02\x02\u0E43\u0E16\x03\x02\x02\x02\u0E43" + + "\u0E1A\x03\x02\x02\x02\u0E44\u0151\x03\x02\x02\x02\u0E45\u0E46\x07\xE5" + + "\x02\x02\u0E46\u0E56\x05\u0154\xAB\x02\u0E47\u0E48\x07\xFC\x02\x02\u0E48" + + "\u0E56\x05\u0154\xAB\x02\u0E49\u0E4A\x07\xE5\x02\x02\u0E4A\u0E4B\x07\x1A" + + "\x02\x02\u0E4B\u0E4C\x05\u0154\xAB\x02\u0E4C\u0E4D\x07\x10\x02\x02\u0E4D" + + "\u0E4E\x05\u0154\xAB\x02\u0E4E\u0E56\x03\x02\x02\x02\u0E4F\u0E50\x07\xFC" + + "\x02\x02\u0E50\u0E51\x07\x1A\x02\x02\u0E51\u0E52\x05\u0154\xAB\x02\u0E52" + + "\u0E53\x07\x10\x02\x02\u0E53\u0E54\x05\u0154\xAB\x02\u0E54\u0E56\x03\x02" + + "\x02\x02\u0E55\u0E45\x03\x02\x02\x02\u0E55\u0E47\x03\x02\x02\x02\u0E55" + + "\u0E49\x03\x02\x02\x02\u0E55\u0E4F\x03\x02\x02\x02\u0E56\u0153\x03\x02" + + "\x02\x02\u0E57\u0E58\x07\u013A\x02\x02\u0E58\u0E5F\t8\x02\x02\u0E59\u0E5A" + + "\x07@\x02\x02\u0E5A\u0E5F\x07\xFB\x02\x02\u0E5B\u0E5C\x05\xFC\x7F\x02" + + "\u0E5C\u0E5D\t8\x02\x02\u0E5D\u0E5F\x03\x02\x02\x02\u0E5E\u0E57\x03\x02" + + "\x02\x02\u0E5E\u0E59\x03\x02\x02\x02\u0E5E\u0E5B\x03\x02\x02\x02\u0E5F" + + "\u0155\x03\x02\x02\x02\u0E60\u0E65\x05\u015A\xAE\x02\u0E61\u0E62\x07\x06" + + "\x02\x02\u0E62\u0E64\x05\u015A\xAE\x02\u0E63\u0E61\x03\x02\x02\x02\u0E64" + + "\u0E67\x03\x02\x02\x02\u0E65\u0E63\x03\x02\x02\x02\u0E65\u0E66\x03\x02" + + "\x02\x02\u0E66\u0157\x03\x02\x02\x02\u0E67\u0E65\x03\x02\x02\x02\u0E68" + + "\u0E69\x07\x88\x02\x02\u0E69\u0E6A\x07\x04\x02\x02\u0E6A\u0E6B\x05\xFC" + + "\x7F\x02\u0E6B\u0E6C\x07\x05\x02\x02\u0E6C\u0E72\x03\x02\x02\x02\u0E6D" + + "\u0E72\x05\u015A\xAE\x02\u0E6E\u0E72\x07r\x02\x02\u0E6F\u0E72\x07\xA1" + + "\x02\x02\u0E70\u0E72\x07\xF5\x02\x02\u0E71\u0E68\x03\x02\x02\x02\u0E71" + + "\u0E6D\x03\x02\x02\x02\u0E71\u0E6E\x03\x02\x02\x02\u0E71\u0E6F\x03\x02" + + "\x02\x02\u0E71\u0E70\x03\x02\x02\x02\u0E72\u0159\x03\x02\x02\x02\u0E73" + + "\u0E78\x05\u0160\xB1\x02\u0E74\u0E75\x07\x07\x02\x02\u0E75\u0E77\x05\u0160" + + "\xB1\x02\u0E76\u0E74\x03\x02\x02\x02\u0E77\u0E7A\x03\x02\x02\x02\u0E78" + + "\u0E76\x03\x02\x02\x02\u0E78\u0E79\x03\x02\x02\x02\u0E79\u015B\x03\x02" + + "\x02\x02\u0E7A\u0E78\x03\x02\x02\x02\u0E7B\u0E7C\x05\u0160\xB1\x02\u0E7C" + + "\u0E7D\x05\u015E\xB0\x02\u0E7D\u015D\x03\x02\x02\x02\u0E7E\u0E7F\x07\u0161" + + "\x02\x02\u0E7F\u0E81\x05\u0160\xB1\x02\u0E80\u0E7E\x03\x02\x02\x02\u0E81" + + "\u0E82\x03\x02\x02\x02\u0E82\u0E80\x03\x02\x02\x02\u0E82\u0E83\x03\x02" + + "\x02\x02\u0E83\u0E86\x03\x02\x02\x02\u0E84\u0E86\x03\x02\x02\x02\u0E85" + + "\u0E80\x03\x02\x02\x02\u0E85\u0E84\x03\x02\x02\x02\u0E86\u015F\x03\x02" + + "\x02\x02\u0E87\u0E8B\x05\u0162\xB2\x02\u0E88\u0E89\x06\xB1\x12\x02\u0E89" + + "\u0E8B\x05\u0174\xBB\x02\u0E8A\u0E87\x03\x02\x02\x02\u0E8A\u0E88\x03\x02" + + "\x02\x02\u0E8B\u0161\x03\x02\x02\x02\u0E8C\u0E93\x07\u017B\x02\x02\u0E8D" + + "\u0E93\x05\u0164\xB3\x02\u0E8E\u0E8F\x06\xB2\x13\x02\u0E8F\u0E93\x05\u0172" + + "\xBA\x02\u0E90\u0E91\x06\xB2\x14\x02\u0E91\u0E93\x05\u0176\xBC\x02\u0E92" + + "\u0E8C\x03\x02\x02\x02\u0E92\u0E8D\x03\x02\x02\x02\u0E92\u0E8E\x03\x02" + + "\x02\x02\u0E92\u0E90\x03\x02\x02\x02\u0E93\u0163\x03\x02\x02\x02\u0E94" + + "\u0E98\x07\u017C\x02\x02\u0E95\u0E96\x06\xB3\x15\x02\u0E96\u0E98\x07\u0171" + + "\x02\x02\u0E97\u0E94\x03\x02\x02\x02\u0E97\u0E95\x03\x02\x02\x02\u0E98" + + "\u0165\x03\x02\x02\x02\u0E99\u0E9A\x07\u017C\x02\x02\u0E9A\u0167\x03\x02" + + "\x02\x02\u0E9B\u0E9D\x06\xB5\x16"; + private static readonly _serializedATNSegment7: string = + "\x02\u0E9C\u0E9E\x07\u0161\x02\x02\u0E9D\u0E9C\x03\x02\x02\x02\u0E9D\u0E9E" + + "\x03\x02\x02\x02\u0E9E\u0E9F\x03\x02\x02\x02\u0E9F\u0EC7\x07\u0176\x02" + + "\x02\u0EA0\u0EA2\x06\xB5\x17\x02\u0EA1\u0EA3\x07\u0161\x02\x02\u0EA2\u0EA1" + + "\x03\x02\x02\x02\u0EA2\u0EA3\x03\x02\x02\x02\u0EA3\u0EA4\x03\x02\x02\x02" + + "\u0EA4\u0EC7\x07\u0177\x02\x02\u0EA5\u0EA7\x06\xB5\x18\x02\u0EA6\u0EA8" + + "\x07\u0161\x02\x02\u0EA7\u0EA6\x03\x02\x02\x02\u0EA7\u0EA8\x03\x02\x02" + + "\x02\u0EA8\u0EA9\x03\x02\x02\x02\u0EA9\u0EC7\t9\x02\x02\u0EAA\u0EAC\x07" + + "\u0161\x02\x02\u0EAB\u0EAA\x03\x02\x02\x02\u0EAB\u0EAC\x03\x02\x02\x02" + + "\u0EAC\u0EAD\x03\x02\x02\x02\u0EAD\u0EC7\x07\u0175\x02\x02\u0EAE\u0EB0" + + "\x07\u0161\x02\x02\u0EAF\u0EAE\x03\x02\x02\x02\u0EAF\u0EB0\x03\x02\x02" + + "\x02\u0EB0\u0EB1\x03\x02\x02\x02\u0EB1\u0EC7\x07\u0172\x02\x02\u0EB2\u0EB4" + + "\x07\u0161\x02\x02\u0EB3\u0EB2\x03\x02\x02\x02\u0EB3\u0EB4\x03\x02\x02" + + "\x02\u0EB4\u0EB5\x03\x02\x02\x02\u0EB5\u0EC7\x07\u0173\x02\x02\u0EB6\u0EB8" + + "\x07\u0161\x02\x02\u0EB7\u0EB6\x03\x02\x02\x02\u0EB7\u0EB8\x03\x02\x02" + + "\x02\u0EB8\u0EB9\x03\x02\x02\x02\u0EB9\u0EC7\x07\u0174\x02\x02\u0EBA\u0EBC" + + "\x07\u0161\x02\x02\u0EBB\u0EBA\x03\x02\x02\x02\u0EBB\u0EBC\x03\x02\x02" + + "\x02\u0EBC\u0EBD\x03\x02\x02\x02\u0EBD\u0EC7\x07\u0179\x02\x02\u0EBE\u0EC0" + + "\x07\u0161\x02\x02\u0EBF\u0EBE\x03\x02\x02\x02\u0EBF\u0EC0\x03\x02\x02" + + "\x02\u0EC0\u0EC1\x03\x02\x02\x02\u0EC1\u0EC7\x07\u0178\x02\x02\u0EC2\u0EC4" + + "\x07\u0161\x02\x02\u0EC3\u0EC2\x03\x02\x02\x02\u0EC3\u0EC4\x03\x02\x02" + + "\x02\u0EC4\u0EC5\x03\x02\x02\x02\u0EC5\u0EC7\x07\u017A\x02\x02\u0EC6\u0E9B" + + "\x03\x02\x02\x02\u0EC6\u0EA0\x03\x02\x02\x02\u0EC6\u0EA5\x03\x02\x02\x02" + + "\u0EC6\u0EAB\x03\x02\x02\x02\u0EC6\u0EAF\x03\x02\x02\x02\u0EC6\u0EB3\x03" + + "\x02\x02\x02\u0EC6\u0EB7\x03\x02\x02\x02\u0EC6\u0EBB\x03\x02\x02\x02\u0EC6" + + "\u0EBF\x03\x02\x02\x02\u0EC6\u0EC3\x03\x02\x02\x02\u0EC7\u0169\x03\x02" + + "\x02\x02\u0EC8\u0EC9\x07\u0138\x02\x02\u0EC9\u0ED4\x05\u012E\x98\x02\u0ECA" + + "\u0ED4\x05\"\x12\x02\u0ECB\u0ED4\x05\u012A\x96\x02\u0ECC\u0ECD\t:\x02" + + "\x02\u0ECD\u0ECE\x07\xC2\x02\x02\u0ECE\u0ED4\x07\xC3\x02\x02\u0ECF\u0ED0" + + "\x07\u0107\x02\x02\u0ED0\u0ED4\x05\u0136\x9C\x02\u0ED1\u0ED2\x07a\x02" + + "\x02\u0ED2\u0ED4\x07T\x02\x02\u0ED3\u0EC8\x03\x02\x02\x02\u0ED3\u0ECA" + + "\x03\x02\x02\x02\u0ED3\u0ECB\x03\x02\x02\x02\u0ED3\u0ECC\x03\x02\x02\x02" + + "\u0ED3\u0ECF\x03\x02\x02\x02\u0ED3\u0ED1\x03\x02\x02\x02\u0ED4\u016B\x03" + + "\x02\x02\x02\u0ED5\u0ED9\x07\u0170\x02\x02\u0ED6\u0ED7\x06\xB7\x19\x02" + + "\u0ED7\u0ED9\x07\u0171\x02\x02\u0ED8\u0ED5\x03\x02\x02\x02\u0ED8\u0ED6" + + "\x03\x02\x02\x02\u0ED9\u016D\x03\x02\x02\x02\u0EDA\u0EDD\x05\u016C\xB7" + + "\x02\u0EDB\u0EDD\x07\xC3\x02\x02\u0EDC\u0EDA\x03\x02\x02\x02\u0EDC\u0EDB" + + "\x03\x02\x02\x02\u0EDD\u016F\x03\x02\x02\x02\u0EDE\u0EE1\x07\u0175\x02" + + "\x02\u0EDF\u0EE1\x05\u016C\xB7\x02\u0EE0\u0EDE\x03\x02\x02\x02\u0EE0\u0EDF" + + "\x03\x02\x02\x02\u0EE1\u0171\x03\x02\x02\x02\u0EE2\u0EE3\t;\x02\x02\u0EE3" + + "\u0173\x03\x02\x02\x02\u0EE4\u0EE5\t<\x02\x02\u0EE5\u0175\x03\x02\x02" + + "\x02\u0EE6\u0EE7\t=\x02\x02\u0EE7\u0177\x03\x02\x02\x02\u01F3\u017B\u0182" + + "\u018E\u019B\u01A2\u01AA\u01AC\u01C0\u01C4\u01CA\u01CD\u01D0\u01D7\u01DA" + + "\u01DE\u01E1\u01E8\u01F3\u01F5\u01FD\u0200\u0204\u0207\u020D\u0218\u021E" + + "\u0223\u0245\u0252\u025A\u0264\u026E\u0274\u027D\u0281\u0287\u028B\u0290" + + "\u0296\u02A2\u02AA\u02B0\u02BA\u02C0\u02C5\u02D3\u02D8\u02DF\u02E3\u02E9" + + "\u02F8\u02FC\u0302\u0308\u030B\u030E\u0314\u0318\u0320\u0322\u032B\u032E" + + "\u0337\u033C\u0342\u0349\u034C\u0352\u035D\u0360\u0364\u0369\u036F\u0372" + + "\u0376\u0379\u0380\u0385\u038C\u038F\u0392\u0399\u039E\u03A7\u03AF\u03B5" + + "\u03B8\u03BB\u03C1\u03C5\u03CA\u03CD\u03D1\u03D3\u03DB\u03E3\u03E6\u03EB" + + "\u03F1\u03F7\u03FA\u03FE\u0401\u0405\u0421\u0424\u0428\u042E\u0431\u0434" + + "\u043A\u0442\u0447\u044D\u0453\u0456\u045D\u0464\u046C\u047D\u0498\u049B" + + "\u04A1\u04AA\u04B3\u04BB\u04C0\u04C5\u04CC\u04D2\u04D7\u04DF\u04E2\u04E6" + + "\u04F2\u04F6\u04FD\u0571\u0579\u0581\u058A\u0594\u0598\u059B\u05A1\u05A7" + + "\u05B3\u05BF\u05C4\u05CD\u05D5\u05DC\u05DE\u05E3\u05E8\u05EC\u05F1\u05F6" + + "\u05FB\u0604\u0609\u060C\u0611\u0615\u061A\u061C\u0620\u0629\u0631\u0637" + + "\u0642\u0649\u0652\u0657\u065A\u0670\u0672\u067B\u0682\u0685\u068C\u0690" + + "\u0696\u069E\u06A5\u06A8\u06B0\u06BB\u06C6\u06CE\u06D4\u06E0\u06E7\u06EE" + + "\u06FA\u0702\u0708\u070E\u0711\u0719\u0722\u0725\u072E\u0731\u073A\u073D" + + "\u0746\u0749\u074C\u0751\u0753\u0757\u0763\u076A\u0771\u0774\u0776\u0782" + + "\u0786\u078A\u0790\u0794\u079C\u07A0\u07A3\u07A6\u07A9\u07AD\u07B1\u07B6" + + "\u07BA\u07BD\u07C0\u07C3\u07C7\u07CC\u07D0\u07D3\u07D6\u07D9\u07DB\u07E1" + + "\u07E8\u07ED\u07F0\u07F3\u07F7\u0801\u0805\u0807\u080A\u080E\u0814\u0818" + + "\u0823\u082D\u0831\u083D\u0849\u0858\u085D\u0863\u086A\u087A\u087F\u088C" + + "\u0891\u0899\u089F\u08A3\u08A6\u08A9\u08B0\u08B6\u08BF\u08C9\u08D8\u08DD" + + "\u08DF\u08E3\u08EC\u08F9\u08FE\u0902\u090A\u090D\u0911\u091F\u092C\u0931" + + "\u0935\u0938\u093C\u0942\u0945\u094C\u0958\u0963\u0970\u097B\u0980\u0988" + + "\u098D\u0994\u099D\u09A0\u09A5\u09AC\u09AF\u09B4\u09BA\u09C0\u09C5\u09C9" + + "\u09CF\u09D3\u09D6\u09DB\u09DE\u09E3\u09E7\u09EA\u09ED\u09F3\u09F8\u09FF" + + "\u0A02\u0A14\u0A16\u0A19\u0A24\u0A2D\u0A34\u0A3C\u0A43\u0A47\u0A4A\u0A52" + + "\u0A5A\u0A60\u0A68\u0A70\u0A77\u0A7E\u0A80\u0A8D\u0A93\u0A95\u0A9F\u0AA5" + + "\u0AA7\u0AAF\u0AB3\u0ABC\u0ABF\u0AC5\u0AC9\u0ACB\u0AD4\u0AE0\u0AE2\u0AE9" + + "\u0AF0\u0AF6\u0AFC\u0AFE\u0B05\u0B0D\u0B15\u0B1B\u0B20\u0B27\u0B2D\u0B31" + + "\u0B33\u0B3A\u0B43\u0B4A\u0B54\u0B59\u0B5D\u0B67\u0B6E\u0B7B\u0B7D\u0B85" + + "\u0B87\u0B8B\u0B93\u0B9C\u0BA2\u0BAA\u0BAF\u0BBB\u0BC0\u0BC3\u0BC9\u0BCD" + + "\u0BD2\u0BD7\u0BDC\u0BE2\u0BF7\u0BF9\u0C04\u0C10\u0C1C\u0C20\u0C29\u0C2D" + + "\u0C3F\u0C42\u0C4A\u0C53\u0C5C\u0C73\u0C83\u0C8A\u0C8D\u0C96\u0C9A\u0C9E" + + "\u0CAA\u0CC3\u0CCA\u0CCD\u0CDC\u0CF1\u0CF5\u0CF7\u0D01\u0D03\u0D0D\u0D1C" + + "\u0D1E\u0D2B\u0D2F\u0D36\u0D3B\u0D43\u0D48\u0D51\u0D71\u0D82\u0D86\u0D8C" + + "\u0D92\u0D9B\u0D9F\u0DA1\u0DA8\u0DB0\u0DB8\u0DC5\u0DCC\u0DCF\u0DD6\u0DDE" + + "\u0DE6\u0DF4\u0DF9\u0DFE\u0E01\u0E0E\u0E22\u0E2C\u0E2F\u0E38\u0E3B\u0E3D" + + "\u0E40\u0E43\u0E55\u0E5E\u0E65\u0E71\u0E78\u0E82\u0E85\u0E8A\u0E92\u0E97" + + "\u0E9D\u0EA2\u0EA7\u0EAB\u0EAF\u0EB3\u0EB7\u0EBB\u0EBF\u0EC3\u0EC6\u0ED3" + + "\u0ED8\u0EDC\u0EE0"; + public static readonly _serializedATN: string = Utils.join( + [ + SparkSqlParser._serializedATNSegment0, + SparkSqlParser._serializedATNSegment1, + SparkSqlParser._serializedATNSegment2, + SparkSqlParser._serializedATNSegment3, + SparkSqlParser._serializedATNSegment4, + SparkSqlParser._serializedATNSegment5, + SparkSqlParser._serializedATNSegment6, + SparkSqlParser._serializedATNSegment7, + ], + "", + ); + public static __ATN: ATN; + public static get _ATN(): ATN { + if (!SparkSqlParser.__ATN) { + SparkSqlParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(SparkSqlParser._serializedATN)); } + + return SparkSqlParser.__ATN; } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateTempViewUsing) { - return visitor.visitCreateTempViewUsing(this); + +} + +export class ProgramContext extends ParserRuleContext { + public EOF(): TerminalNode { return this.getToken(SparkSqlParser.EOF, 0); } + public singleStatement(): SingleStatementContext[]; + public singleStatement(i: number): SingleStatementContext; + public singleStatement(i?: number): SingleStatementContext | SingleStatementContext[] { + if (i === undefined) { + return this.getRuleContexts(SingleStatementContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, SingleStatementContext); } } -} -export class AlterViewQueryContext extends StatementContext { - public ALTER(): TerminalNode { return this.getToken(SparkSqlParser.ALTER, 0); } - public VIEW(): TerminalNode { return this.getToken(SparkSqlParser.VIEW, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); - } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAlterViewQuery) { - listener.enterAlterViewQuery(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_program; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterProgram) { + listener.enterProgram(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAlterViewQuery) { - listener.exitAlterViewQuery(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitProgram) { + listener.exitProgram(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAlterViewQuery) { - return visitor.visitAlterViewQuery(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitProgram) { + return visitor.visitProgram(this); } else { return visitor.visitChildren(this); } } } -export class CreateFunctionContext extends StatementContext { - public _className!: Token; - public CREATE(): TerminalNode { return this.getToken(SparkSqlParser.CREATE, 0); } - public FUNCTION(): TerminalNode { return this.getToken(SparkSqlParser.FUNCTION, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public AS(): TerminalNode { return this.getToken(SparkSqlParser.AS, 0); } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } - public OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OR, 0); } - public REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REPLACE, 0); } - public TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TEMPORARY, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public USING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.USING, 0); } - public resource(): ResourceContext[]; - public resource(i: number): ResourceContext; - public resource(i?: number): ResourceContext | ResourceContext[] { - if (i === undefined) { - return this.getRuleContexts(ResourceContext); - } else { - return this.getRuleContext(i, ResourceContext); - } + + +export class SingleStatementContext extends ParserRuleContext { + public statement(): StatementContext { + return this.getRuleContext(0, StatementContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public SEMICOLON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SEMICOLON, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateFunction) { - listener.enterCreateFunction(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_singleStatement; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterSingleStatement) { + listener.enterSingleStatement(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateFunction) { - listener.exitCreateFunction(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitSingleStatement) { + listener.exitSingleStatement(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateFunction) { - return visitor.visitCreateFunction(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitSingleStatement) { + return visitor.visitSingleStatement(this); } else { return visitor.visitChildren(this); } } } -export class DropFunctionContext extends StatementContext { - public DROP(): TerminalNode { return this.getToken(SparkSqlParser.DROP, 0); } - public FUNCTION(): TerminalNode { return this.getToken(SparkSqlParser.FUNCTION, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class TableIdentifierReferenceContext extends ParserRuleContext { + public identifierReference(): IdentifierReferenceContext { + return this.getRuleContext(0, IdentifierReferenceContext); } - public TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TEMPORARY, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDropFunction) { - listener.enterDropFunction(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_tableIdentifierReference; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTableIdentifierReference) { + listener.enterTableIdentifierReference(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDropFunction) { - listener.exitDropFunction(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTableIdentifierReference) { + listener.exitTableIdentifierReference(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDropFunction) { - return visitor.visitDropFunction(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTableIdentifierReference) { + return visitor.visitTableIdentifierReference(this); } else { return visitor.visitChildren(this); } } } -export class ExplainContext extends StatementContext { - public EXPLAIN(): TerminalNode { return this.getToken(SparkSqlParser.EXPLAIN, 0); } - public statement(): StatementContext { - return this.getRuleContext(0, StatementContext); + + +export class ViewIdentifierReferenceContext extends ParserRuleContext { + public identifierReference(): IdentifierReferenceContext { + return this.getRuleContext(0, IdentifierReferenceContext); } - public LOGICAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOGICAL, 0); } - public FORMATTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FORMATTED, 0); } - public EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTENDED, 0); } - public CODEGEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CODEGEN, 0); } - public COST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COST, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterExplain) { - listener.enterExplain(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_viewIdentifierReference; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterViewIdentifierReference) { + listener.enterViewIdentifierReference(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitExplain) { - listener.exitExplain(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitViewIdentifierReference) { + listener.exitViewIdentifierReference(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitExplain) { - return visitor.visitExplain(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitViewIdentifierReference) { + return visitor.visitViewIdentifierReference(this); } else { return visitor.visitChildren(this); } } } -export class ShowTablesContext extends StatementContext { - public _pattern!: Token; - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public TABLES(): TerminalNode { return this.getToken(SparkSqlParser.TABLES, 0); } - public multipartIdentifier(): MultipartIdentifierContext | undefined { - return this.tryGetRuleContext(0, MultipartIdentifierContext); + + +export class FunctionIdentifierReferenceContext extends ParserRuleContext { + public identifierReference(): IdentifierReferenceContext { + return this.getRuleContext(0, IdentifierReferenceContext); } - public FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FROM, 0); } - public IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IN, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIKE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowTables) { - listener.enterShowTables(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_functionIdentifierReference; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFunctionIdentifierReference) { + listener.enterFunctionIdentifierReference(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowTables) { - listener.exitShowTables(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFunctionIdentifierReference) { + listener.exitFunctionIdentifierReference(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowTables) { - return visitor.visitShowTables(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFunctionIdentifierReference) { + return visitor.visitFunctionIdentifierReference(this); } else { return visitor.visitChildren(this); } } } -export class ShowTableContext extends StatementContext { - public _ns!: MultipartIdentifierContext; - public _pattern!: Token; - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public EXTENDED(): TerminalNode { return this.getToken(SparkSqlParser.EXTENDED, 0); } - public LIKE(): TerminalNode { return this.getToken(SparkSqlParser.LIKE, 0); } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); - } - public FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FROM, 0); } - public IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IN, 0); } - public multipartIdentifier(): MultipartIdentifierContext | undefined { - return this.tryGetRuleContext(0, MultipartIdentifierContext); + + +export class NamespaceIdentifierReferenceContext extends ParserRuleContext { + public identifierReference(): IdentifierReferenceContext { + return this.getRuleContext(0, IdentifierReferenceContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowTable) { - listener.enterShowTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_namespaceIdentifierReference; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNamespaceIdentifierReference) { + listener.enterNamespaceIdentifierReference(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowTable) { - listener.exitShowTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNamespaceIdentifierReference) { + listener.exitNamespaceIdentifierReference(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowTable) { - return visitor.visitShowTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNamespaceIdentifierReference) { + return visitor.visitNamespaceIdentifierReference(this); } else { return visitor.visitChildren(this); } } } -export class ShowTblPropertiesContext extends StatementContext { - public _table!: MultipartIdentifierContext; - public _key!: TablePropertyKeyContext; - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public TBLPROPERTIES(): TerminalNode { return this.getToken(SparkSqlParser.TBLPROPERTIES, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class StatementContext extends ParserRuleContext { + public _pattern!: StringLitContext; + public _target!: TableIdentifierContext; + public _source!: TableIdentifierContext; + public _tableProps!: PropertyListContext; + public _table!: TableIdentifierReferenceContext; + public _column!: MultipartIdentifierContext; + public _colName!: MultipartIdentifierContext; + public _className!: StringLitContext; + public _ns!: TableIdentifierReferenceContext; + public _key!: PropertyKeyContext; + public _legacy!: MultipartIdentifierContext; + public _option!: Token; + public _options!: PropertyListContext; + public _path!: StringLitContext; + public _op!: Token; + public _indexType!: IdentifierContext; + public query(): QueryContext | undefined { + return this.tryGetRuleContext(0, QueryContext); } - public tablePropertyKey(): TablePropertyKeyContext | undefined { - return this.tryGetRuleContext(0, TablePropertyKeyContext); + public dmlStatementNoWith(): DmlStatementNoWithContext | undefined { + return this.tryGetRuleContext(0, DmlStatementNoWithContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public ctes(): CtesContext | undefined { + return this.tryGetRuleContext(0, CtesContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowTblProperties) { - listener.enterShowTblProperties(this); - } + public KW_USE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USE, 0); } + public identifierReference(): IdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, IdentifierReferenceContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowTblProperties) { - listener.exitShowTblProperties(this); - } + public namespace(): NamespaceContext | undefined { + return this.tryGetRuleContext(0, NamespaceContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowTblProperties) { - return visitor.visitShowTblProperties(this); - } else { - return visitor.visitChildren(this); - } + public namespaceIdentifierReference(): NamespaceIdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, NamespaceIdentifierReferenceContext); } -} -export class ShowColumnsContext extends StatementContext { - public _table!: MultipartIdentifierContext; - public _ns!: MultipartIdentifierContext; - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public COLUMNS(): TerminalNode { return this.getToken(SparkSqlParser.COLUMNS, 0); } - public FROM(): TerminalNode[]; - public FROM(i: number): TerminalNode; - public FROM(i?: number): TerminalNode | TerminalNode[] { + public KW_SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SET, 0); } + public KW_CATALOG(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CATALOG, 0); } + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext; + public identifier(i?: number): IdentifierContext | IdentifierContext[] { if (i === undefined) { - return this.getTokens(SparkSqlParser.FROM); + return this.getRuleContexts(IdentifierContext); } else { - return this.getToken(SparkSqlParser.FROM, i); + return this.getRuleContext(i, IdentifierContext); } } - public IN(): TerminalNode[]; - public IN(i: number): TerminalNode; - public IN(i?: number): TerminalNode | TerminalNode[] { + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); + } + public KW_CREATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CREATE, 0); } + public KW_IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IF, 0); } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXISTS, 0); } + public commentSpec(): CommentSpecContext[]; + public commentSpec(i: number): CommentSpecContext; + public commentSpec(i?: number): CommentSpecContext | CommentSpecContext[] { if (i === undefined) { - return this.getTokens(SparkSqlParser.IN); + return this.getRuleContexts(CommentSpecContext); } else { - return this.getToken(SparkSqlParser.IN, i); + return this.getRuleContext(i, CommentSpecContext); } } - public multipartIdentifier(): MultipartIdentifierContext[]; - public multipartIdentifier(i: number): MultipartIdentifierContext; - public multipartIdentifier(i?: number): MultipartIdentifierContext | MultipartIdentifierContext[] { + public locationSpec(): LocationSpecContext[]; + public locationSpec(i: number): LocationSpecContext; + public locationSpec(i?: number): LocationSpecContext | LocationSpecContext[] { if (i === undefined) { - return this.getRuleContexts(MultipartIdentifierContext); + return this.getRuleContexts(LocationSpecContext); } else { - return this.getRuleContext(i, MultipartIdentifierContext); - } - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowColumns) { - listener.enterShowColumns(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowColumns) { - listener.exitShowColumns(this); + return this.getRuleContext(i, LocationSpecContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowColumns) { - return visitor.visitShowColumns(this); + public KW_WITH(): TerminalNode[]; + public KW_WITH(i: number): TerminalNode; + public KW_WITH(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_WITH); } else { - return visitor.visitChildren(this); - } - } -} -export class ShowViewsContext extends StatementContext { - public _pattern!: Token; - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public VIEWS(): TerminalNode { return this.getToken(SparkSqlParser.VIEWS, 0); } - public multipartIdentifier(): MultipartIdentifierContext | undefined { - return this.tryGetRuleContext(0, MultipartIdentifierContext); - } - public FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FROM, 0); } - public IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IN, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIKE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowViews) { - listener.enterShowViews(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowViews) { - listener.exitShowViews(this); + return this.getToken(SparkSqlParser.KW_WITH, i); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowViews) { - return visitor.visitShowViews(this); + public propertyList(): PropertyListContext[]; + public propertyList(i: number): PropertyListContext; + public propertyList(i?: number): PropertyListContext | PropertyListContext[] { + if (i === undefined) { + return this.getRuleContexts(PropertyListContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, PropertyListContext); } } -} -export class ShowPartitionsContext extends StatementContext { - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public PARTITIONS(): TerminalNode { return this.getToken(SparkSqlParser.PARTITIONS, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); - } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowPartitions) { - listener.enterShowPartitions(this); + public KW_DBPROPERTIES(): TerminalNode[]; + public KW_DBPROPERTIES(i: number): TerminalNode; + public KW_DBPROPERTIES(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_DBPROPERTIES); + } else { + return this.getToken(SparkSqlParser.KW_DBPROPERTIES, i); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowPartitions) { - listener.exitShowPartitions(this); + public KW_PROPERTIES(): TerminalNode[]; + public KW_PROPERTIES(i: number): TerminalNode; + public KW_PROPERTIES(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_PROPERTIES); + } else { + return this.getToken(SparkSqlParser.KW_PROPERTIES, i); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowPartitions) { - return visitor.visitShowPartitions(this); + public KW_ALTER(): TerminalNode[]; + public KW_ALTER(i: number): TerminalNode; + public KW_ALTER(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_ALTER); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.KW_ALTER, i); } } -} -export class ShowFunctionsContext extends StatementContext { - public _pattern!: Token; - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public FUNCTIONS(): TerminalNode { return this.getToken(SparkSqlParser.FUNCTIONS, 0); } - public identifier(): IdentifierContext | undefined { - return this.tryGetRuleContext(0, IdentifierContext); + public KW_DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DROP, 0); } + public KW_RESTRICT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESTRICT, 0); } + public KW_CASCADE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CASCADE, 0); } + public KW_SHOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SHOW, 0); } + public namespaces(): NamespacesContext | undefined { + return this.tryGetRuleContext(0, NamespacesContext); } public multipartIdentifier(): MultipartIdentifierContext | undefined { return this.tryGetRuleContext(0, MultipartIdentifierContext); } - public LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIKE, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowFunctions) { - listener.enterShowFunctions(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowFunctions) { - listener.exitShowFunctions(this); + public KW_FROM(): TerminalNode[]; + public KW_FROM(i: number): TerminalNode; + public KW_FROM(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_FROM); + } else { + return this.getToken(SparkSqlParser.KW_FROM, i); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowFunctions) { - return visitor.visitShowFunctions(this); + public KW_IN(): TerminalNode[]; + public KW_IN(i: number): TerminalNode; + public KW_IN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_IN); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.KW_IN, i); } } -} -export class ShowCreateTableContext extends StatementContext { - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public CREATE(): TerminalNode { return this.getToken(SparkSqlParser.CREATE, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public SERDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowCreateTable) { - listener.enterShowCreateTable(this); - } + public KW_LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIKE, 0); } + public createTableHeader(): CreateTableHeaderContext | undefined { + return this.tryGetRuleContext(0, CreateTableHeaderContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowCreateTable) { - listener.exitShowCreateTable(this); - } + public createTableClauses(): CreateTableClausesContext | undefined { + return this.tryGetRuleContext(0, CreateTableClausesContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowCreateTable) { - return visitor.visitShowCreateTable(this); + public LEFT_PAREN(): TerminalNode[]; + public LEFT_PAREN(i: number): TerminalNode; + public LEFT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.LEFT_PAREN); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.LEFT_PAREN, i); } } -} -export class ShowCurrentNamespaceContext extends StatementContext { - public SHOW(): TerminalNode { return this.getToken(SparkSqlParser.SHOW, 0); } - public CURRENT(): TerminalNode { return this.getToken(SparkSqlParser.CURRENT, 0); } - public NAMESPACE(): TerminalNode { return this.getToken(SparkSqlParser.NAMESPACE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public createOrReplaceTableColTypeList(): CreateOrReplaceTableColTypeListContext | undefined { + return this.tryGetRuleContext(0, CreateOrReplaceTableColTypeListContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterShowCurrentNamespace) { - listener.enterShowCurrentNamespace(this); + public RIGHT_PAREN(): TerminalNode[]; + public RIGHT_PAREN(i: number): TerminalNode; + public RIGHT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.RIGHT_PAREN); + } else { + return this.getToken(SparkSqlParser.RIGHT_PAREN, i); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitShowCurrentNamespace) { - listener.exitShowCurrentNamespace(this); + public tableProvider(): TableProviderContext[]; + public tableProvider(i: number): TableProviderContext; + public tableProvider(i?: number): TableProviderContext | TableProviderContext[] { + if (i === undefined) { + return this.getRuleContexts(TableProviderContext); + } else { + return this.getRuleContext(i, TableProviderContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitShowCurrentNamespace) { - return visitor.visitShowCurrentNamespace(this); + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public KW_TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLE, 0); } + public tableIdentifier(): TableIdentifierContext[]; + public tableIdentifier(i: number): TableIdentifierContext; + public tableIdentifier(i?: number): TableIdentifierContext | TableIdentifierContext[] { + if (i === undefined) { + return this.getRuleContexts(TableIdentifierContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, TableIdentifierContext); } } -} -export class DescribeFunctionContext extends StatementContext { - public FUNCTION(): TerminalNode { return this.getToken(SparkSqlParser.FUNCTION, 0); } - public describeFuncName(): DescribeFuncNameContext { - return this.getRuleContext(0, DescribeFuncNameContext); - } - public DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESC, 0); } - public DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESCRIBE, 0); } - public EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTENDED, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDescribeFunction) { - listener.enterDescribeFunction(this); + public rowFormat(): RowFormatContext[]; + public rowFormat(i: number): RowFormatContext; + public rowFormat(i?: number): RowFormatContext | RowFormatContext[] { + if (i === undefined) { + return this.getRuleContexts(RowFormatContext); + } else { + return this.getRuleContext(i, RowFormatContext); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDescribeFunction) { - listener.exitDescribeFunction(this); + public createFileFormat(): CreateFileFormatContext[]; + public createFileFormat(i: number): CreateFileFormatContext; + public createFileFormat(i?: number): CreateFileFormatContext | CreateFileFormatContext[] { + if (i === undefined) { + return this.getRuleContexts(CreateFileFormatContext); + } else { + return this.getRuleContext(i, CreateFileFormatContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDescribeFunction) { - return visitor.visitDescribeFunction(this); + public KW_TBLPROPERTIES(): TerminalNode[]; + public KW_TBLPROPERTIES(i: number): TerminalNode; + public KW_TBLPROPERTIES(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_TBLPROPERTIES); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.KW_TBLPROPERTIES, i); } } -} -export class DescribeNamespaceContext extends StatementContext { - public namespace(): NamespaceContext { - return this.getRuleContext(0, NamespaceContext); - } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + public replaceTableHeader(): ReplaceTableHeaderContext | undefined { + return this.tryGetRuleContext(0, ReplaceTableHeaderContext); } - public DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESC, 0); } - public DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESCRIBE, 0); } - public EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTENDED, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_ANALYZE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANALYZE, 0); } + public tableIdentifierReference(): TableIdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, TableIdentifierReferenceContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDescribeNamespace) { - listener.enterDescribeNamespace(this); + public KW_COMPUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPUTE, 0); } + public KW_STATISTICS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STATISTICS, 0); } + public partitionSpec(): PartitionSpecContext[]; + public partitionSpec(i: number): PartitionSpecContext; + public partitionSpec(i?: number): PartitionSpecContext | PartitionSpecContext[] { + if (i === undefined) { + return this.getRuleContexts(PartitionSpecContext); + } else { + return this.getRuleContext(i, PartitionSpecContext); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDescribeNamespace) { - listener.exitDescribeNamespace(this); - } + public KW_FOR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FOR, 0); } + public KW_COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLUMNS, 0); } + public identifierSeq(): IdentifierSeqContext | undefined { + return this.tryGetRuleContext(0, IdentifierSeqContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDescribeNamespace) { - return visitor.visitDescribeNamespace(this); - } else { - return visitor.visitChildren(this); - } + public KW_ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALL, 0); } + public KW_TABLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLES, 0); } + public KW_ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ADD, 0); } + public qualifiedColTypeWithPositionList(): QualifiedColTypeWithPositionListContext | undefined { + return this.tryGetRuleContext(0, QualifiedColTypeWithPositionListContext); + } + public KW_COLUMN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLUMN, 0); } + public KW_RENAME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RENAME, 0); } + public KW_TO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TO, 0); } + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext | undefined { + return this.tryGetRuleContext(0, ErrorCapturingIdentifierContext); } -} -export class DescribeRelationContext extends StatementContext { - public _option!: Token; - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + public multipartIdentifierList(): MultipartIdentifierListContext | undefined { + return this.tryGetRuleContext(0, MultipartIdentifierListContext); } - public DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESC, 0); } - public DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESCRIBE, 0); } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); + public KW_VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VIEW, 0); } + public viewIdentifierReference(): ViewIdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, ViewIdentifierReferenceContext); } - public describeColName(): DescribeColNameContext | undefined { - return this.tryGetRuleContext(0, DescribeColNameContext); + public KW_UNSET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNSET, 0); } + public KW_CHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHANGE, 0); } + public alterColumnAction(): AlterColumnActionContext | undefined { + return this.tryGetRuleContext(0, AlterColumnActionContext); } - public EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTENDED, 0); } - public FORMATTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FORMATTED, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public colType(): ColTypeContext | undefined { + return this.tryGetRuleContext(0, ColTypeContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDescribeRelation) { - listener.enterDescribeRelation(this); - } + public colPosition(): ColPositionContext | undefined { + return this.tryGetRuleContext(0, ColPositionContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDescribeRelation) { - listener.exitDescribeRelation(this); + public KW_REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPLACE, 0); } + public KW_SERDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDE, 0); } + public KW_SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDEPROPERTIES, 0); } + public partitionSpecLocation(): PartitionSpecLocationContext[]; + public partitionSpecLocation(i: number): PartitionSpecLocationContext; + public partitionSpecLocation(i?: number): PartitionSpecLocationContext | PartitionSpecLocationContext[] { + if (i === undefined) { + return this.getRuleContexts(PartitionSpecLocationContext); + } else { + return this.getRuleContext(i, PartitionSpecLocationContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDescribeRelation) { - return visitor.visitDescribeRelation(this); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.COMMA, i); } } -} -export class DescribeQueryContext extends StatementContext { - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); - } - public DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESC, 0); } - public DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESCRIBE, 0); } - public QUERY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.QUERY, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_PURGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PURGE, 0); } + public KW_RECOVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECOVER, 0); } + public KW_PARTITIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITIONS, 0); } + public KW_OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OR, 0); } + public KW_TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TEMPORARY, 0); } + public identifierCommentList(): IdentifierCommentListContext | undefined { + return this.tryGetRuleContext(0, IdentifierCommentListContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDescribeQuery) { - listener.enterDescribeQuery(this); + public KW_PARTITIONED(): TerminalNode[]; + public KW_PARTITIONED(i: number): TerminalNode; + public KW_PARTITIONED(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_PARTITIONED); + } else { + return this.getToken(SparkSqlParser.KW_PARTITIONED, i); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDescribeQuery) { - listener.exitDescribeQuery(this); + public KW_ON(): TerminalNode[]; + public KW_ON(i: number): TerminalNode; + public KW_ON(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_ON); + } else { + return this.getToken(SparkSqlParser.KW_ON, i); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDescribeQuery) { - return visitor.visitDescribeQuery(this); + public identifierList(): IdentifierListContext[]; + public identifierList(i: number): IdentifierListContext; + public identifierList(i?: number): IdentifierListContext | IdentifierListContext[] { + if (i === undefined) { + return this.getRuleContexts(IdentifierListContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, IdentifierListContext); } } -} -export class CommentNamespaceContext extends StatementContext { - public _comment!: Token; - public COMMENT(): TerminalNode { return this.getToken(SparkSqlParser.COMMENT, 0); } - public ON(): TerminalNode { return this.getToken(SparkSqlParser.ON, 0); } - public namespace(): NamespaceContext { - return this.getRuleContext(0, NamespaceContext); - } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + public KW_GLOBAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GLOBAL, 0); } + public colTypeList(): ColTypeListContext | undefined { + return this.tryGetRuleContext(0, ColTypeListContext); } - public IS(): TerminalNode { return this.getToken(SparkSqlParser.IS, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OPTIONS, 0); } + public KW_FUNCTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FUNCTION, 0); } + public functionIdentifierReference(): FunctionIdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, FunctionIdentifierReferenceContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCommentNamespace) { - listener.enterCommentNamespace(this); + public KW_USING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USING, 0); } + public resource(): ResourceContext[]; + public resource(i: number): ResourceContext; + public resource(i?: number): ResourceContext | ResourceContext[] { + if (i === undefined) { + return this.getRuleContexts(ResourceContext); + } else { + return this.getRuleContext(i, ResourceContext); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCommentNamespace) { - listener.exitCommentNamespace(this); - } + public KW_DECLARE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DECLARE, 0); } + public KW_VARIABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VARIABLE, 0); } + public dataType(): DataTypeContext | undefined { + return this.tryGetRuleContext(0, DataTypeContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCommentNamespace) { - return visitor.visitCommentNamespace(this); - } else { - return visitor.visitChildren(this); - } + public variableDefaultExpression(): VariableDefaultExpressionContext | undefined { + return this.tryGetRuleContext(0, VariableDefaultExpressionContext); + } + public KW_EXPLAIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXPLAIN, 0); } + public statement(): StatementContext | undefined { + return this.tryGetRuleContext(0, StatementContext); + } + public KW_LOGICAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOGICAL, 0); } + public KW_FORMATTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FORMATTED, 0); } + public KW_EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTENDED, 0); } + public KW_CODEGEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CODEGEN, 0); } + public KW_COST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COST, 0); } + public propertyKey(): PropertyKeyContext | undefined { + return this.tryGetRuleContext(0, PropertyKeyContext); + } + public KW_VIEWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VIEWS, 0); } + public KW_FUNCTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FUNCTIONS, 0); } + public KW_CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT, 0); } + public KW_CATALOGS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CATALOGS, 0); } + public describeFuncName(): DescribeFuncNameContext | undefined { + return this.tryGetRuleContext(0, DescribeFuncNameContext); + } + public KW_DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DESC, 0); } + public KW_DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DESCRIBE, 0); } + public describeColName(): DescribeColNameContext | undefined { + return this.tryGetRuleContext(0, DescribeColNameContext); } -} -export class CommentTableContext extends StatementContext { - public _comment!: Token; - public COMMENT(): TerminalNode { return this.getToken(SparkSqlParser.COMMENT, 0); } - public ON(): TerminalNode { return this.getToken(SparkSqlParser.ON, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + public KW_QUERY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_QUERY, 0); } + public KW_COMMENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMMENT, 0); } + public KW_IS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IS, 0); } + public comment(): CommentContext | undefined { + return this.tryGetRuleContext(0, CommentContext); + } + public KW_REFRESH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REFRESH, 0); } + public KW_CACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CACHE, 0); } + public KW_LAZY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LAZY, 0); } + public KW_UNCACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNCACHE, 0); } + public KW_CLEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLEAR, 0); } + public KW_LOAD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOAD, 0); } + public KW_DATA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATA, 0); } + public KW_INPATH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INPATH, 0); } + public KW_INTO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTO, 0); } + public KW_LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCAL, 0); } + public KW_OVERWRITE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVERWRITE, 0); } + public KW_TRUNCATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRUNCATE, 0); } + public KW_REPAIR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPAIR, 0); } + public KW_MSCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MSCK, 0); } + public KW_SYNC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYNC, 0); } + public KW_LIST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIST, 0); } + public KW_ROLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLE, 0); } + public KW_TIME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIME, 0); } + public KW_ZONE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ZONE, 0); } + public interval(): IntervalContext | undefined { + return this.tryGetRuleContext(0, IntervalContext); } - public IS(): TerminalNode { return this.getToken(SparkSqlParser.IS, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public timezone(): TimezoneContext | undefined { + return this.tryGetRuleContext(0, TimezoneContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCommentTable) { - listener.enterCommentTable(this); - } + public assignmentList(): AssignmentListContext | undefined { + return this.tryGetRuleContext(0, AssignmentListContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCommentTable) { - listener.exitCommentTable(this); - } + public KW_VAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VAR, 0); } + public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } + public configKey(): ConfigKeyContext | undefined { + return this.tryGetRuleContext(0, ConfigKeyContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCommentTable) { - return visitor.visitCommentTable(this); - } else { - return visitor.visitChildren(this); - } + public configValue(): ConfigValueContext | undefined { + return this.tryGetRuleContext(0, ConfigValueContext); } -} -export class RefreshTableContext extends StatementContext { - public REFRESH(): TerminalNode { return this.getToken(SparkSqlParser.REFRESH, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + public KW_RESET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESET, 0); } + public KW_INDEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INDEX, 0); } + public multipartIdentifierPropertyList(): MultipartIdentifierPropertyListContext | undefined { + return this.tryGetRuleContext(0, MultipartIdentifierPropertyListContext); + } + public unsupportedHiveNativeCommands(): UnsupportedHiveNativeCommandsContext | undefined { + return this.tryGetRuleContext(0, UnsupportedHiveNativeCommandsContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRefreshTable) { - listener.enterRefreshTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_statement; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterStatement) { + listener.enterStatement(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRefreshTable) { - listener.exitRefreshTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitStatement) { + listener.exitStatement(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRefreshTable) { - return visitor.visitRefreshTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitStatement) { + return visitor.visitStatement(this); } else { return visitor.visitChildren(this); } } } -export class RefreshFunctionContext extends StatementContext { - public REFRESH(): TerminalNode { return this.getToken(SparkSqlParser.REFRESH, 0); } - public FUNCTION(): TerminalNode { return this.getToken(SparkSqlParser.FUNCTION, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class TimezoneContext extends ParserRuleContext { + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCAL, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRefreshFunction) { - listener.enterRefreshFunction(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_timezone; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTimezone) { + listener.enterTimezone(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRefreshFunction) { - listener.exitRefreshFunction(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTimezone) { + listener.exitTimezone(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRefreshFunction) { - return visitor.visitRefreshFunction(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTimezone) { + return visitor.visitTimezone(this); } else { return visitor.visitChildren(this); } } } -export class RefreshResourceContext extends StatementContext { - public REFRESH(): TerminalNode { return this.getToken(SparkSqlParser.REFRESH, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class ConfigKeyContext extends ParserRuleContext { + public quotedIdentifier(): QuotedIdentifierContext { + return this.getRuleContext(0, QuotedIdentifierContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRefreshResource) { - listener.enterRefreshResource(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_configKey; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterConfigKey) { + listener.enterConfigKey(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRefreshResource) { - listener.exitRefreshResource(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitConfigKey) { + listener.exitConfigKey(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRefreshResource) { - return visitor.visitRefreshResource(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitConfigKey) { + return visitor.visitConfigKey(this); } else { return visitor.visitChildren(this); } } } -export class CacheTableContext extends StatementContext { - public CACHE(): TerminalNode { return this.getToken(SparkSqlParser.CACHE, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public LAZY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LAZY, 0); } - public OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OPTIONS, 0); } - public tablePropertyList(): TablePropertyListContext | undefined { - return this.tryGetRuleContext(0, TablePropertyListContext); - } - public query(): QueryContext | undefined { - return this.tryGetRuleContext(0, QueryContext); + + +export class ConfigValueContext extends ParserRuleContext { + public backQuotedIdentifier(): BackQuotedIdentifierContext { + return this.getRuleContext(0, BackQuotedIdentifierContext); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCacheTable) { - listener.enterCacheTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_configValue; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterConfigValue) { + listener.enterConfigValue(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCacheTable) { - listener.exitCacheTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitConfigValue) { + listener.exitConfigValue(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCacheTable) { - return visitor.visitCacheTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitConfigValue) { + return visitor.visitConfigValue(this); } else { return visitor.visitChildren(this); } } } -export class UncacheTableContext extends StatementContext { - public UNCACHE(): TerminalNode { return this.getToken(SparkSqlParser.UNCACHE, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class UnsupportedHiveNativeCommandsContext extends ParserRuleContext { + public _kw1!: Token; + public _kw2!: Token; + public _kw3!: Token; + public _kw4!: Token; + public _kw5!: Token; + public _kw6!: Token; + public KW_CREATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CREATE, 0); } + public KW_ROLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLE, 0); } + public KW_DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DROP, 0); } + public KW_GRANT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GRANT, 0); } + public KW_REVOKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REVOKE, 0); } + public KW_SHOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SHOW, 0); } + public KW_PRINCIPALS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PRINCIPALS, 0); } + public KW_ROLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLES, 0); } + public KW_CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT, 0); } + public KW_EXPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXPORT, 0); } + public KW_TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLE, 0); } + public KW_IMPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IMPORT, 0); } + public KW_COMPACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPACTIONS, 0); } + public KW_TRANSACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSACTIONS, 0); } + public KW_INDEXES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INDEXES, 0); } + public KW_LOCKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCKS, 0); } + public KW_INDEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INDEX, 0); } + public KW_ALTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALTER, 0); } + public KW_LOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCK, 0); } + public KW_DATABASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATABASE, 0); } + public KW_UNLOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNLOCK, 0); } + public KW_TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TEMPORARY, 0); } + public KW_MACRO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MACRO, 0); } + public tableIdentifier(): TableIdentifierContext | undefined { + return this.tryGetRuleContext(0, TableIdentifierContext); + } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_CLUSTERED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLUSTERED, 0); } + public KW_BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BY, 0); } + public KW_SORTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORTED, 0); } + public KW_SKEWED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SKEWED, 0); } + public KW_STORED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STORED, 0); } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public KW_DIRECTORIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIRECTORIES, 0); } + public KW_SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SET, 0); } + public KW_LOCATION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCATION, 0); } + public KW_EXCHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXCHANGE, 0); } + public KW_PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITION, 0); } + public KW_ARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ARCHIVE, 0); } + public KW_UNARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNARCHIVE, 0); } + public KW_TOUCH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TOUCH, 0); } + public KW_COMPACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPACT, 0); } + public partitionSpec(): PartitionSpecContext | undefined { + return this.tryGetRuleContext(0, PartitionSpecContext); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_CONCATENATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CONCATENATE, 0); } + public KW_FILEFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FILEFORMAT, 0); } + public KW_REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPLACE, 0); } + public KW_COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLUMNS, 0); } + public KW_START(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_START, 0); } + public KW_TRANSACTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSACTION, 0); } + public KW_COMMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMMIT, 0); } + public KW_ROLLBACK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLLBACK, 0); } + public KW_DFS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DFS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterUncacheTable) { - listener.enterUncacheTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_unsupportedHiveNativeCommands; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnsupportedHiveNativeCommands) { + listener.enterUnsupportedHiveNativeCommands(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitUncacheTable) { - listener.exitUncacheTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnsupportedHiveNativeCommands) { + listener.exitUnsupportedHiveNativeCommands(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitUncacheTable) { - return visitor.visitUncacheTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnsupportedHiveNativeCommands) { + return visitor.visitUnsupportedHiveNativeCommands(this); } else { return visitor.visitChildren(this); } } } -export class ClearCacheContext extends StatementContext { - public CLEAR(): TerminalNode { return this.getToken(SparkSqlParser.CLEAR, 0); } - public CACHE(): TerminalNode { return this.getToken(SparkSqlParser.CACHE, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class CreateTableHeaderContext extends ParserRuleContext { + public KW_CREATE(): TerminalNode { return this.getToken(SparkSqlParser.KW_CREATE, 0); } + public KW_TABLE(): TerminalNode { return this.getToken(SparkSqlParser.KW_TABLE, 0); } + public tableIdentifierReference(): TableIdentifierReferenceContext { + return this.getRuleContext(0, TableIdentifierReferenceContext); + } + public KW_TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TEMPORARY, 0); } + public KW_EXTERNAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTERNAL, 0); } + public KW_IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IF, 0); } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXISTS, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterClearCache) { - listener.enterClearCache(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_createTableHeader; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterCreateTableHeader) { + listener.enterCreateTableHeader(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitClearCache) { - listener.exitClearCache(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitCreateTableHeader) { + listener.exitCreateTableHeader(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitClearCache) { - return visitor.visitClearCache(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitCreateTableHeader) { + return visitor.visitCreateTableHeader(this); } else { return visitor.visitChildren(this); } } } -export class LoadDataContext extends StatementContext { - public _path!: Token; - public LOAD(): TerminalNode { return this.getToken(SparkSqlParser.LOAD, 0); } - public DATA(): TerminalNode { return this.getToken(SparkSqlParser.DATA, 0); } - public INPATH(): TerminalNode { return this.getToken(SparkSqlParser.INPATH, 0); } - public INTO(): TerminalNode { return this.getToken(SparkSqlParser.INTO, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } - public LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCAL, 0); } - public OVERWRITE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVERWRITE, 0); } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); + + +export class ReplaceTableHeaderContext extends ParserRuleContext { + public KW_REPLACE(): TerminalNode { return this.getToken(SparkSqlParser.KW_REPLACE, 0); } + public KW_TABLE(): TerminalNode { return this.getToken(SparkSqlParser.KW_TABLE, 0); } + public tableIdentifierReference(): TableIdentifierReferenceContext { + return this.getRuleContext(0, TableIdentifierReferenceContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_CREATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CREATE, 0); } + public KW_OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OR, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterLoadData) { - listener.enterLoadData(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_replaceTableHeader; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterReplaceTableHeader) { + listener.enterReplaceTableHeader(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitLoadData) { - listener.exitLoadData(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitReplaceTableHeader) { + listener.exitReplaceTableHeader(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitLoadData) { - return visitor.visitLoadData(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitReplaceTableHeader) { + return visitor.visitReplaceTableHeader(this); } else { return visitor.visitChildren(this); } } } -export class TruncateTableContext extends StatementContext { - public TRUNCATE(): TerminalNode { return this.getToken(SparkSqlParser.TRUNCATE, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class BucketSpecContext extends ParserRuleContext { + public KW_CLUSTERED(): TerminalNode { return this.getToken(SparkSqlParser.KW_CLUSTERED, 0); } + public KW_BY(): TerminalNode[]; + public KW_BY(i: number): TerminalNode; + public KW_BY(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_BY); + } else { + return this.getToken(SparkSqlParser.KW_BY, i); + } } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); + public identifierList(): IdentifierListContext { + return this.getRuleContext(0, IdentifierListContext); + } + public KW_INTO(): TerminalNode { return this.getToken(SparkSqlParser.KW_INTO, 0); } + public INTEGER_VALUE(): TerminalNode { return this.getToken(SparkSqlParser.INTEGER_VALUE, 0); } + public KW_BUCKETS(): TerminalNode { return this.getToken(SparkSqlParser.KW_BUCKETS, 0); } + public KW_SORTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORTED, 0); } + public orderedIdentifierList(): OrderedIdentifierListContext | undefined { + return this.tryGetRuleContext(0, OrderedIdentifierListContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTruncateTable) { - listener.enterTruncateTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_bucketSpec; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterBucketSpec) { + listener.enterBucketSpec(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTruncateTable) { - listener.exitTruncateTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitBucketSpec) { + listener.exitBucketSpec(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTruncateTable) { - return visitor.visitTruncateTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitBucketSpec) { + return visitor.visitBucketSpec(this); } else { return visitor.visitChildren(this); } } } -export class RepairTableContext extends StatementContext { - public MSCK(): TerminalNode { return this.getToken(SparkSqlParser.MSCK, 0); } - public REPAIR(): TerminalNode { return this.getToken(SparkSqlParser.REPAIR, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class SkewSpecContext extends ParserRuleContext { + public KW_SKEWED(): TerminalNode { return this.getToken(SparkSqlParser.KW_SKEWED, 0); } + public KW_BY(): TerminalNode { return this.getToken(SparkSqlParser.KW_BY, 0); } + public identifierList(): IdentifierListContext { + return this.getRuleContext(0, IdentifierListContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_ON(): TerminalNode { return this.getToken(SparkSqlParser.KW_ON, 0); } + public constantList(): ConstantListContext | undefined { + return this.tryGetRuleContext(0, ConstantListContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRepairTable) { - listener.enterRepairTable(this); - } + public nestedConstantList(): NestedConstantListContext | undefined { + return this.tryGetRuleContext(0, NestedConstantListContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRepairTable) { - listener.exitRepairTable(this); - } + public KW_STORED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STORED, 0); } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public KW_DIRECTORIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIRECTORIES, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRepairTable) { - return visitor.visitRepairTable(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class ManageResourceContext extends StatementContext { - public _op!: Token; - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); - } - public ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ADD, 0); } - public LIST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIST, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_skewSpec; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterManageResource) { - listener.enterManageResource(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterSkewSpec) { + listener.enterSkewSpec(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitManageResource) { - listener.exitManageResource(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitSkewSpec) { + listener.exitSkewSpec(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitManageResource) { - return visitor.visitManageResource(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitSkewSpec) { + return visitor.visitSkewSpec(this); } else { return visitor.visitChildren(this); } } } -export class FailNativeCommandContext extends StatementContext { - public SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SET, 0); } - public ROLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLE, 0); } - public unsupportedHiveNativeCommands(): UnsupportedHiveNativeCommandsContext | undefined { - return this.tryGetRuleContext(0, UnsupportedHiveNativeCommandsContext); + + +export class LocationSpecContext extends ParserRuleContext { + public KW_LOCATION(): TerminalNode { return this.getToken(SparkSqlParser.KW_LOCATION, 0); } + public stringLit(): StringLitContext { + return this.getRuleContext(0, StringLitContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFailNativeCommand) { - listener.enterFailNativeCommand(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_locationSpec; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterLocationSpec) { + listener.enterLocationSpec(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFailNativeCommand) { - listener.exitFailNativeCommand(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitLocationSpec) { + listener.exitLocationSpec(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFailNativeCommand) { - return visitor.visitFailNativeCommand(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitLocationSpec) { + return visitor.visitLocationSpec(this); } else { return visitor.visitChildren(this); } } } -export class SetTimeZoneContext extends StatementContext { - public _timezone!: Token; - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - public TIME(): TerminalNode { return this.getToken(SparkSqlParser.TIME, 0); } - public ZONE(): TerminalNode { return this.getToken(SparkSqlParser.ZONE, 0); } - public interval(): IntervalContext | undefined { - return this.tryGetRuleContext(0, IntervalContext); + + +export class CommentSpecContext extends ParserRuleContext { + public KW_COMMENT(): TerminalNode { return this.getToken(SparkSqlParser.KW_COMMENT, 0); } + public stringLit(): StringLitContext { + return this.getRuleContext(0, StringLitContext); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCAL, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetTimeZone) { - listener.enterSetTimeZone(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_commentSpec; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterCommentSpec) { + listener.enterCommentSpec(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetTimeZone) { - listener.exitSetTimeZone(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitCommentSpec) { + listener.exitCommentSpec(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetTimeZone) { - return visitor.visitSetTimeZone(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitCommentSpec) { + return visitor.visitCommentSpec(this); } else { return visitor.visitChildren(this); } } } -export class SetQuotedConfigurationContext extends StatementContext { - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - public configKey(): ConfigKeyContext { - return this.getRuleContext(0, ConfigKeyContext); + + +export class QueryContext extends ParserRuleContext { + public queryTerm(): QueryTermContext { + return this.getRuleContext(0, QueryTermContext); } - public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public queryOrganization(): QueryOrganizationContext { + return this.getRuleContext(0, QueryOrganizationContext); } + public ctes(): CtesContext | undefined { + return this.tryGetRuleContext(0, CtesContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return SparkSqlParser.RULE_query; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetQuotedConfiguration) { - listener.enterSetQuotedConfiguration(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterQuery) { + listener.enterQuery(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetQuotedConfiguration) { - listener.exitSetQuotedConfiguration(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitQuery) { + listener.exitQuery(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetQuotedConfiguration) { - return visitor.visitSetQuotedConfiguration(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitQuery) { + return visitor.visitQuery(this); } else { return visitor.visitChildren(this); } } } -export class SetConfigurationContext extends StatementContext { - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class InsertIntoContext extends ParserRuleContext { + public _path!: StringLitContext; + public _options!: PropertyListContext; + public KW_INSERT(): TerminalNode { return this.getToken(SparkSqlParser.KW_INSERT, 0); } + public KW_OVERWRITE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVERWRITE, 0); } + public tableIdentifierReference(): TableIdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, TableIdentifierReferenceContext); + } + public KW_TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLE, 0); } + public partitionSpec(): PartitionSpecContext | undefined { + return this.tryGetRuleContext(0, PartitionSpecContext); + } + public identifierList(): IdentifierListContext | undefined { + return this.tryGetRuleContext(0, IdentifierListContext); + } + public KW_BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BY, 0); } + public KW_NAME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAME, 0); } + public KW_IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IF, 0); } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXISTS, 0); } + public KW_INTO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTO, 0); } + public KW_REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPLACE, 0); } + public whereClause(): WhereClauseContext | undefined { + return this.tryGetRuleContext(0, WhereClauseContext); + } + public KW_DIRECTORY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIRECTORY, 0); } + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); + } + public KW_LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCAL, 0); } + public rowFormat(): RowFormatContext | undefined { + return this.tryGetRuleContext(0, RowFormatContext); + } + public createFileFormat(): CreateFileFormatContext | undefined { + return this.tryGetRuleContext(0, CreateFileFormatContext); } + public tableProvider(): TableProviderContext | undefined { + return this.tryGetRuleContext(0, TableProviderContext); + } + public KW_OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OPTIONS, 0); } + public propertyList(): PropertyListContext | undefined { + return this.tryGetRuleContext(0, PropertyListContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return SparkSqlParser.RULE_insertInto; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetConfiguration) { - listener.enterSetConfiguration(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterInsertInto) { + listener.enterInsertInto(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetConfiguration) { - listener.exitSetConfiguration(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitInsertInto) { + listener.exitInsertInto(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetConfiguration) { - return visitor.visitSetConfiguration(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitInsertInto) { + return visitor.visitInsertInto(this); } else { return visitor.visitChildren(this); } } } -export class ResetQuotedConfigurationContext extends StatementContext { - public RESET(): TerminalNode { return this.getToken(SparkSqlParser.RESET, 0); } - public configKey(): ConfigKeyContext { - return this.getRuleContext(0, ConfigKeyContext); + + +export class PartitionSpecLocationContext extends ParserRuleContext { + public partitionSpec(): PartitionSpecContext { + return this.getRuleContext(0, PartitionSpecContext); + } + public locationSpec(): LocationSpecContext | undefined { + return this.tryGetRuleContext(0, LocationSpecContext); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterResetQuotedConfiguration) { - listener.enterResetQuotedConfiguration(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_partitionSpecLocation; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPartitionSpecLocation) { + listener.enterPartitionSpecLocation(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitResetQuotedConfiguration) { - listener.exitResetQuotedConfiguration(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPartitionSpecLocation) { + listener.exitPartitionSpecLocation(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitResetQuotedConfiguration) { - return visitor.visitResetQuotedConfiguration(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPartitionSpecLocation) { + return visitor.visitPartitionSpecLocation(this); } else { return visitor.visitChildren(this); } } } -export class ResetConfigurationContext extends StatementContext { - public RESET(): TerminalNode { return this.getToken(SparkSqlParser.RESET, 0); } - constructor(ctx: StatementContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class PartitionSpecContext extends ParserRuleContext { + public KW_PARTITION(): TerminalNode { return this.getToken(SparkSqlParser.KW_PARTITION, 0); } + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public partitionVal(): PartitionValContext[]; + public partitionVal(i: number): PartitionValContext; + public partitionVal(i?: number): PartitionValContext | PartitionValContext[] { + if (i === undefined) { + return this.getRuleContexts(PartitionValContext); + } else { + return this.getRuleContext(i, PartitionValContext); + } + } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterResetConfiguration) { - listener.enterResetConfiguration(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_partitionSpec; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPartitionSpec) { + listener.enterPartitionSpec(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitResetConfiguration) { - listener.exitResetConfiguration(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPartitionSpec) { + listener.exitPartitionSpec(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitResetConfiguration) { - return visitor.visitResetConfiguration(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPartitionSpec) { + return visitor.visitPartitionSpec(this); } else { return visitor.visitChildren(this); } @@ -18209,31 +20473,36 @@ export class ResetConfigurationContext extends StatementContext { } -export class ConfigKeyContext extends ParserRuleContext { - public quotedIdentifier(): QuotedIdentifierContext { - return this.getRuleContext(0, QuotedIdentifierContext); +export class PartitionValContext extends ParserRuleContext { + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); + } + public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } + public constant(): ConstantContext | undefined { + return this.tryGetRuleContext(0, ConstantContext); } + public KW_DEFAULT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEFAULT, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_configKey; } + public get ruleIndex(): number { return SparkSqlParser.RULE_partitionVal; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterConfigKey) { - listener.enterConfigKey(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPartitionVal) { + listener.enterPartitionVal(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitConfigKey) { - listener.exitConfigKey(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPartitionVal) { + listener.exitPartitionVal(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitConfigKey) { - return visitor.visitConfigKey(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPartitionVal) { + return visitor.visitPartitionVal(this); } else { return visitor.visitChildren(this); } @@ -18241,88 +20510,31 @@ export class ConfigKeyContext extends ParserRuleContext { } -export class UnsupportedHiveNativeCommandsContext extends ParserRuleContext { - public _kw1!: Token; - public _kw2!: Token; - public _kw3!: Token; - public _kw4!: Token; - public _kw5!: Token; - public _kw6!: Token; - public CREATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CREATE, 0); } - public ROLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLE, 0); } - public DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DROP, 0); } - public GRANT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GRANT, 0); } - public REVOKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REVOKE, 0); } - public SHOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SHOW, 0); } - public PRINCIPALS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PRINCIPALS, 0); } - public ROLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLES, 0); } - public CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT, 0); } - public EXPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXPORT, 0); } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public IMPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IMPORT, 0); } - public COMPACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMPACTIONS, 0); } - public TRANSACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSACTIONS, 0); } - public INDEXES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INDEXES, 0); } - public LOCKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCKS, 0); } - public INDEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INDEX, 0); } - public ALTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ALTER, 0); } - public LOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCK, 0); } - public DATABASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATABASE, 0); } - public UNLOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNLOCK, 0); } - public TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TEMPORARY, 0); } - public MACRO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MACRO, 0); } - public tableIdentifier(): TableIdentifierContext | undefined { - return this.tryGetRuleContext(0, TableIdentifierContext); - } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public CLUSTERED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLUSTERED, 0); } - public BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BY, 0); } - public SORTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SORTED, 0); } - public SKEWED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SKEWED, 0); } - public STORED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STORED, 0); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public DIRECTORIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIRECTORIES, 0); } - public SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SET, 0); } - public LOCATION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCATION, 0); } - public EXCHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXCHANGE, 0); } - public PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PARTITION, 0); } - public ARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ARCHIVE, 0); } - public UNARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNARCHIVE, 0); } - public TOUCH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TOUCH, 0); } - public COMPACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMPACT, 0); } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); - } - public CONCATENATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CONCATENATE, 0); } - public FILEFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FILEFORMAT, 0); } - public REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REPLACE, 0); } - public COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMNS, 0); } - public START(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.START, 0); } - public TRANSACTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSACTION, 0); } - public COMMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMMIT, 0); } - public ROLLBACK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLLBACK, 0); } - public DFS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DFS, 0); } +export class NamespaceContext extends ParserRuleContext { + public KW_NAMESPACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAMESPACE, 0); } + public KW_DATABASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATABASE, 0); } + public KW_SCHEMA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SCHEMA, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_unsupportedHiveNativeCommands; } + public get ruleIndex(): number { return SparkSqlParser.RULE_namespace; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterUnsupportedHiveNativeCommands) { - listener.enterUnsupportedHiveNativeCommands(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNamespace) { + listener.enterNamespace(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitUnsupportedHiveNativeCommands) { - listener.exitUnsupportedHiveNativeCommands(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNamespace) { + listener.exitNamespace(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitUnsupportedHiveNativeCommands) { - return visitor.visitUnsupportedHiveNativeCommands(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNamespace) { + return visitor.visitNamespace(this); } else { return visitor.visitChildren(this); } @@ -18330,38 +20542,31 @@ export class UnsupportedHiveNativeCommandsContext extends ParserRuleContext { } -export class CreateTableHeaderContext extends ParserRuleContext { - public CREATE(): TerminalNode { return this.getToken(SparkSqlParser.CREATE, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TEMPORARY, 0); } - public EXTERNAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTERNAL, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } +export class NamespacesContext extends ParserRuleContext { + public KW_NAMESPACES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAMESPACES, 0); } + public KW_DATABASES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATABASES, 0); } + public KW_SCHEMAS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SCHEMAS, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_createTableHeader; } + public get ruleIndex(): number { return SparkSqlParser.RULE_namespaces; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateTableHeader) { - listener.enterCreateTableHeader(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNamespaces) { + listener.enterNamespaces(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateTableHeader) { - listener.exitCreateTableHeader(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNamespaces) { + listener.exitNamespaces(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateTableHeader) { - return visitor.visitCreateTableHeader(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNamespaces) { + return visitor.visitNamespaces(this); } else { return visitor.visitChildren(this); } @@ -18369,35 +20574,43 @@ export class CreateTableHeaderContext extends ParserRuleContext { } -export class ReplaceTableHeaderContext extends ParserRuleContext { - public REPLACE(): TerminalNode { return this.getToken(SparkSqlParser.REPLACE, 0); } - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); +export class DescribeFuncNameContext extends ParserRuleContext { + public identifierReference(): IdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, IdentifierReferenceContext); + } + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); + } + public comparisonOperator(): ComparisonOperatorContext | undefined { + return this.tryGetRuleContext(0, ComparisonOperatorContext); + } + public arithmeticOperator(): ArithmeticOperatorContext | undefined { + return this.tryGetRuleContext(0, ArithmeticOperatorContext); + } + public predicateOperator(): PredicateOperatorContext | undefined { + return this.tryGetRuleContext(0, PredicateOperatorContext); } - public CREATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CREATE, 0); } - public OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OR, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_replaceTableHeader; } + public get ruleIndex(): number { return SparkSqlParser.RULE_describeFuncName; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterReplaceTableHeader) { - listener.enterReplaceTableHeader(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterDescribeFuncName) { + listener.enterDescribeFuncName(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitReplaceTableHeader) { - listener.exitReplaceTableHeader(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitDescribeFuncName) { + listener.exitDescribeFuncName(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitReplaceTableHeader) { - return visitor.visitReplaceTableHeader(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitDescribeFuncName) { + return visitor.visitDescribeFuncName(this); } else { return visitor.visitChildren(this); } @@ -18405,48 +20618,48 @@ export class ReplaceTableHeaderContext extends ParserRuleContext { } -export class BucketSpecContext extends ParserRuleContext { - public CLUSTERED(): TerminalNode { return this.getToken(SparkSqlParser.CLUSTERED, 0); } - public BY(): TerminalNode[]; - public BY(i: number): TerminalNode; - public BY(i?: number): TerminalNode | TerminalNode[] { +export class DescribeColNameContext extends ParserRuleContext { + public _identifier!: IdentifierContext; + public _nameParts: IdentifierContext[] = []; + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext; + public identifier(i?: number): IdentifierContext | IdentifierContext[] { if (i === undefined) { - return this.getTokens(SparkSqlParser.BY); + return this.getRuleContexts(IdentifierContext); } else { - return this.getToken(SparkSqlParser.BY, i); + return this.getRuleContext(i, IdentifierContext); } } - public identifierList(): IdentifierListContext { - return this.getRuleContext(0, IdentifierListContext); - } - public INTO(): TerminalNode { return this.getToken(SparkSqlParser.INTO, 0); } - public INTEGER_VALUE(): TerminalNode { return this.getToken(SparkSqlParser.INTEGER_VALUE, 0); } - public BUCKETS(): TerminalNode { return this.getToken(SparkSqlParser.BUCKETS, 0); } - public SORTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SORTED, 0); } - public orderedIdentifierList(): OrderedIdentifierListContext | undefined { - return this.tryGetRuleContext(0, OrderedIdentifierListContext); + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.DOT); + } else { + return this.getToken(SparkSqlParser.DOT, i); + } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_bucketSpec; } + public get ruleIndex(): number { return SparkSqlParser.RULE_describeColName; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterBucketSpec) { - listener.enterBucketSpec(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterDescribeColName) { + listener.enterDescribeColName(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitBucketSpec) { - listener.exitBucketSpec(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitDescribeColName) { + listener.exitDescribeColName(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitBucketSpec) { - return visitor.visitBucketSpec(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitDescribeColName) { + return visitor.visitDescribeColName(this); } else { return visitor.visitChildren(this); } @@ -18454,43 +20667,47 @@ export class BucketSpecContext extends ParserRuleContext { } -export class SkewSpecContext extends ParserRuleContext { - public SKEWED(): TerminalNode { return this.getToken(SparkSqlParser.SKEWED, 0); } - public BY(): TerminalNode { return this.getToken(SparkSqlParser.BY, 0); } - public identifierList(): IdentifierListContext { - return this.getRuleContext(0, IdentifierListContext); - } - public ON(): TerminalNode { return this.getToken(SparkSqlParser.ON, 0); } - public constantList(): ConstantListContext | undefined { - return this.tryGetRuleContext(0, ConstantListContext); +export class CtesContext extends ParserRuleContext { + public KW_WITH(): TerminalNode { return this.getToken(SparkSqlParser.KW_WITH, 0); } + public namedQuery(): NamedQueryContext[]; + public namedQuery(i: number): NamedQueryContext; + public namedQuery(i?: number): NamedQueryContext | NamedQueryContext[] { + if (i === undefined) { + return this.getRuleContexts(NamedQueryContext); + } else { + return this.getRuleContext(i, NamedQueryContext); + } } - public nestedConstantList(): NestedConstantListContext | undefined { - return this.tryGetRuleContext(0, NestedConstantListContext); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } - public STORED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STORED, 0); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public DIRECTORIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIRECTORIES, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_skewSpec; } + public get ruleIndex(): number { return SparkSqlParser.RULE_ctes; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSkewSpec) { - listener.enterSkewSpec(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterCtes) { + listener.enterCtes(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSkewSpec) { - listener.exitSkewSpec(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitCtes) { + listener.exitCtes(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSkewSpec) { - return visitor.visitSkewSpec(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitCtes) { + return visitor.visitCtes(this); } else { return visitor.visitChildren(this); } @@ -18498,30 +20715,42 @@ export class SkewSpecContext extends ParserRuleContext { } -export class LocationSpecContext extends ParserRuleContext { - public LOCATION(): TerminalNode { return this.getToken(SparkSqlParser.LOCATION, 0); } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } +export class NamedQueryContext extends ParserRuleContext { + public _name!: ErrorCapturingIdentifierContext; + public _columnAliases!: IdentifierListContext; + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public query(): QueryContext { + return this.getRuleContext(0, QueryContext); + } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { + return this.getRuleContext(0, ErrorCapturingIdentifierContext); + } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public identifierList(): IdentifierListContext | undefined { + return this.tryGetRuleContext(0, IdentifierListContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_locationSpec; } + public get ruleIndex(): number { return SparkSqlParser.RULE_namedQuery; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterLocationSpec) { - listener.enterLocationSpec(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNamedQuery) { + listener.enterNamedQuery(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitLocationSpec) { - listener.exitLocationSpec(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNamedQuery) { + listener.exitNamedQuery(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitLocationSpec) { - return visitor.visitLocationSpec(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNamedQuery) { + return visitor.visitNamedQuery(this); } else { return visitor.visitChildren(this); } @@ -18529,30 +20758,32 @@ export class LocationSpecContext extends ParserRuleContext { } -export class CommentSpecContext extends ParserRuleContext { - public COMMENT(): TerminalNode { return this.getToken(SparkSqlParser.COMMENT, 0); } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } +export class TableProviderContext extends ParserRuleContext { + public KW_USING(): TerminalNode { return this.getToken(SparkSqlParser.KW_USING, 0); } + public multipartIdentifier(): MultipartIdentifierContext { + return this.getRuleContext(0, MultipartIdentifierContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_commentSpec; } + public get ruleIndex(): number { return SparkSqlParser.RULE_tableProvider; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCommentSpec) { - listener.enterCommentSpec(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTableProvider) { + listener.enterTableProvider(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCommentSpec) { - listener.exitCommentSpec(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTableProvider) { + listener.exitTableProvider(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCommentSpec) { - return visitor.visitCommentSpec(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTableProvider) { + return visitor.visitTableProvider(this); } else { return visitor.visitChildren(this); } @@ -18560,202 +20791,285 @@ export class CommentSpecContext extends ParserRuleContext { } -export class QueryContext extends ParserRuleContext { - public queryTerm(): QueryTermContext { - return this.getRuleContext(0, QueryTermContext); +export class CreateTableClausesContext extends ParserRuleContext { + public _options!: ExpressionPropertyListContext; + public _partitioning!: PartitionFieldListContext; + public _tableProps!: PropertyListContext; + public skewSpec(): SkewSpecContext[]; + public skewSpec(i: number): SkewSpecContext; + public skewSpec(i?: number): SkewSpecContext | SkewSpecContext[] { + if (i === undefined) { + return this.getRuleContexts(SkewSpecContext); + } else { + return this.getRuleContext(i, SkewSpecContext); + } } - public queryOrganization(): QueryOrganizationContext { - return this.getRuleContext(0, QueryOrganizationContext); + public bucketSpec(): BucketSpecContext[]; + public bucketSpec(i: number): BucketSpecContext; + public bucketSpec(i?: number): BucketSpecContext | BucketSpecContext[] { + if (i === undefined) { + return this.getRuleContexts(BucketSpecContext); + } else { + return this.getRuleContext(i, BucketSpecContext); + } } - public ctes(): CtesContext | undefined { - return this.tryGetRuleContext(0, CtesContext); + public rowFormat(): RowFormatContext[]; + public rowFormat(i: number): RowFormatContext; + public rowFormat(i?: number): RowFormatContext | RowFormatContext[] { + if (i === undefined) { + return this.getRuleContexts(RowFormatContext); + } else { + return this.getRuleContext(i, RowFormatContext); + } } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public createFileFormat(): CreateFileFormatContext[]; + public createFileFormat(i: number): CreateFileFormatContext; + public createFileFormat(i?: number): CreateFileFormatContext | CreateFileFormatContext[] { + if (i === undefined) { + return this.getRuleContexts(CreateFileFormatContext); + } else { + return this.getRuleContext(i, CreateFileFormatContext); + } } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_query; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterQuery) { - listener.enterQuery(this); + public locationSpec(): LocationSpecContext[]; + public locationSpec(i: number): LocationSpecContext; + public locationSpec(i?: number): LocationSpecContext | LocationSpecContext[] { + if (i === undefined) { + return this.getRuleContexts(LocationSpecContext); + } else { + return this.getRuleContext(i, LocationSpecContext); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitQuery) { - listener.exitQuery(this); + public commentSpec(): CommentSpecContext[]; + public commentSpec(i: number): CommentSpecContext; + public commentSpec(i?: number): CommentSpecContext | CommentSpecContext[] { + if (i === undefined) { + return this.getRuleContexts(CommentSpecContext); + } else { + return this.getRuleContext(i, CommentSpecContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitQuery) { - return visitor.visitQuery(this); + public KW_OPTIONS(): TerminalNode[]; + public KW_OPTIONS(i: number): TerminalNode; + public KW_OPTIONS(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_OPTIONS); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.KW_OPTIONS, i); } } -} - - -export class InsertIntoContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public KW_PARTITIONED(): TerminalNode[]; + public KW_PARTITIONED(i: number): TerminalNode; + public KW_PARTITIONED(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_PARTITIONED); + } else { + return this.getToken(SparkSqlParser.KW_PARTITIONED, i); + } } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_insertInto; } - public copyFrom(ctx: InsertIntoContext): void { - super.copyFrom(ctx); + public KW_BY(): TerminalNode[]; + public KW_BY(i: number): TerminalNode; + public KW_BY(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_BY); + } else { + return this.getToken(SparkSqlParser.KW_BY, i); + } } -} -export class InsertOverwriteTableContext extends InsertIntoContext { - public INSERT(): TerminalNode { return this.getToken(SparkSqlParser.INSERT, 0); } - public OVERWRITE(): TerminalNode { return this.getToken(SparkSqlParser.OVERWRITE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + public KW_TBLPROPERTIES(): TerminalNode[]; + public KW_TBLPROPERTIES(i: number): TerminalNode; + public KW_TBLPROPERTIES(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_TBLPROPERTIES); + } else { + return this.getToken(SparkSqlParser.KW_TBLPROPERTIES, i); + } } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); + public expressionPropertyList(): ExpressionPropertyListContext[]; + public expressionPropertyList(i: number): ExpressionPropertyListContext; + public expressionPropertyList(i?: number): ExpressionPropertyListContext | ExpressionPropertyListContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionPropertyListContext); + } else { + return this.getRuleContext(i, ExpressionPropertyListContext); + } + } + public partitionFieldList(): PartitionFieldListContext[]; + public partitionFieldList(i: number): PartitionFieldListContext; + public partitionFieldList(i?: number): PartitionFieldListContext | PartitionFieldListContext[] { + if (i === undefined) { + return this.getRuleContexts(PartitionFieldListContext); + } else { + return this.getRuleContext(i, PartitionFieldListContext); + } + } + public propertyList(): PropertyListContext[]; + public propertyList(i: number): PropertyListContext; + public propertyList(i?: number): PropertyListContext | PropertyListContext[] { + if (i === undefined) { + return this.getRuleContexts(PropertyListContext); + } else { + return this.getRuleContext(i, PropertyListContext); + } } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - constructor(ctx: InsertIntoContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterInsertOverwriteTable) { - listener.enterInsertOverwriteTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_createTableClauses; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterCreateTableClauses) { + listener.enterCreateTableClauses(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitInsertOverwriteTable) { - listener.exitInsertOverwriteTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitCreateTableClauses) { + listener.exitCreateTableClauses(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitInsertOverwriteTable) { - return visitor.visitInsertOverwriteTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitCreateTableClauses) { + return visitor.visitCreateTableClauses(this); } else { return visitor.visitChildren(this); } } } -export class InsertIntoTableContext extends InsertIntoContext { - public INSERT(): TerminalNode { return this.getToken(SparkSqlParser.INSERT, 0); } - public INTO(): TerminalNode { return this.getToken(SparkSqlParser.INTO, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class PropertyListContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public property(): PropertyContext[]; + public property(i: number): PropertyContext; + public property(i?: number): PropertyContext | PropertyContext[] { + if (i === undefined) { + return this.getRuleContexts(PropertyContext); + } else { + return this.getRuleContext(i, PropertyContext); + } } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public partitionSpec(): PartitionSpecContext | undefined { - return this.tryGetRuleContext(0, PartitionSpecContext); + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - constructor(ctx: InsertIntoContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterInsertIntoTable) { - listener.enterInsertIntoTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_propertyList; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPropertyList) { + listener.enterPropertyList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitInsertIntoTable) { - listener.exitInsertIntoTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPropertyList) { + listener.exitPropertyList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitInsertIntoTable) { - return visitor.visitInsertIntoTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPropertyList) { + return visitor.visitPropertyList(this); } else { return visitor.visitChildren(this); } } } -export class InsertOverwriteHiveDirContext extends InsertIntoContext { - public _path!: Token; - public INSERT(): TerminalNode { return this.getToken(SparkSqlParser.INSERT, 0); } - public OVERWRITE(): TerminalNode { return this.getToken(SparkSqlParser.OVERWRITE, 0); } - public DIRECTORY(): TerminalNode { return this.getToken(SparkSqlParser.DIRECTORY, 0); } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } - public LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCAL, 0); } - public rowFormat(): RowFormatContext | undefined { - return this.tryGetRuleContext(0, RowFormatContext); + + +export class PropertyContext extends ParserRuleContext { + public _key!: PropertyKeyContext; + public _value!: PropertyValueContext; + public propertyKey(): PropertyKeyContext { + return this.getRuleContext(0, PropertyKeyContext); } - public createFileFormat(): CreateFileFormatContext | undefined { - return this.tryGetRuleContext(0, CreateFileFormatContext); + public propertyValue(): PropertyValueContext | undefined { + return this.tryGetRuleContext(0, PropertyValueContext); } - constructor(ctx: InsertIntoContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterInsertOverwriteHiveDir) { - listener.enterInsertOverwriteHiveDir(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_property; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterProperty) { + listener.enterProperty(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitInsertOverwriteHiveDir) { - listener.exitInsertOverwriteHiveDir(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitProperty) { + listener.exitProperty(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitInsertOverwriteHiveDir) { - return visitor.visitInsertOverwriteHiveDir(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitProperty) { + return visitor.visitProperty(this); } else { return visitor.visitChildren(this); } } } -export class InsertOverwriteDirContext extends InsertIntoContext { - public _path!: Token; - public INSERT(): TerminalNode { return this.getToken(SparkSqlParser.INSERT, 0); } - public OVERWRITE(): TerminalNode { return this.getToken(SparkSqlParser.OVERWRITE, 0); } - public DIRECTORY(): TerminalNode { return this.getToken(SparkSqlParser.DIRECTORY, 0); } - public tableProvider(): TableProviderContext { - return this.getRuleContext(0, TableProviderContext); + + +export class PropertyKeyContext extends ParserRuleContext { + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext; + public identifier(i?: number): IdentifierContext | IdentifierContext[] { + if (i === undefined) { + return this.getRuleContexts(IdentifierContext); + } else { + return this.getRuleContext(i, IdentifierContext); + } + } + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.DOT); + } else { + return this.getToken(SparkSqlParser.DOT, i); + } } - public LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCAL, 0); } - public OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OPTIONS, 0); } - public tablePropertyList(): TablePropertyListContext | undefined { - return this.tryGetRuleContext(0, TablePropertyListContext); + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - constructor(ctx: InsertIntoContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterInsertOverwriteDir) { - listener.enterInsertOverwriteDir(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_propertyKey; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPropertyKey) { + listener.enterPropertyKey(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitInsertOverwriteDir) { - listener.exitInsertOverwriteDir(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPropertyKey) { + listener.exitPropertyKey(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitInsertOverwriteDir) { - return visitor.visitInsertOverwriteDir(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPropertyKey) { + return visitor.visitPropertyKey(this); } else { return visitor.visitChildren(this); } @@ -18763,34 +21077,36 @@ export class InsertOverwriteDirContext extends InsertIntoContext { } -export class PartitionSpecLocationContext extends ParserRuleContext { - public partitionSpec(): PartitionSpecContext { - return this.getRuleContext(0, PartitionSpecContext); +export class PropertyValueContext extends ParserRuleContext { + public INTEGER_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTEGER_VALUE, 0); } + public DECIMAL_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DECIMAL_VALUE, 0); } + public booleanValue(): BooleanValueContext | undefined { + return this.tryGetRuleContext(0, BooleanValueContext); } - public locationSpec(): LocationSpecContext | undefined { - return this.tryGetRuleContext(0, LocationSpecContext); + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_partitionSpecLocation; } + public get ruleIndex(): number { return SparkSqlParser.RULE_propertyValue; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPartitionSpecLocation) { - listener.enterPartitionSpecLocation(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPropertyValue) { + listener.enterPropertyValue(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPartitionSpecLocation) { - listener.exitPartitionSpecLocation(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPropertyValue) { + listener.exitPropertyValue(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPartitionSpecLocation) { - return visitor.visitPartitionSpecLocation(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPropertyValue) { + return visitor.visitPropertyValue(this); } else { return visitor.visitChildren(this); } @@ -18798,74 +21114,86 @@ export class PartitionSpecLocationContext extends ParserRuleContext { } -export class PartitionSpecContext extends ParserRuleContext { - public PARTITION(): TerminalNode { return this.getToken(SparkSqlParser.PARTITION, 0); } - public partitionVal(): PartitionValContext[]; - public partitionVal(i: number): PartitionValContext; - public partitionVal(i?: number): PartitionValContext | PartitionValContext[] { +export class ExpressionPropertyListContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public expressionProperty(): ExpressionPropertyContext[]; + public expressionProperty(i: number): ExpressionPropertyContext; + public expressionProperty(i?: number): ExpressionPropertyContext | ExpressionPropertyContext[] { if (i === undefined) { - return this.getRuleContexts(PartitionValContext); + return this.getRuleContexts(ExpressionPropertyContext); } else { - return this.getRuleContext(i, PartitionValContext); + return this.getRuleContext(i, ExpressionPropertyContext); + } + } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_partitionSpec; } + public get ruleIndex(): number { return SparkSqlParser.RULE_expressionPropertyList; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPartitionSpec) { - listener.enterPartitionSpec(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterExpressionPropertyList) { + listener.enterExpressionPropertyList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPartitionSpec) { - listener.exitPartitionSpec(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitExpressionPropertyList) { + listener.exitExpressionPropertyList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPartitionSpec) { - return visitor.visitPartitionSpec(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitExpressionPropertyList) { + return visitor.visitExpressionPropertyList(this); } else { return visitor.visitChildren(this); } } } - - -export class PartitionValContext extends ParserRuleContext { - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); + + +export class ExpressionPropertyContext extends ParserRuleContext { + public _key!: PropertyKeyContext; + public _value!: ExpressionContext; + public propertyKey(): PropertyKeyContext { + return this.getRuleContext(0, PropertyKeyContext); } - public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } - public constant(): ConstantContext | undefined { - return this.tryGetRuleContext(0, ConstantContext); + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); } + public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_partitionVal; } + public get ruleIndex(): number { return SparkSqlParser.RULE_expressionProperty; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPartitionVal) { - listener.enterPartitionVal(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterExpressionProperty) { + listener.enterExpressionProperty(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPartitionVal) { - listener.exitPartitionVal(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitExpressionProperty) { + listener.exitExpressionProperty(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPartitionVal) { - return visitor.visitPartitionVal(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitExpressionProperty) { + return visitor.visitExpressionProperty(this); } else { return visitor.visitChildren(this); } @@ -18873,31 +21201,48 @@ export class PartitionValContext extends ParserRuleContext { } -export class NamespaceContext extends ParserRuleContext { - public NAMESPACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NAMESPACE, 0); } - public DATABASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATABASE, 0); } - public SCHEMA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SCHEMA, 0); } +export class ConstantListContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public constant(): ConstantContext[]; + public constant(i: number): ConstantContext; + public constant(i?: number): ConstantContext | ConstantContext[] { + if (i === undefined) { + return this.getRuleContexts(ConstantContext); + } else { + return this.getRuleContext(i, ConstantContext); + } + } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_namespace; } + public get ruleIndex(): number { return SparkSqlParser.RULE_constantList; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNamespace) { - listener.enterNamespace(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterConstantList) { + listener.enterConstantList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNamespace) { - listener.exitNamespace(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitConstantList) { + listener.exitConstantList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNamespace) { - return visitor.visitNamespace(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitConstantList) { + return visitor.visitConstantList(this); } else { return visitor.visitChildren(this); } @@ -18905,41 +21250,48 @@ export class NamespaceContext extends ParserRuleContext { } -export class DescribeFuncNameContext extends ParserRuleContext { - public qualifiedName(): QualifiedNameContext | undefined { - return this.tryGetRuleContext(0, QualifiedNameContext); - } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public comparisonOperator(): ComparisonOperatorContext | undefined { - return this.tryGetRuleContext(0, ComparisonOperatorContext); - } - public arithmeticOperator(): ArithmeticOperatorContext | undefined { - return this.tryGetRuleContext(0, ArithmeticOperatorContext); +export class NestedConstantListContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public constantList(): ConstantListContext[]; + public constantList(i: number): ConstantListContext; + public constantList(i?: number): ConstantListContext | ConstantListContext[] { + if (i === undefined) { + return this.getRuleContexts(ConstantListContext); + } else { + return this.getRuleContext(i, ConstantListContext); + } } - public predicateOperator(): PredicateOperatorContext | undefined { - return this.tryGetRuleContext(0, PredicateOperatorContext); + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_describeFuncName; } + public get ruleIndex(): number { return SparkSqlParser.RULE_nestedConstantList; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDescribeFuncName) { - listener.enterDescribeFuncName(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNestedConstantList) { + listener.enterNestedConstantList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDescribeFuncName) { - listener.exitDescribeFuncName(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNestedConstantList) { + listener.exitNestedConstantList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDescribeFuncName) { - return visitor.visitDescribeFuncName(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNestedConstantList) { + return visitor.visitNestedConstantList(this); } else { return visitor.visitChildren(this); } @@ -18947,39 +21299,37 @@ export class DescribeFuncNameContext extends ParserRuleContext { } -export class DescribeColNameContext extends ParserRuleContext { - public _identifier!: IdentifierContext; - public _nameParts: IdentifierContext[] = []; - public identifier(): IdentifierContext[]; - public identifier(i: number): IdentifierContext; - public identifier(i?: number): IdentifierContext | IdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(IdentifierContext); - } else { - return this.getRuleContext(i, IdentifierContext); - } +export class CreateFileFormatContext extends ParserRuleContext { + public KW_STORED(): TerminalNode { return this.getToken(SparkSqlParser.KW_STORED, 0); } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public fileFormat(): FileFormatContext | undefined { + return this.tryGetRuleContext(0, FileFormatContext); + } + public KW_BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BY, 0); } + public storageHandler(): StorageHandlerContext | undefined { + return this.tryGetRuleContext(0, StorageHandlerContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_describeColName; } + public get ruleIndex(): number { return SparkSqlParser.RULE_createFileFormat; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDescribeColName) { - listener.enterDescribeColName(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterCreateFileFormat) { + listener.enterCreateFileFormat(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDescribeColName) { - listener.exitDescribeColName(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitCreateFileFormat) { + listener.exitCreateFileFormat(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDescribeColName) { - return visitor.visitDescribeColName(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitCreateFileFormat) { + return visitor.visitCreateFileFormat(this); } else { return visitor.visitChildren(this); } @@ -18987,38 +21337,44 @@ export class DescribeColNameContext extends ParserRuleContext { } -export class CtesContext extends ParserRuleContext { - public WITH(): TerminalNode { return this.getToken(SparkSqlParser.WITH, 0); } - public namedQuery(): NamedQueryContext[]; - public namedQuery(i: number): NamedQueryContext; - public namedQuery(i?: number): NamedQueryContext | NamedQueryContext[] { +export class FileFormatContext extends ParserRuleContext { + public _inFmt!: StringLitContext; + public _outFmt!: StringLitContext; + public KW_INPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INPUTFORMAT, 0); } + public KW_OUTPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUTPUTFORMAT, 0); } + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext; + public stringLit(i?: number): StringLitContext | StringLitContext[] { if (i === undefined) { - return this.getRuleContexts(NamedQueryContext); + return this.getRuleContexts(StringLitContext); } else { - return this.getRuleContext(i, NamedQueryContext); + return this.getRuleContext(i, StringLitContext); } } + public identifier(): IdentifierContext | undefined { + return this.tryGetRuleContext(0, IdentifierContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_ctes; } + public get ruleIndex(): number { return SparkSqlParser.RULE_fileFormat; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCtes) { - listener.enterCtes(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFileFormat) { + listener.enterFileFormat(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCtes) { - listener.exitCtes(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFileFormat) { + listener.exitFileFormat(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCtes) { - return visitor.visitCtes(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFileFormat) { + return visitor.visitFileFormat(this); } else { return visitor.visitChildren(this); } @@ -19026,40 +21382,36 @@ export class CtesContext extends ParserRuleContext { } -export class NamedQueryContext extends ParserRuleContext { - public _name!: ErrorCapturingIdentifierContext; - public _columnAliases!: IdentifierListContext; - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); - } - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { - return this.getRuleContext(0, ErrorCapturingIdentifierContext); +export class StorageHandlerContext extends ParserRuleContext { + public stringLit(): StringLitContext { + return this.getRuleContext(0, StringLitContext); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public identifierList(): IdentifierListContext | undefined { - return this.tryGetRuleContext(0, IdentifierListContext); + public KW_WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WITH, 0); } + public KW_SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDEPROPERTIES, 0); } + public propertyList(): PropertyListContext | undefined { + return this.tryGetRuleContext(0, PropertyListContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_namedQuery; } + public get ruleIndex(): number { return SparkSqlParser.RULE_storageHandler; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNamedQuery) { - listener.enterNamedQuery(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterStorageHandler) { + listener.enterStorageHandler(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNamedQuery) { - listener.exitNamedQuery(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitStorageHandler) { + listener.exitStorageHandler(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNamedQuery) { - return visitor.visitNamedQuery(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitStorageHandler) { + return visitor.visitStorageHandler(this); } else { return visitor.visitChildren(this); } @@ -19067,32 +21419,34 @@ export class NamedQueryContext extends ParserRuleContext { } -export class TableProviderContext extends ParserRuleContext { - public USING(): TerminalNode { return this.getToken(SparkSqlParser.USING, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); +export class ResourceContext extends ParserRuleContext { + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); + } + public stringLit(): StringLitContext { + return this.getRuleContext(0, StringLitContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_tableProvider; } + public get ruleIndex(): number { return SparkSqlParser.RULE_resource; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTableProvider) { - listener.enterTableProvider(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterResource) { + listener.enterResource(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTableProvider) { - listener.exitTableProvider(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitResource) { + listener.exitResource(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTableProvider) { - return visitor.visitTableProvider(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitResource) { + return visitor.visitResource(this); } else { return visitor.visitChildren(this); } @@ -19100,149 +21454,115 @@ export class TableProviderContext extends ParserRuleContext { } -export class CreateTableClausesContext extends ParserRuleContext { - public _partitioning!: TransformListContext; - public _tableProps!: TablePropertyListContext; - public bucketSpec(): BucketSpecContext[]; - public bucketSpec(i: number): BucketSpecContext; - public bucketSpec(i?: number): BucketSpecContext | BucketSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(BucketSpecContext); - } else { - return this.getRuleContext(i, BucketSpecContext); - } +export class DmlStatementNoWithContext extends ParserRuleContext { + public _target!: IdentifierReferenceContext; + public _targetAlias!: TableAliasContext; + public _source!: IdentifierReferenceContext; + public _sourceQuery!: QueryContext; + public _sourceAlias!: TableAliasContext; + public _mergeCondition!: BooleanExpressionContext; + public insertInto(): InsertIntoContext | undefined { + return this.tryGetRuleContext(0, InsertIntoContext); } - public locationSpec(): LocationSpecContext[]; - public locationSpec(i: number): LocationSpecContext; - public locationSpec(i?: number): LocationSpecContext | LocationSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(LocationSpecContext); - } else { - return this.getRuleContext(i, LocationSpecContext); - } + public query(): QueryContext | undefined { + return this.tryGetRuleContext(0, QueryContext); } - public commentSpec(): CommentSpecContext[]; - public commentSpec(i: number): CommentSpecContext; - public commentSpec(i?: number): CommentSpecContext | CommentSpecContext[] { - if (i === undefined) { - return this.getRuleContexts(CommentSpecContext); - } else { - return this.getRuleContext(i, CommentSpecContext); - } + public fromClause(): FromClauseContext | undefined { + return this.tryGetRuleContext(0, FromClauseContext); } - public OPTIONS(): TerminalNode[]; - public OPTIONS(i: number): TerminalNode; - public OPTIONS(i?: number): TerminalNode | TerminalNode[] { + public multiInsertQueryBody(): MultiInsertQueryBodyContext[]; + public multiInsertQueryBody(i: number): MultiInsertQueryBodyContext; + public multiInsertQueryBody(i?: number): MultiInsertQueryBodyContext | MultiInsertQueryBodyContext[] { if (i === undefined) { - return this.getTokens(SparkSqlParser.OPTIONS); + return this.getRuleContexts(MultiInsertQueryBodyContext); } else { - return this.getToken(SparkSqlParser.OPTIONS, i); + return this.getRuleContext(i, MultiInsertQueryBodyContext); } } - public tablePropertyList(): TablePropertyListContext[]; - public tablePropertyList(i: number): TablePropertyListContext; - public tablePropertyList(i?: number): TablePropertyListContext | TablePropertyListContext[] { + public KW_DELETE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DELETE, 0); } + public KW_FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FROM, 0); } + public identifierReference(): IdentifierReferenceContext[]; + public identifierReference(i: number): IdentifierReferenceContext; + public identifierReference(i?: number): IdentifierReferenceContext | IdentifierReferenceContext[] { if (i === undefined) { - return this.getRuleContexts(TablePropertyListContext); + return this.getRuleContexts(IdentifierReferenceContext); } else { - return this.getRuleContext(i, TablePropertyListContext); + return this.getRuleContext(i, IdentifierReferenceContext); } } - public PARTITIONED(): TerminalNode[]; - public PARTITIONED(i: number): TerminalNode; - public PARTITIONED(i?: number): TerminalNode | TerminalNode[] { + public tableAlias(): TableAliasContext[]; + public tableAlias(i: number): TableAliasContext; + public tableAlias(i?: number): TableAliasContext | TableAliasContext[] { if (i === undefined) { - return this.getTokens(SparkSqlParser.PARTITIONED); + return this.getRuleContexts(TableAliasContext); } else { - return this.getToken(SparkSqlParser.PARTITIONED, i); + return this.getRuleContext(i, TableAliasContext); } } - public BY(): TerminalNode[]; - public BY(i: number): TerminalNode; - public BY(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.BY); - } else { - return this.getToken(SparkSqlParser.BY, i); - } + public whereClause(): WhereClauseContext | undefined { + return this.tryGetRuleContext(0, WhereClauseContext); } - public TBLPROPERTIES(): TerminalNode[]; - public TBLPROPERTIES(i: number): TerminalNode; - public TBLPROPERTIES(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.TBLPROPERTIES); - } else { - return this.getToken(SparkSqlParser.TBLPROPERTIES, i); - } + public KW_UPDATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UPDATE, 0); } + public setClause(): SetClauseContext | undefined { + return this.tryGetRuleContext(0, SetClauseContext); + } + public KW_MERGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MERGE, 0); } + public KW_INTO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTO, 0); } + public KW_USING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USING, 0); } + public KW_ON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ON, 0); } + public booleanExpression(): BooleanExpressionContext | undefined { + return this.tryGetRuleContext(0, BooleanExpressionContext); } - public transformList(): TransformListContext[]; - public transformList(i: number): TransformListContext; - public transformList(i?: number): TransformListContext | TransformListContext[] { + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public matchedClause(): MatchedClauseContext[]; + public matchedClause(i: number): MatchedClauseContext; + public matchedClause(i?: number): MatchedClauseContext | MatchedClauseContext[] { if (i === undefined) { - return this.getRuleContexts(TransformListContext); + return this.getRuleContexts(MatchedClauseContext); } else { - return this.getRuleContext(i, TransformListContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_createTableClauses; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateTableClauses) { - listener.enterCreateTableClauses(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateTableClauses) { - listener.exitCreateTableClauses(this); + return this.getRuleContext(i, MatchedClauseContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateTableClauses) { - return visitor.visitCreateTableClauses(this); + public notMatchedClause(): NotMatchedClauseContext[]; + public notMatchedClause(i: number): NotMatchedClauseContext; + public notMatchedClause(i?: number): NotMatchedClauseContext | NotMatchedClauseContext[] { + if (i === undefined) { + return this.getRuleContexts(NotMatchedClauseContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, NotMatchedClauseContext); } } -} - - -export class TablePropertyListContext extends ParserRuleContext { - public tableProperty(): TablePropertyContext[]; - public tableProperty(i: number): TablePropertyContext; - public tableProperty(i?: number): TablePropertyContext | TablePropertyContext[] { + public notMatchedBySourceClause(): NotMatchedBySourceClauseContext[]; + public notMatchedBySourceClause(i: number): NotMatchedBySourceClauseContext; + public notMatchedBySourceClause(i?: number): NotMatchedBySourceClauseContext | NotMatchedBySourceClauseContext[] { if (i === undefined) { - return this.getRuleContexts(TablePropertyContext); + return this.getRuleContexts(NotMatchedBySourceClauseContext); } else { - return this.getRuleContext(i, TablePropertyContext); + return this.getRuleContext(i, NotMatchedBySourceClauseContext); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_tablePropertyList; } + public get ruleIndex(): number { return SparkSqlParser.RULE_dmlStatementNoWith; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTablePropertyList) { - listener.enterTablePropertyList(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterDmlStatementNoWith) { + listener.enterDmlStatementNoWith(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTablePropertyList) { - listener.exitTablePropertyList(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitDmlStatementNoWith) { + listener.exitDmlStatementNoWith(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTablePropertyList) { - return visitor.visitTablePropertyList(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitDmlStatementNoWith) { + return visitor.visitDmlStatementNoWith(this); } else { return visitor.visitChildren(this); } @@ -19250,37 +21570,37 @@ export class TablePropertyListContext extends ParserRuleContext { } -export class TablePropertyContext extends ParserRuleContext { - public _key!: TablePropertyKeyContext; - public _value!: TablePropertyValueContext; - public tablePropertyKey(): TablePropertyKeyContext { - return this.getRuleContext(0, TablePropertyKeyContext); +export class IdentifierReferenceContext extends ParserRuleContext { + public KW_IDENTIFIER_KW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IDENTIFIER_KW, 0); } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); } - public tablePropertyValue(): TablePropertyValueContext | undefined { - return this.tryGetRuleContext(0, TablePropertyValueContext); + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public multipartIdentifier(): MultipartIdentifierContext | undefined { + return this.tryGetRuleContext(0, MultipartIdentifierContext); } - public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_tableProperty; } + public get ruleIndex(): number { return SparkSqlParser.RULE_identifierReference; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTableProperty) { - listener.enterTableProperty(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterIdentifierReference) { + listener.enterIdentifierReference(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTableProperty) { - listener.exitTableProperty(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitIdentifierReference) { + listener.exitIdentifierReference(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTableProperty) { - return visitor.visitTableProperty(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitIdentifierReference) { + return visitor.visitIdentifierReference(this); } else { return visitor.visitChildren(this); } @@ -19288,38 +21608,82 @@ export class TablePropertyContext extends ParserRuleContext { } -export class TablePropertyKeyContext extends ParserRuleContext { - public identifier(): IdentifierContext[]; - public identifier(i: number): IdentifierContext; - public identifier(i?: number): IdentifierContext | IdentifierContext[] { +export class QueryOrganizationContext extends ParserRuleContext { + public _sortItem!: SortItemContext; + public _order: SortItemContext[] = []; + public _expression!: ExpressionContext; + public _clusterBy: ExpressionContext[] = []; + public _distributeBy: ExpressionContext[] = []; + public _sort: SortItemContext[] = []; + public _limit!: ExpressionContext; + public _offset!: ExpressionContext; + public KW_ORDER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ORDER, 0); } + public KW_BY(): TerminalNode[]; + public KW_BY(i: number): TerminalNode; + public KW_BY(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(IdentifierContext); + return this.getTokens(SparkSqlParser.KW_BY); } else { - return this.getRuleContext(i, IdentifierContext); + return this.getToken(SparkSqlParser.KW_BY, i); + } + } + public KW_CLUSTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLUSTER, 0); } + public KW_DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DISTRIBUTE, 0); } + public KW_SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORT, 0); } + public windowClause(): WindowClauseContext | undefined { + return this.tryGetRuleContext(0, WindowClauseContext); + } + public KW_LIMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIMIT, 0); } + public KW_OFFSET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OFFSET, 0); } + public sortItem(): SortItemContext[]; + public sortItem(i: number): SortItemContext; + public sortItem(i?: number): SortItemContext | SortItemContext[] { + if (i === undefined) { + return this.getRuleContexts(SortItemContext); + } else { + return this.getRuleContext(i, SortItemContext); + } + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } + } + public KW_ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALL, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); } } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_tablePropertyKey; } + public get ruleIndex(): number { return SparkSqlParser.RULE_queryOrganization; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTablePropertyKey) { - listener.enterTablePropertyKey(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterQueryOrganization) { + listener.enterQueryOrganization(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTablePropertyKey) { - listener.exitTablePropertyKey(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitQueryOrganization) { + listener.exitQueryOrganization(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTablePropertyKey) { - return visitor.visitTablePropertyKey(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitQueryOrganization) { + return visitor.visitQueryOrganization(this); } else { return visitor.visitChildren(this); } @@ -19327,34 +21691,34 @@ export class TablePropertyKeyContext extends ParserRuleContext { } -export class TablePropertyValueContext extends ParserRuleContext { - public INTEGER_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTEGER_VALUE, 0); } - public DECIMAL_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DECIMAL_VALUE, 0); } - public booleanValue(): BooleanValueContext | undefined { - return this.tryGetRuleContext(0, BooleanValueContext); +export class MultiInsertQueryBodyContext extends ParserRuleContext { + public insertInto(): InsertIntoContext { + return this.getRuleContext(0, InsertIntoContext); + } + public fromStatementBody(): FromStatementBodyContext { + return this.getRuleContext(0, FromStatementBodyContext); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_tablePropertyValue; } + public get ruleIndex(): number { return SparkSqlParser.RULE_multiInsertQueryBody; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTablePropertyValue) { - listener.enterTablePropertyValue(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterMultiInsertQueryBody) { + listener.enterMultiInsertQueryBody(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTablePropertyValue) { - listener.exitTablePropertyValue(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitMultiInsertQueryBody) { + listener.exitMultiInsertQueryBody(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTablePropertyValue) { - return visitor.visitTablePropertyValue(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitMultiInsertQueryBody) { + return visitor.visitMultiInsertQueryBody(this); } else { return visitor.visitChildren(this); } @@ -19362,37 +21726,50 @@ export class TablePropertyValueContext extends ParserRuleContext { } -export class ConstantListContext extends ParserRuleContext { - public constant(): ConstantContext[]; - public constant(i: number): ConstantContext; - public constant(i?: number): ConstantContext | ConstantContext[] { +export class QueryTermContext extends ParserRuleContext { + public _left!: QueryTermContext; + public _operator!: Token; + public _right!: QueryTermContext; + public queryPrimary(): QueryPrimaryContext | undefined { + return this.tryGetRuleContext(0, QueryPrimaryContext); + } + public queryTerm(): QueryTermContext[]; + public queryTerm(i: number): QueryTermContext; + public queryTerm(i?: number): QueryTermContext | QueryTermContext[] { if (i === undefined) { - return this.getRuleContexts(ConstantContext); + return this.getRuleContexts(QueryTermContext); } else { - return this.getRuleContext(i, ConstantContext); + return this.getRuleContext(i, QueryTermContext); } } + public KW_INTERSECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTERSECT, 0); } + public KW_UNION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNION, 0); } + public KW_EXCEPT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXCEPT, 0); } + public KW_SETMINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SETMINUS, 0); } + public setQuantifier(): SetQuantifierContext | undefined { + return this.tryGetRuleContext(0, SetQuantifierContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_constantList; } + public get ruleIndex(): number { return SparkSqlParser.RULE_queryTerm; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterConstantList) { - listener.enterConstantList(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterQueryTerm) { + listener.enterQueryTerm(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitConstantList) { - listener.exitConstantList(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitQueryTerm) { + listener.exitQueryTerm(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitConstantList) { - return visitor.visitConstantList(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitQueryTerm) { + return visitor.visitQueryTerm(this); } else { return visitor.visitChildren(this); } @@ -19400,37 +21777,46 @@ export class ConstantListContext extends ParserRuleContext { } -export class NestedConstantListContext extends ParserRuleContext { - public constantList(): ConstantListContext[]; - public constantList(i: number): ConstantListContext; - public constantList(i?: number): ConstantListContext | ConstantListContext[] { - if (i === undefined) { - return this.getRuleContexts(ConstantListContext); - } else { - return this.getRuleContext(i, ConstantListContext); - } +export class QueryPrimaryContext extends ParserRuleContext { + public querySpecification(): QuerySpecificationContext | undefined { + return this.tryGetRuleContext(0, QuerySpecificationContext); + } + public fromStatement(): FromStatementContext | undefined { + return this.tryGetRuleContext(0, FromStatementContext); + } + public KW_TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLE, 0); } + public tableIdentifierReference(): TableIdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, TableIdentifierReferenceContext); + } + public inlineTable(): InlineTableContext | undefined { + return this.tryGetRuleContext(0, InlineTableContext); + } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public query(): QueryContext | undefined { + return this.tryGetRuleContext(0, QueryContext); } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_nestedConstantList; } + public get ruleIndex(): number { return SparkSqlParser.RULE_queryPrimary; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNestedConstantList) { - listener.enterNestedConstantList(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterQueryPrimary) { + listener.enterQueryPrimary(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNestedConstantList) { - listener.exitNestedConstantList(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitQueryPrimary) { + listener.exitQueryPrimary(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNestedConstantList) { - return visitor.visitNestedConstantList(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitQueryPrimary) { + return visitor.visitQueryPrimary(this); } else { return visitor.visitChildren(this); } @@ -19438,37 +21824,38 @@ export class NestedConstantListContext extends ParserRuleContext { } -export class CreateFileFormatContext extends ParserRuleContext { - public STORED(): TerminalNode { return this.getToken(SparkSqlParser.STORED, 0); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public fileFormat(): FileFormatContext | undefined { - return this.tryGetRuleContext(0, FileFormatContext); - } - public BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BY, 0); } - public storageHandler(): StorageHandlerContext | undefined { - return this.tryGetRuleContext(0, StorageHandlerContext); +export class SortItemContext extends ParserRuleContext { + public _ordering!: Token; + public _nullOrder!: Token; + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); } + public KW_NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULLS, 0); } + public KW_ASC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ASC, 0); } + public KW_DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DESC, 0); } + public KW_LAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LAST, 0); } + public KW_FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FIRST, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_createFileFormat; } + public get ruleIndex(): number { return SparkSqlParser.RULE_sortItem; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCreateFileFormat) { - listener.enterCreateFileFormat(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterSortItem) { + listener.enterSortItem(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCreateFileFormat) { - listener.exitCreateFileFormat(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitSortItem) { + listener.exitSortItem(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCreateFileFormat) { - return visitor.visitCreateFileFormat(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitSortItem) { + return visitor.visitSortItem(this); } else { return visitor.visitChildren(this); } @@ -19476,114 +21863,99 @@ export class CreateFileFormatContext extends ParserRuleContext { } -export class FileFormatContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_fileFormat; } - public copyFrom(ctx: FileFormatContext): void { - super.copyFrom(ctx); +export class FromStatementContext extends ParserRuleContext { + public fromClause(): FromClauseContext { + return this.getRuleContext(0, FromClauseContext); } -} -export class TableFileFormatContext extends FileFormatContext { - public _inFmt!: Token; - public _outFmt!: Token; - public INPUTFORMAT(): TerminalNode { return this.getToken(SparkSqlParser.INPUTFORMAT, 0); } - public OUTPUTFORMAT(): TerminalNode { return this.getToken(SparkSqlParser.OUTPUTFORMAT, 0); } - public STRING(): TerminalNode[]; - public STRING(i: number): TerminalNode; - public STRING(i?: number): TerminalNode | TerminalNode[] { + public fromStatementBody(): FromStatementBodyContext[]; + public fromStatementBody(i: number): FromStatementBodyContext; + public fromStatementBody(i?: number): FromStatementBodyContext | FromStatementBodyContext[] { if (i === undefined) { - return this.getTokens(SparkSqlParser.STRING); + return this.getRuleContexts(FromStatementBodyContext); } else { - return this.getToken(SparkSqlParser.STRING, i); + return this.getRuleContext(i, FromStatementBodyContext); } } - constructor(ctx: FileFormatContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTableFileFormat) { - listener.enterTableFileFormat(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_fromStatement; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFromStatement) { + listener.enterFromStatement(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTableFileFormat) { - listener.exitTableFileFormat(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFromStatement) { + listener.exitFromStatement(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTableFileFormat) { - return visitor.visitTableFileFormat(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFromStatement) { + return visitor.visitFromStatement(this); } else { return visitor.visitChildren(this); } } } -export class GenericFileFormatContext extends FileFormatContext { - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); + + +export class FromStatementBodyContext extends ParserRuleContext { + public transformClause(): TransformClauseContext | undefined { + return this.tryGetRuleContext(0, TransformClauseContext); } - constructor(ctx: FileFormatContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public queryOrganization(): QueryOrganizationContext { + return this.getRuleContext(0, QueryOrganizationContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterGenericFileFormat) { - listener.enterGenericFileFormat(this); - } + public whereClause(): WhereClauseContext | undefined { + return this.tryGetRuleContext(0, WhereClauseContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitGenericFileFormat) { - listener.exitGenericFileFormat(this); - } + public selectClause(): SelectClauseContext | undefined { + return this.tryGetRuleContext(0, SelectClauseContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitGenericFileFormat) { - return visitor.visitGenericFileFormat(this); + public lateralView(): LateralViewContext[]; + public lateralView(i: number): LateralViewContext; + public lateralView(i?: number): LateralViewContext | LateralViewContext[] { + if (i === undefined) { + return this.getRuleContexts(LateralViewContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, LateralViewContext); } } -} - - -export class StorageHandlerContext extends ParserRuleContext { - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } - public WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WITH, 0); } - public SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDEPROPERTIES, 0); } - public tablePropertyList(): TablePropertyListContext | undefined { - return this.tryGetRuleContext(0, TablePropertyListContext); + public aggregationClause(): AggregationClauseContext | undefined { + return this.tryGetRuleContext(0, AggregationClauseContext); + } + public havingClause(): HavingClauseContext | undefined { + return this.tryGetRuleContext(0, HavingClauseContext); + } + public windowClause(): WindowClauseContext | undefined { + return this.tryGetRuleContext(0, WindowClauseContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_storageHandler; } + public get ruleIndex(): number { return SparkSqlParser.RULE_fromStatementBody; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterStorageHandler) { - listener.enterStorageHandler(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFromStatementBody) { + listener.enterFromStatementBody(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitStorageHandler) { - listener.exitStorageHandler(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFromStatementBody) { + listener.exitFromStatementBody(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitStorageHandler) { - return visitor.visitStorageHandler(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFromStatementBody) { + return visitor.visitFromStatementBody(this); } else { return visitor.visitChildren(this); } @@ -19591,32 +21963,58 @@ export class StorageHandlerContext extends ParserRuleContext { } -export class ResourceContext extends ParserRuleContext { - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); +export class QuerySpecificationContext extends ParserRuleContext { + public transformClause(): TransformClauseContext | undefined { + return this.tryGetRuleContext(0, TransformClauseContext); + } + public fromClause(): FromClauseContext | undefined { + return this.tryGetRuleContext(0, FromClauseContext); + } + public lateralView(): LateralViewContext[]; + public lateralView(i: number): LateralViewContext; + public lateralView(i?: number): LateralViewContext | LateralViewContext[] { + if (i === undefined) { + return this.getRuleContexts(LateralViewContext); + } else { + return this.getRuleContext(i, LateralViewContext); + } + } + public whereClause(): WhereClauseContext | undefined { + return this.tryGetRuleContext(0, WhereClauseContext); + } + public aggregationClause(): AggregationClauseContext | undefined { + return this.tryGetRuleContext(0, AggregationClauseContext); + } + public havingClause(): HavingClauseContext | undefined { + return this.tryGetRuleContext(0, HavingClauseContext); + } + public windowClause(): WindowClauseContext | undefined { + return this.tryGetRuleContext(0, WindowClauseContext); + } + public selectClause(): SelectClauseContext | undefined { + return this.tryGetRuleContext(0, SelectClauseContext); } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_resource; } + public get ruleIndex(): number { return SparkSqlParser.RULE_querySpecification; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterResource) { - listener.enterResource(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterQuerySpecification) { + listener.enterQuerySpecification(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitResource) { - listener.exitResource(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitQuerySpecification) { + listener.exitQuerySpecification(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitResource) { - return visitor.visitResource(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitQuerySpecification) { + return visitor.visitQuerySpecification(this); } else { return visitor.visitChildren(this); } @@ -19624,238 +22022,210 @@ export class ResourceContext extends ParserRuleContext { } -export class DmlStatementNoWithContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_dmlStatementNoWith; } - public copyFrom(ctx: DmlStatementNoWithContext): void { - super.copyFrom(ctx); - } -} -export class SingleInsertQueryContext extends DmlStatementNoWithContext { - public insertInto(): InsertIntoContext { - return this.getRuleContext(0, InsertIntoContext); - } - public queryTerm(): QueryTermContext { - return this.getRuleContext(0, QueryTermContext); - } - public queryOrganization(): QueryOrganizationContext { - return this.getRuleContext(0, QueryOrganizationContext); - } - constructor(ctx: DmlStatementNoWithContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSingleInsertQuery) { - listener.enterSingleInsertQuery(this); +export class TransformClauseContext extends ParserRuleContext { + public _kind!: Token; + public _inRowFormat!: RowFormatContext; + public _recordWriter!: StringLitContext; + public _script!: StringLitContext; + public _outRowFormat!: RowFormatContext; + public _recordReader!: StringLitContext; + public KW_USING(): TerminalNode { return this.getToken(SparkSqlParser.KW_USING, 0); } + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext; + public stringLit(i?: number): StringLitContext | StringLitContext[] { + if (i === undefined) { + return this.getRuleContexts(StringLitContext); + } else { + return this.getRuleContext(i, StringLitContext); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSingleInsertQuery) { - listener.exitSingleInsertQuery(this); + public KW_SELECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SELECT, 0); } + public LEFT_PAREN(): TerminalNode[]; + public LEFT_PAREN(i: number): TerminalNode; + public LEFT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.LEFT_PAREN); + } else { + return this.getToken(SparkSqlParser.LEFT_PAREN, i); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSingleInsertQuery) { - return visitor.visitSingleInsertQuery(this); + public expressionSeq(): ExpressionSeqContext | undefined { + return this.tryGetRuleContext(0, ExpressionSeqContext); + } + public RIGHT_PAREN(): TerminalNode[]; + public RIGHT_PAREN(i: number): TerminalNode; + public RIGHT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.RIGHT_PAREN); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.RIGHT_PAREN, i); } } -} -export class MultiInsertQueryContext extends DmlStatementNoWithContext { - public fromClause(): FromClauseContext { - return this.getRuleContext(0, FromClauseContext); - } - public multiInsertQueryBody(): MultiInsertQueryBodyContext[]; - public multiInsertQueryBody(i: number): MultiInsertQueryBodyContext; - public multiInsertQueryBody(i?: number): MultiInsertQueryBodyContext | MultiInsertQueryBodyContext[] { + public KW_TRANSFORM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSFORM, 0); } + public KW_MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MAP, 0); } + public KW_REDUCE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REDUCE, 0); } + public KW_RECORDWRITER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECORDWRITER, 0); } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public KW_RECORDREADER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECORDREADER, 0); } + public rowFormat(): RowFormatContext[]; + public rowFormat(i: number): RowFormatContext; + public rowFormat(i?: number): RowFormatContext | RowFormatContext[] { if (i === undefined) { - return this.getRuleContexts(MultiInsertQueryBodyContext); + return this.getRuleContexts(RowFormatContext); } else { - return this.getRuleContext(i, MultiInsertQueryBodyContext); + return this.getRuleContext(i, RowFormatContext); } } - constructor(ctx: DmlStatementNoWithContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public setQuantifier(): SetQuantifierContext | undefined { + return this.tryGetRuleContext(0, SetQuantifierContext); + } + public identifierSeq(): IdentifierSeqContext | undefined { + return this.tryGetRuleContext(0, IdentifierSeqContext); + } + public colTypeList(): ColTypeListContext | undefined { + return this.tryGetRuleContext(0, ColTypeListContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterMultiInsertQuery) { - listener.enterMultiInsertQuery(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_transformClause; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTransformClause) { + listener.enterTransformClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitMultiInsertQuery) { - listener.exitMultiInsertQuery(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTransformClause) { + listener.exitTransformClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitMultiInsertQuery) { - return visitor.visitMultiInsertQuery(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTransformClause) { + return visitor.visitTransformClause(this); } else { return visitor.visitChildren(this); } } } -export class DeleteFromTableContext extends DmlStatementNoWithContext { - public DELETE(): TerminalNode { return this.getToken(SparkSqlParser.DELETE, 0); } - public FROM(): TerminalNode { return this.getToken(SparkSqlParser.FROM, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class SelectClauseContext extends ParserRuleContext { + public _hint!: HintContext; + public _hints: HintContext[] = []; + public KW_SELECT(): TerminalNode { return this.getToken(SparkSqlParser.KW_SELECT, 0); } + public namedExpressionSeq(): NamedExpressionSeqContext { + return this.getRuleContext(0, NamedExpressionSeqContext); } - public tableAlias(): TableAliasContext { - return this.getRuleContext(0, TableAliasContext); + public setQuantifier(): SetQuantifierContext | undefined { + return this.tryGetRuleContext(0, SetQuantifierContext); } - public whereClause(): WhereClauseContext | undefined { - return this.tryGetRuleContext(0, WhereClauseContext); + public hint(): HintContext[]; + public hint(i: number): HintContext; + public hint(i?: number): HintContext | HintContext[] { + if (i === undefined) { + return this.getRuleContexts(HintContext); + } else { + return this.getRuleContext(i, HintContext); + } } - constructor(ctx: DmlStatementNoWithContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDeleteFromTable) { - listener.enterDeleteFromTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_selectClause; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterSelectClause) { + listener.enterSelectClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDeleteFromTable) { - listener.exitDeleteFromTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitSelectClause) { + listener.exitSelectClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDeleteFromTable) { - return visitor.visitDeleteFromTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitSelectClause) { + return visitor.visitSelectClause(this); } else { return visitor.visitChildren(this); } } } -export class UpdateTableContext extends DmlStatementNoWithContext { - public UPDATE(): TerminalNode { return this.getToken(SparkSqlParser.UPDATE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public tableAlias(): TableAliasContext { - return this.getRuleContext(0, TableAliasContext); - } - public setClause(): SetClauseContext { - return this.getRuleContext(0, SetClauseContext); - } - public whereClause(): WhereClauseContext | undefined { - return this.tryGetRuleContext(0, WhereClauseContext); + + +export class SetClauseContext extends ParserRuleContext { + public KW_SET(): TerminalNode { return this.getToken(SparkSqlParser.KW_SET, 0); } + public assignmentList(): AssignmentListContext { + return this.getRuleContext(0, AssignmentListContext); } - constructor(ctx: DmlStatementNoWithContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterUpdateTable) { - listener.enterUpdateTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_setClause; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterSetClause) { + listener.enterSetClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitUpdateTable) { - listener.exitUpdateTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitSetClause) { + listener.exitSetClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitUpdateTable) { - return visitor.visitUpdateTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitSetClause) { + return visitor.visitSetClause(this); } else { return visitor.visitChildren(this); } } } -export class MergeIntoTableContext extends DmlStatementNoWithContext { - public _target!: MultipartIdentifierContext; - public _targetAlias!: TableAliasContext; - public _source!: MultipartIdentifierContext; - public _sourceQuery!: QueryContext; - public _sourceAlias!: TableAliasContext; - public _mergeCondition!: BooleanExpressionContext; - public MERGE(): TerminalNode { return this.getToken(SparkSqlParser.MERGE, 0); } - public INTO(): TerminalNode { return this.getToken(SparkSqlParser.INTO, 0); } - public USING(): TerminalNode { return this.getToken(SparkSqlParser.USING, 0); } - public ON(): TerminalNode { return this.getToken(SparkSqlParser.ON, 0); } - public multipartIdentifier(): MultipartIdentifierContext[]; - public multipartIdentifier(i: number): MultipartIdentifierContext; - public multipartIdentifier(i?: number): MultipartIdentifierContext | MultipartIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(MultipartIdentifierContext); - } else { - return this.getRuleContext(i, MultipartIdentifierContext); - } - } - public tableAlias(): TableAliasContext[]; - public tableAlias(i: number): TableAliasContext; - public tableAlias(i?: number): TableAliasContext | TableAliasContext[] { - if (i === undefined) { - return this.getRuleContexts(TableAliasContext); - } else { - return this.getRuleContext(i, TableAliasContext); - } - } - public booleanExpression(): BooleanExpressionContext { - return this.getRuleContext(0, BooleanExpressionContext); - } - public query(): QueryContext | undefined { - return this.tryGetRuleContext(0, QueryContext); - } - public matchedClause(): MatchedClauseContext[]; - public matchedClause(i: number): MatchedClauseContext; - public matchedClause(i?: number): MatchedClauseContext | MatchedClauseContext[] { - if (i === undefined) { - return this.getRuleContexts(MatchedClauseContext); - } else { - return this.getRuleContext(i, MatchedClauseContext); - } + + +export class MatchedClauseContext extends ParserRuleContext { + public _matchedCond!: BooleanExpressionContext; + public KW_WHEN(): TerminalNode { return this.getToken(SparkSqlParser.KW_WHEN, 0); } + public KW_MATCHED(): TerminalNode { return this.getToken(SparkSqlParser.KW_MATCHED, 0); } + public KW_THEN(): TerminalNode { return this.getToken(SparkSqlParser.KW_THEN, 0); } + public matchedAction(): MatchedActionContext { + return this.getRuleContext(0, MatchedActionContext); } - public notMatchedClause(): NotMatchedClauseContext[]; - public notMatchedClause(i: number): NotMatchedClauseContext; - public notMatchedClause(i?: number): NotMatchedClauseContext | NotMatchedClauseContext[] { - if (i === undefined) { - return this.getRuleContexts(NotMatchedClauseContext); - } else { - return this.getRuleContext(i, NotMatchedClauseContext); - } + public KW_AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AND, 0); } + public booleanExpression(): BooleanExpressionContext | undefined { + return this.tryGetRuleContext(0, BooleanExpressionContext); } - constructor(ctx: DmlStatementNoWithContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterMergeIntoTable) { - listener.enterMergeIntoTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_matchedClause; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterMatchedClause) { + listener.enterMatchedClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitMergeIntoTable) { - listener.exitMergeIntoTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitMatchedClause) { + listener.exitMatchedClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitMergeIntoTable) { - return visitor.visitMergeIntoTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitMatchedClause) { + return visitor.visitMatchedClause(this); } else { return visitor.visitChildren(this); } @@ -19863,71 +22233,42 @@ export class MergeIntoTableContext extends DmlStatementNoWithContext { } -export class QueryOrganizationContext extends ParserRuleContext { - public _sortItem!: SortItemContext; - public _order: SortItemContext[] = []; - public _expression!: ExpressionContext; - public _clusterBy: ExpressionContext[] = []; - public _distributeBy: ExpressionContext[] = []; - public _sort: SortItemContext[] = []; - public _limit!: ExpressionContext; - public ORDER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ORDER, 0); } - public BY(): TerminalNode[]; - public BY(i: number): TerminalNode; - public BY(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.BY); - } else { - return this.getToken(SparkSqlParser.BY, i); - } - } - public CLUSTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLUSTER, 0); } - public DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DISTRIBUTE, 0); } - public SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SORT, 0); } - public windowClause(): WindowClauseContext | undefined { - return this.tryGetRuleContext(0, WindowClauseContext); - } - public LIMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIMIT, 0); } - public sortItem(): SortItemContext[]; - public sortItem(i: number): SortItemContext; - public sortItem(i?: number): SortItemContext | SortItemContext[] { - if (i === undefined) { - return this.getRuleContexts(SortItemContext); - } else { - return this.getRuleContext(i, SortItemContext); - } +export class NotMatchedClauseContext extends ParserRuleContext { + public _notMatchedCond!: BooleanExpressionContext; + public KW_WHEN(): TerminalNode { return this.getToken(SparkSqlParser.KW_WHEN, 0); } + public KW_NOT(): TerminalNode { return this.getToken(SparkSqlParser.KW_NOT, 0); } + public KW_MATCHED(): TerminalNode { return this.getToken(SparkSqlParser.KW_MATCHED, 0); } + public KW_THEN(): TerminalNode { return this.getToken(SparkSqlParser.KW_THEN, 0); } + public notMatchedAction(): NotMatchedActionContext { + return this.getRuleContext(0, NotMatchedActionContext); } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } + public KW_BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BY, 0); } + public KW_TARGET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TARGET, 0); } + public KW_AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AND, 0); } + public booleanExpression(): BooleanExpressionContext | undefined { + return this.tryGetRuleContext(0, BooleanExpressionContext); } - public ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ALL, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_queryOrganization; } + public get ruleIndex(): number { return SparkSqlParser.RULE_notMatchedClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterQueryOrganization) { - listener.enterQueryOrganization(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNotMatchedClause) { + listener.enterNotMatchedClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitQueryOrganization) { - listener.exitQueryOrganization(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNotMatchedClause) { + listener.exitNotMatchedClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitQueryOrganization) { - return visitor.visitQueryOrganization(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNotMatchedClause) { + return visitor.visitNotMatchedClause(this); } else { return visitor.visitChildren(this); } @@ -19935,34 +22276,42 @@ export class QueryOrganizationContext extends ParserRuleContext { } -export class MultiInsertQueryBodyContext extends ParserRuleContext { - public insertInto(): InsertIntoContext { - return this.getRuleContext(0, InsertIntoContext); +export class NotMatchedBySourceClauseContext extends ParserRuleContext { + public _notMatchedBySourceCond!: BooleanExpressionContext; + public KW_WHEN(): TerminalNode { return this.getToken(SparkSqlParser.KW_WHEN, 0); } + public KW_NOT(): TerminalNode { return this.getToken(SparkSqlParser.KW_NOT, 0); } + public KW_MATCHED(): TerminalNode { return this.getToken(SparkSqlParser.KW_MATCHED, 0); } + public KW_BY(): TerminalNode { return this.getToken(SparkSqlParser.KW_BY, 0); } + public KW_SOURCE(): TerminalNode { return this.getToken(SparkSqlParser.KW_SOURCE, 0); } + public KW_THEN(): TerminalNode { return this.getToken(SparkSqlParser.KW_THEN, 0); } + public notMatchedBySourceAction(): NotMatchedBySourceActionContext { + return this.getRuleContext(0, NotMatchedBySourceActionContext); } - public fromStatementBody(): FromStatementBodyContext { - return this.getRuleContext(0, FromStatementBodyContext); + public KW_AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AND, 0); } + public booleanExpression(): BooleanExpressionContext | undefined { + return this.tryGetRuleContext(0, BooleanExpressionContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_multiInsertQueryBody; } + public get ruleIndex(): number { return SparkSqlParser.RULE_notMatchedBySourceClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterMultiInsertQueryBody) { - listener.enterMultiInsertQueryBody(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNotMatchedBySourceClause) { + listener.enterNotMatchedBySourceClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitMultiInsertQueryBody) { - listener.exitMultiInsertQueryBody(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNotMatchedBySourceClause) { + listener.exitNotMatchedBySourceClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitMultiInsertQueryBody) { - return visitor.visitMultiInsertQueryBody(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNotMatchedBySourceClause) { + return visitor.visitNotMatchedBySourceClause(this); } else { return visitor.visitChildren(this); } @@ -19970,243 +22319,259 @@ export class MultiInsertQueryBodyContext extends ParserRuleContext { } -export class QueryTermContext extends ParserRuleContext { +export class MatchedActionContext extends ParserRuleContext { + public KW_DELETE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DELETE, 0); } + public KW_UPDATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UPDATE, 0); } + public KW_SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SET, 0); } + public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } + public assignmentList(): AssignmentListContext | undefined { + return this.tryGetRuleContext(0, AssignmentListContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_queryTerm; } - public copyFrom(ctx: QueryTermContext): void { - super.copyFrom(ctx); - } -} -export class QueryTermDefaultContext extends QueryTermContext { - public queryPrimary(): QueryPrimaryContext { - return this.getRuleContext(0, QueryPrimaryContext); - } - constructor(ctx: QueryTermContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_matchedAction; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterQueryTermDefault) { - listener.enterQueryTermDefault(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterMatchedAction) { + listener.enterMatchedAction(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitQueryTermDefault) { - listener.exitQueryTermDefault(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitMatchedAction) { + listener.exitMatchedAction(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitQueryTermDefault) { - return visitor.visitQueryTermDefault(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitMatchedAction) { + return visitor.visitMatchedAction(this); } else { return visitor.visitChildren(this); } } } -export class SetOperationContext extends QueryTermContext { - public _left!: QueryTermContext; - public _operator!: Token; - public _right!: QueryTermContext; - public queryTerm(): QueryTermContext[]; - public queryTerm(i: number): QueryTermContext; - public queryTerm(i?: number): QueryTermContext | QueryTermContext[] { + + +export class NotMatchedActionContext extends ParserRuleContext { + public KW_INSERT(): TerminalNode { return this.getToken(SparkSqlParser.KW_INSERT, 0); } + public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } + public LEFT_PAREN(): TerminalNode[]; + public LEFT_PAREN(i: number): TerminalNode; + public LEFT_PAREN(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(QueryTermContext); + return this.getTokens(SparkSqlParser.LEFT_PAREN); } else { - return this.getRuleContext(i, QueryTermContext); + return this.getToken(SparkSqlParser.LEFT_PAREN, i); } } - public INTERSECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTERSECT, 0); } - public UNION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNION, 0); } - public EXCEPT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXCEPT, 0); } - public SETMINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SETMINUS, 0); } - public setQuantifier(): SetQuantifierContext | undefined { - return this.tryGetRuleContext(0, SetQuantifierContext); - } - constructor(ctx: QueryTermContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public multipartIdentifierList(): MultipartIdentifierListContext | undefined { + return this.tryGetRuleContext(0, MultipartIdentifierListContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetOperation) { - listener.enterSetOperation(this); + public RIGHT_PAREN(): TerminalNode[]; + public RIGHT_PAREN(i: number): TerminalNode; + public RIGHT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.RIGHT_PAREN); + } else { + return this.getToken(SparkSqlParser.RIGHT_PAREN, i); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetOperation) { - listener.exitSetOperation(this); + public KW_VALUES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VALUES, 0); } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetOperation) { - return visitor.visitSetOperation(this); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.COMMA, i); } } -} - - -export class QueryPrimaryContext extends ParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_queryPrimary; } - public copyFrom(ctx: QueryPrimaryContext): void { - super.copyFrom(ctx); - } -} -export class QueryPrimaryDefaultContext extends QueryPrimaryContext { - public querySpecification(): QuerySpecificationContext { - return this.getRuleContext(0, QuerySpecificationContext); - } - constructor(ctx: QueryPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_notMatchedAction; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterQueryPrimaryDefault) { - listener.enterQueryPrimaryDefault(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNotMatchedAction) { + listener.enterNotMatchedAction(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitQueryPrimaryDefault) { - listener.exitQueryPrimaryDefault(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNotMatchedAction) { + listener.exitNotMatchedAction(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitQueryPrimaryDefault) { - return visitor.visitQueryPrimaryDefault(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNotMatchedAction) { + return visitor.visitNotMatchedAction(this); } else { return visitor.visitChildren(this); } } } -export class FromStmtContext extends QueryPrimaryContext { - public fromStatement(): FromStatementContext { - return this.getRuleContext(0, FromStatementContext); + + +export class NotMatchedBySourceActionContext extends ParserRuleContext { + public KW_DELETE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DELETE, 0); } + public KW_UPDATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UPDATE, 0); } + public KW_SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SET, 0); } + public assignmentList(): AssignmentListContext | undefined { + return this.tryGetRuleContext(0, AssignmentListContext); } - constructor(ctx: QueryPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFromStmt) { - listener.enterFromStmt(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_notMatchedBySourceAction; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNotMatchedBySourceAction) { + listener.enterNotMatchedBySourceAction(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFromStmt) { - listener.exitFromStmt(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNotMatchedBySourceAction) { + listener.exitNotMatchedBySourceAction(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFromStmt) { - return visitor.visitFromStmt(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNotMatchedBySourceAction) { + return visitor.visitNotMatchedBySourceAction(this); } else { return visitor.visitChildren(this); } } } -export class TableContext extends QueryPrimaryContext { - public TABLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLE, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); + + +export class AssignmentListContext extends ParserRuleContext { + public assignment(): AssignmentContext[]; + public assignment(i: number): AssignmentContext; + public assignment(i?: number): AssignmentContext | AssignmentContext[] { + if (i === undefined) { + return this.getRuleContexts(AssignmentContext); + } else { + return this.getRuleContext(i, AssignmentContext); + } } - constructor(ctx: QueryPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTable) { - listener.enterTable(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_assignmentList; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterAssignmentList) { + listener.enterAssignmentList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTable) { - listener.exitTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitAssignmentList) { + listener.exitAssignmentList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTable) { - return visitor.visitTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitAssignmentList) { + return visitor.visitAssignmentList(this); } else { return visitor.visitChildren(this); } } } -export class InlineTableDefault1Context extends QueryPrimaryContext { - public inlineTable(): InlineTableContext { - return this.getRuleContext(0, InlineTableContext); + + +export class AssignmentContext extends ParserRuleContext { + public _key!: MultipartIdentifierContext; + public _value!: ExpressionContext; + public EQ(): TerminalNode { return this.getToken(SparkSqlParser.EQ, 0); } + public multipartIdentifier(): MultipartIdentifierContext { + return this.getRuleContext(0, MultipartIdentifierContext); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); } - constructor(ctx: QueryPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterInlineTableDefault1) { - listener.enterInlineTableDefault1(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_assignment; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterAssignment) { + listener.enterAssignment(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitInlineTableDefault1) { - listener.exitInlineTableDefault1(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitAssignment) { + listener.exitAssignment(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitInlineTableDefault1) { - return visitor.visitInlineTableDefault1(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitAssignment) { + return visitor.visitAssignment(this); } else { return visitor.visitChildren(this); } } } -export class SubqueryContext extends QueryPrimaryContext { - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); + + +export class WhereClauseContext extends ParserRuleContext { + public KW_WHERE(): TerminalNode { return this.getToken(SparkSqlParser.KW_WHERE, 0); } + public booleanExpression(): BooleanExpressionContext { + return this.getRuleContext(0, BooleanExpressionContext); } - constructor(ctx: QueryPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSubquery) { - listener.enterSubquery(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_whereClause; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterWhereClause) { + listener.enterWhereClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSubquery) { - listener.exitSubquery(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitWhereClause) { + listener.exitWhereClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSubquery) { - return visitor.visitSubquery(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitWhereClause) { + return visitor.visitWhereClause(this); } else { return visitor.visitChildren(this); } @@ -20214,38 +22579,32 @@ export class SubqueryContext extends QueryPrimaryContext { } -export class SortItemContext extends ParserRuleContext { - public _ordering!: Token; - public _nullOrder!: Token; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); +export class HavingClauseContext extends ParserRuleContext { + public KW_HAVING(): TerminalNode { return this.getToken(SparkSqlParser.KW_HAVING, 0); } + public booleanExpression(): BooleanExpressionContext { + return this.getRuleContext(0, BooleanExpressionContext); } - public NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULLS, 0); } - public ASC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASC, 0); } - public DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESC, 0); } - public LAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LAST, 0); } - public FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FIRST, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_sortItem; } + public get ruleIndex(): number { return SparkSqlParser.RULE_havingClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSortItem) { - listener.enterSortItem(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterHavingClause) { + listener.enterHavingClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSortItem) { - listener.exitSortItem(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitHavingClause) { + listener.exitHavingClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSortItem) { - return visitor.visitSortItem(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitHavingClause) { + return visitor.visitHavingClause(this); } else { return visitor.visitChildren(this); } @@ -20253,40 +22612,50 @@ export class SortItemContext extends ParserRuleContext { } -export class FromStatementContext extends ParserRuleContext { - public fromClause(): FromClauseContext { - return this.getRuleContext(0, FromClauseContext); +export class HintContext extends ParserRuleContext { + public _hintStatement!: HintStatementContext; + public _hintStatements: HintStatementContext[] = []; + public HENT_START(): TerminalNode { return this.getToken(SparkSqlParser.HENT_START, 0); } + public HENT_END(): TerminalNode { return this.getToken(SparkSqlParser.HENT_END, 0); } + public hintStatement(): HintStatementContext[]; + public hintStatement(i: number): HintStatementContext; + public hintStatement(i?: number): HintStatementContext | HintStatementContext[] { + if (i === undefined) { + return this.getRuleContexts(HintStatementContext); + } else { + return this.getRuleContext(i, HintStatementContext); + } } - public fromStatementBody(): FromStatementBodyContext[]; - public fromStatementBody(i: number): FromStatementBodyContext; - public fromStatementBody(i?: number): FromStatementBodyContext | FromStatementBodyContext[] { + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(FromStatementBodyContext); + return this.getTokens(SparkSqlParser.COMMA); } else { - return this.getRuleContext(i, FromStatementBodyContext); + return this.getToken(SparkSqlParser.COMMA, i); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_fromStatement; } + public get ruleIndex(): number { return SparkSqlParser.RULE_hint; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFromStatement) { - listener.enterFromStatement(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterHint) { + listener.enterHint(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFromStatement) { - listener.exitFromStatement(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitHint) { + listener.exitHint(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFromStatement) { - return visitor.visitFromStatement(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitHint) { + return visitor.visitHint(this); } else { return visitor.visitChildren(this); } @@ -20294,116 +22663,80 @@ export class FromStatementContext extends ParserRuleContext { } -export class FromStatementBodyContext extends ParserRuleContext { - public transformClause(): TransformClauseContext | undefined { - return this.tryGetRuleContext(0, TransformClauseContext); - } - public queryOrganization(): QueryOrganizationContext { - return this.getRuleContext(0, QueryOrganizationContext); - } - public whereClause(): WhereClauseContext | undefined { - return this.tryGetRuleContext(0, WhereClauseContext); - } - public selectClause(): SelectClauseContext | undefined { - return this.tryGetRuleContext(0, SelectClauseContext); +export class HintStatementContext extends ParserRuleContext { + public _hintName!: IdentifierContext; + public _primaryExpression!: PrimaryExpressionContext; + public _parameters: PrimaryExpressionContext[] = []; + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); } - public lateralView(): LateralViewContext[]; - public lateralView(i: number): LateralViewContext; - public lateralView(i?: number): LateralViewContext | LateralViewContext[] { + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public primaryExpression(): PrimaryExpressionContext[]; + public primaryExpression(i: number): PrimaryExpressionContext; + public primaryExpression(i?: number): PrimaryExpressionContext | PrimaryExpressionContext[] { if (i === undefined) { - return this.getRuleContexts(LateralViewContext); - } else { - return this.getRuleContext(i, LateralViewContext); - } - } - public aggregationClause(): AggregationClauseContext | undefined { - return this.tryGetRuleContext(0, AggregationClauseContext); - } - public havingClause(): HavingClauseContext | undefined { - return this.tryGetRuleContext(0, HavingClauseContext); - } - public windowClause(): WindowClauseContext | undefined { - return this.tryGetRuleContext(0, WindowClauseContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_fromStatementBody; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFromStatementBody) { - listener.enterFromStatementBody(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFromStatementBody) { - listener.exitFromStatementBody(this); + return this.getRuleContexts(PrimaryExpressionContext); + } else { + return this.getRuleContext(i, PrimaryExpressionContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFromStatementBody) { - return visitor.visitFromStatementBody(this); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.COMMA, i); } } -} - - -export class QuerySpecificationContext extends ParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_querySpecification; } - public copyFrom(ctx: QuerySpecificationContext): void { - super.copyFrom(ctx); - } -} -export class TransformQuerySpecificationContext extends QuerySpecificationContext { - public transformClause(): TransformClauseContext { - return this.getRuleContext(0, TransformClauseContext); - } - public fromClause(): FromClauseContext | undefined { - return this.tryGetRuleContext(0, FromClauseContext); - } - public whereClause(): WhereClauseContext | undefined { - return this.tryGetRuleContext(0, WhereClauseContext); - } - constructor(ctx: QuerySpecificationContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_hintStatement; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTransformQuerySpecification) { - listener.enterTransformQuerySpecification(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterHintStatement) { + listener.enterHintStatement(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTransformQuerySpecification) { - listener.exitTransformQuerySpecification(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitHintStatement) { + listener.exitHintStatement(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTransformQuerySpecification) { - return visitor.visitTransformQuerySpecification(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitHintStatement) { + return visitor.visitHintStatement(this); } else { return visitor.visitChildren(this); } } } -export class RegularQuerySpecificationContext extends QuerySpecificationContext { - public selectClause(): SelectClauseContext { - return this.getRuleContext(0, SelectClauseContext); + + +export class FromClauseContext extends ParserRuleContext { + public KW_FROM(): TerminalNode { return this.getToken(SparkSqlParser.KW_FROM, 0); } + public relation(): RelationContext[]; + public relation(i: number): RelationContext; + public relation(i?: number): RelationContext | RelationContext[] { + if (i === undefined) { + return this.getRuleContexts(RelationContext); + } else { + return this.getRuleContext(i, RelationContext); + } } - public fromClause(): FromClauseContext | undefined { - return this.tryGetRuleContext(0, FromClauseContext); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } public lateralView(): LateralViewContext[]; public lateralView(i: number): LateralViewContext; @@ -20414,38 +22747,33 @@ export class RegularQuerySpecificationContext extends QuerySpecificationContext return this.getRuleContext(i, LateralViewContext); } } - public whereClause(): WhereClauseContext | undefined { - return this.tryGetRuleContext(0, WhereClauseContext); - } - public aggregationClause(): AggregationClauseContext | undefined { - return this.tryGetRuleContext(0, AggregationClauseContext); - } - public havingClause(): HavingClauseContext | undefined { - return this.tryGetRuleContext(0, HavingClauseContext); + public pivotClause(): PivotClauseContext | undefined { + return this.tryGetRuleContext(0, PivotClauseContext); } - public windowClause(): WindowClauseContext | undefined { - return this.tryGetRuleContext(0, WindowClauseContext); + public unpivotClause(): UnpivotClauseContext | undefined { + return this.tryGetRuleContext(0, UnpivotClauseContext); } - constructor(ctx: QuerySpecificationContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRegularQuerySpecification) { - listener.enterRegularQuerySpecification(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_fromClause; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFromClause) { + listener.enterFromClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRegularQuerySpecification) { - listener.exitRegularQuerySpecification(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFromClause) { + listener.exitFromClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRegularQuerySpecification) { - return visitor.visitRegularQuerySpecification(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFromClause) { + return visitor.visitFromClause(this); } else { return visitor.visitChildren(this); } @@ -20453,69 +22781,42 @@ export class RegularQuerySpecificationContext extends QuerySpecificationContext } -export class TransformClauseContext extends ParserRuleContext { - public _kind!: Token; - public _inRowFormat!: RowFormatContext; - public _recordWriter!: Token; - public _script!: Token; - public _outRowFormat!: RowFormatContext; - public _recordReader!: Token; - public USING(): TerminalNode { return this.getToken(SparkSqlParser.USING, 0); } - public STRING(): TerminalNode[]; - public STRING(i: number): TerminalNode; - public STRING(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.STRING); - } else { - return this.getToken(SparkSqlParser.STRING, i); - } - } - public SELECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SELECT, 0); } - public namedExpressionSeq(): NamedExpressionSeqContext | undefined { - return this.tryGetRuleContext(0, NamedExpressionSeqContext); - } - public TRANSFORM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSFORM, 0); } - public MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MAP, 0); } - public REDUCE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REDUCE, 0); } - public RECORDWRITER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RECORDWRITER, 0); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public RECORDREADER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RECORDREADER, 0); } - public rowFormat(): RowFormatContext[]; - public rowFormat(i: number): RowFormatContext; - public rowFormat(i?: number): RowFormatContext | RowFormatContext[] { - if (i === undefined) { - return this.getRuleContexts(RowFormatContext); - } else { - return this.getRuleContext(i, RowFormatContext); - } - } - public identifierSeq(): IdentifierSeqContext | undefined { - return this.tryGetRuleContext(0, IdentifierSeqContext); +export class TemporalClauseContext extends ParserRuleContext { + public _timestamp!: ValueExpressionContext; + public KW_AS(): TerminalNode { return this.getToken(SparkSqlParser.KW_AS, 0); } + public KW_OF(): TerminalNode { return this.getToken(SparkSqlParser.KW_OF, 0); } + public version(): VersionContext | undefined { + return this.tryGetRuleContext(0, VersionContext); } - public colTypeList(): ColTypeListContext | undefined { - return this.tryGetRuleContext(0, ColTypeListContext); + public KW_SYSTEM_VERSION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYSTEM_VERSION, 0); } + public KW_VERSION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VERSION, 0); } + public KW_FOR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FOR, 0); } + public KW_SYSTEM_TIME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYSTEM_TIME, 0); } + public KW_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP, 0); } + public valueExpression(): ValueExpressionContext | undefined { + return this.tryGetRuleContext(0, ValueExpressionContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_transformClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_temporalClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTransformClause) { - listener.enterTransformClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTemporalClause) { + listener.enterTemporalClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTransformClause) { - listener.exitTransformClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTemporalClause) { + listener.exitTemporalClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTransformClause) { - return visitor.visitTransformClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTemporalClause) { + return visitor.visitTemporalClause(this); } else { return visitor.visitChildren(this); } @@ -20523,46 +22824,78 @@ export class TransformClauseContext extends ParserRuleContext { } -export class SelectClauseContext extends ParserRuleContext { - public _hint!: HintContext; - public _hints: HintContext[] = []; - public SELECT(): TerminalNode { return this.getToken(SparkSqlParser.SELECT, 0); } - public namedExpressionSeq(): NamedExpressionSeqContext { - return this.getRuleContext(0, NamedExpressionSeqContext); +export class AggregationClauseContext extends ParserRuleContext { + public _groupByClause!: GroupByClauseContext; + public _groupingExpressionsWithGroupingAnalytics: GroupByClauseContext[] = []; + public _expression!: ExpressionContext; + public _groupingExpressions: ExpressionContext[] = []; + public _kind!: Token; + public KW_GROUP(): TerminalNode { return this.getToken(SparkSqlParser.KW_GROUP, 0); } + public KW_BY(): TerminalNode { return this.getToken(SparkSqlParser.KW_BY, 0); } + public groupByClause(): GroupByClauseContext[]; + public groupByClause(i: number): GroupByClauseContext; + public groupByClause(i?: number): GroupByClauseContext | GroupByClauseContext[] { + if (i === undefined) { + return this.getRuleContexts(GroupByClauseContext); + } else { + return this.getRuleContext(i, GroupByClauseContext); + } } - public setQuantifier(): SetQuantifierContext | undefined { - return this.tryGetRuleContext(0, SetQuantifierContext); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } - public hint(): HintContext[]; - public hint(i: number): HintContext; - public hint(i?: number): HintContext | HintContext[] { + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { if (i === undefined) { - return this.getRuleContexts(HintContext); + return this.getRuleContexts(ExpressionContext); } else { - return this.getRuleContext(i, HintContext); + return this.getRuleContext(i, ExpressionContext); + } + } + public KW_WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WITH, 0); } + public KW_SETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SETS, 0); } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public groupingSet(): GroupingSetContext[]; + public groupingSet(i: number): GroupingSetContext; + public groupingSet(i?: number): GroupingSetContext | GroupingSetContext[] { + if (i === undefined) { + return this.getRuleContexts(GroupingSetContext); + } else { + return this.getRuleContext(i, GroupingSetContext); } } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public KW_ROLLUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLLUP, 0); } + public KW_CUBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CUBE, 0); } + public KW_GROUPING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GROUPING, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_selectClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_aggregationClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSelectClause) { - listener.enterSelectClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterAggregationClause) { + listener.enterAggregationClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSelectClause) { - listener.exitSelectClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitAggregationClause) { + listener.exitAggregationClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSelectClause) { - return visitor.visitSelectClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitAggregationClause) { + return visitor.visitAggregationClause(this); } else { return visitor.visitChildren(this); } @@ -20570,32 +22903,34 @@ export class SelectClauseContext extends ParserRuleContext { } -export class SetClauseContext extends ParserRuleContext { - public SET(): TerminalNode { return this.getToken(SparkSqlParser.SET, 0); } - public assignmentList(): AssignmentListContext { - return this.getRuleContext(0, AssignmentListContext); +export class GroupByClauseContext extends ParserRuleContext { + public groupingAnalytics(): GroupingAnalyticsContext | undefined { + return this.tryGetRuleContext(0, GroupingAnalyticsContext); + } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_setClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_groupByClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSetClause) { - listener.enterSetClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterGroupByClause) { + listener.enterGroupByClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSetClause) { - listener.exitSetClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitGroupByClause) { + listener.exitGroupByClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSetClause) { - return visitor.visitSetClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitGroupByClause) { + return visitor.visitGroupByClause(this); } else { return visitor.visitChildren(this); } @@ -20603,39 +22938,61 @@ export class SetClauseContext extends ParserRuleContext { } -export class MatchedClauseContext extends ParserRuleContext { - public _matchedCond!: BooleanExpressionContext; - public WHEN(): TerminalNode { return this.getToken(SparkSqlParser.WHEN, 0); } - public MATCHED(): TerminalNode { return this.getToken(SparkSqlParser.MATCHED, 0); } - public THEN(): TerminalNode { return this.getToken(SparkSqlParser.THEN, 0); } - public matchedAction(): MatchedActionContext { - return this.getRuleContext(0, MatchedActionContext); +export class GroupingAnalyticsContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public groupingSet(): GroupingSetContext[]; + public groupingSet(i: number): GroupingSetContext; + public groupingSet(i?: number): GroupingSetContext | GroupingSetContext[] { + if (i === undefined) { + return this.getRuleContexts(GroupingSetContext); + } else { + return this.getRuleContext(i, GroupingSetContext); + } } - public AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AND, 0); } - public booleanExpression(): BooleanExpressionContext | undefined { - return this.tryGetRuleContext(0, BooleanExpressionContext); + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public KW_ROLLUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLLUP, 0); } + public KW_CUBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CUBE, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } + public KW_GROUPING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GROUPING, 0); } + public KW_SETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SETS, 0); } + public groupingElement(): GroupingElementContext[]; + public groupingElement(i: number): GroupingElementContext; + public groupingElement(i?: number): GroupingElementContext | GroupingElementContext[] { + if (i === undefined) { + return this.getRuleContexts(GroupingElementContext); + } else { + return this.getRuleContext(i, GroupingElementContext); + } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_matchedClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_groupingAnalytics; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterMatchedClause) { - listener.enterMatchedClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterGroupingAnalytics) { + listener.enterGroupingAnalytics(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitMatchedClause) { - listener.exitMatchedClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitGroupingAnalytics) { + listener.exitGroupingAnalytics(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitMatchedClause) { - return visitor.visitMatchedClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitGroupingAnalytics) { + return visitor.visitGroupingAnalytics(this); } else { return visitor.visitChildren(this); } @@ -20643,40 +23000,34 @@ export class MatchedClauseContext extends ParserRuleContext { } -export class NotMatchedClauseContext extends ParserRuleContext { - public _notMatchedCond!: BooleanExpressionContext; - public WHEN(): TerminalNode { return this.getToken(SparkSqlParser.WHEN, 0); } - public NOT(): TerminalNode { return this.getToken(SparkSqlParser.NOT, 0); } - public MATCHED(): TerminalNode { return this.getToken(SparkSqlParser.MATCHED, 0); } - public THEN(): TerminalNode { return this.getToken(SparkSqlParser.THEN, 0); } - public notMatchedAction(): NotMatchedActionContext { - return this.getRuleContext(0, NotMatchedActionContext); +export class GroupingElementContext extends ParserRuleContext { + public groupingAnalytics(): GroupingAnalyticsContext | undefined { + return this.tryGetRuleContext(0, GroupingAnalyticsContext); } - public AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AND, 0); } - public booleanExpression(): BooleanExpressionContext | undefined { - return this.tryGetRuleContext(0, BooleanExpressionContext); + public groupingSet(): GroupingSetContext | undefined { + return this.tryGetRuleContext(0, GroupingSetContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_notMatchedClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_groupingElement; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNotMatchedClause) { - listener.enterNotMatchedClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterGroupingElement) { + listener.enterGroupingElement(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNotMatchedClause) { - listener.exitNotMatchedClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitGroupingElement) { + listener.exitGroupingElement(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNotMatchedClause) { - return visitor.visitNotMatchedClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitGroupingElement) { + return visitor.visitGroupingElement(this); } else { return visitor.visitChildren(this); } @@ -20684,80 +23035,125 @@ export class NotMatchedClauseContext extends ParserRuleContext { } -export class MatchedActionContext extends ParserRuleContext { - public DELETE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DELETE, 0); } - public UPDATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UPDATE, 0); } - public SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SET, 0); } - public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } - public assignmentList(): AssignmentListContext | undefined { - return this.tryGetRuleContext(0, AssignmentListContext); +export class GroupingSetContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_matchedAction; } + public get ruleIndex(): number { return SparkSqlParser.RULE_groupingSet; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterMatchedAction) { - listener.enterMatchedAction(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterGroupingSet) { + listener.enterGroupingSet(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitMatchedAction) { - listener.exitMatchedAction(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitGroupingSet) { + listener.exitGroupingSet(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitMatchedAction) { - return visitor.visitMatchedAction(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitGroupingSet) { + return visitor.visitGroupingSet(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PivotClauseContext extends ParserRuleContext { + public _aggregates!: NamedExpressionSeqContext; + public _pivotValue!: PivotValueContext; + public _pivotValues: PivotValueContext[] = []; + public KW_PIVOT(): TerminalNode { return this.getToken(SparkSqlParser.KW_PIVOT, 0); } + public LEFT_PAREN(): TerminalNode[]; + public LEFT_PAREN(i: number): TerminalNode; + public LEFT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.LEFT_PAREN); + } else { + return this.getToken(SparkSqlParser.LEFT_PAREN, i); + } + } + public KW_FOR(): TerminalNode { return this.getToken(SparkSqlParser.KW_FOR, 0); } + public pivotColumn(): PivotColumnContext { + return this.getRuleContext(0, PivotColumnContext); + } + public KW_IN(): TerminalNode { return this.getToken(SparkSqlParser.KW_IN, 0); } + public RIGHT_PAREN(): TerminalNode[]; + public RIGHT_PAREN(i: number): TerminalNode; + public RIGHT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.RIGHT_PAREN); + } else { + return this.getToken(SparkSqlParser.RIGHT_PAREN, i); + } + } + public namedExpressionSeq(): NamedExpressionSeqContext { + return this.getRuleContext(0, NamedExpressionSeqContext); + } + public pivotValue(): PivotValueContext[]; + public pivotValue(i: number): PivotValueContext; + public pivotValue(i?: number): PivotValueContext | PivotValueContext[] { + if (i === undefined) { + return this.getRuleContexts(PivotValueContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, PivotValueContext); } } -} - - -export class NotMatchedActionContext extends ParserRuleContext { - public _columns!: MultipartIdentifierListContext; - public INSERT(): TerminalNode { return this.getToken(SparkSqlParser.INSERT, 0); } - public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } - public VALUES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VALUES, 0); } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(ExpressionContext); + return this.getTokens(SparkSqlParser.COMMA); } else { - return this.getRuleContext(i, ExpressionContext); + return this.getToken(SparkSqlParser.COMMA, i); } } - public multipartIdentifierList(): MultipartIdentifierListContext | undefined { - return this.tryGetRuleContext(0, MultipartIdentifierListContext); - } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_notMatchedAction; } + public get ruleIndex(): number { return SparkSqlParser.RULE_pivotClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNotMatchedAction) { - listener.enterNotMatchedAction(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPivotClause) { + listener.enterPivotClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNotMatchedAction) { - listener.exitNotMatchedAction(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPivotClause) { + listener.exitPivotClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNotMatchedAction) { - return visitor.visitNotMatchedAction(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPivotClause) { + return visitor.visitPivotClause(this); } else { return visitor.visitChildren(this); } @@ -20765,37 +23161,50 @@ export class NotMatchedActionContext extends ParserRuleContext { } -export class AssignmentListContext extends ParserRuleContext { - public assignment(): AssignmentContext[]; - public assignment(i: number): AssignmentContext; - public assignment(i?: number): AssignmentContext | AssignmentContext[] { +export class PivotColumnContext extends ParserRuleContext { + public _identifier!: IdentifierContext; + public _identifiers: IdentifierContext[] = []; + public identifier(): IdentifierContext[]; + public identifier(i: number): IdentifierContext; + public identifier(i?: number): IdentifierContext | IdentifierContext[] { if (i === undefined) { - return this.getRuleContexts(AssignmentContext); + return this.getRuleContexts(IdentifierContext); } else { - return this.getRuleContext(i, AssignmentContext); + return this.getRuleContext(i, IdentifierContext); + } + } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_assignmentList; } + public get ruleIndex(): number { return SparkSqlParser.RULE_pivotColumn; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAssignmentList) { - listener.enterAssignmentList(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPivotColumn) { + listener.enterPivotColumn(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAssignmentList) { - listener.exitAssignmentList(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPivotColumn) { + listener.exitPivotColumn(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAssignmentList) { - return visitor.visitAssignmentList(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPivotColumn) { + return visitor.visitPivotColumn(this); } else { return visitor.visitChildren(this); } @@ -20803,37 +23212,35 @@ export class AssignmentListContext extends ParserRuleContext { } -export class AssignmentContext extends ParserRuleContext { - public _key!: MultipartIdentifierContext; - public _value!: ExpressionContext; - public EQ(): TerminalNode { return this.getToken(SparkSqlParser.EQ, 0); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } +export class PivotValueContext extends ParserRuleContext { public expression(): ExpressionContext { return this.getRuleContext(0, ExpressionContext); } + public identifier(): IdentifierContext | undefined { + return this.tryGetRuleContext(0, IdentifierContext); + } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_assignment; } + public get ruleIndex(): number { return SparkSqlParser.RULE_pivotValue; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAssignment) { - listener.enterAssignment(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPivotValue) { + listener.enterPivotValue(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAssignment) { - listener.exitAssignment(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPivotValue) { + listener.exitPivotValue(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAssignment) { - return visitor.visitAssignment(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPivotValue) { + return visitor.visitPivotValue(this); } else { return visitor.visitChildren(this); } @@ -20841,32 +23248,43 @@ export class AssignmentContext extends ParserRuleContext { } -export class WhereClauseContext extends ParserRuleContext { - public WHERE(): TerminalNode { return this.getToken(SparkSqlParser.WHERE, 0); } - public booleanExpression(): BooleanExpressionContext { - return this.getRuleContext(0, BooleanExpressionContext); +export class UnpivotClauseContext extends ParserRuleContext { + public _nullOperator!: UnpivotNullClauseContext; + public _operator!: UnpivotOperatorContext; + public KW_UNPIVOT(): TerminalNode { return this.getToken(SparkSqlParser.KW_UNPIVOT, 0); } + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public unpivotOperator(): UnpivotOperatorContext { + return this.getRuleContext(0, UnpivotOperatorContext); } + public identifier(): IdentifierContext | undefined { + return this.tryGetRuleContext(0, IdentifierContext); + } + public unpivotNullClause(): UnpivotNullClauseContext | undefined { + return this.tryGetRuleContext(0, UnpivotNullClauseContext); + } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_whereClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterWhereClause) { - listener.enterWhereClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotClause) { + listener.enterUnpivotClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitWhereClause) { - listener.exitWhereClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotClause) { + listener.exitUnpivotClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitWhereClause) { - return visitor.visitWhereClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotClause) { + return visitor.visitUnpivotClause(this); } else { return visitor.visitChildren(this); } @@ -20874,32 +23292,31 @@ export class WhereClauseContext extends ParserRuleContext { } -export class HavingClauseContext extends ParserRuleContext { - public HAVING(): TerminalNode { return this.getToken(SparkSqlParser.HAVING, 0); } - public booleanExpression(): BooleanExpressionContext { - return this.getRuleContext(0, BooleanExpressionContext); - } +export class UnpivotNullClauseContext extends ParserRuleContext { + public KW_NULLS(): TerminalNode { return this.getToken(SparkSqlParser.KW_NULLS, 0); } + public KW_INCLUDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INCLUDE, 0); } + public KW_EXCLUDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXCLUDE, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_havingClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotNullClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterHavingClause) { - listener.enterHavingClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotNullClause) { + listener.enterUnpivotNullClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitHavingClause) { - listener.exitHavingClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotNullClause) { + listener.exitUnpivotNullClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitHavingClause) { - return visitor.visitHavingClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotNullClause) { + return visitor.visitUnpivotNullClause(this); } else { return visitor.visitChildren(this); } @@ -20907,39 +23324,34 @@ export class HavingClauseContext extends ParserRuleContext { } -export class HintContext extends ParserRuleContext { - public _hintStatement!: HintStatementContext; - public _hintStatements: HintStatementContext[] = []; - public hintStatement(): HintStatementContext[]; - public hintStatement(i: number): HintStatementContext; - public hintStatement(i?: number): HintStatementContext | HintStatementContext[] { - if (i === undefined) { - return this.getRuleContexts(HintStatementContext); - } else { - return this.getRuleContext(i, HintStatementContext); - } +export class UnpivotOperatorContext extends ParserRuleContext { + public unpivotSingleValueColumnClause(): UnpivotSingleValueColumnClauseContext | undefined { + return this.tryGetRuleContext(0, UnpivotSingleValueColumnClauseContext); + } + public unpivotMultiValueColumnClause(): UnpivotMultiValueColumnClauseContext | undefined { + return this.tryGetRuleContext(0, UnpivotMultiValueColumnClauseContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_hint; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotOperator; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterHint) { - listener.enterHint(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotOperator) { + listener.enterUnpivotOperator(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitHint) { - listener.exitHint(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotOperator) { + listener.exitUnpivotOperator(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitHint) { - return visitor.visitHint(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotOperator) { + return visitor.visitUnpivotOperator(this); } else { return visitor.visitChildren(this); } @@ -20947,43 +23359,58 @@ export class HintContext extends ParserRuleContext { } -export class HintStatementContext extends ParserRuleContext { - public _hintName!: IdentifierContext; - public _primaryExpression!: PrimaryExpressionContext; - public _parameters: PrimaryExpressionContext[] = []; - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); +export class UnpivotSingleValueColumnClauseContext extends ParserRuleContext { + public _unpivotColumnAndAlias!: UnpivotColumnAndAliasContext; + public _unpivotColumns: UnpivotColumnAndAliasContext[] = []; + public unpivotValueColumn(): UnpivotValueColumnContext { + return this.getRuleContext(0, UnpivotValueColumnContext); } - public primaryExpression(): PrimaryExpressionContext[]; - public primaryExpression(i: number): PrimaryExpressionContext; - public primaryExpression(i?: number): PrimaryExpressionContext | PrimaryExpressionContext[] { + public KW_FOR(): TerminalNode { return this.getToken(SparkSqlParser.KW_FOR, 0); } + public unpivotNameColumn(): UnpivotNameColumnContext { + return this.getRuleContext(0, UnpivotNameColumnContext); + } + public KW_IN(): TerminalNode { return this.getToken(SparkSqlParser.KW_IN, 0); } + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public unpivotColumnAndAlias(): UnpivotColumnAndAliasContext[]; + public unpivotColumnAndAlias(i: number): UnpivotColumnAndAliasContext; + public unpivotColumnAndAlias(i?: number): UnpivotColumnAndAliasContext | UnpivotColumnAndAliasContext[] { if (i === undefined) { - return this.getRuleContexts(PrimaryExpressionContext); + return this.getRuleContexts(UnpivotColumnAndAliasContext); } else { - return this.getRuleContext(i, PrimaryExpressionContext); + return this.getRuleContext(i, UnpivotColumnAndAliasContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_hintStatement; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotSingleValueColumnClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterHintStatement) { - listener.enterHintStatement(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotSingleValueColumnClause) { + listener.enterUnpivotSingleValueColumnClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitHintStatement) { - listener.exitHintStatement(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotSingleValueColumnClause) { + listener.exitUnpivotSingleValueColumnClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitHintStatement) { - return visitor.visitHintStatement(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotSingleValueColumnClause) { + return visitor.visitUnpivotSingleValueColumnClause(this); } else { return visitor.visitChildren(this); } @@ -20991,50 +23418,82 @@ export class HintStatementContext extends ParserRuleContext { } -export class FromClauseContext extends ParserRuleContext { - public FROM(): TerminalNode { return this.getToken(SparkSqlParser.FROM, 0); } - public relation(): RelationContext[]; - public relation(i: number): RelationContext; - public relation(i?: number): RelationContext | RelationContext[] { +export class UnpivotMultiValueColumnClauseContext extends ParserRuleContext { + public _unpivotValueColumn!: UnpivotValueColumnContext; + public _unpivotValueColumns: UnpivotValueColumnContext[] = []; + public _unpivotColumnSet!: UnpivotColumnSetContext; + public _unpivotColumnSets: UnpivotColumnSetContext[] = []; + public LEFT_PAREN(): TerminalNode[]; + public LEFT_PAREN(i: number): TerminalNode; + public LEFT_PAREN(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(RelationContext); + return this.getTokens(SparkSqlParser.LEFT_PAREN); } else { - return this.getRuleContext(i, RelationContext); + return this.getToken(SparkSqlParser.LEFT_PAREN, i); } } - public lateralView(): LateralViewContext[]; - public lateralView(i: number): LateralViewContext; - public lateralView(i?: number): LateralViewContext | LateralViewContext[] { + public RIGHT_PAREN(): TerminalNode[]; + public RIGHT_PAREN(i: number): TerminalNode; + public RIGHT_PAREN(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(LateralViewContext); + return this.getTokens(SparkSqlParser.RIGHT_PAREN); } else { - return this.getRuleContext(i, LateralViewContext); + return this.getToken(SparkSqlParser.RIGHT_PAREN, i); } } - public pivotClause(): PivotClauseContext | undefined { - return this.tryGetRuleContext(0, PivotClauseContext); + public KW_FOR(): TerminalNode { return this.getToken(SparkSqlParser.KW_FOR, 0); } + public unpivotNameColumn(): UnpivotNameColumnContext { + return this.getRuleContext(0, UnpivotNameColumnContext); + } + public KW_IN(): TerminalNode { return this.getToken(SparkSqlParser.KW_IN, 0); } + public unpivotValueColumn(): UnpivotValueColumnContext[]; + public unpivotValueColumn(i: number): UnpivotValueColumnContext; + public unpivotValueColumn(i?: number): UnpivotValueColumnContext | UnpivotValueColumnContext[] { + if (i === undefined) { + return this.getRuleContexts(UnpivotValueColumnContext); + } else { + return this.getRuleContext(i, UnpivotValueColumnContext); + } + } + public unpivotColumnSet(): UnpivotColumnSetContext[]; + public unpivotColumnSet(i: number): UnpivotColumnSetContext; + public unpivotColumnSet(i?: number): UnpivotColumnSetContext | UnpivotColumnSetContext[] { + if (i === undefined) { + return this.getRuleContexts(UnpivotColumnSetContext); + } else { + return this.getRuleContext(i, UnpivotColumnSetContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_fromClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotMultiValueColumnClause; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFromClause) { - listener.enterFromClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotMultiValueColumnClause) { + listener.enterUnpivotMultiValueColumnClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFromClause) { - listener.exitFromClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotMultiValueColumnClause) { + listener.exitUnpivotMultiValueColumnClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFromClause) { - return visitor.visitFromClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotMultiValueColumnClause) { + return visitor.visitUnpivotMultiValueColumnClause(this); } else { return visitor.visitChildren(this); } @@ -21042,56 +23501,53 @@ export class FromClauseContext extends ParserRuleContext { } -export class AggregationClauseContext extends ParserRuleContext { - public _expression!: ExpressionContext; - public _groupingExpressions: ExpressionContext[] = []; - public _kind!: Token; - public GROUP(): TerminalNode { return this.getToken(SparkSqlParser.GROUP, 0); } - public BY(): TerminalNode { return this.getToken(SparkSqlParser.BY, 0); } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { +export class UnpivotColumnSetContext extends ParserRuleContext { + public _unpivotColumn!: UnpivotColumnContext; + public _unpivotColumns: UnpivotColumnContext[] = []; + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public unpivotColumn(): UnpivotColumnContext[]; + public unpivotColumn(i: number): UnpivotColumnContext; + public unpivotColumn(i?: number): UnpivotColumnContext | UnpivotColumnContext[] { if (i === undefined) { - return this.getRuleContexts(ExpressionContext); + return this.getRuleContexts(UnpivotColumnContext); } else { - return this.getRuleContext(i, ExpressionContext); + return this.getRuleContext(i, UnpivotColumnContext); } } - public WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WITH, 0); } - public SETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SETS, 0); } - public groupingSet(): GroupingSetContext[]; - public groupingSet(i: number): GroupingSetContext; - public groupingSet(i?: number): GroupingSetContext | GroupingSetContext[] { + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(GroupingSetContext); + return this.getTokens(SparkSqlParser.COMMA); } else { - return this.getRuleContext(i, GroupingSetContext); + return this.getToken(SparkSqlParser.COMMA, i); } } - public ROLLUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLLUP, 0); } - public CUBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CUBE, 0); } - public GROUPING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GROUPING, 0); } + public unpivotAlias(): UnpivotAliasContext | undefined { + return this.tryGetRuleContext(0, UnpivotAliasContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_aggregationClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotColumnSet; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAggregationClause) { - listener.enterAggregationClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotColumnSet) { + listener.enterUnpivotColumnSet(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAggregationClause) { - listener.exitAggregationClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotColumnSet) { + listener.exitUnpivotColumnSet(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAggregationClause) { - return visitor.visitAggregationClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotColumnSet) { + return visitor.visitUnpivotColumnSet(this); } else { return visitor.visitChildren(this); } @@ -21099,37 +23555,31 @@ export class AggregationClauseContext extends ParserRuleContext { } -export class GroupingSetContext extends ParserRuleContext { - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } +export class UnpivotValueColumnContext extends ParserRuleContext { + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_groupingSet; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotValueColumn; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterGroupingSet) { - listener.enterGroupingSet(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotValueColumn) { + listener.enterUnpivotValueColumn(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitGroupingSet) { - listener.exitGroupingSet(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotValueColumn) { + listener.exitUnpivotValueColumn(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitGroupingSet) { - return visitor.visitGroupingSet(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotValueColumn) { + return visitor.visitUnpivotValueColumn(this); } else { return visitor.visitChildren(this); } @@ -21137,49 +23587,66 @@ export class GroupingSetContext extends ParserRuleContext { } -export class PivotClauseContext extends ParserRuleContext { - public _aggregates!: NamedExpressionSeqContext; - public _pivotValue!: PivotValueContext; - public _pivotValues: PivotValueContext[] = []; - public PIVOT(): TerminalNode { return this.getToken(SparkSqlParser.PIVOT, 0); } - public FOR(): TerminalNode { return this.getToken(SparkSqlParser.FOR, 0); } - public pivotColumn(): PivotColumnContext { - return this.getRuleContext(0, PivotColumnContext); +export class UnpivotNameColumnContext extends ParserRuleContext { + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); } - public IN(): TerminalNode { return this.getToken(SparkSqlParser.IN, 0); } - public namedExpressionSeq(): NamedExpressionSeqContext { - return this.getRuleContext(0, NamedExpressionSeqContext); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } - public pivotValue(): PivotValueContext[]; - public pivotValue(i: number): PivotValueContext; - public pivotValue(i?: number): PivotValueContext | PivotValueContext[] { - if (i === undefined) { - return this.getRuleContexts(PivotValueContext); + // @Override + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotNameColumn; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotNameColumn) { + listener.enterUnpivotNameColumn(this); + } + } + // @Override + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotNameColumn) { + listener.exitUnpivotNameColumn(this); + } + } + // @Override + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotNameColumn) { + return visitor.visitUnpivotNameColumn(this); } else { - return this.getRuleContext(i, PivotValueContext); + return visitor.visitChildren(this); } } +} + + +export class UnpivotColumnAndAliasContext extends ParserRuleContext { + public unpivotColumn(): UnpivotColumnContext { + return this.getRuleContext(0, UnpivotColumnContext); + } + public unpivotAlias(): UnpivotAliasContext | undefined { + return this.tryGetRuleContext(0, UnpivotAliasContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_pivotClause; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotColumnAndAlias; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPivotClause) { - listener.enterPivotClause(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotColumnAndAlias) { + listener.enterUnpivotColumnAndAlias(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPivotClause) { - listener.exitPivotClause(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotColumnAndAlias) { + listener.exitUnpivotColumnAndAlias(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPivotClause) { - return visitor.visitPivotClause(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotColumnAndAlias) { + return visitor.visitUnpivotColumnAndAlias(this); } else { return visitor.visitChildren(this); } @@ -21187,39 +23654,31 @@ export class PivotClauseContext extends ParserRuleContext { } -export class PivotColumnContext extends ParserRuleContext { - public _identifier!: IdentifierContext; - public _identifiers: IdentifierContext[] = []; - public identifier(): IdentifierContext[]; - public identifier(i: number): IdentifierContext; - public identifier(i?: number): IdentifierContext | IdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(IdentifierContext); - } else { - return this.getRuleContext(i, IdentifierContext); - } +export class UnpivotColumnContext extends ParserRuleContext { + public multipartIdentifier(): MultipartIdentifierContext { + return this.getRuleContext(0, MultipartIdentifierContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_pivotColumn; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotColumn; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPivotColumn) { - listener.enterPivotColumn(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotColumn) { + listener.enterUnpivotColumn(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPivotColumn) { - listener.exitPivotColumn(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotColumn) { + listener.exitUnpivotColumn(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPivotColumn) { - return visitor.visitPivotColumn(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotColumn) { + return visitor.visitUnpivotColumn(this); } else { return visitor.visitChildren(this); } @@ -21227,35 +23686,32 @@ export class PivotColumnContext extends ParserRuleContext { } -export class PivotValueContext extends ParserRuleContext { - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - public identifier(): IdentifierContext | undefined { - return this.tryGetRuleContext(0, IdentifierContext); +export class UnpivotAliasContext extends ParserRuleContext { + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_pivotValue; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unpivotAlias; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPivotValue) { - listener.enterPivotValue(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnpivotAlias) { + listener.enterUnpivotAlias(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPivotValue) { - listener.exitPivotValue(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnpivotAlias) { + listener.exitUnpivotAlias(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPivotValue) { - return visitor.visitPivotValue(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnpivotAlias) { + return visitor.visitUnpivotAlias(this); } else { return visitor.visitChildren(this); } @@ -21267,11 +23723,13 @@ export class LateralViewContext extends ParserRuleContext { public _tblName!: IdentifierContext; public _identifier!: IdentifierContext; public _colName: IdentifierContext[] = []; - public LATERAL(): TerminalNode { return this.getToken(SparkSqlParser.LATERAL, 0); } - public VIEW(): TerminalNode { return this.getToken(SparkSqlParser.VIEW, 0); } + public KW_LATERAL(): TerminalNode { return this.getToken(SparkSqlParser.KW_LATERAL, 0); } + public KW_VIEW(): TerminalNode { return this.getToken(SparkSqlParser.KW_VIEW, 0); } public qualifiedName(): QualifiedNameContext { return this.getRuleContext(0, QualifiedNameContext); } + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } public identifier(): IdentifierContext[]; public identifier(i: number): IdentifierContext; public identifier(i?: number): IdentifierContext | IdentifierContext[] { @@ -21281,7 +23739,7 @@ export class LateralViewContext extends ParserRuleContext { return this.getRuleContext(i, IdentifierContext); } } - public OUTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OUTER, 0); } + public KW_OUTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUTER, 0); } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -21291,26 +23749,35 @@ export class LateralViewContext extends ParserRuleContext { return this.getRuleContext(i, ExpressionContext); } } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_lateralView; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterLateralView) { listener.enterLateralView(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitLateralView) { listener.exitLateralView(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitLateralView) { return visitor.visitLateralView(this); } else { @@ -21321,27 +23788,27 @@ export class LateralViewContext extends ParserRuleContext { export class SetQuantifierContext extends ParserRuleContext { - public DISTINCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DISTINCT, 0); } - public ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ALL, 0); } + public KW_DISTINCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DISTINCT, 0); } + public KW_ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALL, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_setQuantifier; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterSetQuantifier) { listener.enterSetQuantifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitSetQuantifier) { listener.exitSetQuantifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitSetQuantifier) { return visitor.visitSetQuantifier(this); } else { @@ -21355,13 +23822,14 @@ export class RelationContext extends ParserRuleContext { public relationPrimary(): RelationPrimaryContext { return this.getRuleContext(0, RelationPrimaryContext); } - public joinRelation(): JoinRelationContext[]; - public joinRelation(i: number): JoinRelationContext; - public joinRelation(i?: number): JoinRelationContext | JoinRelationContext[] { + public KW_LATERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LATERAL, 0); } + public relationExtension(): RelationExtensionContext[]; + public relationExtension(i: number): RelationExtensionContext; + public relationExtension(i?: number): RelationExtensionContext | RelationExtensionContext[] { if (i === undefined) { - return this.getRuleContexts(JoinRelationContext); + return this.getRuleContexts(RelationExtensionContext); } else { - return this.getRuleContext(i, JoinRelationContext); + return this.getRuleContext(i, RelationExtensionContext); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { @@ -21370,19 +23838,19 @@ export class RelationContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_relation; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterRelation) { listener.enterRelation(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitRelation) { listener.exitRelation(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitRelation) { return visitor.visitRelation(this); } else { @@ -21392,38 +23860,77 @@ export class RelationContext extends ParserRuleContext { } +export class RelationExtensionContext extends ParserRuleContext { + public joinRelation(): JoinRelationContext | undefined { + return this.tryGetRuleContext(0, JoinRelationContext); + } + public pivotClause(): PivotClauseContext | undefined { + return this.tryGetRuleContext(0, PivotClauseContext); + } + public unpivotClause(): UnpivotClauseContext | undefined { + return this.tryGetRuleContext(0, UnpivotClauseContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return SparkSqlParser.RULE_relationExtension; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterRelationExtension) { + listener.enterRelationExtension(this); + } + } + // @Override + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitRelationExtension) { + listener.exitRelationExtension(this); + } + } + // @Override + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitRelationExtension) { + return visitor.visitRelationExtension(this); + } else { + return visitor.visitChildren(this); + } + } +} + + export class JoinRelationContext extends ParserRuleContext { public _right!: RelationPrimaryContext; - public JOIN(): TerminalNode { return this.getToken(SparkSqlParser.JOIN, 0); } + public KW_JOIN(): TerminalNode { return this.getToken(SparkSqlParser.KW_JOIN, 0); } public relationPrimary(): RelationPrimaryContext { return this.getRuleContext(0, RelationPrimaryContext); } public joinType(): JoinTypeContext | undefined { return this.tryGetRuleContext(0, JoinTypeContext); } + public KW_LATERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LATERAL, 0); } public joinCriteria(): JoinCriteriaContext | undefined { return this.tryGetRuleContext(0, JoinCriteriaContext); } - public NATURAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NATURAL, 0); } + public KW_NATURAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NATURAL, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_joinRelation; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterJoinRelation) { listener.enterJoinRelation(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitJoinRelation) { listener.exitJoinRelation(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitJoinRelation) { return visitor.visitJoinRelation(this); } else { @@ -21434,33 +23941,33 @@ export class JoinRelationContext extends ParserRuleContext { export class JoinTypeContext extends ParserRuleContext { - public INNER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INNER, 0); } - public CROSS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CROSS, 0); } - public LEFT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT, 0); } - public OUTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OUTER, 0); } - public SEMI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SEMI, 0); } - public RIGHT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT, 0); } - public FULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FULL, 0); } - public ANTI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ANTI, 0); } + public KW_INNER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INNER, 0); } + public KW_CROSS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CROSS, 0); } + public KW_LEFT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LEFT, 0); } + public KW_OUTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUTER, 0); } + public KW_SEMI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SEMI, 0); } + public KW_RIGHT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RIGHT, 0); } + public KW_FULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FULL, 0); } + public KW_ANTI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANTI, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_joinType; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterJoinType) { listener.enterJoinType(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitJoinType) { listener.exitJoinType(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitJoinType) { return visitor.visitJoinType(this); } else { @@ -21471,11 +23978,11 @@ export class JoinTypeContext extends ParserRuleContext { export class JoinCriteriaContext extends ParserRuleContext { - public ON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ON, 0); } + public KW_ON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ON, 0); } public booleanExpression(): BooleanExpressionContext | undefined { return this.tryGetRuleContext(0, BooleanExpressionContext); } - public USING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.USING, 0); } + public KW_USING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USING, 0); } public identifierList(): IdentifierListContext | undefined { return this.tryGetRuleContext(0, IdentifierListContext); } @@ -21485,19 +23992,19 @@ export class JoinCriteriaContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_joinCriteria; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterJoinCriteria) { listener.enterJoinCriteria(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitJoinCriteria) { listener.exitJoinCriteria(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitJoinCriteria) { return visitor.visitJoinCriteria(this); } else { @@ -21508,29 +24015,50 @@ export class JoinCriteriaContext extends ParserRuleContext { export class SampleContext extends ParserRuleContext { - public TABLESAMPLE(): TerminalNode { return this.getToken(SparkSqlParser.TABLESAMPLE, 0); } + public _seed!: Token; + public KW_TABLESAMPLE(): TerminalNode { return this.getToken(SparkSqlParser.KW_TABLESAMPLE, 0); } + public LEFT_PAREN(): TerminalNode[]; + public LEFT_PAREN(i: number): TerminalNode; + public LEFT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.LEFT_PAREN); + } else { + return this.getToken(SparkSqlParser.LEFT_PAREN, i); + } + } + public RIGHT_PAREN(): TerminalNode[]; + public RIGHT_PAREN(i: number): TerminalNode; + public RIGHT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.RIGHT_PAREN); + } else { + return this.getToken(SparkSqlParser.RIGHT_PAREN, i); + } + } public sampleMethod(): SampleMethodContext | undefined { return this.tryGetRuleContext(0, SampleMethodContext); } + public KW_REPEATABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPEATABLE, 0); } + public INTEGER_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTEGER_VALUE, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_sample; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterSample) { listener.enterSample(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitSample) { listener.exitSample(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitSample) { return visitor.visitSample(this); } else { @@ -21541,84 +24069,13 @@ export class SampleContext extends ParserRuleContext { export class SampleMethodContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_sampleMethod; } - public copyFrom(ctx: SampleMethodContext): void { - super.copyFrom(ctx); - } -} -export class SampleByPercentileContext extends SampleMethodContext { public _negativeSign!: Token; public _percentage!: Token; - public PERCENTLIT(): TerminalNode { return this.getToken(SparkSqlParser.PERCENTLIT, 0); } - public INTEGER_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTEGER_VALUE, 0); } - public DECIMAL_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DECIMAL_VALUE, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: SampleMethodContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSampleByPercentile) { - listener.enterSampleByPercentile(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSampleByPercentile) { - listener.exitSampleByPercentile(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSampleByPercentile) { - return visitor.visitSampleByPercentile(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class SampleByRowsContext extends SampleMethodContext { - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - public ROWS(): TerminalNode { return this.getToken(SparkSqlParser.ROWS, 0); } - constructor(ctx: SampleMethodContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSampleByRows) { - listener.enterSampleByRows(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSampleByRows) { - listener.exitSampleByRows(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSampleByRows) { - return visitor.visitSampleByRows(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class SampleByBucketContext extends SampleMethodContext { public _sampleType!: Token; public _numerator!: Token; public _denominator!: Token; - public OUT(): TerminalNode { return this.getToken(SparkSqlParser.OUT, 0); } - public OF(): TerminalNode { return this.getToken(SparkSqlParser.OF, 0); } - public BUCKET(): TerminalNode { return this.getToken(SparkSqlParser.BUCKET, 0); } + public _bytes!: ExpressionContext; + public KW_PERCENTLIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PERCENTLIT, 0); } public INTEGER_VALUE(): TerminalNode[]; public INTEGER_VALUE(i: number): TerminalNode; public INTEGER_VALUE(i?: number): TerminalNode | TerminalNode[] { @@ -21628,63 +24085,45 @@ export class SampleByBucketContext extends SampleMethodContext { return this.getToken(SparkSqlParser.INTEGER_VALUE, i); } } - public ON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ON, 0); } + public DECIMAL_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DECIMAL_VALUE, 0); } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + public KW_ROWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROWS, 0); } + public KW_OUT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUT, 0); } + public KW_OF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OF, 0); } + public KW_BUCKET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BUCKET, 0); } + public KW_ON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ON, 0); } public identifier(): IdentifierContext | undefined { return this.tryGetRuleContext(0, IdentifierContext); } public qualifiedName(): QualifiedNameContext | undefined { return this.tryGetRuleContext(0, QualifiedNameContext); } - constructor(ctx: SampleMethodContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSampleByBucket) { - listener.enterSampleByBucket(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSampleByBucket) { - listener.exitSampleByBucket(this); - } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSampleByBucket) { - return visitor.visitSampleByBucket(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class SampleByBytesContext extends SampleMethodContext { - public _bytes!: ExpressionContext; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(ctx: SampleMethodContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_sampleMethod; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSampleByBytes) { - listener.enterSampleByBytes(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterSampleMethod) { + listener.enterSampleMethod(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSampleByBytes) { - listener.exitSampleByBytes(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitSampleMethod) { + listener.exitSampleMethod(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSampleByBytes) { - return visitor.visitSampleByBytes(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitSampleMethod) { + return visitor.visitSampleMethod(this); } else { return visitor.visitChildren(this); } @@ -21693,28 +24132,30 @@ export class SampleByBytesContext extends SampleMethodContext { export class IdentifierListContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } public identifierSeq(): IdentifierSeqContext { return this.getRuleContext(0, IdentifierSeqContext); } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_identifierList; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterIdentifierList) { listener.enterIdentifierList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitIdentifierList) { listener.exitIdentifierList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitIdentifierList) { return visitor.visitIdentifierList(this); } else { @@ -21736,25 +24177,34 @@ export class IdentifierSeqContext extends ParserRuleContext { return this.getRuleContext(i, ErrorCapturingIdentifierContext); } } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_identifierSeq; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterIdentifierSeq) { listener.enterIdentifierSeq(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitIdentifierSeq) { listener.exitIdentifierSeq(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitIdentifierSeq) { return visitor.visitIdentifierSeq(this); } else { @@ -21765,6 +24215,7 @@ export class IdentifierSeqContext extends ParserRuleContext { export class OrderedIdentifierListContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } public orderedIdentifier(): OrderedIdentifierContext[]; public orderedIdentifier(i: number): OrderedIdentifierContext; public orderedIdentifier(i?: number): OrderedIdentifierContext | OrderedIdentifierContext[] { @@ -21774,25 +24225,35 @@ export class OrderedIdentifierListContext extends ParserRuleContext { return this.getRuleContext(i, OrderedIdentifierContext); } } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_orderedIdentifierList; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterOrderedIdentifierList) { listener.enterOrderedIdentifierList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitOrderedIdentifierList) { listener.exitOrderedIdentifierList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitOrderedIdentifierList) { return visitor.visitOrderedIdentifierList(this); } else { @@ -21808,27 +24269,27 @@ export class OrderedIdentifierContext extends ParserRuleContext { public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { return this.getRuleContext(0, ErrorCapturingIdentifierContext); } - public ASC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASC, 0); } - public DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESC, 0); } + public KW_ASC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ASC, 0); } + public KW_DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DESC, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_orderedIdentifier; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterOrderedIdentifier) { listener.enterOrderedIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitOrderedIdentifier) { listener.exitOrderedIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitOrderedIdentifier) { return visitor.visitOrderedIdentifier(this); } else { @@ -21839,6 +24300,7 @@ export class OrderedIdentifierContext extends ParserRuleContext { export class IdentifierCommentListContext extends ParserRuleContext { + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } public identifierComment(): IdentifierCommentContext[]; public identifierComment(i: number): IdentifierCommentContext; public identifierComment(i?: number): IdentifierCommentContext | IdentifierCommentContext[] { @@ -21848,25 +24310,35 @@ export class IdentifierCommentListContext extends ParserRuleContext { return this.getRuleContext(i, IdentifierCommentContext); } } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_identifierCommentList; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterIdentifierCommentList) { listener.enterIdentifierCommentList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitIdentifierCommentList) { listener.exitIdentifierCommentList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitIdentifierCommentList) { return visitor.visitIdentifierCommentList(this); } else { @@ -21889,196 +24361,76 @@ export class IdentifierCommentContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_identifierComment; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterIdentifierComment) { listener.enterIdentifierComment(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitIdentifierComment) { - listener.exitIdentifierComment(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitIdentifierComment) { - return visitor.visitIdentifierComment(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class RelationPrimaryContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_relationPrimary; } - public copyFrom(ctx: RelationPrimaryContext): void { - super.copyFrom(ctx); - } -} -export class TableNameContext extends RelationPrimaryContext { - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public tableAlias(): TableAliasContext { - return this.getRuleContext(0, TableAliasContext); - } - public sample(): SampleContext | undefined { - return this.tryGetRuleContext(0, SampleContext); - } - constructor(ctx: RelationPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTableName) { - listener.enterTableName(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTableName) { - listener.exitTableName(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTableName) { - return visitor.visitTableName(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class AliasedQueryContext extends RelationPrimaryContext { - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); - } - public tableAlias(): TableAliasContext { - return this.getRuleContext(0, TableAliasContext); - } - public sample(): SampleContext | undefined { - return this.tryGetRuleContext(0, SampleContext); - } - constructor(ctx: RelationPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAliasedQuery) { - listener.enterAliasedQuery(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAliasedQuery) { - listener.exitAliasedQuery(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAliasedQuery) { - return visitor.visitAliasedQuery(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class AliasedRelationContext extends RelationPrimaryContext { - public relation(): RelationContext { - return this.getRuleContext(0, RelationContext); - } - public tableAlias(): TableAliasContext { - return this.getRuleContext(0, TableAliasContext); - } - public sample(): SampleContext | undefined { - return this.tryGetRuleContext(0, SampleContext); - } - constructor(ctx: RelationPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAliasedRelation) { - listener.enterAliasedRelation(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAliasedRelation) { - listener.exitAliasedRelation(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAliasedRelation) { - return visitor.visitAliasedRelation(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class InlineTableDefault2Context extends RelationPrimaryContext { - public inlineTable(): InlineTableContext { - return this.getRuleContext(0, InlineTableContext); - } - constructor(ctx: RelationPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterInlineTableDefault2) { - listener.enterInlineTableDefault2(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitInlineTableDefault2) { - listener.exitInlineTableDefault2(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitIdentifierComment) { + listener.exitIdentifierComment(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitInlineTableDefault2) { - return visitor.visitInlineTableDefault2(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitIdentifierComment) { + return visitor.visitIdentifierComment(this); } else { return visitor.visitChildren(this); } } } -export class TableValuedFunctionContext extends RelationPrimaryContext { - public functionTable(): FunctionTableContext { - return this.getRuleContext(0, FunctionTableContext); + + +export class RelationPrimaryContext extends ParserRuleContext { + public identifierReference(): IdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, IdentifierReferenceContext); + } + public tableAlias(): TableAliasContext | undefined { + return this.tryGetRuleContext(0, TableAliasContext); + } + public temporalClause(): TemporalClauseContext | undefined { + return this.tryGetRuleContext(0, TemporalClauseContext); + } + public sample(): SampleContext | undefined { + return this.tryGetRuleContext(0, SampleContext); + } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public query(): QueryContext | undefined { + return this.tryGetRuleContext(0, QueryContext); } - constructor(ctx: RelationPrimaryContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public relation(): RelationContext | undefined { + return this.tryGetRuleContext(0, RelationContext); } + public inlineTable(): InlineTableContext | undefined { + return this.tryGetRuleContext(0, InlineTableContext); + } + public functionTable(): FunctionTableContext | undefined { + return this.tryGetRuleContext(0, FunctionTableContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return SparkSqlParser.RULE_relationPrimary; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTableValuedFunction) { - listener.enterTableValuedFunction(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterRelationPrimary) { + listener.enterRelationPrimary(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTableValuedFunction) { - listener.exitTableValuedFunction(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitRelationPrimary) { + listener.exitRelationPrimary(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTableValuedFunction) { - return visitor.visitTableValuedFunction(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitRelationPrimary) { + return visitor.visitRelationPrimary(this); } else { return visitor.visitChildren(this); } @@ -22087,7 +24439,7 @@ export class TableValuedFunctionContext extends RelationPrimaryContext { export class InlineTableContext extends ParserRuleContext { - public VALUES(): TerminalNode { return this.getToken(SparkSqlParser.VALUES, 0); } + public KW_VALUES(): TerminalNode { return this.getToken(SparkSqlParser.KW_VALUES, 0); } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -22100,25 +24452,34 @@ export class InlineTableContext extends ParserRuleContext { public tableAlias(): TableAliasContext { return this.getRuleContext(0, TableAliasContext); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_inlineTable; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterInlineTable) { listener.enterInlineTable(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitInlineTable) { listener.exitInlineTable(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitInlineTable) { return visitor.visitInlineTable(this); } else { @@ -22128,44 +24489,40 @@ export class InlineTableContext extends ParserRuleContext { } -export class FunctionTableContext extends ParserRuleContext { - public _funcName!: ErrorCapturingIdentifierContext; - public tableAlias(): TableAliasContext { - return this.getRuleContext(0, TableAliasContext); +export class FunctionTableSubqueryArgumentContext extends ParserRuleContext { + public KW_TABLE(): TerminalNode { return this.getToken(SparkSqlParser.KW_TABLE, 0); } + public tableIdentifierReference(): TableIdentifierReferenceContext | undefined { + return this.tryGetRuleContext(0, TableIdentifierReferenceContext); } - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { - return this.getRuleContext(0, ErrorCapturingIdentifierContext); + public tableArgumentPartitioning(): TableArgumentPartitioningContext | undefined { + return this.tryGetRuleContext(0, TableArgumentPartitioningContext); } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public query(): QueryContext | undefined { + return this.tryGetRuleContext(0, QueryContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_functionTable; } + public get ruleIndex(): number { return SparkSqlParser.RULE_functionTableSubqueryArgument; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFunctionTable) { - listener.enterFunctionTable(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFunctionTableSubqueryArgument) { + listener.enterFunctionTableSubqueryArgument(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFunctionTable) { - listener.exitFunctionTable(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFunctionTableSubqueryArgument) { + listener.exitFunctionTableSubqueryArgument(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFunctionTable) { - return visitor.visitFunctionTable(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFunctionTableSubqueryArgument) { + return visitor.visitFunctionTableSubqueryArgument(this); } else { return visitor.visitChildren(this); } @@ -22173,156 +24530,128 @@ export class FunctionTableContext extends ParserRuleContext { } -export class TableAliasContext extends ParserRuleContext { - public strictIdentifier(): StrictIdentifierContext | undefined { - return this.tryGetRuleContext(0, StrictIdentifierContext); +export class TableArgumentPartitioningContext extends ParserRuleContext { + public _expression!: ExpressionContext; + public _partition: ExpressionContext[] = []; + public KW_BY(): TerminalNode[]; + public KW_BY(i: number): TerminalNode; + public KW_BY(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_BY); + } else { + return this.getToken(SparkSqlParser.KW_BY, i); + } } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public identifierList(): IdentifierListContext | undefined { - return this.tryGetRuleContext(0, IdentifierListContext); + public KW_WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WITH, 0); } + public KW_SINGLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SINGLE, 0); } + public KW_PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITION, 0); } + public KW_ORDER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ORDER, 0); } + public KW_SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORT, 0); } + public KW_DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DISTRIBUTE, 0); } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); + public sortItem(): SortItemContext[]; + public sortItem(i: number): SortItemContext; + public sortItem(i?: number): SortItemContext | SortItemContext[] { + if (i === undefined) { + return this.getRuleContexts(SortItemContext); + } else { + return this.getRuleContext(i, SortItemContext); + } } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_tableAlias; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTableAlias) { - listener.enterTableAlias(this); + public LEFT_PAREN(): TerminalNode[]; + public LEFT_PAREN(i: number): TerminalNode; + public LEFT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.LEFT_PAREN); + } else { + return this.getToken(SparkSqlParser.LEFT_PAREN, i); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTableAlias) { - listener.exitTableAlias(this); + public RIGHT_PAREN(): TerminalNode[]; + public RIGHT_PAREN(i: number): TerminalNode; + public RIGHT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.RIGHT_PAREN); + } else { + return this.getToken(SparkSqlParser.RIGHT_PAREN, i); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTableAlias) { - return visitor.visitTableAlias(this); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.COMMA, i); } } -} - - -export class RowFormatContext extends ParserRuleContext { constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_rowFormat; } - public copyFrom(ctx: RowFormatContext): void { - super.copyFrom(ctx); - } -} -export class RowFormatSerdeContext extends RowFormatContext { - public _name!: Token; - public _props!: TablePropertyListContext; - public ROW(): TerminalNode { return this.getToken(SparkSqlParser.ROW, 0); } - public FORMAT(): TerminalNode { return this.getToken(SparkSqlParser.FORMAT, 0); } - public SERDE(): TerminalNode { return this.getToken(SparkSqlParser.SERDE, 0); } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } - public WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WITH, 0); } - public SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDEPROPERTIES, 0); } - public tablePropertyList(): TablePropertyListContext | undefined { - return this.tryGetRuleContext(0, TablePropertyListContext); - } - constructor(ctx: RowFormatContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_tableArgumentPartitioning; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRowFormatSerde) { - listener.enterRowFormatSerde(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTableArgumentPartitioning) { + listener.enterTableArgumentPartitioning(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRowFormatSerde) { - listener.exitRowFormatSerde(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTableArgumentPartitioning) { + listener.exitTableArgumentPartitioning(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRowFormatSerde) { - return visitor.visitRowFormatSerde(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTableArgumentPartitioning) { + return visitor.visitTableArgumentPartitioning(this); } else { return visitor.visitChildren(this); } } } -export class RowFormatDelimitedContext extends RowFormatContext { - public _fieldsTerminatedBy!: Token; - public _escapedBy!: Token; - public _collectionItemsTerminatedBy!: Token; - public _keysTerminatedBy!: Token; - public _linesSeparatedBy!: Token; - public _nullDefinedAs!: Token; - public ROW(): TerminalNode { return this.getToken(SparkSqlParser.ROW, 0); } - public FORMAT(): TerminalNode { return this.getToken(SparkSqlParser.FORMAT, 0); } - public DELIMITED(): TerminalNode { return this.getToken(SparkSqlParser.DELIMITED, 0); } - public FIELDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FIELDS, 0); } - public TERMINATED(): TerminalNode[]; - public TERMINATED(i: number): TerminalNode; - public TERMINATED(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.TERMINATED); - } else { - return this.getToken(SparkSqlParser.TERMINATED, i); - } + + +export class FunctionTableNamedArgumentExpressionContext extends ParserRuleContext { + public _key!: IdentifierContext; + public _table!: FunctionTableSubqueryArgumentContext; + public FAT_ARROW(): TerminalNode { return this.getToken(SparkSqlParser.FAT_ARROW, 0); } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); } - public BY(): TerminalNode[]; - public BY(i: number): TerminalNode; - public BY(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.BY); - } else { - return this.getToken(SparkSqlParser.BY, i); - } - } - public COLLECTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLLECTION, 0); } - public ITEMS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ITEMS, 0); } - public MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MAP, 0); } - public KEYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KEYS, 0); } - public LINES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LINES, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } - public DEFINED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DEFINED, 0); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public STRING(): TerminalNode[]; - public STRING(i: number): TerminalNode; - public STRING(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.STRING); - } else { - return this.getToken(SparkSqlParser.STRING, i); - } + public functionTableSubqueryArgument(): FunctionTableSubqueryArgumentContext { + return this.getRuleContext(0, FunctionTableSubqueryArgumentContext); } - public ESCAPED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ESCAPED, 0); } - constructor(ctx: RowFormatContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRowFormatDelimited) { - listener.enterRowFormatDelimited(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_functionTableNamedArgumentExpression; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFunctionTableNamedArgumentExpression) { + listener.enterFunctionTableNamedArgumentExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRowFormatDelimited) { - listener.exitRowFormatDelimited(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFunctionTableNamedArgumentExpression) { + listener.exitFunctionTableNamedArgumentExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRowFormatDelimited) { - return visitor.visitRowFormatDelimited(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFunctionTableNamedArgumentExpression) { + return visitor.visitFunctionTableNamedArgumentExpression(this); } else { return visitor.visitChildren(this); } @@ -22330,37 +24659,34 @@ export class RowFormatDelimitedContext extends RowFormatContext { } -export class MultipartIdentifierListContext extends ParserRuleContext { - public multipartIdentifier(): MultipartIdentifierContext[]; - public multipartIdentifier(i: number): MultipartIdentifierContext; - public multipartIdentifier(i?: number): MultipartIdentifierContext | MultipartIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(MultipartIdentifierContext); - } else { - return this.getRuleContext(i, MultipartIdentifierContext); - } +export class FunctionTableReferenceArgumentContext extends ParserRuleContext { + public functionTableSubqueryArgument(): FunctionTableSubqueryArgumentContext | undefined { + return this.tryGetRuleContext(0, FunctionTableSubqueryArgumentContext); + } + public functionTableNamedArgumentExpression(): FunctionTableNamedArgumentExpressionContext | undefined { + return this.tryGetRuleContext(0, FunctionTableNamedArgumentExpressionContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_multipartIdentifierList; } + public get ruleIndex(): number { return SparkSqlParser.RULE_functionTableReferenceArgument; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterMultipartIdentifierList) { - listener.enterMultipartIdentifierList(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFunctionTableReferenceArgument) { + listener.enterFunctionTableReferenceArgument(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitMultipartIdentifierList) { - listener.exitMultipartIdentifierList(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFunctionTableReferenceArgument) { + listener.exitFunctionTableReferenceArgument(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitMultipartIdentifierList) { - return visitor.visitMultipartIdentifierList(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFunctionTableReferenceArgument) { + return visitor.visitFunctionTableReferenceArgument(this); } else { return visitor.visitChildren(this); } @@ -22368,39 +24694,34 @@ export class MultipartIdentifierListContext extends ParserRuleContext { } -export class MultipartIdentifierContext extends ParserRuleContext { - public _errorCapturingIdentifier!: ErrorCapturingIdentifierContext; - public _parts: ErrorCapturingIdentifierContext[] = []; - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext[]; - public errorCapturingIdentifier(i: number): ErrorCapturingIdentifierContext; - public errorCapturingIdentifier(i?: number): ErrorCapturingIdentifierContext | ErrorCapturingIdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(ErrorCapturingIdentifierContext); - } else { - return this.getRuleContext(i, ErrorCapturingIdentifierContext); - } +export class FunctionTableArgumentContext extends ParserRuleContext { + public functionTableReferenceArgument(): FunctionTableReferenceArgumentContext | undefined { + return this.tryGetRuleContext(0, FunctionTableReferenceArgumentContext); + } + public functionArgument(): FunctionArgumentContext | undefined { + return this.tryGetRuleContext(0, FunctionArgumentContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_multipartIdentifier; } + public get ruleIndex(): number { return SparkSqlParser.RULE_functionTableArgument; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterMultipartIdentifier) { - listener.enterMultipartIdentifier(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFunctionTableArgument) { + listener.enterFunctionTableArgument(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitMultipartIdentifier) { - listener.exitMultipartIdentifier(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFunctionTableArgument) { + listener.exitFunctionTableArgument(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitMultipartIdentifier) { - return visitor.visitMultipartIdentifier(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFunctionTableArgument) { + return visitor.visitFunctionTableArgument(this); } else { return visitor.visitChildren(this); } @@ -22408,39 +24729,55 @@ export class MultipartIdentifierContext extends ParserRuleContext { } -export class TableIdentifierContext extends ParserRuleContext { - public _db!: ErrorCapturingIdentifierContext; - public _table!: ErrorCapturingIdentifierContext; - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext[]; - public errorCapturingIdentifier(i: number): ErrorCapturingIdentifierContext; - public errorCapturingIdentifier(i?: number): ErrorCapturingIdentifierContext | ErrorCapturingIdentifierContext[] { +export class FunctionTableContext extends ParserRuleContext { + public _funcName!: FunctionNameContext; + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public tableAlias(): TableAliasContext { + return this.getRuleContext(0, TableAliasContext); + } + public functionName(): FunctionNameContext { + return this.getRuleContext(0, FunctionNameContext); + } + public functionTableArgument(): FunctionTableArgumentContext[]; + public functionTableArgument(i: number): FunctionTableArgumentContext; + public functionTableArgument(i?: number): FunctionTableArgumentContext | FunctionTableArgumentContext[] { if (i === undefined) { - return this.getRuleContexts(ErrorCapturingIdentifierContext); + return this.getRuleContexts(FunctionTableArgumentContext); } else { - return this.getRuleContext(i, ErrorCapturingIdentifierContext); + return this.getRuleContext(i, FunctionTableArgumentContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_tableIdentifier; } + public get ruleIndex(): number { return SparkSqlParser.RULE_functionTable; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTableIdentifier) { - listener.enterTableIdentifier(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFunctionTable) { + listener.enterFunctionTable(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTableIdentifier) { - listener.exitTableIdentifier(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFunctionTable) { + listener.exitFunctionTable(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTableIdentifier) { - return visitor.visitTableIdentifier(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFunctionTable) { + return visitor.visitFunctionTable(this); } else { return visitor.visitChildren(this); } @@ -22448,39 +24785,35 @@ export class TableIdentifierContext extends ParserRuleContext { } -export class NamedExpressionContext extends ParserRuleContext { - public _name!: ErrorCapturingIdentifierContext; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); +export class TableAliasContext extends ParserRuleContext { + public strictIdentifier(): StrictIdentifierContext | undefined { + return this.tryGetRuleContext(0, StrictIdentifierContext); } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } public identifierList(): IdentifierListContext | undefined { return this.tryGetRuleContext(0, IdentifierListContext); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext | undefined { - return this.tryGetRuleContext(0, ErrorCapturingIdentifierContext); - } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_namedExpression; } + public get ruleIndex(): number { return SparkSqlParser.RULE_tableAlias; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNamedExpression) { - listener.enterNamedExpression(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTableAlias) { + listener.enterTableAlias(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNamedExpression) { - listener.exitNamedExpression(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTableAlias) { + listener.exitTableAlias(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNamedExpression) { - return visitor.visitNamedExpression(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTableAlias) { + return visitor.visitTableAlias(this); } else { return visitor.visitChildren(this); } @@ -22488,77 +24821,82 @@ export class NamedExpressionContext extends ParserRuleContext { } -export class NamedExpressionSeqContext extends ParserRuleContext { - public namedExpression(): NamedExpressionContext[]; - public namedExpression(i: number): NamedExpressionContext; - public namedExpression(i?: number): NamedExpressionContext | NamedExpressionContext[] { +export class RowFormatContext extends ParserRuleContext { + public _name!: StringLitContext; + public _props!: PropertyListContext; + public _fieldsTerminatedBy!: StringLitContext; + public _escapedBy!: StringLitContext; + public _collectionItemsTerminatedBy!: StringLitContext; + public _keysTerminatedBy!: StringLitContext; + public _linesSeparatedBy!: StringLitContext; + public _nullDefinedAs!: StringLitContext; + public KW_ROW(): TerminalNode { return this.getToken(SparkSqlParser.KW_ROW, 0); } + public KW_FORMAT(): TerminalNode { return this.getToken(SparkSqlParser.KW_FORMAT, 0); } + public KW_SERDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDE, 0); } + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext; + public stringLit(i?: number): StringLitContext | StringLitContext[] { if (i === undefined) { - return this.getRuleContexts(NamedExpressionContext); + return this.getRuleContexts(StringLitContext); } else { - return this.getRuleContext(i, NamedExpressionContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_namedExpressionSeq; } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNamedExpressionSeq) { - listener.enterNamedExpressionSeq(this); + return this.getRuleContext(i, StringLitContext); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNamedExpressionSeq) { - listener.exitNamedExpressionSeq(this); - } + public KW_WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WITH, 0); } + public KW_SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDEPROPERTIES, 0); } + public propertyList(): PropertyListContext | undefined { + return this.tryGetRuleContext(0, PropertyListContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNamedExpressionSeq) { - return visitor.visitNamedExpressionSeq(this); + public KW_DELIMITED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DELIMITED, 0); } + public KW_FIELDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FIELDS, 0); } + public KW_TERMINATED(): TerminalNode[]; + public KW_TERMINATED(i: number): TerminalNode; + public KW_TERMINATED(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_TERMINATED); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.KW_TERMINATED, i); } } -} - - -export class TransformListContext extends ParserRuleContext { - public _transform!: TransformContext; - public _transforms: TransformContext[] = []; - public transform(): TransformContext[]; - public transform(i: number): TransformContext; - public transform(i?: number): TransformContext | TransformContext[] { + public KW_BY(): TerminalNode[]; + public KW_BY(i: number): TerminalNode; + public KW_BY(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(TransformContext); + return this.getTokens(SparkSqlParser.KW_BY); } else { - return this.getRuleContext(i, TransformContext); + return this.getToken(SparkSqlParser.KW_BY, i); } } + public KW_COLLECTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLLECTION, 0); } + public KW_ITEMS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ITEMS, 0); } + public KW_MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MAP, 0); } + public KW_KEYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_KEYS, 0); } + public KW_LINES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LINES, 0); } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + public KW_DEFINED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEFINED, 0); } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public KW_ESCAPED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ESCAPED, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_transformList; } + public get ruleIndex(): number { return SparkSqlParser.RULE_rowFormat; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTransformList) { - listener.enterTransformList(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterRowFormat) { + listener.enterRowFormat(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTransformList) { - listener.exitTransformList(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitRowFormat) { + listener.exitRowFormat(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTransformList) { - return visitor.visitTransformList(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitRowFormat) { + return visitor.visitRowFormat(this); } else { return visitor.visitChildren(this); } @@ -22566,81 +24904,95 @@ export class TransformListContext extends ParserRuleContext { } -export class TransformContext extends ParserRuleContext { +export class MultipartIdentifierListContext extends ParserRuleContext { + public multipartIdentifier(): MultipartIdentifierContext[]; + public multipartIdentifier(i: number): MultipartIdentifierContext; + public multipartIdentifier(i?: number): MultipartIdentifierContext | MultipartIdentifierContext[] { + if (i === undefined) { + return this.getRuleContexts(MultipartIdentifierContext); + } else { + return this.getRuleContext(i, MultipartIdentifierContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_transform; } - public copyFrom(ctx: TransformContext): void { - super.copyFrom(ctx); - } -} -export class IdentityTransformContext extends TransformContext { - public qualifiedName(): QualifiedNameContext { - return this.getRuleContext(0, QualifiedNameContext); - } - constructor(ctx: TransformContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_multipartIdentifierList; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterIdentityTransform) { - listener.enterIdentityTransform(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterMultipartIdentifierList) { + listener.enterMultipartIdentifierList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitIdentityTransform) { - listener.exitIdentityTransform(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitMultipartIdentifierList) { + listener.exitMultipartIdentifierList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitIdentityTransform) { - return visitor.visitIdentityTransform(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitMultipartIdentifierList) { + return visitor.visitMultipartIdentifierList(this); } else { return visitor.visitChildren(this); } } } -export class ApplyTransformContext extends TransformContext { - public _transformName!: IdentifierContext; - public _transformArgument!: TransformArgumentContext; - public _argument: TransformArgumentContext[] = []; - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); + + +export class MultipartIdentifierContext extends ParserRuleContext { + public _errorCapturingIdentifier!: ErrorCapturingIdentifierContext; + public _parts: ErrorCapturingIdentifierContext[] = []; + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext[]; + public errorCapturingIdentifier(i: number): ErrorCapturingIdentifierContext; + public errorCapturingIdentifier(i?: number): ErrorCapturingIdentifierContext | ErrorCapturingIdentifierContext[] { + if (i === undefined) { + return this.getRuleContexts(ErrorCapturingIdentifierContext); + } else { + return this.getRuleContext(i, ErrorCapturingIdentifierContext); + } } - public transformArgument(): TransformArgumentContext[]; - public transformArgument(i: number): TransformArgumentContext; - public transformArgument(i?: number): TransformArgumentContext | TransformArgumentContext[] { + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(TransformArgumentContext); + return this.getTokens(SparkSqlParser.DOT); } else { - return this.getRuleContext(i, TransformArgumentContext); + return this.getToken(SparkSqlParser.DOT, i); } } - constructor(ctx: TransformContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterApplyTransform) { - listener.enterApplyTransform(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_multipartIdentifier; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterMultipartIdentifier) { + listener.enterMultipartIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitApplyTransform) { - listener.exitApplyTransform(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitMultipartIdentifier) { + listener.exitMultipartIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitApplyTransform) { - return visitor.visitApplyTransform(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitMultipartIdentifier) { + return visitor.visitMultipartIdentifier(this); } else { return visitor.visitChildren(this); } @@ -22648,34 +25000,46 @@ export class ApplyTransformContext extends TransformContext { } -export class TransformArgumentContext extends ParserRuleContext { - public qualifiedName(): QualifiedNameContext | undefined { - return this.tryGetRuleContext(0, QualifiedNameContext); +export class MultipartIdentifierPropertyListContext extends ParserRuleContext { + public multipartIdentifierProperty(): MultipartIdentifierPropertyContext[]; + public multipartIdentifierProperty(i: number): MultipartIdentifierPropertyContext; + public multipartIdentifierProperty(i?: number): MultipartIdentifierPropertyContext | MultipartIdentifierPropertyContext[] { + if (i === undefined) { + return this.getRuleContexts(MultipartIdentifierPropertyContext); + } else { + return this.getRuleContext(i, MultipartIdentifierPropertyContext); + } } - public constant(): ConstantContext | undefined { - return this.tryGetRuleContext(0, ConstantContext); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_transformArgument; } + public get ruleIndex(): number { return SparkSqlParser.RULE_multipartIdentifierPropertyList; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTransformArgument) { - listener.enterTransformArgument(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterMultipartIdentifierPropertyList) { + listener.enterMultipartIdentifierPropertyList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTransformArgument) { - listener.exitTransformArgument(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitMultipartIdentifierPropertyList) { + listener.exitMultipartIdentifierPropertyList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTransformArgument) { - return visitor.visitTransformArgument(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitMultipartIdentifierPropertyList) { + return visitor.visitMultipartIdentifierPropertyList(this); } else { return visitor.visitChildren(this); } @@ -22683,31 +25047,36 @@ export class TransformArgumentContext extends ParserRuleContext { } -export class ExpressionContext extends ParserRuleContext { - public booleanExpression(): BooleanExpressionContext { - return this.getRuleContext(0, BooleanExpressionContext); +export class MultipartIdentifierPropertyContext extends ParserRuleContext { + public _options!: PropertyListContext; + public multipartIdentifier(): MultipartIdentifierContext { + return this.getRuleContext(0, MultipartIdentifierContext); + } + public KW_OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OPTIONS, 0); } + public propertyList(): PropertyListContext | undefined { + return this.tryGetRuleContext(0, PropertyListContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_expression; } + public get ruleIndex(): number { return SparkSqlParser.RULE_multipartIdentifierProperty; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterExpression) { - listener.enterExpression(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterMultipartIdentifierProperty) { + listener.enterMultipartIdentifierProperty(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitExpression) { - listener.exitExpression(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitMultipartIdentifierProperty) { + listener.exitMultipartIdentifierProperty(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitExpression) { - return visitor.visitExpression(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitMultipartIdentifierProperty) { + return visitor.visitMultipartIdentifierProperty(this); } else { return visitor.visitChildren(this); } @@ -22715,143 +25084,168 @@ export class ExpressionContext extends ParserRuleContext { } -export class BooleanExpressionContext extends ParserRuleContext { +export class TableIdentifierContext extends ParserRuleContext { + public _db!: ErrorCapturingIdentifierContext; + public _table!: ErrorCapturingIdentifierContext; + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext[]; + public errorCapturingIdentifier(i: number): ErrorCapturingIdentifierContext; + public errorCapturingIdentifier(i?: number): ErrorCapturingIdentifierContext | ErrorCapturingIdentifierContext[] { + if (i === undefined) { + return this.getRuleContexts(ErrorCapturingIdentifierContext); + } else { + return this.getRuleContext(i, ErrorCapturingIdentifierContext); + } + } + public DOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DOT, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_booleanExpression; } - public copyFrom(ctx: BooleanExpressionContext): void { - super.copyFrom(ctx); - } -} -export class LogicalNotContext extends BooleanExpressionContext { - public NOT(): TerminalNode { return this.getToken(SparkSqlParser.NOT, 0); } - public booleanExpression(): BooleanExpressionContext { - return this.getRuleContext(0, BooleanExpressionContext); - } - constructor(ctx: BooleanExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_tableIdentifier; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterLogicalNot) { - listener.enterLogicalNot(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTableIdentifier) { + listener.enterTableIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitLogicalNot) { - listener.exitLogicalNot(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTableIdentifier) { + listener.exitTableIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitLogicalNot) { - return visitor.visitLogicalNot(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTableIdentifier) { + return visitor.visitTableIdentifier(this); } else { return visitor.visitChildren(this); } } } -export class ExistsContext extends BooleanExpressionContext { - public EXISTS(): TerminalNode { return this.getToken(SparkSqlParser.EXISTS, 0); } - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); + + +export class FunctionIdentifierContext extends ParserRuleContext { + public _db!: ErrorCapturingIdentifierContext; + public _function!: ErrorCapturingIdentifierContext; + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext[]; + public errorCapturingIdentifier(i: number): ErrorCapturingIdentifierContext; + public errorCapturingIdentifier(i?: number): ErrorCapturingIdentifierContext | ErrorCapturingIdentifierContext[] { + if (i === undefined) { + return this.getRuleContexts(ErrorCapturingIdentifierContext); + } else { + return this.getRuleContext(i, ErrorCapturingIdentifierContext); + } } - constructor(ctx: BooleanExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public DOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DOT, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterExists) { - listener.enterExists(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_functionIdentifier; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFunctionIdentifier) { + listener.enterFunctionIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitExists) { - listener.exitExists(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFunctionIdentifier) { + listener.exitFunctionIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitExists) { - return visitor.visitExists(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFunctionIdentifier) { + return visitor.visitFunctionIdentifier(this); } else { return visitor.visitChildren(this); } } } -export class PredicatedContext extends BooleanExpressionContext { - public valueExpression(): ValueExpressionContext { - return this.getRuleContext(0, ValueExpressionContext); + + +export class NamedExpressionContext extends ParserRuleContext { + public _name!: ErrorCapturingIdentifierContext; + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); } - public predicate(): PredicateContext | undefined { - return this.tryGetRuleContext(0, PredicateContext); + public identifierList(): IdentifierListContext | undefined { + return this.tryGetRuleContext(0, IdentifierListContext); + } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext | undefined { + return this.tryGetRuleContext(0, ErrorCapturingIdentifierContext); } - constructor(ctx: BooleanExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPredicated) { - listener.enterPredicated(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_namedExpression; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNamedExpression) { + listener.enterNamedExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPredicated) { - listener.exitPredicated(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNamedExpression) { + listener.exitNamedExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPredicated) { - return visitor.visitPredicated(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNamedExpression) { + return visitor.visitNamedExpression(this); } else { return visitor.visitChildren(this); } } } -export class LogicalBinaryContext extends BooleanExpressionContext { - public _left!: BooleanExpressionContext; - public _operator!: Token; - public _right!: BooleanExpressionContext; - public booleanExpression(): BooleanExpressionContext[]; - public booleanExpression(i: number): BooleanExpressionContext; - public booleanExpression(i?: number): BooleanExpressionContext | BooleanExpressionContext[] { + + +export class NamedExpressionSeqContext extends ParserRuleContext { + public namedExpression(): NamedExpressionContext[]; + public namedExpression(i: number): NamedExpressionContext; + public namedExpression(i?: number): NamedExpressionContext | NamedExpressionContext[] { if (i === undefined) { - return this.getRuleContexts(BooleanExpressionContext); + return this.getRuleContexts(NamedExpressionContext); } else { - return this.getRuleContext(i, BooleanExpressionContext); + return this.getRuleContext(i, NamedExpressionContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); } } - public AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AND, 0); } - public OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OR, 0); } - constructor(ctx: BooleanExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterLogicalBinary) { - listener.enterLogicalBinary(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_namedExpressionSeq; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNamedExpressionSeq) { + listener.enterNamedExpressionSeq(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitLogicalBinary) { - listener.exitLogicalBinary(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNamedExpressionSeq) { + listener.exitNamedExpressionSeq(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitLogicalBinary) { - return visitor.visitLogicalBinary(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNamedExpressionSeq) { + return visitor.visitNamedExpressionSeq(this); } else { return visitor.visitChildren(this); } @@ -22859,74 +25253,50 @@ export class LogicalBinaryContext extends BooleanExpressionContext { } -export class PredicateContext extends ParserRuleContext { - public _kind!: Token; - public _lower!: ValueExpressionContext; - public _upper!: ValueExpressionContext; - public _pattern!: ValueExpressionContext; - public _quantifier!: Token; - public _escapeChar!: Token; - public _right!: ValueExpressionContext; - public AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AND, 0); } - public BETWEEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BETWEEN, 0); } - public valueExpression(): ValueExpressionContext[]; - public valueExpression(i: number): ValueExpressionContext; - public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { +export class PartitionFieldListContext extends ParserRuleContext { + public _partitionField!: PartitionFieldContext; + public _fields: PartitionFieldContext[] = []; + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } + public partitionField(): PartitionFieldContext[]; + public partitionField(i: number): PartitionFieldContext; + public partitionField(i?: number): PartitionFieldContext | PartitionFieldContext[] { if (i === undefined) { - return this.getRuleContexts(ValueExpressionContext); + return this.getRuleContexts(PartitionFieldContext); } else { - return this.getRuleContext(i, ValueExpressionContext); + return this.getRuleContext(i, PartitionFieldContext); } } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(ExpressionContext); + return this.getTokens(SparkSqlParser.COMMA); } else { - return this.getRuleContext(i, ExpressionContext); + return this.getToken(SparkSqlParser.COMMA, i); } } - public IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IN, 0); } - public query(): QueryContext | undefined { - return this.tryGetRuleContext(0, QueryContext); - } - public RLIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RLIKE, 0); } - public LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIKE, 0); } - public ANY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ANY, 0); } - public SOME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SOME, 0); } - public ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ALL, 0); } - public ESCAPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ESCAPE, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } - public IS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IS, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } - public TRUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRUE, 0); } - public FALSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FALSE, 0); } - public UNKNOWN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNKNOWN, 0); } - public FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FROM, 0); } - public DISTINCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DISTINCT, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_predicate; } + public get ruleIndex(): number { return SparkSqlParser.RULE_partitionFieldList; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPredicate) { - listener.enterPredicate(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPartitionFieldList) { + listener.enterPartitionFieldList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPredicate) { - listener.exitPredicate(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPartitionFieldList) { + listener.exitPartitionFieldList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPredicate) { - return visitor.visitPredicate(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPartitionFieldList) { + return visitor.visitPartitionFieldList(this); } else { return visitor.visitChildren(this); } @@ -22934,161 +25304,125 @@ export class PredicateContext extends ParserRuleContext { } -export class ValueExpressionContext extends ParserRuleContext { +export class PartitionFieldContext extends ParserRuleContext { + public transform(): TransformContext | undefined { + return this.tryGetRuleContext(0, TransformContext); + } + public colType(): ColTypeContext | undefined { + return this.tryGetRuleContext(0, ColTypeContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_valueExpression; } - public copyFrom(ctx: ValueExpressionContext): void { - super.copyFrom(ctx); - } -} -export class ValueExpressionDefaultContext extends ValueExpressionContext { - public primaryExpression(): PrimaryExpressionContext { - return this.getRuleContext(0, PrimaryExpressionContext); - } - constructor(ctx: ValueExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_partitionField; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterValueExpressionDefault) { - listener.enterValueExpressionDefault(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPartitionField) { + listener.enterPartitionField(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitValueExpressionDefault) { - listener.exitValueExpressionDefault(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPartitionField) { + listener.exitPartitionField(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitValueExpressionDefault) { - return visitor.visitValueExpressionDefault(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPartitionField) { + return visitor.visitPartitionField(this); } else { return visitor.visitChildren(this); } } } -export class ArithmeticUnaryContext extends ValueExpressionContext { - public _operator!: Token; - public valueExpression(): ValueExpressionContext { - return this.getRuleContext(0, ValueExpressionContext); - } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - public PLUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLUS, 0); } - public TILDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TILDE, 0); } - constructor(ctx: ValueExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterArithmeticUnary) { - listener.enterArithmeticUnary(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitArithmeticUnary) { - listener.exitArithmeticUnary(this); - } + + +export class TransformContext extends ParserRuleContext { + public _transformName!: IdentifierContext; + public qualifiedName(): QualifiedNameContext | undefined { + return this.tryGetRuleContext(0, QualifiedNameContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitArithmeticUnary) { - return visitor.visitArithmeticUnary(this); + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public transformArgument(): TransformArgumentContext[]; + public transformArgument(i: number): TransformArgumentContext; + public transformArgument(i?: number): TransformArgumentContext | TransformArgumentContext[] { + if (i === undefined) { + return this.getRuleContexts(TransformArgumentContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, TransformArgumentContext); } } -} -export class ArithmeticBinaryContext extends ValueExpressionContext { - public _left!: ValueExpressionContext; - public _operator!: Token; - public _right!: ValueExpressionContext; - public valueExpression(): ValueExpressionContext[]; - public valueExpression(i: number): ValueExpressionContext; - public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public identifier(): IdentifierContext | undefined { + return this.tryGetRuleContext(0, IdentifierContext); + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(ValueExpressionContext); + return this.getTokens(SparkSqlParser.COMMA); } else { - return this.getRuleContext(i, ValueExpressionContext); + return this.getToken(SparkSqlParser.COMMA, i); } } - public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } - public SLASH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SLASH, 0); } - public PERCENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PERCENT, 0); } - public DIV(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIV, 0); } - public PLUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLUS, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - public CONCAT_PIPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CONCAT_PIPE, 0); } - public AMPERSAND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AMPERSAND, 0); } - public HAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.HAT, 0); } - public PIPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PIPE, 0); } - constructor(ctx: ValueExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterArithmeticBinary) { - listener.enterArithmeticBinary(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_transform; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTransform) { + listener.enterTransform(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitArithmeticBinary) { - listener.exitArithmeticBinary(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTransform) { + listener.exitTransform(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitArithmeticBinary) { - return visitor.visitArithmeticBinary(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTransform) { + return visitor.visitTransform(this); } else { return visitor.visitChildren(this); } } } -export class ComparisonContext extends ValueExpressionContext { - public _left!: ValueExpressionContext; - public _right!: ValueExpressionContext; - public comparisonOperator(): ComparisonOperatorContext { - return this.getRuleContext(0, ComparisonOperatorContext); + + +export class TransformArgumentContext extends ParserRuleContext { + public qualifiedName(): QualifiedNameContext | undefined { + return this.tryGetRuleContext(0, QualifiedNameContext); } - public valueExpression(): ValueExpressionContext[]; - public valueExpression(i: number): ValueExpressionContext; - public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ValueExpressionContext); - } else { - return this.getRuleContext(i, ValueExpressionContext); - } + public constant(): ConstantContext | undefined { + return this.tryGetRuleContext(0, ConstantContext); } - constructor(ctx: ValueExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterComparison) { - listener.enterComparison(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_transformArgument; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterTransformArgument) { + listener.enterTransformArgument(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitComparison) { - listener.exitComparison(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitTransformArgument) { + listener.exitTransformArgument(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitComparison) { - return visitor.visitComparison(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitTransformArgument) { + return visitor.visitTransformArgument(this); } else { return visitor.visitChildren(this); } @@ -23096,92 +25430,112 @@ export class ComparisonContext extends ValueExpressionContext { } -export class PrimaryExpressionContext extends ParserRuleContext { +export class ExpressionContext extends ParserRuleContext { + public booleanExpression(): BooleanExpressionContext { + return this.getRuleContext(0, BooleanExpressionContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_primaryExpression; } - public copyFrom(ctx: PrimaryExpressionContext): void { - super.copyFrom(ctx); - } -} -export class CurrentDatetimeContext extends PrimaryExpressionContext { - public _name!: Token; - public CURRENT_DATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT_DATE, 0); } - public CURRENT_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT_TIMESTAMP, 0); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_expression; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCurrentDatetime) { - listener.enterCurrentDatetime(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterExpression) { + listener.enterExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCurrentDatetime) { - listener.exitCurrentDatetime(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitExpression) { + listener.exitExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCurrentDatetime) { - return visitor.visitCurrentDatetime(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitExpression) { + return visitor.visitExpression(this); } else { return visitor.visitChildren(this); } } } -export class SearchedCaseContext extends PrimaryExpressionContext { - public _elseExpression!: ExpressionContext; - public CASE(): TerminalNode { return this.getToken(SparkSqlParser.CASE, 0); } - public END(): TerminalNode { return this.getToken(SparkSqlParser.END, 0); } - public whenClause(): WhenClauseContext[]; - public whenClause(i: number): WhenClauseContext; - public whenClause(i?: number): WhenClauseContext | WhenClauseContext[] { - if (i === undefined) { - return this.getRuleContexts(WhenClauseContext); + + +export class NamedArgumentExpressionContext extends ParserRuleContext { + public _key!: IdentifierContext; + public _value!: ExpressionContext; + public FAT_ARROW(): TerminalNode { return this.getToken(SparkSqlParser.FAT_ARROW, 0); } + public identifier(): IdentifierContext { + return this.getRuleContext(0, IdentifierContext); + } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return SparkSqlParser.RULE_namedArgumentExpression; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNamedArgumentExpression) { + listener.enterNamedArgumentExpression(this); + } + } + // @Override + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNamedArgumentExpression) { + listener.exitNamedArgumentExpression(this); + } + } + // @Override + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNamedArgumentExpression) { + return visitor.visitNamedArgumentExpression(this); } else { - return this.getRuleContext(i, WhenClauseContext); + return visitor.visitChildren(this); } } - public ELSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ELSE, 0); } +} + + +export class FunctionArgumentContext extends ParserRuleContext { public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public namedArgumentExpression(): NamedArgumentExpressionContext | undefined { + return this.tryGetRuleContext(0, NamedArgumentExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSearchedCase) { - listener.enterSearchedCase(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_functionArgument; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterFunctionArgument) { + listener.enterFunctionArgument(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSearchedCase) { - listener.exitSearchedCase(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitFunctionArgument) { + listener.exitFunctionArgument(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSearchedCase) { - return visitor.visitSearchedCase(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitFunctionArgument) { + return visitor.visitFunctionArgument(this); } else { return visitor.visitChildren(this); } } } -export class SimpleCaseContext extends PrimaryExpressionContext { - public _value!: ExpressionContext; - public _elseExpression!: ExpressionContext; - public CASE(): TerminalNode { return this.getToken(SparkSqlParser.CASE, 0); } - public END(): TerminalNode { return this.getToken(SparkSqlParser.END, 0); } + + +export class ExpressionSeqContext extends ParserRuleContext { public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -23191,276 +25545,397 @@ export class SimpleCaseContext extends PrimaryExpressionContext { return this.getRuleContext(i, ExpressionContext); } } - public whenClause(): WhenClauseContext[]; - public whenClause(i: number): WhenClauseContext; - public whenClause(i?: number): WhenClauseContext | WhenClauseContext[] { + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(WhenClauseContext); + return this.getTokens(SparkSqlParser.COMMA); } else { - return this.getRuleContext(i, WhenClauseContext); + return this.getToken(SparkSqlParser.COMMA, i); } } - public ELSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ELSE, 0); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSimpleCase) { - listener.enterSimpleCase(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_expressionSeq; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterExpressionSeq) { + listener.enterExpressionSeq(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSimpleCase) { - listener.exitSimpleCase(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitExpressionSeq) { + listener.exitExpressionSeq(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSimpleCase) { - return visitor.visitSimpleCase(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitExpressionSeq) { + return visitor.visitExpressionSeq(this); } else { return visitor.visitChildren(this); } } } -export class CastContext extends PrimaryExpressionContext { - public CAST(): TerminalNode { return this.getToken(SparkSqlParser.CAST, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); + + +export class BooleanExpressionContext extends ParserRuleContext { + public _left!: BooleanExpressionContext; + public _operator!: Token; + public _right!: BooleanExpressionContext; + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public booleanExpression(): BooleanExpressionContext[]; + public booleanExpression(i: number): BooleanExpressionContext; + public booleanExpression(i?: number): BooleanExpressionContext | BooleanExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(BooleanExpressionContext); + } else { + return this.getRuleContext(i, BooleanExpressionContext); + } } - public AS(): TerminalNode { return this.getToken(SparkSqlParser.AS, 0); } - public dataType(): DataTypeContext { - return this.getRuleContext(0, DataTypeContext); + public KW_EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXISTS, 0); } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public query(): QueryContext | undefined { + return this.tryGetRuleContext(0, QueryContext); + } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public valueExpression(): ValueExpressionContext | undefined { + return this.tryGetRuleContext(0, ValueExpressionContext); + } + public predicate(): PredicateContext | undefined { + return this.tryGetRuleContext(0, PredicateContext); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AND, 0); } + public KW_OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OR, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterCast) { - listener.enterCast(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_booleanExpression; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterBooleanExpression) { + listener.enterBooleanExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitCast) { - listener.exitCast(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitBooleanExpression) { + listener.exitBooleanExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitCast) { - return visitor.visitCast(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitBooleanExpression) { + return visitor.visitBooleanExpression(this); } else { return visitor.visitChildren(this); } } } -export class StructContext extends PrimaryExpressionContext { - public _namedExpression!: NamedExpressionContext; - public _argument: NamedExpressionContext[] = []; - public STRUCT(): TerminalNode { return this.getToken(SparkSqlParser.STRUCT, 0); } - public namedExpression(): NamedExpressionContext[]; - public namedExpression(i: number): NamedExpressionContext; - public namedExpression(i?: number): NamedExpressionContext | NamedExpressionContext[] { + + +export class PredicateContext extends ParserRuleContext { + public _kind!: Token; + public _lower!: ValueExpressionContext; + public _upper!: ValueExpressionContext; + public _pattern!: ValueExpressionContext; + public _quantifier!: Token; + public _escapeChar!: StringLitContext; + public _right!: ValueExpressionContext; + public KW_AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AND, 0); } + public KW_BETWEEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BETWEEN, 0); } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext; + public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { if (i === undefined) { - return this.getRuleContexts(NamedExpressionContext); + return this.getRuleContexts(ValueExpressionContext); } else { - return this.getRuleContext(i, NamedExpressionContext); - } - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterStruct) { - listener.enterStruct(this); + return this.getRuleContext(i, ValueExpressionContext); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitStruct) { - listener.exitStruct(this); + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitStruct) { - return visitor.visitStruct(this); + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public KW_IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IN, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); } else { - return visitor.visitChildren(this); + return this.getToken(SparkSqlParser.COMMA, i); } } -} -export class FirstContext extends PrimaryExpressionContext { - public FIRST(): TerminalNode { return this.getToken(SparkSqlParser.FIRST, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); + public query(): QueryContext | undefined { + return this.tryGetRuleContext(0, QueryContext); } - public IGNORE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IGNORE, 0); } - public NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULLS, 0); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_RLIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RLIKE, 0); } + public KW_LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIKE, 0); } + public KW_ILIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ILIKE, 0); } + public KW_ANY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANY, 0); } + public KW_SOME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SOME, 0); } + public KW_ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALL, 0); } + public KW_ESCAPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ESCAPE, 0); } + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); + } + public KW_IS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IS, 0); } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + public KW_TRUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRUE, 0); } + public KW_FALSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FALSE, 0); } + public KW_UNKNOWN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNKNOWN, 0); } + public KW_FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FROM, 0); } + public KW_DISTINCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DISTINCT, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFirst) { - listener.enterFirst(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_predicate; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPredicate) { + listener.enterPredicate(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFirst) { - listener.exitFirst(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPredicate) { + listener.exitPredicate(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFirst) { - return visitor.visitFirst(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPredicate) { + return visitor.visitPredicate(this); } else { return visitor.visitChildren(this); } } } -export class LastContext extends PrimaryExpressionContext { - public LAST(): TerminalNode { return this.getToken(SparkSqlParser.LAST, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); + + +export class ValueExpressionContext extends ParserRuleContext { + public _left!: ValueExpressionContext; + public _operator!: Token; + public _right!: ValueExpressionContext; + public primaryExpression(): PrimaryExpressionContext | undefined { + return this.tryGetRuleContext(0, PrimaryExpressionContext); + } + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext; + public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); + } else { + return this.getRuleContext(i, ValueExpressionContext); + } + } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } + public PLUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLUS, 0); } + public TILDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TILDE, 0); } + public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } + public SLASH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SLASH, 0); } + public PERCENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PERCENT, 0); } + public KW_DIV(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIV, 0); } + public CONCAT_PIPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CONCAT_PIPE, 0); } + public AMPERSAND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AMPERSAND, 0); } + public HAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.HAT, 0); } + public PIPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PIPE, 0); } + public comparisonOperator(): ComparisonOperatorContext | undefined { + return this.tryGetRuleContext(0, ComparisonOperatorContext); } - public IGNORE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IGNORE, 0); } - public NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULLS, 0); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterLast) { - listener.enterLast(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_valueExpression; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterValueExpression) { + listener.enterValueExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitLast) { - listener.exitLast(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitValueExpression) { + listener.exitValueExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitLast) { - return visitor.visitLast(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitValueExpression) { + return visitor.visitValueExpression(this); } else { return visitor.visitChildren(this); } } } -export class PositionContext extends PrimaryExpressionContext { - public _substr!: ValueExpressionContext; - public _str!: ValueExpressionContext; - public POSITION(): TerminalNode { return this.getToken(SparkSqlParser.POSITION, 0); } - public IN(): TerminalNode { return this.getToken(SparkSqlParser.IN, 0); } - public valueExpression(): ValueExpressionContext[]; - public valueExpression(i: number): ValueExpressionContext; - public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ValueExpressionContext); - } else { - return this.getRuleContext(i, ValueExpressionContext); - } - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class DatetimeUnitContext extends ParserRuleContext { + public KW_YEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEAR, 0); } + public KW_QUARTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_QUARTER, 0); } + public KW_MONTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MONTH, 0); } + public KW_WEEK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WEEK, 0); } + public KW_DAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAY, 0); } + public KW_DAYOFYEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAYOFYEAR, 0); } + public KW_HOUR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HOUR, 0); } + public KW_MINUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MINUTE, 0); } + public KW_SECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SECOND, 0); } + public KW_MILLISECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MILLISECOND, 0); } + public KW_MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MICROSECOND, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPosition) { - listener.enterPosition(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_datetimeUnit; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterDatetimeUnit) { + listener.enterDatetimeUnit(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPosition) { - listener.exitPosition(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitDatetimeUnit) { + listener.exitDatetimeUnit(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPosition) { - return visitor.visitPosition(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitDatetimeUnit) { + return visitor.visitDatetimeUnit(this); } else { return visitor.visitChildren(this); } } } -export class ConstantDefaultContext extends PrimaryExpressionContext { - public constant(): ConstantContext { - return this.getRuleContext(0, ConstantContext); - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class PrimaryExpressionContext extends ParserRuleContext { + public _value!: PrimaryExpressionContext; + public _base!: PrimaryExpressionContext; + public _name!: Token; + public _unit!: DatetimeUnitContext; + public _invalidUnit!: StringLitContext; + public _unitsAmount!: ValueExpressionContext; + public _timestamp!: ValueExpressionContext; + public _startTimestamp!: ValueExpressionContext; + public _endTimestamp!: ValueExpressionContext; + public _elseExpression!: ExpressionContext; + public _substr!: ValueExpressionContext; + public _str!: ValueExpressionContext; + public _where!: BooleanExpressionContext; + public _nullsOption!: Token; + public _field!: IdentifierContext; + public _source!: ValueExpressionContext; + public _pos!: ValueExpressionContext; + public _len!: ValueExpressionContext; + public _trimOption!: Token; + public _trimStr!: ValueExpressionContext; + public _srcStr!: ValueExpressionContext; + public _input!: ValueExpressionContext; + public _replace!: ValueExpressionContext; + public _position!: ValueExpressionContext; + public _length!: ValueExpressionContext; + public _percentage!: ValueExpressionContext; + public _index!: ValueExpressionContext; + public _fieldName!: IdentifierContext; + public KW_CURRENT_DATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT_DATE, 0); } + public KW_CURRENT_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT_TIMESTAMP, 0); } + public KW_CURRENT_USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT_USER, 0); } + public KW_USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USER, 0); } + public KW_SESSION_USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SESSION_USER, 0); } + public LEFT_PAREN(): TerminalNode[]; + public LEFT_PAREN(i: number): TerminalNode; + public LEFT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.LEFT_PAREN); + } else { + return this.getToken(SparkSqlParser.LEFT_PAREN, i); + } } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterConstantDefault) { - listener.enterConstantDefault(this); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); } } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitConstantDefault) { - listener.exitConstantDefault(this); + public RIGHT_PAREN(): TerminalNode[]; + public RIGHT_PAREN(i: number): TerminalNode; + public RIGHT_PAREN(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.RIGHT_PAREN); + } else { + return this.getToken(SparkSqlParser.RIGHT_PAREN, i); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitConstantDefault) { - return visitor.visitConstantDefault(this); + public valueExpression(): ValueExpressionContext[]; + public valueExpression(i: number): ValueExpressionContext; + public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ValueExpressionContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, ValueExpressionContext); } } -} -export class StarContext extends PrimaryExpressionContext { - public ASTERISK(): TerminalNode { return this.getToken(SparkSqlParser.ASTERISK, 0); } - public qualifiedName(): QualifiedNameContext | undefined { - return this.tryGetRuleContext(0, QualifiedNameContext); - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_TIMESTAMPADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMPADD, 0); } + public KW_DATEADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATEADD, 0); } + public KW_DATE_ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE_ADD, 0); } + public datetimeUnit(): DatetimeUnitContext | undefined { + return this.tryGetRuleContext(0, DatetimeUnitContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterStar) { - listener.enterStar(this); - } + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitStar) { - listener.exitStar(this); + public KW_TIMESTAMPDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMPDIFF, 0); } + public KW_DATEDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATEDIFF, 0); } + public KW_DATE_DIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE_DIFF, 0); } + public KW_TIMEDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMEDIFF, 0); } + public KW_CASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CASE, 0); } + public KW_END(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_END, 0); } + public whenClause(): WhenClauseContext[]; + public whenClause(i: number): WhenClauseContext; + public whenClause(i?: number): WhenClauseContext | WhenClauseContext[] { + if (i === undefined) { + return this.getRuleContexts(WhenClauseContext); + } else { + return this.getRuleContext(i, WhenClauseContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitStar) { - return visitor.visitStar(this); + public KW_ELSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ELSE, 0); } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, ExpressionContext); } } -} -export class RowConstructorContext extends PrimaryExpressionContext { + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public dataType(): DataTypeContext | undefined { + return this.tryGetRuleContext(0, DataTypeContext); + } + public KW_CAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CAST, 0); } + public KW_TRY_CAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRY_CAST, 0); } + public KW_STRUCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRUCT, 0); } public namedExpression(): NamedExpressionContext[]; public namedExpression(i: number): NamedExpressionContext; public namedExpression(i?: number): NamedExpressionContext | NamedExpressionContext[] { @@ -23470,114 +25945,50 @@ export class RowConstructorContext extends PrimaryExpressionContext { return this.getRuleContext(i, NamedExpressionContext); } } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRowConstructor) { - listener.enterRowConstructor(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRowConstructor) { - listener.exitRowConstructor(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRowConstructor) { - return visitor.visitRowConstructor(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class SubqueryExpressionContext extends PrimaryExpressionContext { - public query(): QueryContext { - return this.getRuleContext(0, QueryContext); + public KW_FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FIRST, 0); } + public KW_IGNORE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IGNORE, 0); } + public KW_NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULLS, 0); } + public KW_ANY_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANY_VALUE, 0); } + public KW_LAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LAST, 0); } + public KW_POSITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_POSITION, 0); } + public KW_IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IN, 0); } + public constant(): ConstantContext | undefined { + return this.tryGetRuleContext(0, ConstantContext); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } + public qualifiedName(): QualifiedNameContext | undefined { + return this.tryGetRuleContext(0, QualifiedNameContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSubqueryExpression) { - listener.enterSubqueryExpression(this); - } + public DOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DOT, 0); } + public query(): QueryContext | undefined { + return this.tryGetRuleContext(0, QueryContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSubqueryExpression) { - listener.exitSubqueryExpression(this); - } + public KW_IDENTIFIER_KW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IDENTIFIER_KW, 0); } + public functionName(): FunctionNameContext | undefined { + return this.tryGetRuleContext(0, FunctionNameContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSubqueryExpression) { - return visitor.visitSubqueryExpression(this); + public functionArgument(): FunctionArgumentContext[]; + public functionArgument(i: number): FunctionArgumentContext; + public functionArgument(i?: number): FunctionArgumentContext | FunctionArgumentContext[] { + if (i === undefined) { + return this.getRuleContexts(FunctionArgumentContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, FunctionArgumentContext); } } -} -export class FunctionCallContext extends PrimaryExpressionContext { - public _expression!: ExpressionContext; - public _argument: ExpressionContext[] = []; - public _where!: BooleanExpressionContext; - public functionName(): FunctionNameContext { - return this.getRuleContext(0, FunctionNameContext); - } - public FILTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FILTER, 0); } - public WHERE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WHERE, 0); } - public OVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVER, 0); } + public KW_FILTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FILTER, 0); } + public KW_WHERE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WHERE, 0); } + public KW_OVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVER, 0); } public windowSpec(): WindowSpecContext | undefined { return this.tryGetRuleContext(0, WindowSpecContext); } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } public booleanExpression(): BooleanExpressionContext | undefined { return this.tryGetRuleContext(0, BooleanExpressionContext); } + public KW_RESPECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESPECT, 0); } public setQuantifier(): SetQuantifierContext | undefined { return this.tryGetRuleContext(0, SetQuantifierContext); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFunctionCall) { - listener.enterFunctionCall(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFunctionCall) { - listener.exitFunctionCall(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFunctionCall) { - return visitor.visitFunctionCall(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class LambdaContext extends PrimaryExpressionContext { public identifier(): IdentifierContext[]; public identifier(i: number): IdentifierContext; public identifier(i?: number): IdentifierContext | IdentifierContext[] { @@ -23587,319 +25998,289 @@ export class LambdaContext extends PrimaryExpressionContext { return this.getRuleContext(i, IdentifierContext); } } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public ARROW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ARROW, 0); } + public LEFT_BRACKET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_BRACKET, 0); } + public RIGHT_BRACKET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_BRACKET, 0); } + public primaryExpression(): PrimaryExpressionContext | undefined { + return this.tryGetRuleContext(0, PrimaryExpressionContext); + } + public KW_EXTRACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTRACT, 0); } + public KW_FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FROM, 0); } + public KW_SUBSTR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SUBSTR, 0); } + public KW_SUBSTRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SUBSTRING, 0); } + public KW_FOR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FOR, 0); } + public KW_TRIM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRIM, 0); } + public KW_BOTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BOTH, 0); } + public KW_LEADING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LEADING, 0); } + public KW_TRAILING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRAILING, 0); } + public KW_OVERLAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVERLAY, 0); } + public KW_PLACING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PLACING, 0); } + public KW_WITHIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WITHIN, 0); } + public KW_GROUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GROUP, 0); } + public KW_ORDER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ORDER, 0); } + public KW_BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BY, 0); } + public sortItem(): SortItemContext | undefined { + return this.tryGetRuleContext(0, SortItemContext); + } + public KW_PERCENTILE_CONT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PERCENTILE_CONT, 0); } + public KW_PERCENTILE_DISC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PERCENTILE_DISC, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterLambda) { - listener.enterLambda(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_primaryExpression; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPrimaryExpression) { + listener.enterPrimaryExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitLambda) { - listener.exitLambda(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPrimaryExpression) { + listener.exitPrimaryExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitLambda) { - return visitor.visitLambda(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPrimaryExpression) { + return visitor.visitPrimaryExpression(this); } else { return visitor.visitChildren(this); } } } -export class SubscriptContext extends PrimaryExpressionContext { - public _value!: PrimaryExpressionContext; - public _index!: ValueExpressionContext; - public primaryExpression(): PrimaryExpressionContext { - return this.getRuleContext(0, PrimaryExpressionContext); - } - public valueExpression(): ValueExpressionContext { - return this.getRuleContext(0, ValueExpressionContext); + + +export class LiteralTypeContext extends ParserRuleContext { + public _unsupportedType!: IdentifierContext; + public KW_DATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE, 0); } + public KW_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP, 0); } + public KW_TIMESTAMP_LTZ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP_LTZ, 0); } + public KW_TIMESTAMP_NTZ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP_NTZ, 0); } + public KW_INTERVAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTERVAL, 0); } + public KW_BINARY_HEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BINARY_HEX, 0); } + public identifier(): IdentifierContext | undefined { + return this.tryGetRuleContext(0, IdentifierContext); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSubscript) { - listener.enterSubscript(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_literalType; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterLiteralType) { + listener.enterLiteralType(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSubscript) { - listener.exitSubscript(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitLiteralType) { + listener.exitLiteralType(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSubscript) { - return visitor.visitSubscript(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitLiteralType) { + return visitor.visitLiteralType(this); } else { return visitor.visitChildren(this); } } } -export class ColumnReferenceContext extends PrimaryExpressionContext { - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class ConstantContext extends ParserRuleContext { + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + public QUESTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.QUESTION, 0); } + public COLON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLON, 0); } + public identifier(): IdentifierContext | undefined { + return this.tryGetRuleContext(0, IdentifierContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterColumnReference) { - listener.enterColumnReference(this); - } + public interval(): IntervalContext | undefined { + return this.tryGetRuleContext(0, IntervalContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitColumnReference) { - listener.exitColumnReference(this); - } + public literalType(): LiteralTypeContext | undefined { + return this.tryGetRuleContext(0, LiteralTypeContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitColumnReference) { - return visitor.visitColumnReference(this); + public stringLit(): StringLitContext[]; + public stringLit(i: number): StringLitContext; + public stringLit(i?: number): StringLitContext | StringLitContext[] { + if (i === undefined) { + return this.getRuleContexts(StringLitContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, StringLitContext); } } -} -export class DereferenceContext extends PrimaryExpressionContext { - public _base!: PrimaryExpressionContext; - public _fieldName!: IdentifierContext; - public primaryExpression(): PrimaryExpressionContext { - return this.getRuleContext(0, PrimaryExpressionContext); - } - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public number(): NumberContext | undefined { + return this.tryGetRuleContext(0, NumberContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDereference) { - listener.enterDereference(this); - } + public booleanValue(): BooleanValueContext | undefined { + return this.tryGetRuleContext(0, BooleanValueContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDereference) { - listener.exitDereference(this); - } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDereference) { - return visitor.visitDereference(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class ParenthesizedExpressionContext extends PrimaryExpressionContext { - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_constant; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterParenthesizedExpression) { - listener.enterParenthesizedExpression(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterConstant) { + listener.enterConstant(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitParenthesizedExpression) { - listener.exitParenthesizedExpression(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitConstant) { + listener.exitConstant(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitParenthesizedExpression) { - return visitor.visitParenthesizedExpression(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitConstant) { + return visitor.visitConstant(this); } else { return visitor.visitChildren(this); } } } -export class ExtractContext extends PrimaryExpressionContext { - public _field!: IdentifierContext; - public _source!: ValueExpressionContext; - public EXTRACT(): TerminalNode { return this.getToken(SparkSqlParser.EXTRACT, 0); } - public FROM(): TerminalNode { return this.getToken(SparkSqlParser.FROM, 0); } - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); - } - public valueExpression(): ValueExpressionContext { - return this.getRuleContext(0, ValueExpressionContext); - } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class ComparisonOperatorContext extends ParserRuleContext { + public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } + public NEQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NEQ, 0); } + public NEQJ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NEQJ, 0); } + public LT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LT, 0); } + public LTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LTE, 0); } + public GT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GT, 0); } + public GTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GTE, 0); } + public NSEQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NSEQ, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterExtract) { - listener.enterExtract(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_comparisonOperator; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterComparisonOperator) { + listener.enterComparisonOperator(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitExtract) { - listener.exitExtract(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitComparisonOperator) { + listener.exitComparisonOperator(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitExtract) { - return visitor.visitExtract(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitComparisonOperator) { + return visitor.visitComparisonOperator(this); } else { return visitor.visitChildren(this); } } } -export class SubstringContext extends PrimaryExpressionContext { - public _str!: ValueExpressionContext; - public _pos!: ValueExpressionContext; - public _len!: ValueExpressionContext; - public SUBSTR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SUBSTR, 0); } - public SUBSTRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SUBSTRING, 0); } - public valueExpression(): ValueExpressionContext[]; - public valueExpression(i: number): ValueExpressionContext; - public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ValueExpressionContext); - } else { - return this.getRuleContext(i, ValueExpressionContext); - } - } - public FROM(): TerminalNode { return this.getToken(SparkSqlParser.FROM, 0); } - public FOR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FOR, 0); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class ArithmeticOperatorContext extends ParserRuleContext { + public PLUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLUS, 0); } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } + public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } + public SLASH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SLASH, 0); } + public PERCENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PERCENT, 0); } + public KW_DIV(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIV, 0); } + public TILDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TILDE, 0); } + public AMPERSAND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AMPERSAND, 0); } + public PIPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PIPE, 0); } + public CONCAT_PIPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CONCAT_PIPE, 0); } + public HAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.HAT, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSubstring) { - listener.enterSubstring(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_arithmeticOperator; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterArithmeticOperator) { + listener.enterArithmeticOperator(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSubstring) { - listener.exitSubstring(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitArithmeticOperator) { + listener.exitArithmeticOperator(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSubstring) { - return visitor.visitSubstring(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitArithmeticOperator) { + return visitor.visitArithmeticOperator(this); } else { return visitor.visitChildren(this); } } } -export class TrimContext extends PrimaryExpressionContext { - public _trimOption!: Token; - public _trimStr!: ValueExpressionContext; - public _srcStr!: ValueExpressionContext; - public TRIM(): TerminalNode { return this.getToken(SparkSqlParser.TRIM, 0); } - public FROM(): TerminalNode { return this.getToken(SparkSqlParser.FROM, 0); } - public valueExpression(): ValueExpressionContext[]; - public valueExpression(i: number): ValueExpressionContext; - public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ValueExpressionContext); - } else { - return this.getRuleContext(i, ValueExpressionContext); - } - } - public BOTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BOTH, 0); } - public LEADING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEADING, 0); } - public TRAILING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRAILING, 0); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class PredicateOperatorContext extends ParserRuleContext { + public KW_OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OR, 0); } + public KW_AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AND, 0); } + public KW_IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IN, 0); } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTrim) { - listener.enterTrim(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_predicateOperator; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterPredicateOperator) { + listener.enterPredicateOperator(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTrim) { - listener.exitTrim(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitPredicateOperator) { + listener.exitPredicateOperator(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTrim) { - return visitor.visitTrim(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitPredicateOperator) { + return visitor.visitPredicateOperator(this); } else { return visitor.visitChildren(this); } } } -export class OverlayContext extends PrimaryExpressionContext { - public _input!: ValueExpressionContext; - public _replace!: ValueExpressionContext; - public _position!: ValueExpressionContext; - public _length!: ValueExpressionContext; - public OVERLAY(): TerminalNode { return this.getToken(SparkSqlParser.OVERLAY, 0); } - public PLACING(): TerminalNode { return this.getToken(SparkSqlParser.PLACING, 0); } - public FROM(): TerminalNode { return this.getToken(SparkSqlParser.FROM, 0); } - public valueExpression(): ValueExpressionContext[]; - public valueExpression(i: number): ValueExpressionContext; - public valueExpression(i?: number): ValueExpressionContext | ValueExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ValueExpressionContext); - } else { - return this.getRuleContext(i, ValueExpressionContext); - } - } - public FOR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FOR, 0); } - constructor(ctx: PrimaryExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class BooleanValueContext extends ParserRuleContext { + public KW_TRUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRUE, 0); } + public KW_FALSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FALSE, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterOverlay) { - listener.enterOverlay(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_booleanValue; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterBooleanValue) { + listener.enterBooleanValue(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitOverlay) { - listener.exitOverlay(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitBooleanValue) { + listener.exitBooleanValue(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitOverlay) { - return visitor.visitOverlay(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitBooleanValue) { + return visitor.visitBooleanValue(this); } else { return visitor.visitChildren(this); } @@ -23907,190 +26288,207 @@ export class OverlayContext extends PrimaryExpressionContext { } -export class ConstantContext extends ParserRuleContext { +export class IntervalContext extends ParserRuleContext { + public KW_INTERVAL(): TerminalNode { return this.getToken(SparkSqlParser.KW_INTERVAL, 0); } + public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext | undefined { + return this.tryGetRuleContext(0, ErrorCapturingMultiUnitsIntervalContext); + } + public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext | undefined { + return this.tryGetRuleContext(0, ErrorCapturingUnitToUnitIntervalContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_constant; } - public copyFrom(ctx: ConstantContext): void { - super.copyFrom(ctx); - } -} -export class NullLiteralContext extends ConstantContext { - public NULL(): TerminalNode { return this.getToken(SparkSqlParser.NULL, 0); } - constructor(ctx: ConstantContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_interval; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNullLiteral) { - listener.enterNullLiteral(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterInterval) { + listener.enterInterval(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNullLiteral) { - listener.exitNullLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitInterval) { + listener.exitInterval(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNullLiteral) { - return visitor.visitNullLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitInterval) { + return visitor.visitInterval(this); } else { return visitor.visitChildren(this); } } } -export class IntervalLiteralContext extends ConstantContext { - public interval(): IntervalContext { - return this.getRuleContext(0, IntervalContext); + + +export class ErrorCapturingMultiUnitsIntervalContext extends ParserRuleContext { + public _body!: MultiUnitsIntervalContext; + public multiUnitsInterval(): MultiUnitsIntervalContext { + return this.getRuleContext(0, MultiUnitsIntervalContext); + } + public unitToUnitInterval(): UnitToUnitIntervalContext | undefined { + return this.tryGetRuleContext(0, UnitToUnitIntervalContext); } - constructor(ctx: ConstantContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterIntervalLiteral) { - listener.enterIntervalLiteral(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_errorCapturingMultiUnitsInterval; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterErrorCapturingMultiUnitsInterval) { + listener.enterErrorCapturingMultiUnitsInterval(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitIntervalLiteral) { - listener.exitIntervalLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitErrorCapturingMultiUnitsInterval) { + listener.exitErrorCapturingMultiUnitsInterval(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitIntervalLiteral) { - return visitor.visitIntervalLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitErrorCapturingMultiUnitsInterval) { + return visitor.visitErrorCapturingMultiUnitsInterval(this); } else { return visitor.visitChildren(this); } } } -export class TypeConstructorContext extends ConstantContext { - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); - } - public STRING(): TerminalNode { return this.getToken(SparkSqlParser.STRING, 0); } - constructor(ctx: ConstantContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTypeConstructor) { - listener.enterTypeConstructor(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTypeConstructor) { - listener.exitTypeConstructor(this); + + +export class MultiUnitsIntervalContext extends ParserRuleContext { + public _unitInMultiUnits!: UnitInMultiUnitsContext; + public _unit: UnitInMultiUnitsContext[] = []; + public intervalValue(): IntervalValueContext[]; + public intervalValue(i: number): IntervalValueContext; + public intervalValue(i?: number): IntervalValueContext | IntervalValueContext[] { + if (i === undefined) { + return this.getRuleContexts(IntervalValueContext); + } else { + return this.getRuleContext(i, IntervalValueContext); } } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTypeConstructor) { - return visitor.visitTypeConstructor(this); + public unitInMultiUnits(): UnitInMultiUnitsContext[]; + public unitInMultiUnits(i: number): UnitInMultiUnitsContext; + public unitInMultiUnits(i?: number): UnitInMultiUnitsContext | UnitInMultiUnitsContext[] { + if (i === undefined) { + return this.getRuleContexts(UnitInMultiUnitsContext); } else { - return visitor.visitChildren(this); + return this.getRuleContext(i, UnitInMultiUnitsContext); } } -} -export class NumericLiteralContext extends ConstantContext { - public number(): NumberContext { - return this.getRuleContext(0, NumberContext); - } - constructor(ctx: ConstantContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterNumericLiteral) { - listener.enterNumericLiteral(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_multiUnitsInterval; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterMultiUnitsInterval) { + listener.enterMultiUnitsInterval(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitNumericLiteral) { - listener.exitNumericLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitMultiUnitsInterval) { + listener.exitMultiUnitsInterval(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitNumericLiteral) { - return visitor.visitNumericLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitMultiUnitsInterval) { + return visitor.visitMultiUnitsInterval(this); } else { return visitor.visitChildren(this); } } } -export class BooleanLiteralContext extends ConstantContext { - public booleanValue(): BooleanValueContext { - return this.getRuleContext(0, BooleanValueContext); + + +export class ErrorCapturingUnitToUnitIntervalContext extends ParserRuleContext { + public _body!: UnitToUnitIntervalContext; + public _error1!: MultiUnitsIntervalContext; + public _error2!: UnitToUnitIntervalContext; + public unitToUnitInterval(): UnitToUnitIntervalContext[]; + public unitToUnitInterval(i: number): UnitToUnitIntervalContext; + public unitToUnitInterval(i?: number): UnitToUnitIntervalContext | UnitToUnitIntervalContext[] { + if (i === undefined) { + return this.getRuleContexts(UnitToUnitIntervalContext); + } else { + return this.getRuleContext(i, UnitToUnitIntervalContext); + } } - constructor(ctx: ConstantContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public multiUnitsInterval(): MultiUnitsIntervalContext | undefined { + return this.tryGetRuleContext(0, MultiUnitsIntervalContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterBooleanLiteral) { - listener.enterBooleanLiteral(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_errorCapturingUnitToUnitInterval; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterErrorCapturingUnitToUnitInterval) { + listener.enterErrorCapturingUnitToUnitInterval(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitBooleanLiteral) { - listener.exitBooleanLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitErrorCapturingUnitToUnitInterval) { + listener.exitErrorCapturingUnitToUnitInterval(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitBooleanLiteral) { - return visitor.visitBooleanLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitErrorCapturingUnitToUnitInterval) { + return visitor.visitErrorCapturingUnitToUnitInterval(this); } else { return visitor.visitChildren(this); } } } -export class StringLiteralContext extends ConstantContext { - public STRING(): TerminalNode[]; - public STRING(i: number): TerminalNode; - public STRING(i?: number): TerminalNode | TerminalNode[] { + + +export class UnitToUnitIntervalContext extends ParserRuleContext { + public _value!: IntervalValueContext; + public unitInUnitToUnit(): UnitInUnitToUnitContext[]; + public unitInUnitToUnit(i: number): UnitInUnitToUnitContext; + public unitInUnitToUnit(i?: number): UnitInUnitToUnitContext | UnitInUnitToUnitContext[] { if (i === undefined) { - return this.getTokens(SparkSqlParser.STRING); + return this.getRuleContexts(UnitInUnitToUnitContext); } else { - return this.getToken(SparkSqlParser.STRING, i); + return this.getRuleContext(i, UnitInUnitToUnitContext); } } - constructor(ctx: ConstantContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_TO(): TerminalNode { return this.getToken(SparkSqlParser.KW_TO, 0); } + public intervalValue(): IntervalValueContext { + return this.getRuleContext(0, IntervalValueContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterStringLiteral) { - listener.enterStringLiteral(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_unitToUnitInterval; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnitToUnitInterval) { + listener.enterUnitToUnitInterval(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitStringLiteral) { - listener.exitStringLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnitToUnitInterval) { + listener.exitUnitToUnitInterval(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitStringLiteral) { - return visitor.visitStringLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnitToUnitInterval) { + return visitor.visitUnitToUnitInterval(this); } else { return visitor.visitChildren(this); } @@ -24098,36 +26496,35 @@ export class StringLiteralContext extends ConstantContext { } -export class ComparisonOperatorContext extends ParserRuleContext { - public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } - public NEQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NEQ, 0); } - public NEQJ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NEQJ, 0); } - public LT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LT, 0); } - public LTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LTE, 0); } - public GT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GT, 0); } - public GTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GTE, 0); } - public NSEQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NSEQ, 0); } +export class IntervalValueContext extends ParserRuleContext { + public INTEGER_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTEGER_VALUE, 0); } + public DECIMAL_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DECIMAL_VALUE, 0); } + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); + } + public PLUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLUS, 0); } + public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_comparisonOperator; } + public get ruleIndex(): number { return SparkSqlParser.RULE_intervalValue; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterComparisonOperator) { - listener.enterComparisonOperator(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterIntervalValue) { + listener.enterIntervalValue(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitComparisonOperator) { - listener.exitComparisonOperator(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitIntervalValue) { + listener.exitIntervalValue(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitComparisonOperator) { - return visitor.visitComparisonOperator(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitIntervalValue) { + return visitor.visitIntervalValue(this); } else { return visitor.visitChildren(this); } @@ -24135,39 +26532,48 @@ export class ComparisonOperatorContext extends ParserRuleContext { } -export class ArithmeticOperatorContext extends ParserRuleContext { - public PLUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLUS, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - public ASTERISK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASTERISK, 0); } - public SLASH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SLASH, 0); } - public PERCENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PERCENT, 0); } - public DIV(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIV, 0); } - public TILDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TILDE, 0); } - public AMPERSAND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AMPERSAND, 0); } - public PIPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PIPE, 0); } - public CONCAT_PIPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CONCAT_PIPE, 0); } - public HAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.HAT, 0); } +export class UnitInMultiUnitsContext extends ParserRuleContext { + public KW_NANOSECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NANOSECOND, 0); } + public KW_NANOSECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NANOSECONDS, 0); } + public KW_MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MICROSECOND, 0); } + public KW_MICROSECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MICROSECONDS, 0); } + public KW_MILLISECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MILLISECOND, 0); } + public KW_MILLISECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MILLISECONDS, 0); } + public KW_SECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SECOND, 0); } + public KW_SECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SECONDS, 0); } + public KW_MINUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MINUTE, 0); } + public KW_MINUTES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MINUTES, 0); } + public KW_HOUR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HOUR, 0); } + public KW_HOURS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HOURS, 0); } + public KW_DAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAY, 0); } + public KW_DAYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAYS, 0); } + public KW_WEEK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WEEK, 0); } + public KW_WEEKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WEEKS, 0); } + public KW_MONTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MONTH, 0); } + public KW_MONTHS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MONTHS, 0); } + public KW_YEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEAR, 0); } + public KW_YEARS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEARS, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_arithmeticOperator; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unitInMultiUnits; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterArithmeticOperator) { - listener.enterArithmeticOperator(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnitInMultiUnits) { + listener.enterUnitInMultiUnits(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitArithmeticOperator) { - listener.exitArithmeticOperator(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnitInMultiUnits) { + listener.exitUnitInMultiUnits(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitArithmeticOperator) { - return visitor.visitArithmeticOperator(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnitInMultiUnits) { + return visitor.visitUnitInMultiUnits(this); } else { return visitor.visitChildren(this); } @@ -24175,32 +26581,34 @@ export class ArithmeticOperatorContext extends ParserRuleContext { } -export class PredicateOperatorContext extends ParserRuleContext { - public OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OR, 0); } - public AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AND, 0); } - public IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IN, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } +export class UnitInUnitToUnitContext extends ParserRuleContext { + public KW_SECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SECOND, 0); } + public KW_MINUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MINUTE, 0); } + public KW_HOUR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HOUR, 0); } + public KW_DAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAY, 0); } + public KW_MONTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MONTH, 0); } + public KW_YEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEAR, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_predicateOperator; } + public get ruleIndex(): number { return SparkSqlParser.RULE_unitInUnitToUnit; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPredicateOperator) { - listener.enterPredicateOperator(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterUnitInUnitToUnit) { + listener.enterUnitInUnitToUnit(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPredicateOperator) { - listener.exitPredicateOperator(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitUnitInUnitToUnit) { + listener.exitUnitInUnitToUnit(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPredicateOperator) { - return visitor.visitPredicateOperator(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitUnitInUnitToUnit) { + return visitor.visitUnitInUnitToUnit(this); } else { return visitor.visitChildren(this); } @@ -24208,30 +26616,35 @@ export class PredicateOperatorContext extends ParserRuleContext { } -export class BooleanValueContext extends ParserRuleContext { - public TRUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRUE, 0); } - public FALSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FALSE, 0); } +export class ColPositionContext extends ParserRuleContext { + public _position!: Token; + public _afterCol!: ErrorCapturingIdentifierContext; + public KW_FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FIRST, 0); } + public KW_AFTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AFTER, 0); } + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext | undefined { + return this.tryGetRuleContext(0, ErrorCapturingIdentifierContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_booleanValue; } + public get ruleIndex(): number { return SparkSqlParser.RULE_colPosition; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterBooleanValue) { - listener.enterBooleanValue(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterColPosition) { + listener.enterColPosition(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitBooleanValue) { - listener.exitBooleanValue(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitColPosition) { + listener.exitColPosition(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitBooleanValue) { - return visitor.visitBooleanValue(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitColPosition) { + return visitor.visitColPosition(this); } else { return visitor.visitChildren(this); } @@ -24239,35 +26652,61 @@ export class BooleanValueContext extends ParserRuleContext { } -export class IntervalContext extends ParserRuleContext { - public INTERVAL(): TerminalNode { return this.getToken(SparkSqlParser.INTERVAL, 0); } - public errorCapturingMultiUnitsInterval(): ErrorCapturingMultiUnitsIntervalContext | undefined { - return this.tryGetRuleContext(0, ErrorCapturingMultiUnitsIntervalContext); - } - public errorCapturingUnitToUnitInterval(): ErrorCapturingUnitToUnitIntervalContext | undefined { - return this.tryGetRuleContext(0, ErrorCapturingUnitToUnitIntervalContext); +export class TypeContext extends ParserRuleContext { + public _unsupportedType!: IdentifierContext; + public KW_BOOLEAN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BOOLEAN, 0); } + public KW_TINYINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TINYINT, 0); } + public KW_BYTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BYTE, 0); } + public KW_SMALLINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SMALLINT, 0); } + public KW_SHORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SHORT, 0); } + public KW_INT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INT, 0); } + public KW_INTEGER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTEGER, 0); } + public KW_BIGINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BIGINT, 0); } + public KW_LONG(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LONG, 0); } + public KW_FLOAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FLOAT, 0); } + public KW_REAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REAL, 0); } + public KW_DOUBLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DOUBLE, 0); } + public KW_DATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE, 0); } + public KW_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP, 0); } + public KW_TIMESTAMP_NTZ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP_NTZ, 0); } + public KW_TIMESTAMP_LTZ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP_LTZ, 0); } + public KW_STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRING, 0); } + public KW_CHARACTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHARACTER, 0); } + public KW_CHAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHAR, 0); } + public KW_VARCHAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VARCHAR, 0); } + public KW_BINARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BINARY, 0); } + public KW_DECIMAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DECIMAL, 0); } + public KW_DEC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEC, 0); } + public KW_NUMERIC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NUMERIC, 0); } + public KW_VOID(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VOID, 0); } + public KW_INTERVAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTERVAL, 0); } + public KW_ARRAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ARRAY, 0); } + public KW_STRUCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRUCT, 0); } + public KW_MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MAP, 0); } + public identifier(): IdentifierContext | undefined { + return this.tryGetRuleContext(0, IdentifierContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_interval; } + public get ruleIndex(): number { return SparkSqlParser.RULE_type; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterInterval) { - listener.enterInterval(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterType) { + listener.enterType(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitInterval) { - listener.exitInterval(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitType) { + listener.exitType(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitInterval) { - return visitor.visitInterval(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitType) { + return visitor.visitType(this); } else { return visitor.visitChildren(this); } @@ -24275,34 +26714,110 @@ export class IntervalContext extends ParserRuleContext { } -export class ErrorCapturingMultiUnitsIntervalContext extends ParserRuleContext { - public multiUnitsInterval(): MultiUnitsIntervalContext { - return this.getRuleContext(0, MultiUnitsIntervalContext); +export class DataTypeContext extends ParserRuleContext { + public _complex!: Token; + public LT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LT, 0); } + public dataType(): DataTypeContext[]; + public dataType(i: number): DataTypeContext; + public dataType(i?: number): DataTypeContext | DataTypeContext[] { + if (i === undefined) { + return this.getRuleContexts(DataTypeContext); + } else { + return this.getRuleContext(i, DataTypeContext); + } } - public unitToUnitInterval(): UnitToUnitIntervalContext | undefined { - return this.tryGetRuleContext(0, UnitToUnitIntervalContext); + public GT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GT, 0); } + public KW_ARRAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ARRAY, 0); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } + public KW_MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MAP, 0); } + public KW_STRUCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRUCT, 0); } + public NEQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NEQ, 0); } + public complexColTypeList(): ComplexColTypeListContext | undefined { + return this.tryGetRuleContext(0, ComplexColTypeListContext); + } + public KW_INTERVAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTERVAL, 0); } + public KW_YEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEAR, 0); } + public KW_MONTH(): TerminalNode[]; + public KW_MONTH(i: number): TerminalNode; + public KW_MONTH(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_MONTH); + } else { + return this.getToken(SparkSqlParser.KW_MONTH, i); + } + } + public KW_TO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TO, 0); } + public KW_DAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAY, 0); } + public KW_HOUR(): TerminalNode[]; + public KW_HOUR(i: number): TerminalNode; + public KW_HOUR(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_HOUR); + } else { + return this.getToken(SparkSqlParser.KW_HOUR, i); + } + } + public KW_MINUTE(): TerminalNode[]; + public KW_MINUTE(i: number): TerminalNode; + public KW_MINUTE(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_MINUTE); + } else { + return this.getToken(SparkSqlParser.KW_MINUTE, i); + } + } + public KW_SECOND(): TerminalNode[]; + public KW_SECOND(i: number): TerminalNode; + public KW_SECOND(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.KW_SECOND); + } else { + return this.getToken(SparkSqlParser.KW_SECOND, i); + } + } + public type(): TypeContext | undefined { + return this.tryGetRuleContext(0, TypeContext); + } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public INTEGER_VALUE(): TerminalNode[]; + public INTEGER_VALUE(i: number): TerminalNode; + public INTEGER_VALUE(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.INTEGER_VALUE); + } else { + return this.getToken(SparkSqlParser.INTEGER_VALUE, i); + } } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_errorCapturingMultiUnitsInterval; } + public get ruleIndex(): number { return SparkSqlParser.RULE_dataType; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterErrorCapturingMultiUnitsInterval) { - listener.enterErrorCapturingMultiUnitsInterval(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterDataType) { + listener.enterDataType(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitErrorCapturingMultiUnitsInterval) { - listener.exitErrorCapturingMultiUnitsInterval(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitDataType) { + listener.exitDataType(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitErrorCapturingMultiUnitsInterval) { - return visitor.visitErrorCapturingMultiUnitsInterval(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitDataType) { + return visitor.visitDataType(this); } else { return visitor.visitChildren(this); } @@ -24310,48 +26825,46 @@ export class ErrorCapturingMultiUnitsIntervalContext extends ParserRuleContext { } -export class MultiUnitsIntervalContext extends ParserRuleContext { - public _identifier!: IdentifierContext; - public _unit: IdentifierContext[] = []; - public intervalValue(): IntervalValueContext[]; - public intervalValue(i: number): IntervalValueContext; - public intervalValue(i?: number): IntervalValueContext | IntervalValueContext[] { +export class QualifiedColTypeWithPositionListContext extends ParserRuleContext { + public qualifiedColTypeWithPosition(): QualifiedColTypeWithPositionContext[]; + public qualifiedColTypeWithPosition(i: number): QualifiedColTypeWithPositionContext; + public qualifiedColTypeWithPosition(i?: number): QualifiedColTypeWithPositionContext | QualifiedColTypeWithPositionContext[] { if (i === undefined) { - return this.getRuleContexts(IntervalValueContext); + return this.getRuleContexts(QualifiedColTypeWithPositionContext); } else { - return this.getRuleContext(i, IntervalValueContext); + return this.getRuleContext(i, QualifiedColTypeWithPositionContext); } } - public identifier(): IdentifierContext[]; - public identifier(i: number): IdentifierContext; - public identifier(i?: number): IdentifierContext | IdentifierContext[] { + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getRuleContexts(IdentifierContext); + return this.getTokens(SparkSqlParser.COMMA); } else { - return this.getRuleContext(i, IdentifierContext); + return this.getToken(SparkSqlParser.COMMA, i); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_multiUnitsInterval; } + public get ruleIndex(): number { return SparkSqlParser.RULE_qualifiedColTypeWithPositionList; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterMultiUnitsInterval) { - listener.enterMultiUnitsInterval(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterQualifiedColTypeWithPositionList) { + listener.enterQualifiedColTypeWithPositionList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitMultiUnitsInterval) { - listener.exitMultiUnitsInterval(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitQualifiedColTypeWithPositionList) { + listener.exitQualifiedColTypeWithPositionList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitMultiUnitsInterval) { - return visitor.visitMultiUnitsInterval(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitQualifiedColTypeWithPositionList) { + return visitor.visitQualifiedColTypeWithPositionList(this); } else { return visitor.visitChildren(this); } @@ -24359,43 +26872,44 @@ export class MultiUnitsIntervalContext extends ParserRuleContext { } -export class ErrorCapturingUnitToUnitIntervalContext extends ParserRuleContext { - public _body!: UnitToUnitIntervalContext; - public _error1!: MultiUnitsIntervalContext; - public _error2!: UnitToUnitIntervalContext; - public unitToUnitInterval(): UnitToUnitIntervalContext[]; - public unitToUnitInterval(i: number): UnitToUnitIntervalContext; - public unitToUnitInterval(i?: number): UnitToUnitIntervalContext | UnitToUnitIntervalContext[] { +export class QualifiedColTypeWithPositionContext extends ParserRuleContext { + public _name!: MultipartIdentifierContext; + public dataType(): DataTypeContext { + return this.getRuleContext(0, DataTypeContext); + } + public multipartIdentifier(): MultipartIdentifierContext { + return this.getRuleContext(0, MultipartIdentifierContext); + } + public colDefinitionDescriptorWithPosition(): ColDefinitionDescriptorWithPositionContext[]; + public colDefinitionDescriptorWithPosition(i: number): ColDefinitionDescriptorWithPositionContext; + public colDefinitionDescriptorWithPosition(i?: number): ColDefinitionDescriptorWithPositionContext | ColDefinitionDescriptorWithPositionContext[] { if (i === undefined) { - return this.getRuleContexts(UnitToUnitIntervalContext); + return this.getRuleContexts(ColDefinitionDescriptorWithPositionContext); } else { - return this.getRuleContext(i, UnitToUnitIntervalContext); + return this.getRuleContext(i, ColDefinitionDescriptorWithPositionContext); } } - public multiUnitsInterval(): MultiUnitsIntervalContext | undefined { - return this.tryGetRuleContext(0, MultiUnitsIntervalContext); - } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_errorCapturingUnitToUnitInterval; } + public get ruleIndex(): number { return SparkSqlParser.RULE_qualifiedColTypeWithPosition; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterErrorCapturingUnitToUnitInterval) { - listener.enterErrorCapturingUnitToUnitInterval(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterQualifiedColTypeWithPosition) { + listener.enterQualifiedColTypeWithPosition(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitErrorCapturingUnitToUnitInterval) { - listener.exitErrorCapturingUnitToUnitInterval(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitQualifiedColTypeWithPosition) { + listener.exitQualifiedColTypeWithPosition(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitErrorCapturingUnitToUnitInterval) { - return visitor.visitErrorCapturingUnitToUnitInterval(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitQualifiedColTypeWithPosition) { + return visitor.visitQualifiedColTypeWithPosition(this); } else { return visitor.visitChildren(this); } @@ -24403,44 +26917,39 @@ export class ErrorCapturingUnitToUnitIntervalContext extends ParserRuleContext { } -export class UnitToUnitIntervalContext extends ParserRuleContext { - public _value!: IntervalValueContext; - public _from!: IdentifierContext; - public _to!: IdentifierContext; - public TO(): TerminalNode { return this.getToken(SparkSqlParser.TO, 0); } - public intervalValue(): IntervalValueContext { - return this.getRuleContext(0, IntervalValueContext); +export class ColDefinitionDescriptorWithPositionContext extends ParserRuleContext { + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + public defaultExpression(): DefaultExpressionContext | undefined { + return this.tryGetRuleContext(0, DefaultExpressionContext); } - public identifier(): IdentifierContext[]; - public identifier(i: number): IdentifierContext; - public identifier(i?: number): IdentifierContext | IdentifierContext[] { - if (i === undefined) { - return this.getRuleContexts(IdentifierContext); - } else { - return this.getRuleContext(i, IdentifierContext); - } + public commentSpec(): CommentSpecContext | undefined { + return this.tryGetRuleContext(0, CommentSpecContext); + } + public colPosition(): ColPositionContext | undefined { + return this.tryGetRuleContext(0, ColPositionContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_unitToUnitInterval; } + public get ruleIndex(): number { return SparkSqlParser.RULE_colDefinitionDescriptorWithPosition; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterUnitToUnitInterval) { - listener.enterUnitToUnitInterval(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterColDefinitionDescriptorWithPosition) { + listener.enterColDefinitionDescriptorWithPosition(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitUnitToUnitInterval) { - listener.exitUnitToUnitInterval(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitColDefinitionDescriptorWithPosition) { + listener.exitColDefinitionDescriptorWithPosition(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitUnitToUnitInterval) { - return visitor.visitUnitToUnitInterval(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitColDefinitionDescriptorWithPosition) { + return visitor.visitColDefinitionDescriptorWithPosition(this); } else { return visitor.visitChildren(this); } @@ -24448,33 +26957,32 @@ export class UnitToUnitIntervalContext extends ParserRuleContext { } -export class IntervalValueContext extends ParserRuleContext { - public INTEGER_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTEGER_VALUE, 0); } - public DECIMAL_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DECIMAL_VALUE, 0); } - public PLUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLUS, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - public STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING, 0); } +export class DefaultExpressionContext extends ParserRuleContext { + public KW_DEFAULT(): TerminalNode { return this.getToken(SparkSqlParser.KW_DEFAULT, 0); } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_intervalValue; } + public get ruleIndex(): number { return SparkSqlParser.RULE_defaultExpression; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterIntervalValue) { - listener.enterIntervalValue(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterDefaultExpression) { + listener.enterDefaultExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitIntervalValue) { - listener.exitIntervalValue(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitDefaultExpression) { + listener.exitDefaultExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitIntervalValue) { - return visitor.visitIntervalValue(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitDefaultExpression) { + return visitor.visitDefaultExpression(this); } else { return visitor.visitChildren(this); } @@ -24482,35 +26990,33 @@ export class IntervalValueContext extends ParserRuleContext { } -export class ColPositionContext extends ParserRuleContext { - public _position!: Token; - public _afterCol!: ErrorCapturingIdentifierContext; - public FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FIRST, 0); } - public AFTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AFTER, 0); } - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext | undefined { - return this.tryGetRuleContext(0, ErrorCapturingIdentifierContext); +export class VariableDefaultExpressionContext extends ParserRuleContext { + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); } + public KW_DEFAULT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEFAULT, 0); } + public EQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EQ, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_colPosition; } + public get ruleIndex(): number { return SparkSqlParser.RULE_variableDefaultExpression; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterColPosition) { - listener.enterColPosition(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterVariableDefaultExpression) { + listener.enterVariableDefaultExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitColPosition) { - listener.exitColPosition(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitVariableDefaultExpression) { + listener.exitVariableDefaultExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitColPosition) { - return visitor.visitColPosition(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitVariableDefaultExpression) { + return visitor.visitVariableDefaultExpression(this); } else { return visitor.visitChildren(this); } @@ -24518,94 +27024,87 @@ export class ColPositionContext extends ParserRuleContext { } -export class DataTypeContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_dataType; } - public copyFrom(ctx: DataTypeContext): void { - super.copyFrom(ctx); - } -} -export class ComplexDataTypeContext extends DataTypeContext { - public _complex!: Token; - public LT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LT, 0); } - public dataType(): DataTypeContext[]; - public dataType(i: number): DataTypeContext; - public dataType(i?: number): DataTypeContext | DataTypeContext[] { +export class ColTypeListContext extends ParserRuleContext { + public colType(): ColTypeContext[]; + public colType(i: number): ColTypeContext; + public colType(i?: number): ColTypeContext | ColTypeContext[] { if (i === undefined) { - return this.getRuleContexts(DataTypeContext); + return this.getRuleContexts(ColTypeContext); } else { - return this.getRuleContext(i, DataTypeContext); + return this.getRuleContext(i, ColTypeContext); } } - public GT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GT, 0); } - public ARRAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ARRAY, 0); } - public MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MAP, 0); } - public STRUCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRUCT, 0); } - public NEQ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NEQ, 0); } - public complexColTypeList(): ComplexColTypeListContext | undefined { - return this.tryGetRuleContext(0, ComplexColTypeListContext); + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } } - constructor(ctx: DataTypeContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterComplexDataType) { - listener.enterComplexDataType(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_colTypeList; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterColTypeList) { + listener.enterColTypeList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitComplexDataType) { - listener.exitComplexDataType(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitColTypeList) { + listener.exitColTypeList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitComplexDataType) { - return visitor.visitComplexDataType(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitColTypeList) { + return visitor.visitColTypeList(this); } else { return visitor.visitChildren(this); } } } -export class PrimitiveDataTypeContext extends DataTypeContext { - public identifier(): IdentifierContext { - return this.getRuleContext(0, IdentifierContext); + + +export class ColTypeContext extends ParserRuleContext { + public _colName!: ErrorCapturingIdentifierContext; + public dataType(): DataTypeContext { + return this.getRuleContext(0, DataTypeContext); } - public INTEGER_VALUE(): TerminalNode[]; - public INTEGER_VALUE(i: number): TerminalNode; - public INTEGER_VALUE(i?: number): TerminalNode | TerminalNode[] { - if (i === undefined) { - return this.getTokens(SparkSqlParser.INTEGER_VALUE); - } else { - return this.getToken(SparkSqlParser.INTEGER_VALUE, i); - } + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { + return this.getRuleContext(0, ErrorCapturingIdentifierContext); + } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + public commentSpec(): CommentSpecContext | undefined { + return this.tryGetRuleContext(0, CommentSpecContext); } - constructor(ctx: DataTypeContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterPrimitiveDataType) { - listener.enterPrimitiveDataType(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_colType; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterColType) { + listener.enterColType(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitPrimitiveDataType) { - listener.exitPrimitiveDataType(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitColType) { + listener.exitColType(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitPrimitiveDataType) { - return visitor.visitPrimitiveDataType(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitColType) { + return visitor.visitColType(this); } else { return visitor.visitChildren(this); } @@ -24613,37 +27112,46 @@ export class PrimitiveDataTypeContext extends DataTypeContext { } -export class QualifiedColTypeWithPositionListContext extends ParserRuleContext { - public qualifiedColTypeWithPosition(): QualifiedColTypeWithPositionContext[]; - public qualifiedColTypeWithPosition(i: number): QualifiedColTypeWithPositionContext; - public qualifiedColTypeWithPosition(i?: number): QualifiedColTypeWithPositionContext | QualifiedColTypeWithPositionContext[] { +export class CreateOrReplaceTableColTypeListContext extends ParserRuleContext { + public createOrReplaceTableColType(): CreateOrReplaceTableColTypeContext[]; + public createOrReplaceTableColType(i: number): CreateOrReplaceTableColTypeContext; + public createOrReplaceTableColType(i?: number): CreateOrReplaceTableColTypeContext | CreateOrReplaceTableColTypeContext[] { if (i === undefined) { - return this.getRuleContexts(QualifiedColTypeWithPositionContext); + return this.getRuleContexts(CreateOrReplaceTableColTypeContext); } else { - return this.getRuleContext(i, QualifiedColTypeWithPositionContext); + return this.getRuleContext(i, CreateOrReplaceTableColTypeContext); + } + } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_qualifiedColTypeWithPositionList; } + public get ruleIndex(): number { return SparkSqlParser.RULE_createOrReplaceTableColTypeList; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterQualifiedColTypeWithPositionList) { - listener.enterQualifiedColTypeWithPositionList(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterCreateOrReplaceTableColTypeList) { + listener.enterCreateOrReplaceTableColTypeList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitQualifiedColTypeWithPositionList) { - listener.exitQualifiedColTypeWithPositionList(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitCreateOrReplaceTableColTypeList) { + listener.exitCreateOrReplaceTableColTypeList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitQualifiedColTypeWithPositionList) { - return visitor.visitQualifiedColTypeWithPositionList(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitCreateOrReplaceTableColTypeList) { + return visitor.visitCreateOrReplaceTableColTypeList(this); } else { return visitor.visitChildren(this); } @@ -24651,43 +27159,44 @@ export class QualifiedColTypeWithPositionListContext extends ParserRuleContext { } -export class QualifiedColTypeWithPositionContext extends ParserRuleContext { - public _name!: MultipartIdentifierContext; +export class CreateOrReplaceTableColTypeContext extends ParserRuleContext { + public _colName!: ErrorCapturingIdentifierContext; public dataType(): DataTypeContext { return this.getRuleContext(0, DataTypeContext); } - public multipartIdentifier(): MultipartIdentifierContext { - return this.getRuleContext(0, MultipartIdentifierContext); - } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } - public commentSpec(): CommentSpecContext | undefined { - return this.tryGetRuleContext(0, CommentSpecContext); + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { + return this.getRuleContext(0, ErrorCapturingIdentifierContext); } - public colPosition(): ColPositionContext | undefined { - return this.tryGetRuleContext(0, ColPositionContext); + public colDefinitionOption(): ColDefinitionOptionContext[]; + public colDefinitionOption(i: number): ColDefinitionOptionContext; + public colDefinitionOption(i?: number): ColDefinitionOptionContext | ColDefinitionOptionContext[] { + if (i === undefined) { + return this.getRuleContexts(ColDefinitionOptionContext); + } else { + return this.getRuleContext(i, ColDefinitionOptionContext); + } } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_qualifiedColTypeWithPosition; } + public get ruleIndex(): number { return SparkSqlParser.RULE_createOrReplaceTableColType; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterQualifiedColTypeWithPosition) { - listener.enterQualifiedColTypeWithPosition(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterCreateOrReplaceTableColType) { + listener.enterCreateOrReplaceTableColType(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitQualifiedColTypeWithPosition) { - listener.exitQualifiedColTypeWithPosition(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitCreateOrReplaceTableColType) { + listener.exitCreateOrReplaceTableColType(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitQualifiedColTypeWithPosition) { - return visitor.visitQualifiedColTypeWithPosition(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitCreateOrReplaceTableColType) { + return visitor.visitCreateOrReplaceTableColType(this); } else { return visitor.visitChildren(this); } @@ -24695,37 +27204,39 @@ export class QualifiedColTypeWithPositionContext extends ParserRuleContext { } -export class ColTypeListContext extends ParserRuleContext { - public colType(): ColTypeContext[]; - public colType(i: number): ColTypeContext; - public colType(i?: number): ColTypeContext | ColTypeContext[] { - if (i === undefined) { - return this.getRuleContexts(ColTypeContext); - } else { - return this.getRuleContext(i, ColTypeContext); - } +export class ColDefinitionOptionContext extends ParserRuleContext { + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + public defaultExpression(): DefaultExpressionContext | undefined { + return this.tryGetRuleContext(0, DefaultExpressionContext); + } + public generationExpression(): GenerationExpressionContext | undefined { + return this.tryGetRuleContext(0, GenerationExpressionContext); + } + public commentSpec(): CommentSpecContext | undefined { + return this.tryGetRuleContext(0, CommentSpecContext); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_colTypeList; } + public get ruleIndex(): number { return SparkSqlParser.RULE_colDefinitionOption; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterColTypeList) { - listener.enterColTypeList(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterColDefinitionOption) { + listener.enterColDefinitionOption(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitColTypeList) { - listener.exitColTypeList(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitColDefinitionOption) { + listener.exitColDefinitionOption(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitColTypeList) { - return visitor.visitColTypeList(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitColDefinitionOption) { + return visitor.visitColDefinitionOption(this); } else { return visitor.visitChildren(this); } @@ -24733,40 +27244,36 @@ export class ColTypeListContext extends ParserRuleContext { } -export class ColTypeContext extends ParserRuleContext { - public _colName!: ErrorCapturingIdentifierContext; - public dataType(): DataTypeContext { - return this.getRuleContext(0, DataTypeContext); - } - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { - return this.getRuleContext(0, ErrorCapturingIdentifierContext); - } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } - public commentSpec(): CommentSpecContext | undefined { - return this.tryGetRuleContext(0, CommentSpecContext); +export class GenerationExpressionContext extends ParserRuleContext { + public KW_GENERATED(): TerminalNode { return this.getToken(SparkSqlParser.KW_GENERATED, 0); } + public KW_ALWAYS(): TerminalNode { return this.getToken(SparkSqlParser.KW_ALWAYS, 0); } + public KW_AS(): TerminalNode { return this.getToken(SparkSqlParser.KW_AS, 0); } + public LEFT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.LEFT_PAREN, 0); } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); } + public RIGHT_PAREN(): TerminalNode { return this.getToken(SparkSqlParser.RIGHT_PAREN, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_colType; } + public get ruleIndex(): number { return SparkSqlParser.RULE_generationExpression; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterColType) { - listener.enterColType(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterGenerationExpression) { + listener.enterGenerationExpression(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitColType) { - listener.exitColType(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitGenerationExpression) { + listener.exitGenerationExpression(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitColType) { - return visitor.visitColType(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitGenerationExpression) { + return visitor.visitGenerationExpression(this); } else { return visitor.visitChildren(this); } @@ -24784,25 +27291,34 @@ export class ComplexColTypeListContext extends ParserRuleContext { return this.getRuleContext(i, ComplexColTypeContext); } } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_complexColTypeList; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterComplexColTypeList) { listener.enterComplexColTypeList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitComplexColTypeList) { listener.exitComplexColTypeList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitComplexColTypeList) { return visitor.visitComplexColTypeList(this); } else { @@ -24819,8 +27335,9 @@ export class ComplexColTypeContext extends ParserRuleContext { public dataType(): DataTypeContext { return this.getRuleContext(0, DataTypeContext); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } + public COLON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLON, 0); } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } public commentSpec(): CommentSpecContext | undefined { return this.tryGetRuleContext(0, CommentSpecContext); } @@ -24830,19 +27347,19 @@ export class ComplexColTypeContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_complexColType; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterComplexColType) { listener.enterComplexColType(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitComplexColType) { listener.exitComplexColType(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitComplexColType) { return visitor.visitComplexColType(this); } else { @@ -24855,8 +27372,8 @@ export class ComplexColTypeContext extends ParserRuleContext { export class WhenClauseContext extends ParserRuleContext { public _condition!: ExpressionContext; public _result!: ExpressionContext; - public WHEN(): TerminalNode { return this.getToken(SparkSqlParser.WHEN, 0); } - public THEN(): TerminalNode { return this.getToken(SparkSqlParser.THEN, 0); } + public KW_WHEN(): TerminalNode { return this.getToken(SparkSqlParser.KW_WHEN, 0); } + public KW_THEN(): TerminalNode { return this.getToken(SparkSqlParser.KW_THEN, 0); } public expression(): ExpressionContext[]; public expression(i: number): ExpressionContext; public expression(i?: number): ExpressionContext | ExpressionContext[] { @@ -24872,19 +27389,19 @@ export class WhenClauseContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_whenClause; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterWhenClause) { listener.enterWhenClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitWhenClause) { listener.exitWhenClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitWhenClause) { return visitor.visitWhenClause(this); } else { @@ -24895,7 +27412,7 @@ export class WhenClauseContext extends ParserRuleContext { export class WindowClauseContext extends ParserRuleContext { - public WINDOW(): TerminalNode { return this.getToken(SparkSqlParser.WINDOW, 0); } + public KW_WINDOW(): TerminalNode { return this.getToken(SparkSqlParser.KW_WINDOW, 0); } public namedWindow(): NamedWindowContext[]; public namedWindow(i: number): NamedWindowContext; public namedWindow(i?: number): NamedWindowContext | NamedWindowContext[] { @@ -24905,25 +27422,34 @@ export class WindowClauseContext extends ParserRuleContext { return this.getRuleContext(i, NamedWindowContext); } } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_windowClause; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterWindowClause) { listener.enterWindowClause(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitWindowClause) { listener.exitWindowClause(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitWindowClause) { return visitor.visitWindowClause(this); } else { @@ -24935,7 +27461,7 @@ export class WindowClauseContext extends ParserRuleContext { export class NamedWindowContext extends ParserRuleContext { public _name!: ErrorCapturingIdentifierContext; - public AS(): TerminalNode { return this.getToken(SparkSqlParser.AS, 0); } + public KW_AS(): TerminalNode { return this.getToken(SparkSqlParser.KW_AS, 0); } public windowSpec(): WindowSpecContext { return this.getRuleContext(0, WindowSpecContext); } @@ -24948,19 +27474,19 @@ export class NamedWindowContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_namedWindow; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterNamedWindow) { listener.enterNamedWindow(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitNamedWindow) { listener.exitNamedWindow(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitNamedWindow) { return visitor.visitNamedWindow(this); } else { @@ -24971,56 +27497,22 @@ export class NamedWindowContext extends ParserRuleContext { export class WindowSpecContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_windowSpec; } - public copyFrom(ctx: WindowSpecContext): void { - super.copyFrom(ctx); - } -} -export class WindowRefContext extends WindowSpecContext { public _name!: ErrorCapturingIdentifierContext; - public errorCapturingIdentifier(): ErrorCapturingIdentifierContext { - return this.getRuleContext(0, ErrorCapturingIdentifierContext); - } - constructor(ctx: WindowSpecContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterWindowRef) { - listener.enterWindowRef(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitWindowRef) { - listener.exitWindowRef(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitWindowRef) { - return visitor.visitWindowRef(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class WindowDefContext extends WindowSpecContext { public _expression!: ExpressionContext; public _partition: ExpressionContext[] = []; - public CLUSTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLUSTER, 0); } - public BY(): TerminalNode[]; - public BY(i: number): TerminalNode; - public BY(i?: number): TerminalNode | TerminalNode[] { + public errorCapturingIdentifier(): ErrorCapturingIdentifierContext | undefined { + return this.tryGetRuleContext(0, ErrorCapturingIdentifierContext); + } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } + public KW_CLUSTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLUSTER, 0); } + public KW_BY(): TerminalNode[]; + public KW_BY(i: number): TerminalNode; + public KW_BY(i?: number): TerminalNode | TerminalNode[] { if (i === undefined) { - return this.getTokens(SparkSqlParser.BY); + return this.getTokens(SparkSqlParser.KW_BY); } else { - return this.getToken(SparkSqlParser.BY, i); + return this.getToken(SparkSqlParser.KW_BY, i); } } public expression(): ExpressionContext[]; @@ -25035,6 +27527,15 @@ export class WindowDefContext extends WindowSpecContext { public windowFrame(): WindowFrameContext | undefined { return this.tryGetRuleContext(0, WindowFrameContext); } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } public sortItem(): SortItemContext[]; public sortItem(i: number): SortItemContext; public sortItem(i?: number): SortItemContext | SortItemContext[] { @@ -25044,30 +27545,31 @@ export class WindowDefContext extends WindowSpecContext { return this.getRuleContext(i, SortItemContext); } } - public PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PARTITION, 0); } - public DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DISTRIBUTE, 0); } - public ORDER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ORDER, 0); } - public SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SORT, 0); } - constructor(ctx: WindowSpecContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public KW_PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITION, 0); } + public KW_DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DISTRIBUTE, 0); } + public KW_ORDER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ORDER, 0); } + public KW_SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORT, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterWindowDef) { - listener.enterWindowDef(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_windowSpec; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterWindowSpec) { + listener.enterWindowSpec(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitWindowDef) { - listener.exitWindowDef(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitWindowSpec) { + listener.exitWindowSpec(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitWindowDef) { - return visitor.visitWindowDef(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitWindowSpec) { + return visitor.visitWindowSpec(this); } else { return visitor.visitChildren(this); } @@ -25077,9 +27579,9 @@ export class WindowDefContext extends WindowSpecContext { export class WindowFrameContext extends ParserRuleContext { public _frameType!: Token; - public _frameStart!: FrameBoundContext; + public _start_!: FrameBoundContext; public _end!: FrameBoundContext; - public RANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RANGE, 0); } + public KW_RANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RANGE, 0); } public frameBound(): FrameBoundContext[]; public frameBound(i: number): FrameBoundContext; public frameBound(i?: number): FrameBoundContext | FrameBoundContext[] { @@ -25089,28 +27591,28 @@ export class WindowFrameContext extends ParserRuleContext { return this.getRuleContext(i, FrameBoundContext); } } - public ROWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROWS, 0); } - public BETWEEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BETWEEN, 0); } - public AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AND, 0); } + public KW_ROWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROWS, 0); } + public KW_BETWEEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BETWEEN, 0); } + public KW_AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AND, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_windowFrame; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterWindowFrame) { listener.enterWindowFrame(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitWindowFrame) { listener.exitWindowFrame(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitWindowFrame) { return visitor.visitWindowFrame(this); } else { @@ -25122,11 +27624,11 @@ export class WindowFrameContext extends ParserRuleContext { export class FrameBoundContext extends ParserRuleContext { public _boundType!: Token; - public UNBOUNDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNBOUNDED, 0); } - public PRECEDING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PRECEDING, 0); } - public FOLLOWING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FOLLOWING, 0); } - public ROW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROW, 0); } - public CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT, 0); } + public KW_UNBOUNDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNBOUNDED, 0); } + public KW_PRECEDING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PRECEDING, 0); } + public KW_FOLLOWING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FOLLOWING, 0); } + public KW_ROW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROW, 0); } + public KW_CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT, 0); } public expression(): ExpressionContext | undefined { return this.tryGetRuleContext(0, ExpressionContext); } @@ -25136,19 +27638,19 @@ export class FrameBoundContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_frameBound; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterFrameBound) { listener.enterFrameBound(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitFrameBound) { listener.exitFrameBound(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitFrameBound) { return visitor.visitFrameBound(this); } else { @@ -25168,25 +27670,34 @@ export class QualifiedNameListContext extends ParserRuleContext { return this.getRuleContext(i, QualifiedNameContext); } } + public COMMA(): TerminalNode[]; + public COMMA(i: number): TerminalNode; + public COMMA(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.COMMA); + } else { + return this.getToken(SparkSqlParser.COMMA, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_qualifiedNameList; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterQualifiedNameList) { listener.enterQualifiedNameList(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitQualifiedNameList) { listener.exitQualifiedNameList(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitQualifiedNameList) { return visitor.visitQualifiedNameList(this); } else { @@ -25197,31 +27708,37 @@ export class QualifiedNameListContext extends ParserRuleContext { export class FunctionNameContext extends ParserRuleContext { + public KW_IDENTIFIER_KW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IDENTIFIER_KW, 0); } + public LEFT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT_PAREN, 0); } + public expression(): ExpressionContext | undefined { + return this.tryGetRuleContext(0, ExpressionContext); + } + public RIGHT_PAREN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT_PAREN, 0); } public qualifiedName(): QualifiedNameContext | undefined { return this.tryGetRuleContext(0, QualifiedNameContext); } - public FILTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FILTER, 0); } - public LEFT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT, 0); } - public RIGHT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT, 0); } + public KW_FILTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FILTER, 0); } + public KW_LEFT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LEFT, 0); } + public KW_RIGHT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RIGHT, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_functionName; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterFunctionName) { listener.enterFunctionName(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitFunctionName) { listener.exitFunctionName(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitFunctionName) { return visitor.visitFunctionName(this); } else { @@ -25241,25 +27758,34 @@ export class QualifiedNameContext extends ParserRuleContext { return this.getRuleContext(i, IdentifierContext); } } + public DOT(): TerminalNode[]; + public DOT(i: number): TerminalNode; + public DOT(i?: number): TerminalNode | TerminalNode[] { + if (i === undefined) { + return this.getTokens(SparkSqlParser.DOT); + } else { + return this.getToken(SparkSqlParser.DOT, i); + } + } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_qualifiedName; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterQualifiedName) { listener.enterQualifiedName(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitQualifiedName) { listener.exitQualifiedName(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitQualifiedName) { return visitor.visitQualifiedName(this); } else { @@ -25282,19 +27808,19 @@ export class ErrorCapturingIdentifierContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_errorCapturingIdentifier; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterErrorCapturingIdentifier) { listener.enterErrorCapturingIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitErrorCapturingIdentifier) { listener.exitErrorCapturingIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitErrorCapturingIdentifier) { return visitor.visitErrorCapturingIdentifier(this); } else { @@ -25305,16 +27831,6 @@ export class ErrorCapturingIdentifierContext extends ParserRuleContext { export class ErrorCapturingIdentifierExtraContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_errorCapturingIdentifierExtra; } - public copyFrom(ctx: ErrorCapturingIdentifierExtraContext): void { - super.copyFrom(ctx); - } -} -export class ErrorIdentContext extends ErrorCapturingIdentifierExtraContext { public MINUS(): TerminalNode[]; public MINUS(i: number): TerminalNode; public MINUS(i?: number): TerminalNode | TerminalNode[] { @@ -25333,52 +27849,27 @@ export class ErrorIdentContext extends ErrorCapturingIdentifierExtraContext { return this.getRuleContext(i, IdentifierContext); } } - constructor(ctx: ErrorCapturingIdentifierExtraContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterErrorIdent) { - listener.enterErrorIdent(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitErrorIdent) { - listener.exitErrorIdent(this); - } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitErrorIdent) { - return visitor.visitErrorIdent(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class RealIdentContext extends ErrorCapturingIdentifierExtraContext { - constructor(ctx: ErrorCapturingIdentifierExtraContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_errorCapturingIdentifierExtra; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterRealIdent) { - listener.enterRealIdent(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterErrorCapturingIdentifierExtra) { + listener.enterErrorCapturingIdentifierExtra(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitRealIdent) { - listener.exitRealIdent(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitErrorCapturingIdentifierExtra) { + listener.exitErrorCapturingIdentifierExtra(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitRealIdent) { - return visitor.visitRealIdent(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitErrorCapturingIdentifierExtra) { + return visitor.visitErrorCapturingIdentifierExtra(this); } else { return visitor.visitChildren(this); } @@ -25399,19 +27890,19 @@ export class IdentifierContext extends ParserRuleContext { // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_identifier; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterIdentifier) { listener.enterIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitIdentifier) { listener.exitIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitIdentifier) { return visitor.visitIdentifier(this); } else { @@ -25422,72 +27913,37 @@ export class IdentifierContext extends ParserRuleContext { export class StrictIdentifierContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_strictIdentifier; } - public copyFrom(ctx: StrictIdentifierContext): void { - super.copyFrom(ctx); - } -} -export class UnquotedIdentifierContext extends StrictIdentifierContext { public IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IDENTIFIER, 0); } + public quotedIdentifier(): QuotedIdentifierContext | undefined { + return this.tryGetRuleContext(0, QuotedIdentifierContext); + } public ansiNonReserved(): AnsiNonReservedContext | undefined { return this.tryGetRuleContext(0, AnsiNonReservedContext); } public nonReserved(): NonReservedContext | undefined { return this.tryGetRuleContext(0, NonReservedContext); } - constructor(ctx: StrictIdentifierContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterUnquotedIdentifier) { - listener.enterUnquotedIdentifier(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitUnquotedIdentifier) { - listener.exitUnquotedIdentifier(this); - } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitUnquotedIdentifier) { - return visitor.visitUnquotedIdentifier(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class QuotedIdentifierAlternativeContext extends StrictIdentifierContext { - public quotedIdentifier(): QuotedIdentifierContext { - return this.getRuleContext(0, QuotedIdentifierContext); - } - constructor(ctx: StrictIdentifierContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_strictIdentifier; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterQuotedIdentifierAlternative) { - listener.enterQuotedIdentifierAlternative(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterStrictIdentifier) { + listener.enterStrictIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitQuotedIdentifierAlternative) { - listener.exitQuotedIdentifierAlternative(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitStrictIdentifier) { + listener.exitStrictIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitQuotedIdentifierAlternative) { - return visitor.visitQuotedIdentifierAlternative(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitStrictIdentifier) { + return visitor.visitStrictIdentifier(this); } else { return visitor.visitChildren(this); } @@ -25496,26 +27952,27 @@ export class QuotedIdentifierAlternativeContext extends StrictIdentifierContext export class QuotedIdentifierContext extends ParserRuleContext { - public BACKQUOTED_IDENTIFIER(): TerminalNode { return this.getToken(SparkSqlParser.BACKQUOTED_IDENTIFIER, 0); } + public BACKQUOTED_IDENTIFIER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BACKQUOTED_IDENTIFIER, 0); } + public DOUBLEQUOTED_STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DOUBLEQUOTED_STRING, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_quotedIdentifier; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterQuotedIdentifier) { listener.enterQuotedIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitQuotedIdentifier) { listener.exitQuotedIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitQuotedIdentifier) { return visitor.visitQuotedIdentifier(this); } else { @@ -25525,292 +27982,181 @@ export class QuotedIdentifierContext extends ParserRuleContext { } -export class NumberContext extends ParserRuleContext { +export class BackQuotedIdentifierContext extends ParserRuleContext { + public BACKQUOTED_IDENTIFIER(): TerminalNode { return this.getToken(SparkSqlParser.BACKQUOTED_IDENTIFIER, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_number; } - public copyFrom(ctx: NumberContext): void { - super.copyFrom(ctx); - } -} -export class ExponentLiteralContext extends NumberContext { - public EXPONENT_VALUE(): TerminalNode { return this.getToken(SparkSqlParser.EXPONENT_VALUE, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterExponentLiteral) { - listener.enterExponentLiteral(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitExponentLiteral) { - listener.exitExponentLiteral(this); - } - } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitExponentLiteral) { - return visitor.visitExponentLiteral(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class DecimalLiteralContext extends NumberContext { - public DECIMAL_VALUE(): TerminalNode { return this.getToken(SparkSqlParser.DECIMAL_VALUE, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_backQuotedIdentifier; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDecimalLiteral) { - listener.enterDecimalLiteral(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterBackQuotedIdentifier) { + listener.enterBackQuotedIdentifier(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDecimalLiteral) { - listener.exitDecimalLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitBackQuotedIdentifier) { + listener.exitBackQuotedIdentifier(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDecimalLiteral) { - return visitor.visitDecimalLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitBackQuotedIdentifier) { + return visitor.visitBackQuotedIdentifier(this); } else { return visitor.visitChildren(this); } } } -export class LegacyDecimalLiteralContext extends NumberContext { + + +export class NumberContext extends ParserRuleContext { public EXPONENT_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXPONENT_VALUE, 0); } - public DECIMAL_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DECIMAL_VALUE, 0); } public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterLegacyDecimalLiteral) { - listener.enterLegacyDecimalLiteral(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitLegacyDecimalLiteral) { - listener.exitLegacyDecimalLiteral(this); - } + public DECIMAL_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DECIMAL_VALUE, 0); } + public INTEGER_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTEGER_VALUE, 0); } + public BIGINT_LITERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BIGINT_LITERAL, 0); } + public SMALLINT_LITERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SMALLINT_LITERAL, 0); } + public TINYINT_LITERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TINYINT_LITERAL, 0); } + public DOUBLE_LITERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DOUBLE_LITERAL, 0); } + public FLOAT_LITERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FLOAT_LITERAL, 0); } + public BIGDECIMAL_LITERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BIGDECIMAL_LITERAL, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitLegacyDecimalLiteral) { - return visitor.visitLegacyDecimalLiteral(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class IntegerLiteralContext extends NumberContext { - public INTEGER_VALUE(): TerminalNode { return this.getToken(SparkSqlParser.INTEGER_VALUE, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_number; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterIntegerLiteral) { - listener.enterIntegerLiteral(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterNumber) { + listener.enterNumber(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitIntegerLiteral) { - listener.exitIntegerLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitNumber) { + listener.exitNumber(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitIntegerLiteral) { - return visitor.visitIntegerLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitNumber) { + return visitor.visitNumber(this); } else { return visitor.visitChildren(this); } } } -export class BigIntLiteralContext extends NumberContext { - public BIGINT_LITERAL(): TerminalNode { return this.getToken(SparkSqlParser.BIGINT_LITERAL, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterBigIntLiteral) { - listener.enterBigIntLiteral(this); - } - } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitBigIntLiteral) { - listener.exitBigIntLiteral(this); - } + + +export class AlterColumnActionContext extends ParserRuleContext { + public _setOrDrop!: Token; + public _dropDefault!: Token; + public KW_TYPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TYPE, 0); } + public dataType(): DataTypeContext | undefined { + return this.tryGetRuleContext(0, DataTypeContext); } - // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitBigIntLiteral) { - return visitor.visitBigIntLiteral(this); - } else { - return visitor.visitChildren(this); - } + public commentSpec(): CommentSpecContext | undefined { + return this.tryGetRuleContext(0, CommentSpecContext); } -} -export class SmallIntLiteralContext extends NumberContext { - public SMALLINT_LITERAL(): TerminalNode { return this.getToken(SparkSqlParser.SMALLINT_LITERAL, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + public colPosition(): ColPositionContext | undefined { + return this.tryGetRuleContext(0, ColPositionContext); } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterSmallIntLiteral) { - listener.enterSmallIntLiteral(this); - } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + public KW_SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SET, 0); } + public KW_DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DROP, 0); } + public defaultExpression(): DefaultExpressionContext | undefined { + return this.tryGetRuleContext(0, DefaultExpressionContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitSmallIntLiteral) { - listener.exitSmallIntLiteral(this); - } + public KW_DEFAULT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEFAULT, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitSmallIntLiteral) { - return visitor.visitSmallIntLiteral(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class TinyIntLiteralContext extends NumberContext { - public TINYINT_LITERAL(): TerminalNode { return this.getToken(SparkSqlParser.TINYINT_LITERAL, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_alterColumnAction; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterTinyIntLiteral) { - listener.enterTinyIntLiteral(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterAlterColumnAction) { + listener.enterAlterColumnAction(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitTinyIntLiteral) { - listener.exitTinyIntLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitAlterColumnAction) { + listener.exitAlterColumnAction(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitTinyIntLiteral) { - return visitor.visitTinyIntLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitAlterColumnAction) { + return visitor.visitAlterColumnAction(this); } else { return visitor.visitChildren(this); } } } -export class DoubleLiteralContext extends NumberContext { - public DOUBLE_LITERAL(): TerminalNode { return this.getToken(SparkSqlParser.DOUBLE_LITERAL, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); + + +export class StringLitContext extends ParserRuleContext { + public STRING_LITERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRING_LITERAL, 0); } + public DOUBLEQUOTED_STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DOUBLEQUOTED_STRING, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterDoubleLiteral) { - listener.enterDoubleLiteral(this); + public get ruleIndex(): number { return SparkSqlParser.RULE_stringLit; } + // @Override + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterStringLit) { + listener.enterStringLit(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitDoubleLiteral) { - listener.exitDoubleLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitStringLit) { + listener.exitStringLit(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitDoubleLiteral) { - return visitor.visitDoubleLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitStringLit) { + return visitor.visitStringLit(this); } else { return visitor.visitChildren(this); } } } -export class FloatLiteralContext extends NumberContext { - public FLOAT_LITERAL(): TerminalNode { return this.getToken(SparkSqlParser.FLOAT_LITERAL, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterFloatLiteral) { - listener.enterFloatLiteral(this); - } + + +export class CommentContext extends ParserRuleContext { + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); } - // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitFloatLiteral) { - listener.exitFloatLiteral(this); - } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitFloatLiteral) { - return visitor.visitFloatLiteral(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class BigDecimalLiteralContext extends NumberContext { - public BIGDECIMAL_LITERAL(): TerminalNode { return this.getToken(SparkSqlParser.BIGDECIMAL_LITERAL, 0); } - public MINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MINUS, 0); } - constructor(ctx: NumberContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } + public get ruleIndex(): number { return SparkSqlParser.RULE_comment; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterBigDecimalLiteral) { - listener.enterBigDecimalLiteral(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterComment) { + listener.enterComment(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitBigDecimalLiteral) { - listener.exitBigDecimalLiteral(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitComment) { + listener.exitComment(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitBigDecimalLiteral) { - return visitor.visitBigDecimalLiteral(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitComment) { + return visitor.visitComment(this); } else { return visitor.visitChildren(this); } @@ -25818,43 +28164,32 @@ export class BigDecimalLiteralContext extends NumberContext { } -export class AlterColumnActionContext extends ParserRuleContext { - public _setOrDrop!: Token; - public TYPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TYPE, 0); } - public dataType(): DataTypeContext | undefined { - return this.tryGetRuleContext(0, DataTypeContext); - } - public commentSpec(): CommentSpecContext | undefined { - return this.tryGetRuleContext(0, CommentSpecContext); - } - public colPosition(): ColPositionContext | undefined { - return this.tryGetRuleContext(0, ColPositionContext); +export class VersionContext extends ParserRuleContext { + public INTEGER_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTEGER_VALUE, 0); } + public stringLit(): StringLitContext | undefined { + return this.tryGetRuleContext(0, StringLitContext); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } - public SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SET, 0); } - public DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DROP, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override - public get ruleIndex(): number { return SparkSqlParser.RULE_alterColumnAction; } + public get ruleIndex(): number { return SparkSqlParser.RULE_version; } // @Override - public enterRule(listener: SparkSqlListener): void { - if (listener.enterAlterColumnAction) { - listener.enterAlterColumnAction(this); + public enterRule(listener: SparkSqlParserListener): void { + if (listener.enterVersion) { + listener.enterVersion(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { - if (listener.exitAlterColumnAction) { - listener.exitAlterColumnAction(this); + public exitRule(listener: SparkSqlParserListener): void { + if (listener.exitVersion) { + listener.exitVersion(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { - if (visitor.visitAlterColumnAction) { - return visitor.visitAlterColumnAction(this); + public accept(visitor: SparkSqlParserVisitor): Result { + if (visitor.visitVersion) { + return visitor.visitVersion(this); } else { return visitor.visitChildren(this); } @@ -25863,205 +28198,285 @@ export class AlterColumnActionContext extends ParserRuleContext { export class AnsiNonReservedContext extends ParserRuleContext { - public ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ADD, 0); } - public AFTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AFTER, 0); } - public ALTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ALTER, 0); } - public ANALYZE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ANALYZE, 0); } - public ANTI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ANTI, 0); } - public ARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ARCHIVE, 0); } - public ARRAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ARRAY, 0); } - public ASC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASC, 0); } - public AT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AT, 0); } - public BETWEEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BETWEEN, 0); } - public BUCKET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BUCKET, 0); } - public BUCKETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BUCKETS, 0); } - public BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BY, 0); } - public CACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CACHE, 0); } - public CASCADE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CASCADE, 0); } - public CHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CHANGE, 0); } - public CLEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLEAR, 0); } - public CLUSTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLUSTER, 0); } - public CLUSTERED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLUSTERED, 0); } - public CODEGEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CODEGEN, 0); } - public COLLECTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLLECTION, 0); } - public COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMNS, 0); } - public COMMENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMMENT, 0); } - public COMMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMMIT, 0); } - public COMPACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMPACT, 0); } - public COMPACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMPACTIONS, 0); } - public COMPUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMPUTE, 0); } - public CONCATENATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CONCATENATE, 0); } - public COST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COST, 0); } - public CUBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CUBE, 0); } - public CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT, 0); } - public DATA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATA, 0); } - public DATABASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATABASE, 0); } - public DATABASES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATABASES, 0); } - public DBPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DBPROPERTIES, 0); } - public DEFINED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DEFINED, 0); } - public DELETE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DELETE, 0); } - public DELIMITED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DELIMITED, 0); } - public DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESC, 0); } - public DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESCRIBE, 0); } - public DFS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DFS, 0); } - public DIRECTORIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIRECTORIES, 0); } - public DIRECTORY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIRECTORY, 0); } - public DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DISTRIBUTE, 0); } - public DIV(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIV, 0); } - public DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DROP, 0); } - public ESCAPED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ESCAPED, 0); } - public EXCHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXCHANGE, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public EXPLAIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXPLAIN, 0); } - public EXPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXPORT, 0); } - public EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTENDED, 0); } - public EXTERNAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTERNAL, 0); } - public EXTRACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTRACT, 0); } - public FIELDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FIELDS, 0); } - public FILEFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FILEFORMAT, 0); } - public FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FIRST, 0); } - public FOLLOWING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FOLLOWING, 0); } - public FORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FORMAT, 0); } - public FORMATTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FORMATTED, 0); } - public FUNCTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FUNCTION, 0); } - public FUNCTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FUNCTIONS, 0); } - public GLOBAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GLOBAL, 0); } - public GROUPING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GROUPING, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public IGNORE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IGNORE, 0); } - public IMPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IMPORT, 0); } - public INDEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INDEX, 0); } - public INDEXES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INDEXES, 0); } - public INPATH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INPATH, 0); } - public INPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INPUTFORMAT, 0); } - public INSERT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INSERT, 0); } - public INTERVAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTERVAL, 0); } - public ITEMS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ITEMS, 0); } - public KEYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KEYS, 0); } - public LAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LAST, 0); } - public LATERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LATERAL, 0); } - public LAZY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LAZY, 0); } - public LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIKE, 0); } - public LIMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIMIT, 0); } - public LINES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LINES, 0); } - public LIST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIST, 0); } - public LOAD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOAD, 0); } - public LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCAL, 0); } - public LOCATION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCATION, 0); } - public LOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCK, 0); } - public LOCKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCKS, 0); } - public LOGICAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOGICAL, 0); } - public MACRO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MACRO, 0); } - public MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MAP, 0); } - public MATCHED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MATCHED, 0); } - public MERGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MERGE, 0); } - public MSCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MSCK, 0); } - public NAMESPACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NAMESPACE, 0); } - public NAMESPACES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NAMESPACES, 0); } - public NO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NO, 0); } - public NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULLS, 0); } - public OF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OF, 0); } - public OPTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OPTION, 0); } - public OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OPTIONS, 0); } - public OUT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OUT, 0); } - public OUTPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OUTPUTFORMAT, 0); } - public OVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVER, 0); } - public OVERLAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVERLAY, 0); } - public OVERWRITE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVERWRITE, 0); } - public PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PARTITION, 0); } - public PARTITIONED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PARTITIONED, 0); } - public PARTITIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PARTITIONS, 0); } - public PERCENTLIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PERCENTLIT, 0); } - public PIVOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PIVOT, 0); } - public PLACING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLACING, 0); } - public POSITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.POSITION, 0); } - public PRECEDING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PRECEDING, 0); } - public PRINCIPALS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PRINCIPALS, 0); } - public PROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PROPERTIES, 0); } - public PURGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PURGE, 0); } - public QUERY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.QUERY, 0); } - public RANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RANGE, 0); } - public RECORDREADER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RECORDREADER, 0); } - public RECORDWRITER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RECORDWRITER, 0); } - public RECOVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RECOVER, 0); } - public REDUCE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REDUCE, 0); } - public REFRESH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REFRESH, 0); } - public RENAME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RENAME, 0); } - public REPAIR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REPAIR, 0); } - public REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REPLACE, 0); } - public RESET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RESET, 0); } - public RESTRICT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RESTRICT, 0); } - public REVOKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REVOKE, 0); } - public RLIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RLIKE, 0); } - public ROLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLE, 0); } - public ROLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLES, 0); } - public ROLLBACK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLLBACK, 0); } - public ROLLUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLLUP, 0); } - public ROW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROW, 0); } - public ROWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROWS, 0); } - public SCHEMA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SCHEMA, 0); } - public SEMI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SEMI, 0); } - public SEPARATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SEPARATED, 0); } - public SERDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDE, 0); } - public SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDEPROPERTIES, 0); } - public SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SET, 0); } - public SETMINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SETMINUS, 0); } - public SETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SETS, 0); } - public SHOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SHOW, 0); } - public SKEWED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SKEWED, 0); } - public SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SORT, 0); } - public SORTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SORTED, 0); } - public START(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.START, 0); } - public STATISTICS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STATISTICS, 0); } - public STORED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STORED, 0); } - public STRATIFY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRATIFY, 0); } - public STRUCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRUCT, 0); } - public SUBSTR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SUBSTR, 0); } - public SUBSTRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SUBSTRING, 0); } - public TABLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLES, 0); } - public TABLESAMPLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLESAMPLE, 0); } - public TBLPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TBLPROPERTIES, 0); } - public TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TEMPORARY, 0); } - public TERMINATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TERMINATED, 0); } - public TOUCH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TOUCH, 0); } - public TRANSACTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSACTION, 0); } - public TRANSACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSACTIONS, 0); } - public TRANSFORM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSFORM, 0); } - public TRIM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRIM, 0); } - public TRUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRUE, 0); } - public TRUNCATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRUNCATE, 0); } - public TYPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TYPE, 0); } - public UNARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNARCHIVE, 0); } - public UNBOUNDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNBOUNDED, 0); } - public UNCACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNCACHE, 0); } - public UNLOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNLOCK, 0); } - public UNSET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNSET, 0); } - public UPDATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UPDATE, 0); } - public USE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.USE, 0); } - public VALUES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VALUES, 0); } - public VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEW, 0); } - public VIEWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEWS, 0); } - public WINDOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WINDOW, 0); } - public ZONE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ZONE, 0); } + public KW_ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ADD, 0); } + public KW_AFTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AFTER, 0); } + public KW_ALTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALTER, 0); } + public KW_ALWAYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALWAYS, 0); } + public KW_ANALYZE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANALYZE, 0); } + public KW_ANTI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANTI, 0); } + public KW_ANY_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANY_VALUE, 0); } + public KW_ARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ARCHIVE, 0); } + public KW_ARRAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ARRAY, 0); } + public KW_ASC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ASC, 0); } + public KW_AT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AT, 0); } + public KW_BETWEEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BETWEEN, 0); } + public KW_BIGINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BIGINT, 0); } + public KW_BINARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BINARY, 0); } + public KW_BINARY_HEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BINARY_HEX, 0); } + public KW_BOOLEAN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BOOLEAN, 0); } + public KW_BUCKET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BUCKET, 0); } + public KW_BUCKETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BUCKETS, 0); } + public KW_BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BY, 0); } + public KW_BYTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BYTE, 0); } + public KW_CACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CACHE, 0); } + public KW_CASCADE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CASCADE, 0); } + public KW_CATALOG(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CATALOG, 0); } + public KW_CATALOGS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CATALOGS, 0); } + public KW_CHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHANGE, 0); } + public KW_CHAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHAR, 0); } + public KW_CHARACTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHARACTER, 0); } + public KW_CLEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLEAR, 0); } + public KW_CLUSTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLUSTER, 0); } + public KW_CLUSTERED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLUSTERED, 0); } + public KW_CODEGEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CODEGEN, 0); } + public KW_COLLECTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLLECTION, 0); } + public KW_COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLUMNS, 0); } + public KW_COMMENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMMENT, 0); } + public KW_COMMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMMIT, 0); } + public KW_COMPACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPACT, 0); } + public KW_COMPACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPACTIONS, 0); } + public KW_COMPUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPUTE, 0); } + public KW_CONCATENATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CONCATENATE, 0); } + public KW_COST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COST, 0); } + public KW_CUBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CUBE, 0); } + public KW_CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT, 0); } + public KW_DATA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATA, 0); } + public KW_DATABASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATABASE, 0); } + public KW_DATABASES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATABASES, 0); } + public KW_DATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE, 0); } + public KW_DATEADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATEADD, 0); } + public KW_DATE_ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE_ADD, 0); } + public KW_DATEDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATEDIFF, 0); } + public KW_DATE_DIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE_DIFF, 0); } + public KW_DAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAY, 0); } + public KW_DAYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAYS, 0); } + public KW_DAYOFYEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAYOFYEAR, 0); } + public KW_DBPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DBPROPERTIES, 0); } + public KW_DEC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEC, 0); } + public KW_DECIMAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DECIMAL, 0); } + public KW_DECLARE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DECLARE, 0); } + public KW_DEFAULT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEFAULT, 0); } + public KW_DEFINED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEFINED, 0); } + public KW_DELETE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DELETE, 0); } + public KW_DELIMITED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DELIMITED, 0); } + public KW_DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DESC, 0); } + public KW_DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DESCRIBE, 0); } + public KW_DFS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DFS, 0); } + public KW_DIRECTORIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIRECTORIES, 0); } + public KW_DIRECTORY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIRECTORY, 0); } + public KW_DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DISTRIBUTE, 0); } + public KW_DIV(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIV, 0); } + public KW_DOUBLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DOUBLE, 0); } + public KW_DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DROP, 0); } + public KW_ESCAPED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ESCAPED, 0); } + public KW_EXCHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXCHANGE, 0); } + public KW_EXCLUDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXCLUDE, 0); } + public KW_EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXISTS, 0); } + public KW_EXPLAIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXPLAIN, 0); } + public KW_EXPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXPORT, 0); } + public KW_EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTENDED, 0); } + public KW_EXTERNAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTERNAL, 0); } + public KW_EXTRACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTRACT, 0); } + public KW_FIELDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FIELDS, 0); } + public KW_FILEFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FILEFORMAT, 0); } + public KW_FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FIRST, 0); } + public KW_FLOAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FLOAT, 0); } + public KW_FOLLOWING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FOLLOWING, 0); } + public KW_FORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FORMAT, 0); } + public KW_FORMATTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FORMATTED, 0); } + public KW_FUNCTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FUNCTION, 0); } + public KW_FUNCTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FUNCTIONS, 0); } + public KW_GENERATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GENERATED, 0); } + public KW_GLOBAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GLOBAL, 0); } + public KW_GROUPING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GROUPING, 0); } + public KW_HOUR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HOUR, 0); } + public KW_HOURS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HOURS, 0); } + public KW_IDENTIFIER_KW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IDENTIFIER_KW, 0); } + public KW_IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IF, 0); } + public KW_IGNORE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IGNORE, 0); } + public KW_IMPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IMPORT, 0); } + public KW_INCLUDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INCLUDE, 0); } + public KW_INDEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INDEX, 0); } + public KW_INDEXES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INDEXES, 0); } + public KW_INPATH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INPATH, 0); } + public KW_INPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INPUTFORMAT, 0); } + public KW_INSERT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INSERT, 0); } + public KW_INT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INT, 0); } + public KW_INTEGER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTEGER, 0); } + public KW_INTERVAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTERVAL, 0); } + public KW_ITEMS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ITEMS, 0); } + public KW_KEYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_KEYS, 0); } + public KW_LAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LAST, 0); } + public KW_LAZY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LAZY, 0); } + public KW_LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIKE, 0); } + public KW_ILIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ILIKE, 0); } + public KW_LIMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIMIT, 0); } + public KW_LINES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LINES, 0); } + public KW_LIST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIST, 0); } + public KW_LOAD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOAD, 0); } + public KW_LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCAL, 0); } + public KW_LOCATION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCATION, 0); } + public KW_LOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCK, 0); } + public KW_LOCKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCKS, 0); } + public KW_LOGICAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOGICAL, 0); } + public KW_LONG(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LONG, 0); } + public KW_MACRO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MACRO, 0); } + public KW_MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MAP, 0); } + public KW_MATCHED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MATCHED, 0); } + public KW_MERGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MERGE, 0); } + public KW_MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MICROSECOND, 0); } + public KW_MICROSECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MICROSECONDS, 0); } + public KW_MILLISECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MILLISECOND, 0); } + public KW_MILLISECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MILLISECONDS, 0); } + public KW_MINUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MINUTE, 0); } + public KW_MINUTES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MINUTES, 0); } + public KW_MONTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MONTH, 0); } + public KW_MONTHS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MONTHS, 0); } + public KW_MSCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MSCK, 0); } + public KW_NAME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAME, 0); } + public KW_NAMESPACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAMESPACE, 0); } + public KW_NAMESPACES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAMESPACES, 0); } + public KW_NANOSECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NANOSECOND, 0); } + public KW_NANOSECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NANOSECONDS, 0); } + public KW_NO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NO, 0); } + public KW_NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULLS, 0); } + public KW_NUMERIC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NUMERIC, 0); } + public KW_OF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OF, 0); } + public KW_OPTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OPTION, 0); } + public KW_OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OPTIONS, 0); } + public KW_OUT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUT, 0); } + public KW_OUTPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUTPUTFORMAT, 0); } + public KW_OVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVER, 0); } + public KW_OVERLAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVERLAY, 0); } + public KW_OVERWRITE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVERWRITE, 0); } + public KW_PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITION, 0); } + public KW_PARTITIONED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITIONED, 0); } + public KW_PARTITIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITIONS, 0); } + public KW_PERCENTLIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PERCENTLIT, 0); } + public KW_PIVOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PIVOT, 0); } + public KW_PLACING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PLACING, 0); } + public KW_POSITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_POSITION, 0); } + public KW_PRECEDING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PRECEDING, 0); } + public KW_PRINCIPALS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PRINCIPALS, 0); } + public KW_PROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PROPERTIES, 0); } + public KW_PURGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PURGE, 0); } + public KW_QUARTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_QUARTER, 0); } + public KW_QUERY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_QUERY, 0); } + public KW_RANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RANGE, 0); } + public KW_REAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REAL, 0); } + public KW_RECORDREADER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECORDREADER, 0); } + public KW_RECORDWRITER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECORDWRITER, 0); } + public KW_RECOVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECOVER, 0); } + public KW_REDUCE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REDUCE, 0); } + public KW_REFRESH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REFRESH, 0); } + public KW_RENAME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RENAME, 0); } + public KW_REPAIR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPAIR, 0); } + public KW_REPEATABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPEATABLE, 0); } + public KW_REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPLACE, 0); } + public KW_RESET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESET, 0); } + public KW_RESPECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESPECT, 0); } + public KW_RESTRICT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESTRICT, 0); } + public KW_REVOKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REVOKE, 0); } + public KW_RLIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RLIKE, 0); } + public KW_ROLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLE, 0); } + public KW_ROLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLES, 0); } + public KW_ROLLBACK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLLBACK, 0); } + public KW_ROLLUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLLUP, 0); } + public KW_ROW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROW, 0); } + public KW_ROWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROWS, 0); } + public KW_SCHEMA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SCHEMA, 0); } + public KW_SCHEMAS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SCHEMAS, 0); } + public KW_SECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SECOND, 0); } + public KW_SECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SECONDS, 0); } + public KW_SEMI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SEMI, 0); } + public KW_SEPARATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SEPARATED, 0); } + public KW_SERDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDE, 0); } + public KW_SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDEPROPERTIES, 0); } + public KW_SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SET, 0); } + public KW_SETMINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SETMINUS, 0); } + public KW_SETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SETS, 0); } + public KW_SHORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SHORT, 0); } + public KW_SHOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SHOW, 0); } + public KW_SINGLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SINGLE, 0); } + public KW_SKEWED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SKEWED, 0); } + public KW_SMALLINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SMALLINT, 0); } + public KW_SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORT, 0); } + public KW_SORTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORTED, 0); } + public KW_SOURCE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SOURCE, 0); } + public KW_START(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_START, 0); } + public KW_STATISTICS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STATISTICS, 0); } + public KW_STORED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STORED, 0); } + public KW_STRATIFY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRATIFY, 0); } + public KW_STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRING, 0); } + public KW_STRUCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRUCT, 0); } + public KW_SUBSTR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SUBSTR, 0); } + public KW_SUBSTRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SUBSTRING, 0); } + public KW_SYNC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYNC, 0); } + public KW_SYSTEM_TIME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYSTEM_TIME, 0); } + public KW_SYSTEM_VERSION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYSTEM_VERSION, 0); } + public KW_TABLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLES, 0); } + public KW_TABLESAMPLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLESAMPLE, 0); } + public KW_TARGET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TARGET, 0); } + public KW_TBLPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TBLPROPERTIES, 0); } + public KW_TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TEMPORARY, 0); } + public KW_TERMINATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TERMINATED, 0); } + public KW_TIMEDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMEDIFF, 0); } + public KW_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP, 0); } + public KW_TIMESTAMP_LTZ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP_LTZ, 0); } + public KW_TIMESTAMP_NTZ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP_NTZ, 0); } + public KW_TIMESTAMPADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMPADD, 0); } + public KW_TIMESTAMPDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMPDIFF, 0); } + public KW_TINYINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TINYINT, 0); } + public KW_TOUCH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TOUCH, 0); } + public KW_TRANSACTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSACTION, 0); } + public KW_TRANSACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSACTIONS, 0); } + public KW_TRANSFORM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSFORM, 0); } + public KW_TRIM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRIM, 0); } + public KW_TRUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRUE, 0); } + public KW_TRUNCATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRUNCATE, 0); } + public KW_TRY_CAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRY_CAST, 0); } + public KW_TYPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TYPE, 0); } + public KW_UNARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNARCHIVE, 0); } + public KW_UNBOUNDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNBOUNDED, 0); } + public KW_UNCACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNCACHE, 0); } + public KW_UNLOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNLOCK, 0); } + public KW_UNPIVOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNPIVOT, 0); } + public KW_UNSET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNSET, 0); } + public KW_UPDATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UPDATE, 0); } + public KW_USE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USE, 0); } + public KW_VALUES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VALUES, 0); } + public KW_VARCHAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VARCHAR, 0); } + public KW_VAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VAR, 0); } + public KW_VARIABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VARIABLE, 0); } + public KW_VERSION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VERSION, 0); } + public KW_VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VIEW, 0); } + public KW_VIEWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VIEWS, 0); } + public KW_VOID(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VOID, 0); } + public KW_WEEK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WEEK, 0); } + public KW_WEEKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WEEKS, 0); } + public KW_WINDOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WINDOW, 0); } + public KW_YEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEAR, 0); } + public KW_YEARS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEARS, 0); } + public KW_ZONE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ZONE, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_ansiNonReserved; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterAnsiNonReserved) { listener.enterAnsiNonReserved(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitAnsiNonReserved) { listener.exitAnsiNonReserved(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitAnsiNonReserved) { return visitor.visitAnsiNonReserved(this); } else { @@ -26072,40 +28487,41 @@ export class AnsiNonReservedContext extends ParserRuleContext { export class StrictNonReservedContext extends ParserRuleContext { - public ANTI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ANTI, 0); } - public CROSS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CROSS, 0); } - public EXCEPT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXCEPT, 0); } - public FULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FULL, 0); } - public INNER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INNER, 0); } - public INTERSECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTERSECT, 0); } - public JOIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.JOIN, 0); } - public LEFT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEFT, 0); } - public NATURAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NATURAL, 0); } - public ON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ON, 0); } - public RIGHT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RIGHT, 0); } - public SEMI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SEMI, 0); } - public SETMINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SETMINUS, 0); } - public UNION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNION, 0); } - public USING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.USING, 0); } + public KW_ANTI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANTI, 0); } + public KW_CROSS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CROSS, 0); } + public KW_EXCEPT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXCEPT, 0); } + public KW_FULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FULL, 0); } + public KW_INNER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INNER, 0); } + public KW_INTERSECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTERSECT, 0); } + public KW_JOIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_JOIN, 0); } + public KW_LATERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LATERAL, 0); } + public KW_LEFT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LEFT, 0); } + public KW_NATURAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NATURAL, 0); } + public KW_ON(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ON, 0); } + public KW_RIGHT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RIGHT, 0); } + public KW_SEMI(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SEMI, 0); } + public KW_SETMINUS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SETMINUS, 0); } + public KW_UNION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNION, 0); } + public KW_USING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USING, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_strictNonReserved; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterStrictNonReserved) { listener.enterStrictNonReserved(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitStrictNonReserved) { listener.exitStrictNonReserved(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitStrictNonReserved) { return visitor.visitStrictNonReserved(this); } else { @@ -26116,259 +28532,343 @@ export class StrictNonReservedContext extends ParserRuleContext { export class NonReservedContext extends ParserRuleContext { - public ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ADD, 0); } - public AFTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AFTER, 0); } - public ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ALL, 0); } - public ALTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ALTER, 0); } - public ANALYZE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ANALYZE, 0); } - public AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AND, 0); } - public ANY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ANY, 0); } - public ARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ARCHIVE, 0); } - public ARRAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ARRAY, 0); } - public AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AS, 0); } - public ASC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ASC, 0); } - public AT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AT, 0); } - public AUTHORIZATION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.AUTHORIZATION, 0); } - public BETWEEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BETWEEN, 0); } - public BOTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BOTH, 0); } - public BUCKET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BUCKET, 0); } - public BUCKETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BUCKETS, 0); } - public BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.BY, 0); } - public CACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CACHE, 0); } - public CASCADE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CASCADE, 0); } - public CASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CASE, 0); } - public CAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CAST, 0); } - public CHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CHANGE, 0); } - public CHECK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CHECK, 0); } - public CLEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLEAR, 0); } - public CLUSTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLUSTER, 0); } - public CLUSTERED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CLUSTERED, 0); } - public CODEGEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CODEGEN, 0); } - public COLLATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLLATE, 0); } - public COLLECTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLLECTION, 0); } - public COLUMN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMN, 0); } - public COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COLUMNS, 0); } - public COMMENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMMENT, 0); } - public COMMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMMIT, 0); } - public COMPACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMPACT, 0); } - public COMPACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMPACTIONS, 0); } - public COMPUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COMPUTE, 0); } - public CONCATENATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CONCATENATE, 0); } - public CONSTRAINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CONSTRAINT, 0); } - public COST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.COST, 0); } - public CREATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CREATE, 0); } - public CUBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CUBE, 0); } - public CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT, 0); } - public CURRENT_DATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT_DATE, 0); } - public CURRENT_TIME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT_TIME, 0); } - public CURRENT_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT_TIMESTAMP, 0); } - public CURRENT_USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.CURRENT_USER, 0); } - public DATA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATA, 0); } - public DATABASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATABASE, 0); } - public DATABASES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DATABASES, 0); } - public DBPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DBPROPERTIES, 0); } - public DEFINED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DEFINED, 0); } - public DELETE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DELETE, 0); } - public DELIMITED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DELIMITED, 0); } - public DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESC, 0); } - public DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DESCRIBE, 0); } - public DFS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DFS, 0); } - public DIRECTORIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIRECTORIES, 0); } - public DIRECTORY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIRECTORY, 0); } - public DISTINCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DISTINCT, 0); } - public DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DISTRIBUTE, 0); } - public DIV(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DIV, 0); } - public DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.DROP, 0); } - public ELSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ELSE, 0); } - public END(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.END, 0); } - public ESCAPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ESCAPE, 0); } - public ESCAPED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ESCAPED, 0); } - public EXCHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXCHANGE, 0); } - public EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXISTS, 0); } - public EXPLAIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXPLAIN, 0); } - public EXPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXPORT, 0); } - public EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTENDED, 0); } - public EXTERNAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTERNAL, 0); } - public EXTRACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.EXTRACT, 0); } - public FALSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FALSE, 0); } - public FETCH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FETCH, 0); } - public FILTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FILTER, 0); } - public FIELDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FIELDS, 0); } - public FILEFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FILEFORMAT, 0); } - public FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FIRST, 0); } - public FOLLOWING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FOLLOWING, 0); } - public FOR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FOR, 0); } - public FOREIGN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FOREIGN, 0); } - public FORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FORMAT, 0); } - public FORMATTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FORMATTED, 0); } - public FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FROM, 0); } - public FUNCTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FUNCTION, 0); } - public FUNCTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.FUNCTIONS, 0); } - public GLOBAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GLOBAL, 0); } - public GRANT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GRANT, 0); } - public GROUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GROUP, 0); } - public GROUPING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.GROUPING, 0); } - public HAVING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.HAVING, 0); } - public IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IF, 0); } - public IGNORE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IGNORE, 0); } - public IMPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IMPORT, 0); } - public IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IN, 0); } - public INDEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INDEX, 0); } - public INDEXES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INDEXES, 0); } - public INPATH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INPATH, 0); } - public INPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INPUTFORMAT, 0); } - public INSERT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INSERT, 0); } - public INTERVAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTERVAL, 0); } - public INTO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.INTO, 0); } - public IS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.IS, 0); } - public ITEMS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ITEMS, 0); } - public KEYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KEYS, 0); } - public LAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LAST, 0); } - public LATERAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LATERAL, 0); } - public LAZY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LAZY, 0); } - public LEADING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LEADING, 0); } - public LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIKE, 0); } - public LIMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIMIT, 0); } - public LINES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LINES, 0); } - public LIST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LIST, 0); } - public LOAD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOAD, 0); } - public LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCAL, 0); } - public LOCATION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCATION, 0); } - public LOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCK, 0); } - public LOCKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOCKS, 0); } - public LOGICAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.LOGICAL, 0); } - public MACRO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MACRO, 0); } - public MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MAP, 0); } - public MATCHED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MATCHED, 0); } - public MERGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MERGE, 0); } - public MSCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.MSCK, 0); } - public NAMESPACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NAMESPACE, 0); } - public NAMESPACES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NAMESPACES, 0); } - public NO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NO, 0); } - public NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NOT, 0); } - public NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULL, 0); } - public NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.NULLS, 0); } - public OF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OF, 0); } - public ONLY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ONLY, 0); } - public OPTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OPTION, 0); } - public OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OPTIONS, 0); } - public OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OR, 0); } - public ORDER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ORDER, 0); } - public OUT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OUT, 0); } - public OUTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OUTER, 0); } - public OUTPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OUTPUTFORMAT, 0); } - public OVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVER, 0); } - public OVERLAPS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVERLAPS, 0); } - public OVERLAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVERLAY, 0); } - public OVERWRITE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.OVERWRITE, 0); } - public PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PARTITION, 0); } - public PARTITIONED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PARTITIONED, 0); } - public PARTITIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PARTITIONS, 0); } - public PERCENTLIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PERCENTLIT, 0); } - public PIVOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PIVOT, 0); } - public PLACING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PLACING, 0); } - public POSITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.POSITION, 0); } - public PRECEDING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PRECEDING, 0); } - public PRIMARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PRIMARY, 0); } - public PRINCIPALS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PRINCIPALS, 0); } - public PROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PROPERTIES, 0); } - public PURGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.PURGE, 0); } - public QUERY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.QUERY, 0); } - public RANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RANGE, 0); } - public RECORDREADER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RECORDREADER, 0); } - public RECORDWRITER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RECORDWRITER, 0); } - public RECOVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RECOVER, 0); } - public REDUCE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REDUCE, 0); } - public REFERENCES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REFERENCES, 0); } - public REFRESH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REFRESH, 0); } - public RENAME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RENAME, 0); } - public REPAIR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REPAIR, 0); } - public REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REPLACE, 0); } - public RESET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RESET, 0); } - public RESTRICT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RESTRICT, 0); } - public REVOKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.REVOKE, 0); } - public RLIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.RLIKE, 0); } - public ROLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLE, 0); } - public ROLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLES, 0); } - public ROLLBACK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLLBACK, 0); } - public ROLLUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROLLUP, 0); } - public ROW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROW, 0); } - public ROWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ROWS, 0); } - public SCHEMA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SCHEMA, 0); } - public SELECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SELECT, 0); } - public SEPARATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SEPARATED, 0); } - public SERDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDE, 0); } - public SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SERDEPROPERTIES, 0); } - public SESSION_USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SESSION_USER, 0); } - public SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SET, 0); } - public SETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SETS, 0); } - public SHOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SHOW, 0); } - public SKEWED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SKEWED, 0); } - public SOME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SOME, 0); } - public SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SORT, 0); } - public SORTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SORTED, 0); } - public START(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.START, 0); } - public STATISTICS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STATISTICS, 0); } - public STORED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STORED, 0); } - public STRATIFY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRATIFY, 0); } - public STRUCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.STRUCT, 0); } - public SUBSTR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SUBSTR, 0); } - public SUBSTRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.SUBSTRING, 0); } - public TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLE, 0); } - public TABLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLES, 0); } - public TABLESAMPLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TABLESAMPLE, 0); } - public TBLPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TBLPROPERTIES, 0); } - public TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TEMPORARY, 0); } - public TERMINATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TERMINATED, 0); } - public THEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.THEN, 0); } - public TIME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TIME, 0); } - public TO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TO, 0); } - public TOUCH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TOUCH, 0); } - public TRAILING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRAILING, 0); } - public TRANSACTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSACTION, 0); } - public TRANSACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSACTIONS, 0); } - public TRANSFORM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRANSFORM, 0); } - public TRIM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRIM, 0); } - public TRUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRUE, 0); } - public TRUNCATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TRUNCATE, 0); } - public TYPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.TYPE, 0); } - public UNARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNARCHIVE, 0); } - public UNBOUNDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNBOUNDED, 0); } - public UNCACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNCACHE, 0); } - public UNIQUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNIQUE, 0); } - public UNKNOWN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNKNOWN, 0); } - public UNLOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNLOCK, 0); } - public UNSET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UNSET, 0); } - public UPDATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.UPDATE, 0); } - public USE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.USE, 0); } - public USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.USER, 0); } - public VALUES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VALUES, 0); } - public VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEW, 0); } - public VIEWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.VIEWS, 0); } - public WHEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WHEN, 0); } - public WHERE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WHERE, 0); } - public WINDOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WINDOW, 0); } - public WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.WITH, 0); } - public ZONE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.ZONE, 0); } + public KW_ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ADD, 0); } + public KW_AFTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AFTER, 0); } + public KW_ALL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALL, 0); } + public KW_ALTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALTER, 0); } + public KW_ALWAYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ALWAYS, 0); } + public KW_ANALYZE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANALYZE, 0); } + public KW_AND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AND, 0); } + public KW_ANY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANY, 0); } + public KW_ANY_VALUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ANY_VALUE, 0); } + public KW_ARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ARCHIVE, 0); } + public KW_ARRAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ARRAY, 0); } + public KW_AS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AS, 0); } + public KW_ASC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ASC, 0); } + public KW_AT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AT, 0); } + public KW_AUTHORIZATION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_AUTHORIZATION, 0); } + public KW_BETWEEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BETWEEN, 0); } + public KW_BIGINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BIGINT, 0); } + public KW_BINARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BINARY, 0); } + public KW_BINARY_HEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BINARY_HEX, 0); } + public KW_BOOLEAN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BOOLEAN, 0); } + public KW_BOTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BOTH, 0); } + public KW_BUCKET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BUCKET, 0); } + public KW_BUCKETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BUCKETS, 0); } + public KW_BY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BY, 0); } + public KW_BYTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_BYTE, 0); } + public KW_CACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CACHE, 0); } + public KW_CASCADE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CASCADE, 0); } + public KW_CASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CASE, 0); } + public KW_CAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CAST, 0); } + public KW_CATALOG(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CATALOG, 0); } + public KW_CATALOGS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CATALOGS, 0); } + public KW_CHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHANGE, 0); } + public KW_CHAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHAR, 0); } + public KW_CHARACTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHARACTER, 0); } + public KW_CHECK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CHECK, 0); } + public KW_CLEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLEAR, 0); } + public KW_CLUSTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLUSTER, 0); } + public KW_CLUSTERED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CLUSTERED, 0); } + public KW_CODEGEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CODEGEN, 0); } + public KW_COLLATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLLATE, 0); } + public KW_COLLECTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLLECTION, 0); } + public KW_COLUMN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLUMN, 0); } + public KW_COLUMNS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COLUMNS, 0); } + public KW_COMMENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMMENT, 0); } + public KW_COMMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMMIT, 0); } + public KW_COMPACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPACT, 0); } + public KW_COMPACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPACTIONS, 0); } + public KW_COMPUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COMPUTE, 0); } + public KW_CONCATENATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CONCATENATE, 0); } + public KW_CONSTRAINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CONSTRAINT, 0); } + public KW_COST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_COST, 0); } + public KW_CREATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CREATE, 0); } + public KW_CUBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CUBE, 0); } + public KW_CURRENT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT, 0); } + public KW_CURRENT_DATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT_DATE, 0); } + public KW_CURRENT_TIME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT_TIME, 0); } + public KW_CURRENT_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT_TIMESTAMP, 0); } + public KW_CURRENT_USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_CURRENT_USER, 0); } + public KW_DATA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATA, 0); } + public KW_DATABASE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATABASE, 0); } + public KW_DATABASES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATABASES, 0); } + public KW_DATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE, 0); } + public KW_DATEADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATEADD, 0); } + public KW_DATE_ADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE_ADD, 0); } + public KW_DATEDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATEDIFF, 0); } + public KW_DATE_DIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DATE_DIFF, 0); } + public KW_DAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAY, 0); } + public KW_DAYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAYS, 0); } + public KW_DAYOFYEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DAYOFYEAR, 0); } + public KW_DBPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DBPROPERTIES, 0); } + public KW_DEC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEC, 0); } + public KW_DECIMAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DECIMAL, 0); } + public KW_DECLARE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DECLARE, 0); } + public KW_DEFAULT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEFAULT, 0); } + public KW_DEFINED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DEFINED, 0); } + public KW_DELETE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DELETE, 0); } + public KW_DELIMITED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DELIMITED, 0); } + public KW_DESC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DESC, 0); } + public KW_DESCRIBE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DESCRIBE, 0); } + public KW_DFS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DFS, 0); } + public KW_DIRECTORIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIRECTORIES, 0); } + public KW_DIRECTORY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIRECTORY, 0); } + public KW_DISTINCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DISTINCT, 0); } + public KW_DISTRIBUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DISTRIBUTE, 0); } + public KW_DIV(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DIV, 0); } + public KW_DOUBLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DOUBLE, 0); } + public KW_DROP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_DROP, 0); } + public KW_ELSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ELSE, 0); } + public KW_END(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_END, 0); } + public KW_ESCAPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ESCAPE, 0); } + public KW_ESCAPED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ESCAPED, 0); } + public KW_EXCHANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXCHANGE, 0); } + public KW_EXCLUDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXCLUDE, 0); } + public KW_EXISTS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXISTS, 0); } + public KW_EXPLAIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXPLAIN, 0); } + public KW_EXPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXPORT, 0); } + public KW_EXTENDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTENDED, 0); } + public KW_EXTERNAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTERNAL, 0); } + public KW_EXTRACT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_EXTRACT, 0); } + public KW_FALSE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FALSE, 0); } + public KW_FETCH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FETCH, 0); } + public KW_FILTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FILTER, 0); } + public KW_FIELDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FIELDS, 0); } + public KW_FILEFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FILEFORMAT, 0); } + public KW_FIRST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FIRST, 0); } + public KW_FLOAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FLOAT, 0); } + public KW_FOLLOWING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FOLLOWING, 0); } + public KW_FOR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FOR, 0); } + public KW_FOREIGN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FOREIGN, 0); } + public KW_FORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FORMAT, 0); } + public KW_FORMATTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FORMATTED, 0); } + public KW_FROM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FROM, 0); } + public KW_FUNCTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FUNCTION, 0); } + public KW_FUNCTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_FUNCTIONS, 0); } + public KW_GENERATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GENERATED, 0); } + public KW_GLOBAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GLOBAL, 0); } + public KW_GRANT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GRANT, 0); } + public KW_GROUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GROUP, 0); } + public KW_GROUPING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_GROUPING, 0); } + public KW_HAVING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HAVING, 0); } + public KW_HOUR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HOUR, 0); } + public KW_HOURS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_HOURS, 0); } + public KW_IDENTIFIER_KW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IDENTIFIER_KW, 0); } + public KW_IF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IF, 0); } + public KW_IGNORE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IGNORE, 0); } + public KW_IMPORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IMPORT, 0); } + public KW_IN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IN, 0); } + public KW_INCLUDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INCLUDE, 0); } + public KW_INDEX(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INDEX, 0); } + public KW_INDEXES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INDEXES, 0); } + public KW_INPATH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INPATH, 0); } + public KW_INPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INPUTFORMAT, 0); } + public KW_INSERT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INSERT, 0); } + public KW_INT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INT, 0); } + public KW_INTEGER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTEGER, 0); } + public KW_INTERVAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTERVAL, 0); } + public KW_INTO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_INTO, 0); } + public KW_IS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_IS, 0); } + public KW_ITEMS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ITEMS, 0); } + public KW_KEYS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_KEYS, 0); } + public KW_LAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LAST, 0); } + public KW_LAZY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LAZY, 0); } + public KW_LEADING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LEADING, 0); } + public KW_LIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIKE, 0); } + public KW_LONG(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LONG, 0); } + public KW_ILIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ILIKE, 0); } + public KW_LIMIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIMIT, 0); } + public KW_LINES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LINES, 0); } + public KW_LIST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LIST, 0); } + public KW_LOAD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOAD, 0); } + public KW_LOCAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCAL, 0); } + public KW_LOCATION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCATION, 0); } + public KW_LOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCK, 0); } + public KW_LOCKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOCKS, 0); } + public KW_LOGICAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_LOGICAL, 0); } + public KW_MACRO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MACRO, 0); } + public KW_MAP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MAP, 0); } + public KW_MATCHED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MATCHED, 0); } + public KW_MERGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MERGE, 0); } + public KW_MICROSECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MICROSECOND, 0); } + public KW_MICROSECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MICROSECONDS, 0); } + public KW_MILLISECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MILLISECOND, 0); } + public KW_MILLISECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MILLISECONDS, 0); } + public KW_MINUTE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MINUTE, 0); } + public KW_MINUTES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MINUTES, 0); } + public KW_MONTH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MONTH, 0); } + public KW_MONTHS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MONTHS, 0); } + public KW_MSCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_MSCK, 0); } + public KW_NAME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAME, 0); } + public KW_NAMESPACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAMESPACE, 0); } + public KW_NAMESPACES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NAMESPACES, 0); } + public KW_NANOSECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NANOSECOND, 0); } + public KW_NANOSECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NANOSECONDS, 0); } + public KW_NO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NO, 0); } + public KW_NOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NOT, 0); } + public KW_NULL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULL, 0); } + public KW_NULLS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NULLS, 0); } + public KW_NUMERIC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_NUMERIC, 0); } + public KW_OF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OF, 0); } + public KW_OFFSET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OFFSET, 0); } + public KW_ONLY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ONLY, 0); } + public KW_OPTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OPTION, 0); } + public KW_OPTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OPTIONS, 0); } + public KW_OR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OR, 0); } + public KW_ORDER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ORDER, 0); } + public KW_OUT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUT, 0); } + public KW_OUTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUTER, 0); } + public KW_OUTPUTFORMAT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OUTPUTFORMAT, 0); } + public KW_OVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVER, 0); } + public KW_OVERLAPS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVERLAPS, 0); } + public KW_OVERLAY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVERLAY, 0); } + public KW_OVERWRITE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_OVERWRITE, 0); } + public KW_PARTITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITION, 0); } + public KW_PARTITIONED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITIONED, 0); } + public KW_PARTITIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PARTITIONS, 0); } + public KW_PERCENTILE_CONT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PERCENTILE_CONT, 0); } + public KW_PERCENTILE_DISC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PERCENTILE_DISC, 0); } + public KW_PERCENTLIT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PERCENTLIT, 0); } + public KW_PIVOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PIVOT, 0); } + public KW_PLACING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PLACING, 0); } + public KW_POSITION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_POSITION, 0); } + public KW_PRECEDING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PRECEDING, 0); } + public KW_PRIMARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PRIMARY, 0); } + public KW_PRINCIPALS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PRINCIPALS, 0); } + public KW_PROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PROPERTIES, 0); } + public KW_PURGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_PURGE, 0); } + public KW_QUARTER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_QUARTER, 0); } + public KW_QUERY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_QUERY, 0); } + public KW_RANGE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RANGE, 0); } + public KW_REAL(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REAL, 0); } + public KW_RECORDREADER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECORDREADER, 0); } + public KW_RECORDWRITER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECORDWRITER, 0); } + public KW_RECOVER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RECOVER, 0); } + public KW_REDUCE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REDUCE, 0); } + public KW_REFERENCES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REFERENCES, 0); } + public KW_REFRESH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REFRESH, 0); } + public KW_RENAME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RENAME, 0); } + public KW_REPAIR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPAIR, 0); } + public KW_REPEATABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPEATABLE, 0); } + public KW_REPLACE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REPLACE, 0); } + public KW_RESET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESET, 0); } + public KW_RESPECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESPECT, 0); } + public KW_RESTRICT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RESTRICT, 0); } + public KW_REVOKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_REVOKE, 0); } + public KW_RLIKE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_RLIKE, 0); } + public KW_ROLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLE, 0); } + public KW_ROLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLES, 0); } + public KW_ROLLBACK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLLBACK, 0); } + public KW_ROLLUP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROLLUP, 0); } + public KW_ROW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROW, 0); } + public KW_ROWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ROWS, 0); } + public KW_SCHEMA(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SCHEMA, 0); } + public KW_SCHEMAS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SCHEMAS, 0); } + public KW_SECOND(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SECOND, 0); } + public KW_SECONDS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SECONDS, 0); } + public KW_SELECT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SELECT, 0); } + public KW_SEPARATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SEPARATED, 0); } + public KW_SERDE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDE, 0); } + public KW_SERDEPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SERDEPROPERTIES, 0); } + public KW_SESSION_USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SESSION_USER, 0); } + public KW_SET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SET, 0); } + public KW_SETS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SETS, 0); } + public KW_SHORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SHORT, 0); } + public KW_SHOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SHOW, 0); } + public KW_SINGLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SINGLE, 0); } + public KW_SKEWED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SKEWED, 0); } + public KW_SMALLINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SMALLINT, 0); } + public KW_SOME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SOME, 0); } + public KW_SORT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORT, 0); } + public KW_SORTED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SORTED, 0); } + public KW_SOURCE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SOURCE, 0); } + public KW_START(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_START, 0); } + public KW_STATISTICS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STATISTICS, 0); } + public KW_STORED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STORED, 0); } + public KW_STRATIFY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRATIFY, 0); } + public KW_STRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRING, 0); } + public KW_STRUCT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_STRUCT, 0); } + public KW_SUBSTR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SUBSTR, 0); } + public KW_SUBSTRING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SUBSTRING, 0); } + public KW_SYNC(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYNC, 0); } + public KW_SYSTEM_TIME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYSTEM_TIME, 0); } + public KW_SYSTEM_VERSION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_SYSTEM_VERSION, 0); } + public KW_TABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLE, 0); } + public KW_TABLES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLES, 0); } + public KW_TABLESAMPLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TABLESAMPLE, 0); } + public KW_TARGET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TARGET, 0); } + public KW_TBLPROPERTIES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TBLPROPERTIES, 0); } + public KW_TEMPORARY(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TEMPORARY, 0); } + public KW_TERMINATED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TERMINATED, 0); } + public KW_THEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_THEN, 0); } + public KW_TIME(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIME, 0); } + public KW_TIMEDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMEDIFF, 0); } + public KW_TIMESTAMP(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP, 0); } + public KW_TIMESTAMP_LTZ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP_LTZ, 0); } + public KW_TIMESTAMP_NTZ(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMP_NTZ, 0); } + public KW_TIMESTAMPADD(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMPADD, 0); } + public KW_TIMESTAMPDIFF(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TIMESTAMPDIFF, 0); } + public KW_TINYINT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TINYINT, 0); } + public KW_TO(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TO, 0); } + public KW_TOUCH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TOUCH, 0); } + public KW_TRAILING(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRAILING, 0); } + public KW_TRANSACTION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSACTION, 0); } + public KW_TRANSACTIONS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSACTIONS, 0); } + public KW_TRANSFORM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRANSFORM, 0); } + public KW_TRIM(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRIM, 0); } + public KW_TRUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRUE, 0); } + public KW_TRUNCATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRUNCATE, 0); } + public KW_TRY_CAST(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TRY_CAST, 0); } + public KW_TYPE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_TYPE, 0); } + public KW_UNARCHIVE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNARCHIVE, 0); } + public KW_UNBOUNDED(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNBOUNDED, 0); } + public KW_UNCACHE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNCACHE, 0); } + public KW_UNIQUE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNIQUE, 0); } + public KW_UNKNOWN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNKNOWN, 0); } + public KW_UNLOCK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNLOCK, 0); } + public KW_UNPIVOT(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNPIVOT, 0); } + public KW_UNSET(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UNSET, 0); } + public KW_UPDATE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_UPDATE, 0); } + public KW_USE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USE, 0); } + public KW_USER(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_USER, 0); } + public KW_VALUES(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VALUES, 0); } + public KW_VARCHAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VARCHAR, 0); } + public KW_VAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VAR, 0); } + public KW_VARIABLE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VARIABLE, 0); } + public KW_VERSION(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VERSION, 0); } + public KW_VIEW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VIEW, 0); } + public KW_VIEWS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VIEWS, 0); } + public KW_VOID(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_VOID, 0); } + public KW_WEEK(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WEEK, 0); } + public KW_WEEKS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WEEKS, 0); } + public KW_WHEN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WHEN, 0); } + public KW_WHERE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WHERE, 0); } + public KW_WINDOW(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WINDOW, 0); } + public KW_WITH(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WITH, 0); } + public KW_WITHIN(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_WITHIN, 0); } + public KW_YEAR(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEAR, 0); } + public KW_YEARS(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_YEARS, 0); } + public KW_ZONE(): TerminalNode | undefined { return this.tryGetToken(SparkSqlParser.KW_ZONE, 0); } constructor(parent: ParserRuleContext | undefined, invokingState: number) { super(parent, invokingState); } // @Override public get ruleIndex(): number { return SparkSqlParser.RULE_nonReserved; } // @Override - public enterRule(listener: SparkSqlListener): void { + public enterRule(listener: SparkSqlParserListener): void { if (listener.enterNonReserved) { listener.enterNonReserved(this); } } // @Override - public exitRule(listener: SparkSqlListener): void { + public exitRule(listener: SparkSqlParserListener): void { if (listener.exitNonReserved) { listener.exitNonReserved(this); } } // @Override - public accept(visitor: SparkSqlVisitor): Result { + public accept(visitor: SparkSqlParserVisitor): Result { if (visitor.visitNonReserved) { return visitor.visitNonReserved(this); } else { diff --git a/src/lib/spark/SparkSqlParserListener.ts b/src/lib/spark/SparkSqlParserListener.ts new file mode 100644 index 00000000..acfe9759 --- /dev/null +++ b/src/lib/spark/SparkSqlParserListener.ts @@ -0,0 +1,2257 @@ +// Generated from /Users/liuyi/Desktop/Projects/dtstack/dt-sql-parser/src/grammar/spark/SparkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; + +import { ProgramContext } from "./SparkSqlParser"; +import { SingleStatementContext } from "./SparkSqlParser"; +import { TableIdentifierReferenceContext } from "./SparkSqlParser"; +import { ViewIdentifierReferenceContext } from "./SparkSqlParser"; +import { FunctionIdentifierReferenceContext } from "./SparkSqlParser"; +import { NamespaceIdentifierReferenceContext } from "./SparkSqlParser"; +import { StatementContext } from "./SparkSqlParser"; +import { TimezoneContext } from "./SparkSqlParser"; +import { ConfigKeyContext } from "./SparkSqlParser"; +import { ConfigValueContext } from "./SparkSqlParser"; +import { UnsupportedHiveNativeCommandsContext } from "./SparkSqlParser"; +import { CreateTableHeaderContext } from "./SparkSqlParser"; +import { ReplaceTableHeaderContext } from "./SparkSqlParser"; +import { BucketSpecContext } from "./SparkSqlParser"; +import { SkewSpecContext } from "./SparkSqlParser"; +import { LocationSpecContext } from "./SparkSqlParser"; +import { CommentSpecContext } from "./SparkSqlParser"; +import { QueryContext } from "./SparkSqlParser"; +import { InsertIntoContext } from "./SparkSqlParser"; +import { PartitionSpecLocationContext } from "./SparkSqlParser"; +import { PartitionSpecContext } from "./SparkSqlParser"; +import { PartitionValContext } from "./SparkSqlParser"; +import { NamespaceContext } from "./SparkSqlParser"; +import { NamespacesContext } from "./SparkSqlParser"; +import { DescribeFuncNameContext } from "./SparkSqlParser"; +import { DescribeColNameContext } from "./SparkSqlParser"; +import { CtesContext } from "./SparkSqlParser"; +import { NamedQueryContext } from "./SparkSqlParser"; +import { TableProviderContext } from "./SparkSqlParser"; +import { CreateTableClausesContext } from "./SparkSqlParser"; +import { PropertyListContext } from "./SparkSqlParser"; +import { PropertyContext } from "./SparkSqlParser"; +import { PropertyKeyContext } from "./SparkSqlParser"; +import { PropertyValueContext } from "./SparkSqlParser"; +import { ExpressionPropertyListContext } from "./SparkSqlParser"; +import { ExpressionPropertyContext } from "./SparkSqlParser"; +import { ConstantListContext } from "./SparkSqlParser"; +import { NestedConstantListContext } from "./SparkSqlParser"; +import { CreateFileFormatContext } from "./SparkSqlParser"; +import { FileFormatContext } from "./SparkSqlParser"; +import { StorageHandlerContext } from "./SparkSqlParser"; +import { ResourceContext } from "./SparkSqlParser"; +import { DmlStatementNoWithContext } from "./SparkSqlParser"; +import { IdentifierReferenceContext } from "./SparkSqlParser"; +import { QueryOrganizationContext } from "./SparkSqlParser"; +import { MultiInsertQueryBodyContext } from "./SparkSqlParser"; +import { QueryTermContext } from "./SparkSqlParser"; +import { QueryPrimaryContext } from "./SparkSqlParser"; +import { SortItemContext } from "./SparkSqlParser"; +import { FromStatementContext } from "./SparkSqlParser"; +import { FromStatementBodyContext } from "./SparkSqlParser"; +import { QuerySpecificationContext } from "./SparkSqlParser"; +import { TransformClauseContext } from "./SparkSqlParser"; +import { SelectClauseContext } from "./SparkSqlParser"; +import { SetClauseContext } from "./SparkSqlParser"; +import { MatchedClauseContext } from "./SparkSqlParser"; +import { NotMatchedClauseContext } from "./SparkSqlParser"; +import { NotMatchedBySourceClauseContext } from "./SparkSqlParser"; +import { MatchedActionContext } from "./SparkSqlParser"; +import { NotMatchedActionContext } from "./SparkSqlParser"; +import { NotMatchedBySourceActionContext } from "./SparkSqlParser"; +import { AssignmentListContext } from "./SparkSqlParser"; +import { AssignmentContext } from "./SparkSqlParser"; +import { WhereClauseContext } from "./SparkSqlParser"; +import { HavingClauseContext } from "./SparkSqlParser"; +import { HintContext } from "./SparkSqlParser"; +import { HintStatementContext } from "./SparkSqlParser"; +import { FromClauseContext } from "./SparkSqlParser"; +import { TemporalClauseContext } from "./SparkSqlParser"; +import { AggregationClauseContext } from "./SparkSqlParser"; +import { GroupByClauseContext } from "./SparkSqlParser"; +import { GroupingAnalyticsContext } from "./SparkSqlParser"; +import { GroupingElementContext } from "./SparkSqlParser"; +import { GroupingSetContext } from "./SparkSqlParser"; +import { PivotClauseContext } from "./SparkSqlParser"; +import { PivotColumnContext } from "./SparkSqlParser"; +import { PivotValueContext } from "./SparkSqlParser"; +import { UnpivotClauseContext } from "./SparkSqlParser"; +import { UnpivotNullClauseContext } from "./SparkSqlParser"; +import { UnpivotOperatorContext } from "./SparkSqlParser"; +import { UnpivotSingleValueColumnClauseContext } from "./SparkSqlParser"; +import { UnpivotMultiValueColumnClauseContext } from "./SparkSqlParser"; +import { UnpivotColumnSetContext } from "./SparkSqlParser"; +import { UnpivotValueColumnContext } from "./SparkSqlParser"; +import { UnpivotNameColumnContext } from "./SparkSqlParser"; +import { UnpivotColumnAndAliasContext } from "./SparkSqlParser"; +import { UnpivotColumnContext } from "./SparkSqlParser"; +import { UnpivotAliasContext } from "./SparkSqlParser"; +import { LateralViewContext } from "./SparkSqlParser"; +import { SetQuantifierContext } from "./SparkSqlParser"; +import { RelationContext } from "./SparkSqlParser"; +import { RelationExtensionContext } from "./SparkSqlParser"; +import { JoinRelationContext } from "./SparkSqlParser"; +import { JoinTypeContext } from "./SparkSqlParser"; +import { JoinCriteriaContext } from "./SparkSqlParser"; +import { SampleContext } from "./SparkSqlParser"; +import { SampleMethodContext } from "./SparkSqlParser"; +import { IdentifierListContext } from "./SparkSqlParser"; +import { IdentifierSeqContext } from "./SparkSqlParser"; +import { OrderedIdentifierListContext } from "./SparkSqlParser"; +import { OrderedIdentifierContext } from "./SparkSqlParser"; +import { IdentifierCommentListContext } from "./SparkSqlParser"; +import { IdentifierCommentContext } from "./SparkSqlParser"; +import { RelationPrimaryContext } from "./SparkSqlParser"; +import { InlineTableContext } from "./SparkSqlParser"; +import { FunctionTableSubqueryArgumentContext } from "./SparkSqlParser"; +import { TableArgumentPartitioningContext } from "./SparkSqlParser"; +import { FunctionTableNamedArgumentExpressionContext } from "./SparkSqlParser"; +import { FunctionTableReferenceArgumentContext } from "./SparkSqlParser"; +import { FunctionTableArgumentContext } from "./SparkSqlParser"; +import { FunctionTableContext } from "./SparkSqlParser"; +import { TableAliasContext } from "./SparkSqlParser"; +import { RowFormatContext } from "./SparkSqlParser"; +import { MultipartIdentifierListContext } from "./SparkSqlParser"; +import { MultipartIdentifierContext } from "./SparkSqlParser"; +import { MultipartIdentifierPropertyListContext } from "./SparkSqlParser"; +import { MultipartIdentifierPropertyContext } from "./SparkSqlParser"; +import { TableIdentifierContext } from "./SparkSqlParser"; +import { FunctionIdentifierContext } from "./SparkSqlParser"; +import { NamedExpressionContext } from "./SparkSqlParser"; +import { NamedExpressionSeqContext } from "./SparkSqlParser"; +import { PartitionFieldListContext } from "./SparkSqlParser"; +import { PartitionFieldContext } from "./SparkSqlParser"; +import { TransformContext } from "./SparkSqlParser"; +import { TransformArgumentContext } from "./SparkSqlParser"; +import { ExpressionContext } from "./SparkSqlParser"; +import { NamedArgumentExpressionContext } from "./SparkSqlParser"; +import { FunctionArgumentContext } from "./SparkSqlParser"; +import { ExpressionSeqContext } from "./SparkSqlParser"; +import { BooleanExpressionContext } from "./SparkSqlParser"; +import { PredicateContext } from "./SparkSqlParser"; +import { ValueExpressionContext } from "./SparkSqlParser"; +import { DatetimeUnitContext } from "./SparkSqlParser"; +import { PrimaryExpressionContext } from "./SparkSqlParser"; +import { LiteralTypeContext } from "./SparkSqlParser"; +import { ConstantContext } from "./SparkSqlParser"; +import { ComparisonOperatorContext } from "./SparkSqlParser"; +import { ArithmeticOperatorContext } from "./SparkSqlParser"; +import { PredicateOperatorContext } from "./SparkSqlParser"; +import { BooleanValueContext } from "./SparkSqlParser"; +import { IntervalContext } from "./SparkSqlParser"; +import { ErrorCapturingMultiUnitsIntervalContext } from "./SparkSqlParser"; +import { MultiUnitsIntervalContext } from "./SparkSqlParser"; +import { ErrorCapturingUnitToUnitIntervalContext } from "./SparkSqlParser"; +import { UnitToUnitIntervalContext } from "./SparkSqlParser"; +import { IntervalValueContext } from "./SparkSqlParser"; +import { UnitInMultiUnitsContext } from "./SparkSqlParser"; +import { UnitInUnitToUnitContext } from "./SparkSqlParser"; +import { ColPositionContext } from "./SparkSqlParser"; +import { TypeContext } from "./SparkSqlParser"; +import { DataTypeContext } from "./SparkSqlParser"; +import { QualifiedColTypeWithPositionListContext } from "./SparkSqlParser"; +import { QualifiedColTypeWithPositionContext } from "./SparkSqlParser"; +import { ColDefinitionDescriptorWithPositionContext } from "./SparkSqlParser"; +import { DefaultExpressionContext } from "./SparkSqlParser"; +import { VariableDefaultExpressionContext } from "./SparkSqlParser"; +import { ColTypeListContext } from "./SparkSqlParser"; +import { ColTypeContext } from "./SparkSqlParser"; +import { CreateOrReplaceTableColTypeListContext } from "./SparkSqlParser"; +import { CreateOrReplaceTableColTypeContext } from "./SparkSqlParser"; +import { ColDefinitionOptionContext } from "./SparkSqlParser"; +import { GenerationExpressionContext } from "./SparkSqlParser"; +import { ComplexColTypeListContext } from "./SparkSqlParser"; +import { ComplexColTypeContext } from "./SparkSqlParser"; +import { WhenClauseContext } from "./SparkSqlParser"; +import { WindowClauseContext } from "./SparkSqlParser"; +import { NamedWindowContext } from "./SparkSqlParser"; +import { WindowSpecContext } from "./SparkSqlParser"; +import { WindowFrameContext } from "./SparkSqlParser"; +import { FrameBoundContext } from "./SparkSqlParser"; +import { QualifiedNameListContext } from "./SparkSqlParser"; +import { FunctionNameContext } from "./SparkSqlParser"; +import { QualifiedNameContext } from "./SparkSqlParser"; +import { ErrorCapturingIdentifierContext } from "./SparkSqlParser"; +import { ErrorCapturingIdentifierExtraContext } from "./SparkSqlParser"; +import { IdentifierContext } from "./SparkSqlParser"; +import { StrictIdentifierContext } from "./SparkSqlParser"; +import { QuotedIdentifierContext } from "./SparkSqlParser"; +import { BackQuotedIdentifierContext } from "./SparkSqlParser"; +import { NumberContext } from "./SparkSqlParser"; +import { AlterColumnActionContext } from "./SparkSqlParser"; +import { StringLitContext } from "./SparkSqlParser"; +import { CommentContext } from "./SparkSqlParser"; +import { VersionContext } from "./SparkSqlParser"; +import { AnsiNonReservedContext } from "./SparkSqlParser"; +import { StrictNonReservedContext } from "./SparkSqlParser"; +import { NonReservedContext } from "./SparkSqlParser"; + + +/** + * This interface defines a complete listener for a parse tree produced by + * `SparkSqlParser`. + */ +export interface SparkSqlParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by `SparkSqlParser.program`. + * @param ctx the parse tree + */ + enterProgram?: (ctx: ProgramContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.program`. + * @param ctx the parse tree + */ + exitProgram?: (ctx: ProgramContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.singleStatement`. + * @param ctx the parse tree + */ + enterSingleStatement?: (ctx: SingleStatementContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.singleStatement`. + * @param ctx the parse tree + */ + exitSingleStatement?: (ctx: SingleStatementContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.tableIdentifierReference`. + * @param ctx the parse tree + */ + enterTableIdentifierReference?: (ctx: TableIdentifierReferenceContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.tableIdentifierReference`. + * @param ctx the parse tree + */ + exitTableIdentifierReference?: (ctx: TableIdentifierReferenceContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.viewIdentifierReference`. + * @param ctx the parse tree + */ + enterViewIdentifierReference?: (ctx: ViewIdentifierReferenceContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.viewIdentifierReference`. + * @param ctx the parse tree + */ + exitViewIdentifierReference?: (ctx: ViewIdentifierReferenceContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionIdentifierReference`. + * @param ctx the parse tree + */ + enterFunctionIdentifierReference?: (ctx: FunctionIdentifierReferenceContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionIdentifierReference`. + * @param ctx the parse tree + */ + exitFunctionIdentifierReference?: (ctx: FunctionIdentifierReferenceContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.namespaceIdentifierReference`. + * @param ctx the parse tree + */ + enterNamespaceIdentifierReference?: (ctx: NamespaceIdentifierReferenceContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.namespaceIdentifierReference`. + * @param ctx the parse tree + */ + exitNamespaceIdentifierReference?: (ctx: NamespaceIdentifierReferenceContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.statement`. + * @param ctx the parse tree + */ + enterStatement?: (ctx: StatementContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.statement`. + * @param ctx the parse tree + */ + exitStatement?: (ctx: StatementContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.timezone`. + * @param ctx the parse tree + */ + enterTimezone?: (ctx: TimezoneContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.timezone`. + * @param ctx the parse tree + */ + exitTimezone?: (ctx: TimezoneContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.configKey`. + * @param ctx the parse tree + */ + enterConfigKey?: (ctx: ConfigKeyContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.configKey`. + * @param ctx the parse tree + */ + exitConfigKey?: (ctx: ConfigKeyContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.configValue`. + * @param ctx the parse tree + */ + enterConfigValue?: (ctx: ConfigValueContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.configValue`. + * @param ctx the parse tree + */ + exitConfigValue?: (ctx: ConfigValueContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unsupportedHiveNativeCommands`. + * @param ctx the parse tree + */ + enterUnsupportedHiveNativeCommands?: (ctx: UnsupportedHiveNativeCommandsContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unsupportedHiveNativeCommands`. + * @param ctx the parse tree + */ + exitUnsupportedHiveNativeCommands?: (ctx: UnsupportedHiveNativeCommandsContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.createTableHeader`. + * @param ctx the parse tree + */ + enterCreateTableHeader?: (ctx: CreateTableHeaderContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.createTableHeader`. + * @param ctx the parse tree + */ + exitCreateTableHeader?: (ctx: CreateTableHeaderContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.replaceTableHeader`. + * @param ctx the parse tree + */ + enterReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.replaceTableHeader`. + * @param ctx the parse tree + */ + exitReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.bucketSpec`. + * @param ctx the parse tree + */ + enterBucketSpec?: (ctx: BucketSpecContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.bucketSpec`. + * @param ctx the parse tree + */ + exitBucketSpec?: (ctx: BucketSpecContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.skewSpec`. + * @param ctx the parse tree + */ + enterSkewSpec?: (ctx: SkewSpecContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.skewSpec`. + * @param ctx the parse tree + */ + exitSkewSpec?: (ctx: SkewSpecContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.locationSpec`. + * @param ctx the parse tree + */ + enterLocationSpec?: (ctx: LocationSpecContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.locationSpec`. + * @param ctx the parse tree + */ + exitLocationSpec?: (ctx: LocationSpecContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.commentSpec`. + * @param ctx the parse tree + */ + enterCommentSpec?: (ctx: CommentSpecContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.commentSpec`. + * @param ctx the parse tree + */ + exitCommentSpec?: (ctx: CommentSpecContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.query`. + * @param ctx the parse tree + */ + enterQuery?: (ctx: QueryContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.query`. + * @param ctx the parse tree + */ + exitQuery?: (ctx: QueryContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.insertInto`. + * @param ctx the parse tree + */ + enterInsertInto?: (ctx: InsertIntoContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.insertInto`. + * @param ctx the parse tree + */ + exitInsertInto?: (ctx: InsertIntoContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.partitionSpecLocation`. + * @param ctx the parse tree + */ + enterPartitionSpecLocation?: (ctx: PartitionSpecLocationContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.partitionSpecLocation`. + * @param ctx the parse tree + */ + exitPartitionSpecLocation?: (ctx: PartitionSpecLocationContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.partitionSpec`. + * @param ctx the parse tree + */ + enterPartitionSpec?: (ctx: PartitionSpecContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.partitionSpec`. + * @param ctx the parse tree + */ + exitPartitionSpec?: (ctx: PartitionSpecContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.partitionVal`. + * @param ctx the parse tree + */ + enterPartitionVal?: (ctx: PartitionValContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.partitionVal`. + * @param ctx the parse tree + */ + exitPartitionVal?: (ctx: PartitionValContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.namespace`. + * @param ctx the parse tree + */ + enterNamespace?: (ctx: NamespaceContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.namespace`. + * @param ctx the parse tree + */ + exitNamespace?: (ctx: NamespaceContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.namespaces`. + * @param ctx the parse tree + */ + enterNamespaces?: (ctx: NamespacesContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.namespaces`. + * @param ctx the parse tree + */ + exitNamespaces?: (ctx: NamespacesContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.describeFuncName`. + * @param ctx the parse tree + */ + enterDescribeFuncName?: (ctx: DescribeFuncNameContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.describeFuncName`. + * @param ctx the parse tree + */ + exitDescribeFuncName?: (ctx: DescribeFuncNameContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.describeColName`. + * @param ctx the parse tree + */ + enterDescribeColName?: (ctx: DescribeColNameContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.describeColName`. + * @param ctx the parse tree + */ + exitDescribeColName?: (ctx: DescribeColNameContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.ctes`. + * @param ctx the parse tree + */ + enterCtes?: (ctx: CtesContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.ctes`. + * @param ctx the parse tree + */ + exitCtes?: (ctx: CtesContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.namedQuery`. + * @param ctx the parse tree + */ + enterNamedQuery?: (ctx: NamedQueryContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.namedQuery`. + * @param ctx the parse tree + */ + exitNamedQuery?: (ctx: NamedQueryContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.tableProvider`. + * @param ctx the parse tree + */ + enterTableProvider?: (ctx: TableProviderContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.tableProvider`. + * @param ctx the parse tree + */ + exitTableProvider?: (ctx: TableProviderContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.createTableClauses`. + * @param ctx the parse tree + */ + enterCreateTableClauses?: (ctx: CreateTableClausesContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.createTableClauses`. + * @param ctx the parse tree + */ + exitCreateTableClauses?: (ctx: CreateTableClausesContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.propertyList`. + * @param ctx the parse tree + */ + enterPropertyList?: (ctx: PropertyListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.propertyList`. + * @param ctx the parse tree + */ + exitPropertyList?: (ctx: PropertyListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.property`. + * @param ctx the parse tree + */ + enterProperty?: (ctx: PropertyContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.property`. + * @param ctx the parse tree + */ + exitProperty?: (ctx: PropertyContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.propertyKey`. + * @param ctx the parse tree + */ + enterPropertyKey?: (ctx: PropertyKeyContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.propertyKey`. + * @param ctx the parse tree + */ + exitPropertyKey?: (ctx: PropertyKeyContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.propertyValue`. + * @param ctx the parse tree + */ + enterPropertyValue?: (ctx: PropertyValueContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.propertyValue`. + * @param ctx the parse tree + */ + exitPropertyValue?: (ctx: PropertyValueContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.expressionPropertyList`. + * @param ctx the parse tree + */ + enterExpressionPropertyList?: (ctx: ExpressionPropertyListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.expressionPropertyList`. + * @param ctx the parse tree + */ + exitExpressionPropertyList?: (ctx: ExpressionPropertyListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.expressionProperty`. + * @param ctx the parse tree + */ + enterExpressionProperty?: (ctx: ExpressionPropertyContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.expressionProperty`. + * @param ctx the parse tree + */ + exitExpressionProperty?: (ctx: ExpressionPropertyContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.constantList`. + * @param ctx the parse tree + */ + enterConstantList?: (ctx: ConstantListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.constantList`. + * @param ctx the parse tree + */ + exitConstantList?: (ctx: ConstantListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.nestedConstantList`. + * @param ctx the parse tree + */ + enterNestedConstantList?: (ctx: NestedConstantListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.nestedConstantList`. + * @param ctx the parse tree + */ + exitNestedConstantList?: (ctx: NestedConstantListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.createFileFormat`. + * @param ctx the parse tree + */ + enterCreateFileFormat?: (ctx: CreateFileFormatContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.createFileFormat`. + * @param ctx the parse tree + */ + exitCreateFileFormat?: (ctx: CreateFileFormatContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.fileFormat`. + * @param ctx the parse tree + */ + enterFileFormat?: (ctx: FileFormatContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.fileFormat`. + * @param ctx the parse tree + */ + exitFileFormat?: (ctx: FileFormatContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.storageHandler`. + * @param ctx the parse tree + */ + enterStorageHandler?: (ctx: StorageHandlerContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.storageHandler`. + * @param ctx the parse tree + */ + exitStorageHandler?: (ctx: StorageHandlerContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.resource`. + * @param ctx the parse tree + */ + enterResource?: (ctx: ResourceContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.resource`. + * @param ctx the parse tree + */ + exitResource?: (ctx: ResourceContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.dmlStatementNoWith`. + * @param ctx the parse tree + */ + enterDmlStatementNoWith?: (ctx: DmlStatementNoWithContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.dmlStatementNoWith`. + * @param ctx the parse tree + */ + exitDmlStatementNoWith?: (ctx: DmlStatementNoWithContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.identifierReference`. + * @param ctx the parse tree + */ + enterIdentifierReference?: (ctx: IdentifierReferenceContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.identifierReference`. + * @param ctx the parse tree + */ + exitIdentifierReference?: (ctx: IdentifierReferenceContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.queryOrganization`. + * @param ctx the parse tree + */ + enterQueryOrganization?: (ctx: QueryOrganizationContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.queryOrganization`. + * @param ctx the parse tree + */ + exitQueryOrganization?: (ctx: QueryOrganizationContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. + * @param ctx the parse tree + */ + enterMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. + * @param ctx the parse tree + */ + exitMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.queryTerm`. + * @param ctx the parse tree + */ + enterQueryTerm?: (ctx: QueryTermContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.queryTerm`. + * @param ctx the parse tree + */ + exitQueryTerm?: (ctx: QueryTermContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.queryPrimary`. + * @param ctx the parse tree + */ + enterQueryPrimary?: (ctx: QueryPrimaryContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.queryPrimary`. + * @param ctx the parse tree + */ + exitQueryPrimary?: (ctx: QueryPrimaryContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.sortItem`. + * @param ctx the parse tree + */ + enterSortItem?: (ctx: SortItemContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.sortItem`. + * @param ctx the parse tree + */ + exitSortItem?: (ctx: SortItemContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.fromStatement`. + * @param ctx the parse tree + */ + enterFromStatement?: (ctx: FromStatementContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.fromStatement`. + * @param ctx the parse tree + */ + exitFromStatement?: (ctx: FromStatementContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.fromStatementBody`. + * @param ctx the parse tree + */ + enterFromStatementBody?: (ctx: FromStatementBodyContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.fromStatementBody`. + * @param ctx the parse tree + */ + exitFromStatementBody?: (ctx: FromStatementBodyContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.querySpecification`. + * @param ctx the parse tree + */ + enterQuerySpecification?: (ctx: QuerySpecificationContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.querySpecification`. + * @param ctx the parse tree + */ + exitQuerySpecification?: (ctx: QuerySpecificationContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.transformClause`. + * @param ctx the parse tree + */ + enterTransformClause?: (ctx: TransformClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.transformClause`. + * @param ctx the parse tree + */ + exitTransformClause?: (ctx: TransformClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.selectClause`. + * @param ctx the parse tree + */ + enterSelectClause?: (ctx: SelectClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.selectClause`. + * @param ctx the parse tree + */ + exitSelectClause?: (ctx: SelectClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.setClause`. + * @param ctx the parse tree + */ + enterSetClause?: (ctx: SetClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.setClause`. + * @param ctx the parse tree + */ + exitSetClause?: (ctx: SetClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.matchedClause`. + * @param ctx the parse tree + */ + enterMatchedClause?: (ctx: MatchedClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.matchedClause`. + * @param ctx the parse tree + */ + exitMatchedClause?: (ctx: MatchedClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.notMatchedClause`. + * @param ctx the parse tree + */ + enterNotMatchedClause?: (ctx: NotMatchedClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.notMatchedClause`. + * @param ctx the parse tree + */ + exitNotMatchedClause?: (ctx: NotMatchedClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.notMatchedBySourceClause`. + * @param ctx the parse tree + */ + enterNotMatchedBySourceClause?: (ctx: NotMatchedBySourceClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.notMatchedBySourceClause`. + * @param ctx the parse tree + */ + exitNotMatchedBySourceClause?: (ctx: NotMatchedBySourceClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.matchedAction`. + * @param ctx the parse tree + */ + enterMatchedAction?: (ctx: MatchedActionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.matchedAction`. + * @param ctx the parse tree + */ + exitMatchedAction?: (ctx: MatchedActionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.notMatchedAction`. + * @param ctx the parse tree + */ + enterNotMatchedAction?: (ctx: NotMatchedActionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.notMatchedAction`. + * @param ctx the parse tree + */ + exitNotMatchedAction?: (ctx: NotMatchedActionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.notMatchedBySourceAction`. + * @param ctx the parse tree + */ + enterNotMatchedBySourceAction?: (ctx: NotMatchedBySourceActionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.notMatchedBySourceAction`. + * @param ctx the parse tree + */ + exitNotMatchedBySourceAction?: (ctx: NotMatchedBySourceActionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.assignmentList`. + * @param ctx the parse tree + */ + enterAssignmentList?: (ctx: AssignmentListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.assignmentList`. + * @param ctx the parse tree + */ + exitAssignmentList?: (ctx: AssignmentListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.assignment`. + * @param ctx the parse tree + */ + enterAssignment?: (ctx: AssignmentContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.assignment`. + * @param ctx the parse tree + */ + exitAssignment?: (ctx: AssignmentContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.whereClause`. + * @param ctx the parse tree + */ + enterWhereClause?: (ctx: WhereClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.whereClause`. + * @param ctx the parse tree + */ + exitWhereClause?: (ctx: WhereClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.havingClause`. + * @param ctx the parse tree + */ + enterHavingClause?: (ctx: HavingClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.havingClause`. + * @param ctx the parse tree + */ + exitHavingClause?: (ctx: HavingClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.hint`. + * @param ctx the parse tree + */ + enterHint?: (ctx: HintContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.hint`. + * @param ctx the parse tree + */ + exitHint?: (ctx: HintContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.hintStatement`. + * @param ctx the parse tree + */ + enterHintStatement?: (ctx: HintStatementContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.hintStatement`. + * @param ctx the parse tree + */ + exitHintStatement?: (ctx: HintStatementContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.fromClause`. + * @param ctx the parse tree + */ + enterFromClause?: (ctx: FromClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.fromClause`. + * @param ctx the parse tree + */ + exitFromClause?: (ctx: FromClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.temporalClause`. + * @param ctx the parse tree + */ + enterTemporalClause?: (ctx: TemporalClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.temporalClause`. + * @param ctx the parse tree + */ + exitTemporalClause?: (ctx: TemporalClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.aggregationClause`. + * @param ctx the parse tree + */ + enterAggregationClause?: (ctx: AggregationClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.aggregationClause`. + * @param ctx the parse tree + */ + exitAggregationClause?: (ctx: AggregationClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.groupByClause`. + * @param ctx the parse tree + */ + enterGroupByClause?: (ctx: GroupByClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.groupByClause`. + * @param ctx the parse tree + */ + exitGroupByClause?: (ctx: GroupByClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.groupingAnalytics`. + * @param ctx the parse tree + */ + enterGroupingAnalytics?: (ctx: GroupingAnalyticsContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.groupingAnalytics`. + * @param ctx the parse tree + */ + exitGroupingAnalytics?: (ctx: GroupingAnalyticsContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.groupingElement`. + * @param ctx the parse tree + */ + enterGroupingElement?: (ctx: GroupingElementContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.groupingElement`. + * @param ctx the parse tree + */ + exitGroupingElement?: (ctx: GroupingElementContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.groupingSet`. + * @param ctx the parse tree + */ + enterGroupingSet?: (ctx: GroupingSetContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.groupingSet`. + * @param ctx the parse tree + */ + exitGroupingSet?: (ctx: GroupingSetContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.pivotClause`. + * @param ctx the parse tree + */ + enterPivotClause?: (ctx: PivotClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.pivotClause`. + * @param ctx the parse tree + */ + exitPivotClause?: (ctx: PivotClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.pivotColumn`. + * @param ctx the parse tree + */ + enterPivotColumn?: (ctx: PivotColumnContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.pivotColumn`. + * @param ctx the parse tree + */ + exitPivotColumn?: (ctx: PivotColumnContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.pivotValue`. + * @param ctx the parse tree + */ + enterPivotValue?: (ctx: PivotValueContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.pivotValue`. + * @param ctx the parse tree + */ + exitPivotValue?: (ctx: PivotValueContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotClause`. + * @param ctx the parse tree + */ + enterUnpivotClause?: (ctx: UnpivotClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotClause`. + * @param ctx the parse tree + */ + exitUnpivotClause?: (ctx: UnpivotClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotNullClause`. + * @param ctx the parse tree + */ + enterUnpivotNullClause?: (ctx: UnpivotNullClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotNullClause`. + * @param ctx the parse tree + */ + exitUnpivotNullClause?: (ctx: UnpivotNullClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotOperator`. + * @param ctx the parse tree + */ + enterUnpivotOperator?: (ctx: UnpivotOperatorContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotOperator`. + * @param ctx the parse tree + */ + exitUnpivotOperator?: (ctx: UnpivotOperatorContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotSingleValueColumnClause`. + * @param ctx the parse tree + */ + enterUnpivotSingleValueColumnClause?: (ctx: UnpivotSingleValueColumnClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotSingleValueColumnClause`. + * @param ctx the parse tree + */ + exitUnpivotSingleValueColumnClause?: (ctx: UnpivotSingleValueColumnClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotMultiValueColumnClause`. + * @param ctx the parse tree + */ + enterUnpivotMultiValueColumnClause?: (ctx: UnpivotMultiValueColumnClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotMultiValueColumnClause`. + * @param ctx the parse tree + */ + exitUnpivotMultiValueColumnClause?: (ctx: UnpivotMultiValueColumnClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotColumnSet`. + * @param ctx the parse tree + */ + enterUnpivotColumnSet?: (ctx: UnpivotColumnSetContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotColumnSet`. + * @param ctx the parse tree + */ + exitUnpivotColumnSet?: (ctx: UnpivotColumnSetContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotValueColumn`. + * @param ctx the parse tree + */ + enterUnpivotValueColumn?: (ctx: UnpivotValueColumnContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotValueColumn`. + * @param ctx the parse tree + */ + exitUnpivotValueColumn?: (ctx: UnpivotValueColumnContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotNameColumn`. + * @param ctx the parse tree + */ + enterUnpivotNameColumn?: (ctx: UnpivotNameColumnContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotNameColumn`. + * @param ctx the parse tree + */ + exitUnpivotNameColumn?: (ctx: UnpivotNameColumnContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotColumnAndAlias`. + * @param ctx the parse tree + */ + enterUnpivotColumnAndAlias?: (ctx: UnpivotColumnAndAliasContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotColumnAndAlias`. + * @param ctx the parse tree + */ + exitUnpivotColumnAndAlias?: (ctx: UnpivotColumnAndAliasContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotColumn`. + * @param ctx the parse tree + */ + enterUnpivotColumn?: (ctx: UnpivotColumnContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotColumn`. + * @param ctx the parse tree + */ + exitUnpivotColumn?: (ctx: UnpivotColumnContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unpivotAlias`. + * @param ctx the parse tree + */ + enterUnpivotAlias?: (ctx: UnpivotAliasContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unpivotAlias`. + * @param ctx the parse tree + */ + exitUnpivotAlias?: (ctx: UnpivotAliasContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.lateralView`. + * @param ctx the parse tree + */ + enterLateralView?: (ctx: LateralViewContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.lateralView`. + * @param ctx the parse tree + */ + exitLateralView?: (ctx: LateralViewContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.setQuantifier`. + * @param ctx the parse tree + */ + enterSetQuantifier?: (ctx: SetQuantifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.setQuantifier`. + * @param ctx the parse tree + */ + exitSetQuantifier?: (ctx: SetQuantifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.relation`. + * @param ctx the parse tree + */ + enterRelation?: (ctx: RelationContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.relation`. + * @param ctx the parse tree + */ + exitRelation?: (ctx: RelationContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.relationExtension`. + * @param ctx the parse tree + */ + enterRelationExtension?: (ctx: RelationExtensionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.relationExtension`. + * @param ctx the parse tree + */ + exitRelationExtension?: (ctx: RelationExtensionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.joinRelation`. + * @param ctx the parse tree + */ + enterJoinRelation?: (ctx: JoinRelationContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.joinRelation`. + * @param ctx the parse tree + */ + exitJoinRelation?: (ctx: JoinRelationContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.joinType`. + * @param ctx the parse tree + */ + enterJoinType?: (ctx: JoinTypeContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.joinType`. + * @param ctx the parse tree + */ + exitJoinType?: (ctx: JoinTypeContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.joinCriteria`. + * @param ctx the parse tree + */ + enterJoinCriteria?: (ctx: JoinCriteriaContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.joinCriteria`. + * @param ctx the parse tree + */ + exitJoinCriteria?: (ctx: JoinCriteriaContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.sample`. + * @param ctx the parse tree + */ + enterSample?: (ctx: SampleContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.sample`. + * @param ctx the parse tree + */ + exitSample?: (ctx: SampleContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.sampleMethod`. + * @param ctx the parse tree + */ + enterSampleMethod?: (ctx: SampleMethodContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.sampleMethod`. + * @param ctx the parse tree + */ + exitSampleMethod?: (ctx: SampleMethodContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.identifierList`. + * @param ctx the parse tree + */ + enterIdentifierList?: (ctx: IdentifierListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.identifierList`. + * @param ctx the parse tree + */ + exitIdentifierList?: (ctx: IdentifierListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.identifierSeq`. + * @param ctx the parse tree + */ + enterIdentifierSeq?: (ctx: IdentifierSeqContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.identifierSeq`. + * @param ctx the parse tree + */ + exitIdentifierSeq?: (ctx: IdentifierSeqContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.orderedIdentifierList`. + * @param ctx the parse tree + */ + enterOrderedIdentifierList?: (ctx: OrderedIdentifierListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.orderedIdentifierList`. + * @param ctx the parse tree + */ + exitOrderedIdentifierList?: (ctx: OrderedIdentifierListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.orderedIdentifier`. + * @param ctx the parse tree + */ + enterOrderedIdentifier?: (ctx: OrderedIdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.orderedIdentifier`. + * @param ctx the parse tree + */ + exitOrderedIdentifier?: (ctx: OrderedIdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.identifierCommentList`. + * @param ctx the parse tree + */ + enterIdentifierCommentList?: (ctx: IdentifierCommentListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.identifierCommentList`. + * @param ctx the parse tree + */ + exitIdentifierCommentList?: (ctx: IdentifierCommentListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.identifierComment`. + * @param ctx the parse tree + */ + enterIdentifierComment?: (ctx: IdentifierCommentContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.identifierComment`. + * @param ctx the parse tree + */ + exitIdentifierComment?: (ctx: IdentifierCommentContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.relationPrimary`. + * @param ctx the parse tree + */ + enterRelationPrimary?: (ctx: RelationPrimaryContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.relationPrimary`. + * @param ctx the parse tree + */ + exitRelationPrimary?: (ctx: RelationPrimaryContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.inlineTable`. + * @param ctx the parse tree + */ + enterInlineTable?: (ctx: InlineTableContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.inlineTable`. + * @param ctx the parse tree + */ + exitInlineTable?: (ctx: InlineTableContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionTableSubqueryArgument`. + * @param ctx the parse tree + */ + enterFunctionTableSubqueryArgument?: (ctx: FunctionTableSubqueryArgumentContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionTableSubqueryArgument`. + * @param ctx the parse tree + */ + exitFunctionTableSubqueryArgument?: (ctx: FunctionTableSubqueryArgumentContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.tableArgumentPartitioning`. + * @param ctx the parse tree + */ + enterTableArgumentPartitioning?: (ctx: TableArgumentPartitioningContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.tableArgumentPartitioning`. + * @param ctx the parse tree + */ + exitTableArgumentPartitioning?: (ctx: TableArgumentPartitioningContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionTableNamedArgumentExpression`. + * @param ctx the parse tree + */ + enterFunctionTableNamedArgumentExpression?: (ctx: FunctionTableNamedArgumentExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionTableNamedArgumentExpression`. + * @param ctx the parse tree + */ + exitFunctionTableNamedArgumentExpression?: (ctx: FunctionTableNamedArgumentExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionTableReferenceArgument`. + * @param ctx the parse tree + */ + enterFunctionTableReferenceArgument?: (ctx: FunctionTableReferenceArgumentContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionTableReferenceArgument`. + * @param ctx the parse tree + */ + exitFunctionTableReferenceArgument?: (ctx: FunctionTableReferenceArgumentContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionTableArgument`. + * @param ctx the parse tree + */ + enterFunctionTableArgument?: (ctx: FunctionTableArgumentContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionTableArgument`. + * @param ctx the parse tree + */ + exitFunctionTableArgument?: (ctx: FunctionTableArgumentContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionTable`. + * @param ctx the parse tree + */ + enterFunctionTable?: (ctx: FunctionTableContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionTable`. + * @param ctx the parse tree + */ + exitFunctionTable?: (ctx: FunctionTableContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.tableAlias`. + * @param ctx the parse tree + */ + enterTableAlias?: (ctx: TableAliasContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.tableAlias`. + * @param ctx the parse tree + */ + exitTableAlias?: (ctx: TableAliasContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.rowFormat`. + * @param ctx the parse tree + */ + enterRowFormat?: (ctx: RowFormatContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.rowFormat`. + * @param ctx the parse tree + */ + exitRowFormat?: (ctx: RowFormatContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.multipartIdentifierList`. + * @param ctx the parse tree + */ + enterMultipartIdentifierList?: (ctx: MultipartIdentifierListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.multipartIdentifierList`. + * @param ctx the parse tree + */ + exitMultipartIdentifierList?: (ctx: MultipartIdentifierListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.multipartIdentifier`. + * @param ctx the parse tree + */ + enterMultipartIdentifier?: (ctx: MultipartIdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.multipartIdentifier`. + * @param ctx the parse tree + */ + exitMultipartIdentifier?: (ctx: MultipartIdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.multipartIdentifierPropertyList`. + * @param ctx the parse tree + */ + enterMultipartIdentifierPropertyList?: (ctx: MultipartIdentifierPropertyListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.multipartIdentifierPropertyList`. + * @param ctx the parse tree + */ + exitMultipartIdentifierPropertyList?: (ctx: MultipartIdentifierPropertyListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.multipartIdentifierProperty`. + * @param ctx the parse tree + */ + enterMultipartIdentifierProperty?: (ctx: MultipartIdentifierPropertyContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.multipartIdentifierProperty`. + * @param ctx the parse tree + */ + exitMultipartIdentifierProperty?: (ctx: MultipartIdentifierPropertyContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.tableIdentifier`. + * @param ctx the parse tree + */ + enterTableIdentifier?: (ctx: TableIdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.tableIdentifier`. + * @param ctx the parse tree + */ + exitTableIdentifier?: (ctx: TableIdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionIdentifier`. + * @param ctx the parse tree + */ + enterFunctionIdentifier?: (ctx: FunctionIdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionIdentifier`. + * @param ctx the parse tree + */ + exitFunctionIdentifier?: (ctx: FunctionIdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.namedExpression`. + * @param ctx the parse tree + */ + enterNamedExpression?: (ctx: NamedExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.namedExpression`. + * @param ctx the parse tree + */ + exitNamedExpression?: (ctx: NamedExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.namedExpressionSeq`. + * @param ctx the parse tree + */ + enterNamedExpressionSeq?: (ctx: NamedExpressionSeqContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.namedExpressionSeq`. + * @param ctx the parse tree + */ + exitNamedExpressionSeq?: (ctx: NamedExpressionSeqContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.partitionFieldList`. + * @param ctx the parse tree + */ + enterPartitionFieldList?: (ctx: PartitionFieldListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.partitionFieldList`. + * @param ctx the parse tree + */ + exitPartitionFieldList?: (ctx: PartitionFieldListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.partitionField`. + * @param ctx the parse tree + */ + enterPartitionField?: (ctx: PartitionFieldContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.partitionField`. + * @param ctx the parse tree + */ + exitPartitionField?: (ctx: PartitionFieldContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.transform`. + * @param ctx the parse tree + */ + enterTransform?: (ctx: TransformContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.transform`. + * @param ctx the parse tree + */ + exitTransform?: (ctx: TransformContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.transformArgument`. + * @param ctx the parse tree + */ + enterTransformArgument?: (ctx: TransformArgumentContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.transformArgument`. + * @param ctx the parse tree + */ + exitTransformArgument?: (ctx: TransformArgumentContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.expression`. + * @param ctx the parse tree + */ + enterExpression?: (ctx: ExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.expression`. + * @param ctx the parse tree + */ + exitExpression?: (ctx: ExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.namedArgumentExpression`. + * @param ctx the parse tree + */ + enterNamedArgumentExpression?: (ctx: NamedArgumentExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.namedArgumentExpression`. + * @param ctx the parse tree + */ + exitNamedArgumentExpression?: (ctx: NamedArgumentExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionArgument`. + * @param ctx the parse tree + */ + enterFunctionArgument?: (ctx: FunctionArgumentContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionArgument`. + * @param ctx the parse tree + */ + exitFunctionArgument?: (ctx: FunctionArgumentContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.expressionSeq`. + * @param ctx the parse tree + */ + enterExpressionSeq?: (ctx: ExpressionSeqContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.expressionSeq`. + * @param ctx the parse tree + */ + exitExpressionSeq?: (ctx: ExpressionSeqContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.booleanExpression`. + * @param ctx the parse tree + */ + enterBooleanExpression?: (ctx: BooleanExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.booleanExpression`. + * @param ctx the parse tree + */ + exitBooleanExpression?: (ctx: BooleanExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.predicate`. + * @param ctx the parse tree + */ + enterPredicate?: (ctx: PredicateContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.predicate`. + * @param ctx the parse tree + */ + exitPredicate?: (ctx: PredicateContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.valueExpression`. + * @param ctx the parse tree + */ + enterValueExpression?: (ctx: ValueExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.valueExpression`. + * @param ctx the parse tree + */ + exitValueExpression?: (ctx: ValueExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.datetimeUnit`. + * @param ctx the parse tree + */ + enterDatetimeUnit?: (ctx: DatetimeUnitContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.datetimeUnit`. + * @param ctx the parse tree + */ + exitDatetimeUnit?: (ctx: DatetimeUnitContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.primaryExpression`. + * @param ctx the parse tree + */ + enterPrimaryExpression?: (ctx: PrimaryExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.primaryExpression`. + * @param ctx the parse tree + */ + exitPrimaryExpression?: (ctx: PrimaryExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.literalType`. + * @param ctx the parse tree + */ + enterLiteralType?: (ctx: LiteralTypeContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.literalType`. + * @param ctx the parse tree + */ + exitLiteralType?: (ctx: LiteralTypeContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.constant`. + * @param ctx the parse tree + */ + enterConstant?: (ctx: ConstantContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.constant`. + * @param ctx the parse tree + */ + exitConstant?: (ctx: ConstantContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.comparisonOperator`. + * @param ctx the parse tree + */ + enterComparisonOperator?: (ctx: ComparisonOperatorContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.comparisonOperator`. + * @param ctx the parse tree + */ + exitComparisonOperator?: (ctx: ComparisonOperatorContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.arithmeticOperator`. + * @param ctx the parse tree + */ + enterArithmeticOperator?: (ctx: ArithmeticOperatorContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.arithmeticOperator`. + * @param ctx the parse tree + */ + exitArithmeticOperator?: (ctx: ArithmeticOperatorContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.predicateOperator`. + * @param ctx the parse tree + */ + enterPredicateOperator?: (ctx: PredicateOperatorContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.predicateOperator`. + * @param ctx the parse tree + */ + exitPredicateOperator?: (ctx: PredicateOperatorContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.booleanValue`. + * @param ctx the parse tree + */ + enterBooleanValue?: (ctx: BooleanValueContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.booleanValue`. + * @param ctx the parse tree + */ + exitBooleanValue?: (ctx: BooleanValueContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.interval`. + * @param ctx the parse tree + */ + enterInterval?: (ctx: IntervalContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.interval`. + * @param ctx the parse tree + */ + exitInterval?: (ctx: IntervalContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.errorCapturingMultiUnitsInterval`. + * @param ctx the parse tree + */ + enterErrorCapturingMultiUnitsInterval?: (ctx: ErrorCapturingMultiUnitsIntervalContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.errorCapturingMultiUnitsInterval`. + * @param ctx the parse tree + */ + exitErrorCapturingMultiUnitsInterval?: (ctx: ErrorCapturingMultiUnitsIntervalContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.multiUnitsInterval`. + * @param ctx the parse tree + */ + enterMultiUnitsInterval?: (ctx: MultiUnitsIntervalContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.multiUnitsInterval`. + * @param ctx the parse tree + */ + exitMultiUnitsInterval?: (ctx: MultiUnitsIntervalContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.errorCapturingUnitToUnitInterval`. + * @param ctx the parse tree + */ + enterErrorCapturingUnitToUnitInterval?: (ctx: ErrorCapturingUnitToUnitIntervalContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.errorCapturingUnitToUnitInterval`. + * @param ctx the parse tree + */ + exitErrorCapturingUnitToUnitInterval?: (ctx: ErrorCapturingUnitToUnitIntervalContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unitToUnitInterval`. + * @param ctx the parse tree + */ + enterUnitToUnitInterval?: (ctx: UnitToUnitIntervalContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unitToUnitInterval`. + * @param ctx the parse tree + */ + exitUnitToUnitInterval?: (ctx: UnitToUnitIntervalContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.intervalValue`. + * @param ctx the parse tree + */ + enterIntervalValue?: (ctx: IntervalValueContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.intervalValue`. + * @param ctx the parse tree + */ + exitIntervalValue?: (ctx: IntervalValueContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unitInMultiUnits`. + * @param ctx the parse tree + */ + enterUnitInMultiUnits?: (ctx: UnitInMultiUnitsContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unitInMultiUnits`. + * @param ctx the parse tree + */ + exitUnitInMultiUnits?: (ctx: UnitInMultiUnitsContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.unitInUnitToUnit`. + * @param ctx the parse tree + */ + enterUnitInUnitToUnit?: (ctx: UnitInUnitToUnitContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.unitInUnitToUnit`. + * @param ctx the parse tree + */ + exitUnitInUnitToUnit?: (ctx: UnitInUnitToUnitContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.colPosition`. + * @param ctx the parse tree + */ + enterColPosition?: (ctx: ColPositionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.colPosition`. + * @param ctx the parse tree + */ + exitColPosition?: (ctx: ColPositionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.type`. + * @param ctx the parse tree + */ + enterType?: (ctx: TypeContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.type`. + * @param ctx the parse tree + */ + exitType?: (ctx: TypeContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.dataType`. + * @param ctx the parse tree + */ + enterDataType?: (ctx: DataTypeContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.dataType`. + * @param ctx the parse tree + */ + exitDataType?: (ctx: DataTypeContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPositionList`. + * @param ctx the parse tree + */ + enterQualifiedColTypeWithPositionList?: (ctx: QualifiedColTypeWithPositionListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPositionList`. + * @param ctx the parse tree + */ + exitQualifiedColTypeWithPositionList?: (ctx: QualifiedColTypeWithPositionListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPosition`. + * @param ctx the parse tree + */ + enterQualifiedColTypeWithPosition?: (ctx: QualifiedColTypeWithPositionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPosition`. + * @param ctx the parse tree + */ + exitQualifiedColTypeWithPosition?: (ctx: QualifiedColTypeWithPositionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.colDefinitionDescriptorWithPosition`. + * @param ctx the parse tree + */ + enterColDefinitionDescriptorWithPosition?: (ctx: ColDefinitionDescriptorWithPositionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.colDefinitionDescriptorWithPosition`. + * @param ctx the parse tree + */ + exitColDefinitionDescriptorWithPosition?: (ctx: ColDefinitionDescriptorWithPositionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.defaultExpression`. + * @param ctx the parse tree + */ + enterDefaultExpression?: (ctx: DefaultExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.defaultExpression`. + * @param ctx the parse tree + */ + exitDefaultExpression?: (ctx: DefaultExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.variableDefaultExpression`. + * @param ctx the parse tree + */ + enterVariableDefaultExpression?: (ctx: VariableDefaultExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.variableDefaultExpression`. + * @param ctx the parse tree + */ + exitVariableDefaultExpression?: (ctx: VariableDefaultExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.colTypeList`. + * @param ctx the parse tree + */ + enterColTypeList?: (ctx: ColTypeListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.colTypeList`. + * @param ctx the parse tree + */ + exitColTypeList?: (ctx: ColTypeListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.colType`. + * @param ctx the parse tree + */ + enterColType?: (ctx: ColTypeContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.colType`. + * @param ctx the parse tree + */ + exitColType?: (ctx: ColTypeContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.createOrReplaceTableColTypeList`. + * @param ctx the parse tree + */ + enterCreateOrReplaceTableColTypeList?: (ctx: CreateOrReplaceTableColTypeListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.createOrReplaceTableColTypeList`. + * @param ctx the parse tree + */ + exitCreateOrReplaceTableColTypeList?: (ctx: CreateOrReplaceTableColTypeListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.createOrReplaceTableColType`. + * @param ctx the parse tree + */ + enterCreateOrReplaceTableColType?: (ctx: CreateOrReplaceTableColTypeContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.createOrReplaceTableColType`. + * @param ctx the parse tree + */ + exitCreateOrReplaceTableColType?: (ctx: CreateOrReplaceTableColTypeContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.colDefinitionOption`. + * @param ctx the parse tree + */ + enterColDefinitionOption?: (ctx: ColDefinitionOptionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.colDefinitionOption`. + * @param ctx the parse tree + */ + exitColDefinitionOption?: (ctx: ColDefinitionOptionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.generationExpression`. + * @param ctx the parse tree + */ + enterGenerationExpression?: (ctx: GenerationExpressionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.generationExpression`. + * @param ctx the parse tree + */ + exitGenerationExpression?: (ctx: GenerationExpressionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.complexColTypeList`. + * @param ctx the parse tree + */ + enterComplexColTypeList?: (ctx: ComplexColTypeListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.complexColTypeList`. + * @param ctx the parse tree + */ + exitComplexColTypeList?: (ctx: ComplexColTypeListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.complexColType`. + * @param ctx the parse tree + */ + enterComplexColType?: (ctx: ComplexColTypeContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.complexColType`. + * @param ctx the parse tree + */ + exitComplexColType?: (ctx: ComplexColTypeContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.whenClause`. + * @param ctx the parse tree + */ + enterWhenClause?: (ctx: WhenClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.whenClause`. + * @param ctx the parse tree + */ + exitWhenClause?: (ctx: WhenClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.windowClause`. + * @param ctx the parse tree + */ + enterWindowClause?: (ctx: WindowClauseContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.windowClause`. + * @param ctx the parse tree + */ + exitWindowClause?: (ctx: WindowClauseContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.namedWindow`. + * @param ctx the parse tree + */ + enterNamedWindow?: (ctx: NamedWindowContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.namedWindow`. + * @param ctx the parse tree + */ + exitNamedWindow?: (ctx: NamedWindowContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.windowSpec`. + * @param ctx the parse tree + */ + enterWindowSpec?: (ctx: WindowSpecContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.windowSpec`. + * @param ctx the parse tree + */ + exitWindowSpec?: (ctx: WindowSpecContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.windowFrame`. + * @param ctx the parse tree + */ + enterWindowFrame?: (ctx: WindowFrameContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.windowFrame`. + * @param ctx the parse tree + */ + exitWindowFrame?: (ctx: WindowFrameContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.frameBound`. + * @param ctx the parse tree + */ + enterFrameBound?: (ctx: FrameBoundContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.frameBound`. + * @param ctx the parse tree + */ + exitFrameBound?: (ctx: FrameBoundContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.qualifiedNameList`. + * @param ctx the parse tree + */ + enterQualifiedNameList?: (ctx: QualifiedNameListContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.qualifiedNameList`. + * @param ctx the parse tree + */ + exitQualifiedNameList?: (ctx: QualifiedNameListContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.functionName`. + * @param ctx the parse tree + */ + enterFunctionName?: (ctx: FunctionNameContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.functionName`. + * @param ctx the parse tree + */ + exitFunctionName?: (ctx: FunctionNameContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.qualifiedName`. + * @param ctx the parse tree + */ + enterQualifiedName?: (ctx: QualifiedNameContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.qualifiedName`. + * @param ctx the parse tree + */ + exitQualifiedName?: (ctx: QualifiedNameContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.errorCapturingIdentifier`. + * @param ctx the parse tree + */ + enterErrorCapturingIdentifier?: (ctx: ErrorCapturingIdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.errorCapturingIdentifier`. + * @param ctx the parse tree + */ + exitErrorCapturingIdentifier?: (ctx: ErrorCapturingIdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.errorCapturingIdentifierExtra`. + * @param ctx the parse tree + */ + enterErrorCapturingIdentifierExtra?: (ctx: ErrorCapturingIdentifierExtraContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.errorCapturingIdentifierExtra`. + * @param ctx the parse tree + */ + exitErrorCapturingIdentifierExtra?: (ctx: ErrorCapturingIdentifierExtraContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.identifier`. + * @param ctx the parse tree + */ + enterIdentifier?: (ctx: IdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.identifier`. + * @param ctx the parse tree + */ + exitIdentifier?: (ctx: IdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.strictIdentifier`. + * @param ctx the parse tree + */ + enterStrictIdentifier?: (ctx: StrictIdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.strictIdentifier`. + * @param ctx the parse tree + */ + exitStrictIdentifier?: (ctx: StrictIdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.quotedIdentifier`. + * @param ctx the parse tree + */ + enterQuotedIdentifier?: (ctx: QuotedIdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.quotedIdentifier`. + * @param ctx the parse tree + */ + exitQuotedIdentifier?: (ctx: QuotedIdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.backQuotedIdentifier`. + * @param ctx the parse tree + */ + enterBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.backQuotedIdentifier`. + * @param ctx the parse tree + */ + exitBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.number`. + * @param ctx the parse tree + */ + enterNumber?: (ctx: NumberContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.number`. + * @param ctx the parse tree + */ + exitNumber?: (ctx: NumberContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.alterColumnAction`. + * @param ctx the parse tree + */ + enterAlterColumnAction?: (ctx: AlterColumnActionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.alterColumnAction`. + * @param ctx the parse tree + */ + exitAlterColumnAction?: (ctx: AlterColumnActionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.stringLit`. + * @param ctx the parse tree + */ + enterStringLit?: (ctx: StringLitContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.stringLit`. + * @param ctx the parse tree + */ + exitStringLit?: (ctx: StringLitContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.comment`. + * @param ctx the parse tree + */ + enterComment?: (ctx: CommentContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.comment`. + * @param ctx the parse tree + */ + exitComment?: (ctx: CommentContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.version`. + * @param ctx the parse tree + */ + enterVersion?: (ctx: VersionContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.version`. + * @param ctx the parse tree + */ + exitVersion?: (ctx: VersionContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.ansiNonReserved`. + * @param ctx the parse tree + */ + enterAnsiNonReserved?: (ctx: AnsiNonReservedContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.ansiNonReserved`. + * @param ctx the parse tree + */ + exitAnsiNonReserved?: (ctx: AnsiNonReservedContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.strictNonReserved`. + * @param ctx the parse tree + */ + enterStrictNonReserved?: (ctx: StrictNonReservedContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.strictNonReserved`. + * @param ctx the parse tree + */ + exitStrictNonReserved?: (ctx: StrictNonReservedContext) => void; + + /** + * Enter a parse tree produced by `SparkSqlParser.nonReserved`. + * @param ctx the parse tree + */ + enterNonReserved?: (ctx: NonReservedContext) => void; + /** + * Exit a parse tree produced by `SparkSqlParser.nonReserved`. + * @param ctx the parse tree + */ + exitNonReserved?: (ctx: NonReservedContext) => void; +} + diff --git a/src/lib/spark/SparkSqlParserVisitor.ts b/src/lib/spark/SparkSqlParserVisitor.ts new file mode 100644 index 00000000..236c0f95 --- /dev/null +++ b/src/lib/spark/SparkSqlParserVisitor.ts @@ -0,0 +1,1512 @@ +// Generated from /Users/liuyi/Desktop/Projects/dtstack/dt-sql-parser/src/grammar/spark/SparkSqlParser.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; + +import { ProgramContext } from "./SparkSqlParser"; +import { SingleStatementContext } from "./SparkSqlParser"; +import { TableIdentifierReferenceContext } from "./SparkSqlParser"; +import { ViewIdentifierReferenceContext } from "./SparkSqlParser"; +import { FunctionIdentifierReferenceContext } from "./SparkSqlParser"; +import { NamespaceIdentifierReferenceContext } from "./SparkSqlParser"; +import { StatementContext } from "./SparkSqlParser"; +import { TimezoneContext } from "./SparkSqlParser"; +import { ConfigKeyContext } from "./SparkSqlParser"; +import { ConfigValueContext } from "./SparkSqlParser"; +import { UnsupportedHiveNativeCommandsContext } from "./SparkSqlParser"; +import { CreateTableHeaderContext } from "./SparkSqlParser"; +import { ReplaceTableHeaderContext } from "./SparkSqlParser"; +import { BucketSpecContext } from "./SparkSqlParser"; +import { SkewSpecContext } from "./SparkSqlParser"; +import { LocationSpecContext } from "./SparkSqlParser"; +import { CommentSpecContext } from "./SparkSqlParser"; +import { QueryContext } from "./SparkSqlParser"; +import { InsertIntoContext } from "./SparkSqlParser"; +import { PartitionSpecLocationContext } from "./SparkSqlParser"; +import { PartitionSpecContext } from "./SparkSqlParser"; +import { PartitionValContext } from "./SparkSqlParser"; +import { NamespaceContext } from "./SparkSqlParser"; +import { NamespacesContext } from "./SparkSqlParser"; +import { DescribeFuncNameContext } from "./SparkSqlParser"; +import { DescribeColNameContext } from "./SparkSqlParser"; +import { CtesContext } from "./SparkSqlParser"; +import { NamedQueryContext } from "./SparkSqlParser"; +import { TableProviderContext } from "./SparkSqlParser"; +import { CreateTableClausesContext } from "./SparkSqlParser"; +import { PropertyListContext } from "./SparkSqlParser"; +import { PropertyContext } from "./SparkSqlParser"; +import { PropertyKeyContext } from "./SparkSqlParser"; +import { PropertyValueContext } from "./SparkSqlParser"; +import { ExpressionPropertyListContext } from "./SparkSqlParser"; +import { ExpressionPropertyContext } from "./SparkSqlParser"; +import { ConstantListContext } from "./SparkSqlParser"; +import { NestedConstantListContext } from "./SparkSqlParser"; +import { CreateFileFormatContext } from "./SparkSqlParser"; +import { FileFormatContext } from "./SparkSqlParser"; +import { StorageHandlerContext } from "./SparkSqlParser"; +import { ResourceContext } from "./SparkSqlParser"; +import { DmlStatementNoWithContext } from "./SparkSqlParser"; +import { IdentifierReferenceContext } from "./SparkSqlParser"; +import { QueryOrganizationContext } from "./SparkSqlParser"; +import { MultiInsertQueryBodyContext } from "./SparkSqlParser"; +import { QueryTermContext } from "./SparkSqlParser"; +import { QueryPrimaryContext } from "./SparkSqlParser"; +import { SortItemContext } from "./SparkSqlParser"; +import { FromStatementContext } from "./SparkSqlParser"; +import { FromStatementBodyContext } from "./SparkSqlParser"; +import { QuerySpecificationContext } from "./SparkSqlParser"; +import { TransformClauseContext } from "./SparkSqlParser"; +import { SelectClauseContext } from "./SparkSqlParser"; +import { SetClauseContext } from "./SparkSqlParser"; +import { MatchedClauseContext } from "./SparkSqlParser"; +import { NotMatchedClauseContext } from "./SparkSqlParser"; +import { NotMatchedBySourceClauseContext } from "./SparkSqlParser"; +import { MatchedActionContext } from "./SparkSqlParser"; +import { NotMatchedActionContext } from "./SparkSqlParser"; +import { NotMatchedBySourceActionContext } from "./SparkSqlParser"; +import { AssignmentListContext } from "./SparkSqlParser"; +import { AssignmentContext } from "./SparkSqlParser"; +import { WhereClauseContext } from "./SparkSqlParser"; +import { HavingClauseContext } from "./SparkSqlParser"; +import { HintContext } from "./SparkSqlParser"; +import { HintStatementContext } from "./SparkSqlParser"; +import { FromClauseContext } from "./SparkSqlParser"; +import { TemporalClauseContext } from "./SparkSqlParser"; +import { AggregationClauseContext } from "./SparkSqlParser"; +import { GroupByClauseContext } from "./SparkSqlParser"; +import { GroupingAnalyticsContext } from "./SparkSqlParser"; +import { GroupingElementContext } from "./SparkSqlParser"; +import { GroupingSetContext } from "./SparkSqlParser"; +import { PivotClauseContext } from "./SparkSqlParser"; +import { PivotColumnContext } from "./SparkSqlParser"; +import { PivotValueContext } from "./SparkSqlParser"; +import { UnpivotClauseContext } from "./SparkSqlParser"; +import { UnpivotNullClauseContext } from "./SparkSqlParser"; +import { UnpivotOperatorContext } from "./SparkSqlParser"; +import { UnpivotSingleValueColumnClauseContext } from "./SparkSqlParser"; +import { UnpivotMultiValueColumnClauseContext } from "./SparkSqlParser"; +import { UnpivotColumnSetContext } from "./SparkSqlParser"; +import { UnpivotValueColumnContext } from "./SparkSqlParser"; +import { UnpivotNameColumnContext } from "./SparkSqlParser"; +import { UnpivotColumnAndAliasContext } from "./SparkSqlParser"; +import { UnpivotColumnContext } from "./SparkSqlParser"; +import { UnpivotAliasContext } from "./SparkSqlParser"; +import { LateralViewContext } from "./SparkSqlParser"; +import { SetQuantifierContext } from "./SparkSqlParser"; +import { RelationContext } from "./SparkSqlParser"; +import { RelationExtensionContext } from "./SparkSqlParser"; +import { JoinRelationContext } from "./SparkSqlParser"; +import { JoinTypeContext } from "./SparkSqlParser"; +import { JoinCriteriaContext } from "./SparkSqlParser"; +import { SampleContext } from "./SparkSqlParser"; +import { SampleMethodContext } from "./SparkSqlParser"; +import { IdentifierListContext } from "./SparkSqlParser"; +import { IdentifierSeqContext } from "./SparkSqlParser"; +import { OrderedIdentifierListContext } from "./SparkSqlParser"; +import { OrderedIdentifierContext } from "./SparkSqlParser"; +import { IdentifierCommentListContext } from "./SparkSqlParser"; +import { IdentifierCommentContext } from "./SparkSqlParser"; +import { RelationPrimaryContext } from "./SparkSqlParser"; +import { InlineTableContext } from "./SparkSqlParser"; +import { FunctionTableSubqueryArgumentContext } from "./SparkSqlParser"; +import { TableArgumentPartitioningContext } from "./SparkSqlParser"; +import { FunctionTableNamedArgumentExpressionContext } from "./SparkSqlParser"; +import { FunctionTableReferenceArgumentContext } from "./SparkSqlParser"; +import { FunctionTableArgumentContext } from "./SparkSqlParser"; +import { FunctionTableContext } from "./SparkSqlParser"; +import { TableAliasContext } from "./SparkSqlParser"; +import { RowFormatContext } from "./SparkSqlParser"; +import { MultipartIdentifierListContext } from "./SparkSqlParser"; +import { MultipartIdentifierContext } from "./SparkSqlParser"; +import { MultipartIdentifierPropertyListContext } from "./SparkSqlParser"; +import { MultipartIdentifierPropertyContext } from "./SparkSqlParser"; +import { TableIdentifierContext } from "./SparkSqlParser"; +import { FunctionIdentifierContext } from "./SparkSqlParser"; +import { NamedExpressionContext } from "./SparkSqlParser"; +import { NamedExpressionSeqContext } from "./SparkSqlParser"; +import { PartitionFieldListContext } from "./SparkSqlParser"; +import { PartitionFieldContext } from "./SparkSqlParser"; +import { TransformContext } from "./SparkSqlParser"; +import { TransformArgumentContext } from "./SparkSqlParser"; +import { ExpressionContext } from "./SparkSqlParser"; +import { NamedArgumentExpressionContext } from "./SparkSqlParser"; +import { FunctionArgumentContext } from "./SparkSqlParser"; +import { ExpressionSeqContext } from "./SparkSqlParser"; +import { BooleanExpressionContext } from "./SparkSqlParser"; +import { PredicateContext } from "./SparkSqlParser"; +import { ValueExpressionContext } from "./SparkSqlParser"; +import { DatetimeUnitContext } from "./SparkSqlParser"; +import { PrimaryExpressionContext } from "./SparkSqlParser"; +import { LiteralTypeContext } from "./SparkSqlParser"; +import { ConstantContext } from "./SparkSqlParser"; +import { ComparisonOperatorContext } from "./SparkSqlParser"; +import { ArithmeticOperatorContext } from "./SparkSqlParser"; +import { PredicateOperatorContext } from "./SparkSqlParser"; +import { BooleanValueContext } from "./SparkSqlParser"; +import { IntervalContext } from "./SparkSqlParser"; +import { ErrorCapturingMultiUnitsIntervalContext } from "./SparkSqlParser"; +import { MultiUnitsIntervalContext } from "./SparkSqlParser"; +import { ErrorCapturingUnitToUnitIntervalContext } from "./SparkSqlParser"; +import { UnitToUnitIntervalContext } from "./SparkSqlParser"; +import { IntervalValueContext } from "./SparkSqlParser"; +import { UnitInMultiUnitsContext } from "./SparkSqlParser"; +import { UnitInUnitToUnitContext } from "./SparkSqlParser"; +import { ColPositionContext } from "./SparkSqlParser"; +import { TypeContext } from "./SparkSqlParser"; +import { DataTypeContext } from "./SparkSqlParser"; +import { QualifiedColTypeWithPositionListContext } from "./SparkSqlParser"; +import { QualifiedColTypeWithPositionContext } from "./SparkSqlParser"; +import { ColDefinitionDescriptorWithPositionContext } from "./SparkSqlParser"; +import { DefaultExpressionContext } from "./SparkSqlParser"; +import { VariableDefaultExpressionContext } from "./SparkSqlParser"; +import { ColTypeListContext } from "./SparkSqlParser"; +import { ColTypeContext } from "./SparkSqlParser"; +import { CreateOrReplaceTableColTypeListContext } from "./SparkSqlParser"; +import { CreateOrReplaceTableColTypeContext } from "./SparkSqlParser"; +import { ColDefinitionOptionContext } from "./SparkSqlParser"; +import { GenerationExpressionContext } from "./SparkSqlParser"; +import { ComplexColTypeListContext } from "./SparkSqlParser"; +import { ComplexColTypeContext } from "./SparkSqlParser"; +import { WhenClauseContext } from "./SparkSqlParser"; +import { WindowClauseContext } from "./SparkSqlParser"; +import { NamedWindowContext } from "./SparkSqlParser"; +import { WindowSpecContext } from "./SparkSqlParser"; +import { WindowFrameContext } from "./SparkSqlParser"; +import { FrameBoundContext } from "./SparkSqlParser"; +import { QualifiedNameListContext } from "./SparkSqlParser"; +import { FunctionNameContext } from "./SparkSqlParser"; +import { QualifiedNameContext } from "./SparkSqlParser"; +import { ErrorCapturingIdentifierContext } from "./SparkSqlParser"; +import { ErrorCapturingIdentifierExtraContext } from "./SparkSqlParser"; +import { IdentifierContext } from "./SparkSqlParser"; +import { StrictIdentifierContext } from "./SparkSqlParser"; +import { QuotedIdentifierContext } from "./SparkSqlParser"; +import { BackQuotedIdentifierContext } from "./SparkSqlParser"; +import { NumberContext } from "./SparkSqlParser"; +import { AlterColumnActionContext } from "./SparkSqlParser"; +import { StringLitContext } from "./SparkSqlParser"; +import { CommentContext } from "./SparkSqlParser"; +import { VersionContext } from "./SparkSqlParser"; +import { AnsiNonReservedContext } from "./SparkSqlParser"; +import { StrictNonReservedContext } from "./SparkSqlParser"; +import { NonReservedContext } from "./SparkSqlParser"; + + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by `SparkSqlParser`. + * + * @param The return type of the visit operation. Use `void` for + * operations with no return type. + */ +export interface SparkSqlParserVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by `SparkSqlParser.program`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProgram?: (ctx: ProgramContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.singleStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSingleStatement?: (ctx: SingleStatementContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.tableIdentifierReference`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableIdentifierReference?: (ctx: TableIdentifierReferenceContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.viewIdentifierReference`. + * @param ctx the parse tree + * @return the visitor result + */ + visitViewIdentifierReference?: (ctx: ViewIdentifierReferenceContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionIdentifierReference`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionIdentifierReference?: (ctx: FunctionIdentifierReferenceContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.namespaceIdentifierReference`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamespaceIdentifierReference?: (ctx: NamespaceIdentifierReferenceContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatement?: (ctx: StatementContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.timezone`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimezone?: (ctx: TimezoneContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.configKey`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConfigKey?: (ctx: ConfigKeyContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.configValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConfigValue?: (ctx: ConfigValueContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unsupportedHiveNativeCommands`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnsupportedHiveNativeCommands?: (ctx: UnsupportedHiveNativeCommandsContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.createTableHeader`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateTableHeader?: (ctx: CreateTableHeaderContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.replaceTableHeader`. + * @param ctx the parse tree + * @return the visitor result + */ + visitReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.bucketSpec`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBucketSpec?: (ctx: BucketSpecContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.skewSpec`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSkewSpec?: (ctx: SkewSpecContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.locationSpec`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLocationSpec?: (ctx: LocationSpecContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.commentSpec`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCommentSpec?: (ctx: CommentSpecContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.query`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuery?: (ctx: QueryContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.insertInto`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInsertInto?: (ctx: InsertIntoContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.partitionSpecLocation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionSpecLocation?: (ctx: PartitionSpecLocationContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.partitionSpec`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionSpec?: (ctx: PartitionSpecContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.partitionVal`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionVal?: (ctx: PartitionValContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.namespace`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamespace?: (ctx: NamespaceContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.namespaces`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamespaces?: (ctx: NamespacesContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.describeFuncName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescribeFuncName?: (ctx: DescribeFuncNameContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.describeColName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDescribeColName?: (ctx: DescribeColNameContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.ctes`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCtes?: (ctx: CtesContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.namedQuery`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedQuery?: (ctx: NamedQueryContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.tableProvider`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableProvider?: (ctx: TableProviderContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.createTableClauses`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateTableClauses?: (ctx: CreateTableClausesContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.propertyList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPropertyList?: (ctx: PropertyListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.property`. + * @param ctx the parse tree + * @return the visitor result + */ + visitProperty?: (ctx: PropertyContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.propertyKey`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPropertyKey?: (ctx: PropertyKeyContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.propertyValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPropertyValue?: (ctx: PropertyValueContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.expressionPropertyList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpressionPropertyList?: (ctx: ExpressionPropertyListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.expressionProperty`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpressionProperty?: (ctx: ExpressionPropertyContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.constantList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConstantList?: (ctx: ConstantListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.nestedConstantList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNestedConstantList?: (ctx: NestedConstantListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.createFileFormat`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateFileFormat?: (ctx: CreateFileFormatContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.fileFormat`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFileFormat?: (ctx: FileFormatContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.storageHandler`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStorageHandler?: (ctx: StorageHandlerContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.resource`. + * @param ctx the parse tree + * @return the visitor result + */ + visitResource?: (ctx: ResourceContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.dmlStatementNoWith`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDmlStatementNoWith?: (ctx: DmlStatementNoWithContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.identifierReference`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierReference?: (ctx: IdentifierReferenceContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.queryOrganization`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryOrganization?: (ctx: QueryOrganizationContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.queryTerm`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryTerm?: (ctx: QueryTermContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.queryPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQueryPrimary?: (ctx: QueryPrimaryContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.sortItem`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSortItem?: (ctx: SortItemContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.fromStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFromStatement?: (ctx: FromStatementContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.fromStatementBody`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFromStatementBody?: (ctx: FromStatementBodyContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.querySpecification`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuerySpecification?: (ctx: QuerySpecificationContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.transformClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTransformClause?: (ctx: TransformClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.selectClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSelectClause?: (ctx: SelectClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.setClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetClause?: (ctx: SetClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.matchedClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMatchedClause?: (ctx: MatchedClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.notMatchedClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNotMatchedClause?: (ctx: NotMatchedClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.notMatchedBySourceClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNotMatchedBySourceClause?: (ctx: NotMatchedBySourceClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.matchedAction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMatchedAction?: (ctx: MatchedActionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.notMatchedAction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNotMatchedAction?: (ctx: NotMatchedActionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.notMatchedBySourceAction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNotMatchedBySourceAction?: (ctx: NotMatchedBySourceActionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.assignmentList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAssignmentList?: (ctx: AssignmentListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.assignment`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAssignment?: (ctx: AssignmentContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.whereClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWhereClause?: (ctx: WhereClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.havingClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHavingClause?: (ctx: HavingClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.hint`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHint?: (ctx: HintContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.hintStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitHintStatement?: (ctx: HintStatementContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.fromClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFromClause?: (ctx: FromClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.temporalClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTemporalClause?: (ctx: TemporalClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.aggregationClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAggregationClause?: (ctx: AggregationClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.groupByClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupByClause?: (ctx: GroupByClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.groupingAnalytics`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingAnalytics?: (ctx: GroupingAnalyticsContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.groupingElement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingElement?: (ctx: GroupingElementContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.groupingSet`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGroupingSet?: (ctx: GroupingSetContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.pivotClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPivotClause?: (ctx: PivotClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.pivotColumn`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPivotColumn?: (ctx: PivotColumnContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.pivotValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPivotValue?: (ctx: PivotValueContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotClause?: (ctx: UnpivotClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotNullClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotNullClause?: (ctx: UnpivotNullClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotOperator?: (ctx: UnpivotOperatorContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotSingleValueColumnClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotSingleValueColumnClause?: (ctx: UnpivotSingleValueColumnClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotMultiValueColumnClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotMultiValueColumnClause?: (ctx: UnpivotMultiValueColumnClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotColumnSet`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotColumnSet?: (ctx: UnpivotColumnSetContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotValueColumn`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotValueColumn?: (ctx: UnpivotValueColumnContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotNameColumn`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotNameColumn?: (ctx: UnpivotNameColumnContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotColumnAndAlias`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotColumnAndAlias?: (ctx: UnpivotColumnAndAliasContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotColumn`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotColumn?: (ctx: UnpivotColumnContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unpivotAlias`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnpivotAlias?: (ctx: UnpivotAliasContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.lateralView`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLateralView?: (ctx: LateralViewContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.setQuantifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSetQuantifier?: (ctx: SetQuantifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.relation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelation?: (ctx: RelationContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.relationExtension`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelationExtension?: (ctx: RelationExtensionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.joinRelation`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinRelation?: (ctx: JoinRelationContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.joinType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinType?: (ctx: JoinTypeContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.joinCriteria`. + * @param ctx the parse tree + * @return the visitor result + */ + visitJoinCriteria?: (ctx: JoinCriteriaContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.sample`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSample?: (ctx: SampleContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.sampleMethod`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSampleMethod?: (ctx: SampleMethodContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.identifierList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierList?: (ctx: IdentifierListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.identifierSeq`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierSeq?: (ctx: IdentifierSeqContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.orderedIdentifierList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOrderedIdentifierList?: (ctx: OrderedIdentifierListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.orderedIdentifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitOrderedIdentifier?: (ctx: OrderedIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.identifierCommentList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierCommentList?: (ctx: IdentifierCommentListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.identifierComment`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifierComment?: (ctx: IdentifierCommentContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.relationPrimary`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRelationPrimary?: (ctx: RelationPrimaryContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.inlineTable`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInlineTable?: (ctx: InlineTableContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionTableSubqueryArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionTableSubqueryArgument?: (ctx: FunctionTableSubqueryArgumentContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.tableArgumentPartitioning`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableArgumentPartitioning?: (ctx: TableArgumentPartitioningContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionTableNamedArgumentExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionTableNamedArgumentExpression?: (ctx: FunctionTableNamedArgumentExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionTableReferenceArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionTableReferenceArgument?: (ctx: FunctionTableReferenceArgumentContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionTableArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionTableArgument?: (ctx: FunctionTableArgumentContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionTable`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionTable?: (ctx: FunctionTableContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.tableAlias`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableAlias?: (ctx: TableAliasContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.rowFormat`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRowFormat?: (ctx: RowFormatContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.multipartIdentifierList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultipartIdentifierList?: (ctx: MultipartIdentifierListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.multipartIdentifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultipartIdentifier?: (ctx: MultipartIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.multipartIdentifierPropertyList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultipartIdentifierPropertyList?: (ctx: MultipartIdentifierPropertyListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.multipartIdentifierProperty`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultipartIdentifierProperty?: (ctx: MultipartIdentifierPropertyContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.tableIdentifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTableIdentifier?: (ctx: TableIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionIdentifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionIdentifier?: (ctx: FunctionIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.namedExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedExpression?: (ctx: NamedExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.namedExpressionSeq`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedExpressionSeq?: (ctx: NamedExpressionSeqContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.partitionFieldList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionFieldList?: (ctx: PartitionFieldListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.partitionField`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPartitionField?: (ctx: PartitionFieldContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.transform`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTransform?: (ctx: TransformContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.transformArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTransformArgument?: (ctx: TransformArgumentContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpression?: (ctx: ExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.namedArgumentExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedArgumentExpression?: (ctx: NamedArgumentExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionArgument`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionArgument?: (ctx: FunctionArgumentContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.expressionSeq`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpressionSeq?: (ctx: ExpressionSeqContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.booleanExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanExpression?: (ctx: BooleanExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.predicate`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPredicate?: (ctx: PredicateContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.valueExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitValueExpression?: (ctx: ValueExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.datetimeUnit`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDatetimeUnit?: (ctx: DatetimeUnitContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.primaryExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPrimaryExpression?: (ctx: PrimaryExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.literalType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLiteralType?: (ctx: LiteralTypeContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.constant`. + * @param ctx the parse tree + * @return the visitor result + */ + visitConstant?: (ctx: ConstantContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.comparisonOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComparisonOperator?: (ctx: ComparisonOperatorContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.arithmeticOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArithmeticOperator?: (ctx: ArithmeticOperatorContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.predicateOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPredicateOperator?: (ctx: PredicateOperatorContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.booleanValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBooleanValue?: (ctx: BooleanValueContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.interval`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInterval?: (ctx: IntervalContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.errorCapturingMultiUnitsInterval`. + * @param ctx the parse tree + * @return the visitor result + */ + visitErrorCapturingMultiUnitsInterval?: (ctx: ErrorCapturingMultiUnitsIntervalContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.multiUnitsInterval`. + * @param ctx the parse tree + * @return the visitor result + */ + visitMultiUnitsInterval?: (ctx: MultiUnitsIntervalContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.errorCapturingUnitToUnitInterval`. + * @param ctx the parse tree + * @return the visitor result + */ + visitErrorCapturingUnitToUnitInterval?: (ctx: ErrorCapturingUnitToUnitIntervalContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unitToUnitInterval`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnitToUnitInterval?: (ctx: UnitToUnitIntervalContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.intervalValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIntervalValue?: (ctx: IntervalValueContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unitInMultiUnits`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnitInMultiUnits?: (ctx: UnitInMultiUnitsContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.unitInUnitToUnit`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnitInUnitToUnit?: (ctx: UnitInUnitToUnitContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.colPosition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColPosition?: (ctx: ColPositionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.type`. + * @param ctx the parse tree + * @return the visitor result + */ + visitType?: (ctx: TypeContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.dataType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDataType?: (ctx: DataTypeContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPositionList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedColTypeWithPositionList?: (ctx: QualifiedColTypeWithPositionListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPosition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedColTypeWithPosition?: (ctx: QualifiedColTypeWithPositionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.colDefinitionDescriptorWithPosition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColDefinitionDescriptorWithPosition?: (ctx: ColDefinitionDescriptorWithPositionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.defaultExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitDefaultExpression?: (ctx: DefaultExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.variableDefaultExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitVariableDefaultExpression?: (ctx: VariableDefaultExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.colTypeList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColTypeList?: (ctx: ColTypeListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.colType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColType?: (ctx: ColTypeContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.createOrReplaceTableColTypeList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateOrReplaceTableColTypeList?: (ctx: CreateOrReplaceTableColTypeListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.createOrReplaceTableColType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCreateOrReplaceTableColType?: (ctx: CreateOrReplaceTableColTypeContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.colDefinitionOption`. + * @param ctx the parse tree + * @return the visitor result + */ + visitColDefinitionOption?: (ctx: ColDefinitionOptionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.generationExpression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitGenerationExpression?: (ctx: GenerationExpressionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.complexColTypeList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComplexColTypeList?: (ctx: ComplexColTypeListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.complexColType`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComplexColType?: (ctx: ComplexColTypeContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.whenClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWhenClause?: (ctx: WhenClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.windowClause`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowClause?: (ctx: WindowClauseContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.namedWindow`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNamedWindow?: (ctx: NamedWindowContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.windowSpec`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowSpec?: (ctx: WindowSpecContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.windowFrame`. + * @param ctx the parse tree + * @return the visitor result + */ + visitWindowFrame?: (ctx: WindowFrameContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.frameBound`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFrameBound?: (ctx: FrameBoundContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.qualifiedNameList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedNameList?: (ctx: QualifiedNameListContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.functionName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionName?: (ctx: FunctionNameContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.qualifiedName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQualifiedName?: (ctx: QualifiedNameContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.errorCapturingIdentifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitErrorCapturingIdentifier?: (ctx: ErrorCapturingIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.errorCapturingIdentifierExtra`. + * @param ctx the parse tree + * @return the visitor result + */ + visitErrorCapturingIdentifierExtra?: (ctx: ErrorCapturingIdentifierExtraContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.identifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifier?: (ctx: IdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.strictIdentifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStrictIdentifier?: (ctx: StrictIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.quotedIdentifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitQuotedIdentifier?: (ctx: QuotedIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.backQuotedIdentifier`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBackQuotedIdentifier?: (ctx: BackQuotedIdentifierContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.number`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNumber?: (ctx: NumberContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.alterColumnAction`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAlterColumnAction?: (ctx: AlterColumnActionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.stringLit`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStringLit?: (ctx: StringLitContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.comment`. + * @param ctx the parse tree + * @return the visitor result + */ + visitComment?: (ctx: CommentContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.version`. + * @param ctx the parse tree + * @return the visitor result + */ + visitVersion?: (ctx: VersionContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.ansiNonReserved`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAnsiNonReserved?: (ctx: AnsiNonReservedContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.strictNonReserved`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStrictNonReserved?: (ctx: StrictNonReservedContext) => Result; + + /** + * Visit a parse tree produced by `SparkSqlParser.nonReserved`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNonReserved?: (ctx: NonReservedContext) => Result; +} + diff --git a/src/lib/spark/SparkSqlVisitor.ts b/src/lib/spark/SparkSqlVisitor.ts deleted file mode 100644 index 3bbf78bb..00000000 --- a/src/lib/spark/SparkSqlVisitor.ts +++ /dev/null @@ -1,2498 +0,0 @@ -// Generated from /Users/ziv/github.com/dt-sql-parser/src/grammar/spark/SparkSql.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; - -import { TableNameContext } from "./SparkSqlParser"; -import { AliasedQueryContext } from "./SparkSqlParser"; -import { AliasedRelationContext } from "./SparkSqlParser"; -import { InlineTableDefault2Context } from "./SparkSqlParser"; -import { TableValuedFunctionContext } from "./SparkSqlParser"; -import { ExponentLiteralContext } from "./SparkSqlParser"; -import { DecimalLiteralContext } from "./SparkSqlParser"; -import { LegacyDecimalLiteralContext } from "./SparkSqlParser"; -import { IntegerLiteralContext } from "./SparkSqlParser"; -import { BigIntLiteralContext } from "./SparkSqlParser"; -import { SmallIntLiteralContext } from "./SparkSqlParser"; -import { TinyIntLiteralContext } from "./SparkSqlParser"; -import { DoubleLiteralContext } from "./SparkSqlParser"; -import { FloatLiteralContext } from "./SparkSqlParser"; -import { BigDecimalLiteralContext } from "./SparkSqlParser"; -import { QueryTermDefaultContext } from "./SparkSqlParser"; -import { SetOperationContext } from "./SparkSqlParser"; -import { InsertOverwriteTableContext } from "./SparkSqlParser"; -import { InsertIntoTableContext } from "./SparkSqlParser"; -import { InsertOverwriteHiveDirContext } from "./SparkSqlParser"; -import { InsertOverwriteDirContext } from "./SparkSqlParser"; -import { ValueExpressionDefaultContext } from "./SparkSqlParser"; -import { ArithmeticUnaryContext } from "./SparkSqlParser"; -import { ArithmeticBinaryContext } from "./SparkSqlParser"; -import { ComparisonContext } from "./SparkSqlParser"; -import { QueryPrimaryDefaultContext } from "./SparkSqlParser"; -import { FromStmtContext } from "./SparkSqlParser"; -import { TableContext } from "./SparkSqlParser"; -import { InlineTableDefault1Context } from "./SparkSqlParser"; -import { SubqueryContext } from "./SparkSqlParser"; -import { SingleInsertQueryContext } from "./SparkSqlParser"; -import { MultiInsertQueryContext } from "./SparkSqlParser"; -import { DeleteFromTableContext } from "./SparkSqlParser"; -import { UpdateTableContext } from "./SparkSqlParser"; -import { MergeIntoTableContext } from "./SparkSqlParser"; -import { CurrentDatetimeContext } from "./SparkSqlParser"; -import { SearchedCaseContext } from "./SparkSqlParser"; -import { SimpleCaseContext } from "./SparkSqlParser"; -import { CastContext } from "./SparkSqlParser"; -import { StructContext } from "./SparkSqlParser"; -import { FirstContext } from "./SparkSqlParser"; -import { LastContext } from "./SparkSqlParser"; -import { PositionContext } from "./SparkSqlParser"; -import { ConstantDefaultContext } from "./SparkSqlParser"; -import { StarContext } from "./SparkSqlParser"; -import { RowConstructorContext } from "./SparkSqlParser"; -import { SubqueryExpressionContext } from "./SparkSqlParser"; -import { FunctionCallContext } from "./SparkSqlParser"; -import { LambdaContext } from "./SparkSqlParser"; -import { SubscriptContext } from "./SparkSqlParser"; -import { ColumnReferenceContext } from "./SparkSqlParser"; -import { DereferenceContext } from "./SparkSqlParser"; -import { ParenthesizedExpressionContext } from "./SparkSqlParser"; -import { ExtractContext } from "./SparkSqlParser"; -import { SubstringContext } from "./SparkSqlParser"; -import { TrimContext } from "./SparkSqlParser"; -import { OverlayContext } from "./SparkSqlParser"; -import { UnquotedIdentifierContext } from "./SparkSqlParser"; -import { QuotedIdentifierAlternativeContext } from "./SparkSqlParser"; -import { TableFileFormatContext } from "./SparkSqlParser"; -import { GenericFileFormatContext } from "./SparkSqlParser"; -import { SampleByPercentileContext } from "./SparkSqlParser"; -import { SampleByRowsContext } from "./SparkSqlParser"; -import { SampleByBucketContext } from "./SparkSqlParser"; -import { SampleByBytesContext } from "./SparkSqlParser"; -import { NullLiteralContext } from "./SparkSqlParser"; -import { IntervalLiteralContext } from "./SparkSqlParser"; -import { TypeConstructorContext } from "./SparkSqlParser"; -import { NumericLiteralContext } from "./SparkSqlParser"; -import { BooleanLiteralContext } from "./SparkSqlParser"; -import { StringLiteralContext } from "./SparkSqlParser"; -import { RowFormatSerdeContext } from "./SparkSqlParser"; -import { RowFormatDelimitedContext } from "./SparkSqlParser"; -import { ComplexDataTypeContext } from "./SparkSqlParser"; -import { PrimitiveDataTypeContext } from "./SparkSqlParser"; -import { TransformQuerySpecificationContext } from "./SparkSqlParser"; -import { RegularQuerySpecificationContext } from "./SparkSqlParser"; -import { ErrorIdentContext } from "./SparkSqlParser"; -import { RealIdentContext } from "./SparkSqlParser"; -import { WindowRefContext } from "./SparkSqlParser"; -import { WindowDefContext } from "./SparkSqlParser"; -import { IdentityTransformContext } from "./SparkSqlParser"; -import { ApplyTransformContext } from "./SparkSqlParser"; -import { StatementDefaultContext } from "./SparkSqlParser"; -import { DmlStatementContext } from "./SparkSqlParser"; -import { UseContext } from "./SparkSqlParser"; -import { CreateNamespaceContext } from "./SparkSqlParser"; -import { SetNamespacePropertiesContext } from "./SparkSqlParser"; -import { SetNamespaceLocationContext } from "./SparkSqlParser"; -import { DropNamespaceContext } from "./SparkSqlParser"; -import { ShowNamespacesContext } from "./SparkSqlParser"; -import { CreateTableContext } from "./SparkSqlParser"; -import { CreateHiveTableContext } from "./SparkSqlParser"; -import { CreateTableLikeContext } from "./SparkSqlParser"; -import { ReplaceTableContext } from "./SparkSqlParser"; -import { AnalyzeContext } from "./SparkSqlParser"; -import { AddTableColumnsContext } from "./SparkSqlParser"; -import { RenameTableColumnContext } from "./SparkSqlParser"; -import { DropTableColumnsContext } from "./SparkSqlParser"; -import { RenameTableContext } from "./SparkSqlParser"; -import { SetTablePropertiesContext } from "./SparkSqlParser"; -import { UnsetTablePropertiesContext } from "./SparkSqlParser"; -import { AlterTableAlterColumnContext } from "./SparkSqlParser"; -import { HiveChangeColumnContext } from "./SparkSqlParser"; -import { HiveReplaceColumnsContext } from "./SparkSqlParser"; -import { SetTableSerDeContext } from "./SparkSqlParser"; -import { AddTablePartitionContext } from "./SparkSqlParser"; -import { RenameTablePartitionContext } from "./SparkSqlParser"; -import { DropTablePartitionsContext } from "./SparkSqlParser"; -import { SetTableLocationContext } from "./SparkSqlParser"; -import { RecoverPartitionsContext } from "./SparkSqlParser"; -import { DropTableContext } from "./SparkSqlParser"; -import { DropViewContext } from "./SparkSqlParser"; -import { CreateViewContext } from "./SparkSqlParser"; -import { CreateTempViewUsingContext } from "./SparkSqlParser"; -import { AlterViewQueryContext } from "./SparkSqlParser"; -import { CreateFunctionContext } from "./SparkSqlParser"; -import { DropFunctionContext } from "./SparkSqlParser"; -import { ExplainContext } from "./SparkSqlParser"; -import { ShowTablesContext } from "./SparkSqlParser"; -import { ShowTableContext } from "./SparkSqlParser"; -import { ShowTblPropertiesContext } from "./SparkSqlParser"; -import { ShowColumnsContext } from "./SparkSqlParser"; -import { ShowViewsContext } from "./SparkSqlParser"; -import { ShowPartitionsContext } from "./SparkSqlParser"; -import { ShowFunctionsContext } from "./SparkSqlParser"; -import { ShowCreateTableContext } from "./SparkSqlParser"; -import { ShowCurrentNamespaceContext } from "./SparkSqlParser"; -import { DescribeFunctionContext } from "./SparkSqlParser"; -import { DescribeNamespaceContext } from "./SparkSqlParser"; -import { DescribeRelationContext } from "./SparkSqlParser"; -import { DescribeQueryContext } from "./SparkSqlParser"; -import { CommentNamespaceContext } from "./SparkSqlParser"; -import { CommentTableContext } from "./SparkSqlParser"; -import { RefreshTableContext } from "./SparkSqlParser"; -import { RefreshFunctionContext } from "./SparkSqlParser"; -import { RefreshResourceContext } from "./SparkSqlParser"; -import { CacheTableContext } from "./SparkSqlParser"; -import { UncacheTableContext } from "./SparkSqlParser"; -import { ClearCacheContext } from "./SparkSqlParser"; -import { LoadDataContext } from "./SparkSqlParser"; -import { TruncateTableContext } from "./SparkSqlParser"; -import { RepairTableContext } from "./SparkSqlParser"; -import { ManageResourceContext } from "./SparkSqlParser"; -import { FailNativeCommandContext } from "./SparkSqlParser"; -import { SetTimeZoneContext } from "./SparkSqlParser"; -import { SetQuotedConfigurationContext } from "./SparkSqlParser"; -import { SetConfigurationContext } from "./SparkSqlParser"; -import { ResetQuotedConfigurationContext } from "./SparkSqlParser"; -import { ResetConfigurationContext } from "./SparkSqlParser"; -import { LogicalNotContext } from "./SparkSqlParser"; -import { ExistsContext } from "./SparkSqlParser"; -import { PredicatedContext } from "./SparkSqlParser"; -import { LogicalBinaryContext } from "./SparkSqlParser"; -import { ProgramContext } from "./SparkSqlParser"; -import { SingleStatementContext } from "./SparkSqlParser"; -import { EmptyStatementContext } from "./SparkSqlParser"; -import { SingleExpressionContext } from "./SparkSqlParser"; -import { SingleTableIdentifierContext } from "./SparkSqlParser"; -import { SingleMultipartIdentifierContext } from "./SparkSqlParser"; -import { SingleDataTypeContext } from "./SparkSqlParser"; -import { SingleTableSchemaContext } from "./SparkSqlParser"; -import { StatementContext } from "./SparkSqlParser"; -import { ConfigKeyContext } from "./SparkSqlParser"; -import { UnsupportedHiveNativeCommandsContext } from "./SparkSqlParser"; -import { CreateTableHeaderContext } from "./SparkSqlParser"; -import { ReplaceTableHeaderContext } from "./SparkSqlParser"; -import { BucketSpecContext } from "./SparkSqlParser"; -import { SkewSpecContext } from "./SparkSqlParser"; -import { LocationSpecContext } from "./SparkSqlParser"; -import { CommentSpecContext } from "./SparkSqlParser"; -import { QueryContext } from "./SparkSqlParser"; -import { InsertIntoContext } from "./SparkSqlParser"; -import { PartitionSpecLocationContext } from "./SparkSqlParser"; -import { PartitionSpecContext } from "./SparkSqlParser"; -import { PartitionValContext } from "./SparkSqlParser"; -import { NamespaceContext } from "./SparkSqlParser"; -import { DescribeFuncNameContext } from "./SparkSqlParser"; -import { DescribeColNameContext } from "./SparkSqlParser"; -import { CtesContext } from "./SparkSqlParser"; -import { NamedQueryContext } from "./SparkSqlParser"; -import { TableProviderContext } from "./SparkSqlParser"; -import { CreateTableClausesContext } from "./SparkSqlParser"; -import { TablePropertyListContext } from "./SparkSqlParser"; -import { TablePropertyContext } from "./SparkSqlParser"; -import { TablePropertyKeyContext } from "./SparkSqlParser"; -import { TablePropertyValueContext } from "./SparkSqlParser"; -import { ConstantListContext } from "./SparkSqlParser"; -import { NestedConstantListContext } from "./SparkSqlParser"; -import { CreateFileFormatContext } from "./SparkSqlParser"; -import { FileFormatContext } from "./SparkSqlParser"; -import { StorageHandlerContext } from "./SparkSqlParser"; -import { ResourceContext } from "./SparkSqlParser"; -import { DmlStatementNoWithContext } from "./SparkSqlParser"; -import { QueryOrganizationContext } from "./SparkSqlParser"; -import { MultiInsertQueryBodyContext } from "./SparkSqlParser"; -import { QueryTermContext } from "./SparkSqlParser"; -import { QueryPrimaryContext } from "./SparkSqlParser"; -import { SortItemContext } from "./SparkSqlParser"; -import { FromStatementContext } from "./SparkSqlParser"; -import { FromStatementBodyContext } from "./SparkSqlParser"; -import { QuerySpecificationContext } from "./SparkSqlParser"; -import { TransformClauseContext } from "./SparkSqlParser"; -import { SelectClauseContext } from "./SparkSqlParser"; -import { SetClauseContext } from "./SparkSqlParser"; -import { MatchedClauseContext } from "./SparkSqlParser"; -import { NotMatchedClauseContext } from "./SparkSqlParser"; -import { MatchedActionContext } from "./SparkSqlParser"; -import { NotMatchedActionContext } from "./SparkSqlParser"; -import { AssignmentListContext } from "./SparkSqlParser"; -import { AssignmentContext } from "./SparkSqlParser"; -import { WhereClauseContext } from "./SparkSqlParser"; -import { HavingClauseContext } from "./SparkSqlParser"; -import { HintContext } from "./SparkSqlParser"; -import { HintStatementContext } from "./SparkSqlParser"; -import { FromClauseContext } from "./SparkSqlParser"; -import { AggregationClauseContext } from "./SparkSqlParser"; -import { GroupingSetContext } from "./SparkSqlParser"; -import { PivotClauseContext } from "./SparkSqlParser"; -import { PivotColumnContext } from "./SparkSqlParser"; -import { PivotValueContext } from "./SparkSqlParser"; -import { LateralViewContext } from "./SparkSqlParser"; -import { SetQuantifierContext } from "./SparkSqlParser"; -import { RelationContext } from "./SparkSqlParser"; -import { JoinRelationContext } from "./SparkSqlParser"; -import { JoinTypeContext } from "./SparkSqlParser"; -import { JoinCriteriaContext } from "./SparkSqlParser"; -import { SampleContext } from "./SparkSqlParser"; -import { SampleMethodContext } from "./SparkSqlParser"; -import { IdentifierListContext } from "./SparkSqlParser"; -import { IdentifierSeqContext } from "./SparkSqlParser"; -import { OrderedIdentifierListContext } from "./SparkSqlParser"; -import { OrderedIdentifierContext } from "./SparkSqlParser"; -import { IdentifierCommentListContext } from "./SparkSqlParser"; -import { IdentifierCommentContext } from "./SparkSqlParser"; -import { RelationPrimaryContext } from "./SparkSqlParser"; -import { InlineTableContext } from "./SparkSqlParser"; -import { FunctionTableContext } from "./SparkSqlParser"; -import { TableAliasContext } from "./SparkSqlParser"; -import { RowFormatContext } from "./SparkSqlParser"; -import { MultipartIdentifierListContext } from "./SparkSqlParser"; -import { MultipartIdentifierContext } from "./SparkSqlParser"; -import { TableIdentifierContext } from "./SparkSqlParser"; -import { NamedExpressionContext } from "./SparkSqlParser"; -import { NamedExpressionSeqContext } from "./SparkSqlParser"; -import { TransformListContext } from "./SparkSqlParser"; -import { TransformContext } from "./SparkSqlParser"; -import { TransformArgumentContext } from "./SparkSqlParser"; -import { ExpressionContext } from "./SparkSqlParser"; -import { BooleanExpressionContext } from "./SparkSqlParser"; -import { PredicateContext } from "./SparkSqlParser"; -import { ValueExpressionContext } from "./SparkSqlParser"; -import { PrimaryExpressionContext } from "./SparkSqlParser"; -import { ConstantContext } from "./SparkSqlParser"; -import { ComparisonOperatorContext } from "./SparkSqlParser"; -import { ArithmeticOperatorContext } from "./SparkSqlParser"; -import { PredicateOperatorContext } from "./SparkSqlParser"; -import { BooleanValueContext } from "./SparkSqlParser"; -import { IntervalContext } from "./SparkSqlParser"; -import { ErrorCapturingMultiUnitsIntervalContext } from "./SparkSqlParser"; -import { MultiUnitsIntervalContext } from "./SparkSqlParser"; -import { ErrorCapturingUnitToUnitIntervalContext } from "./SparkSqlParser"; -import { UnitToUnitIntervalContext } from "./SparkSqlParser"; -import { IntervalValueContext } from "./SparkSqlParser"; -import { ColPositionContext } from "./SparkSqlParser"; -import { DataTypeContext } from "./SparkSqlParser"; -import { QualifiedColTypeWithPositionListContext } from "./SparkSqlParser"; -import { QualifiedColTypeWithPositionContext } from "./SparkSqlParser"; -import { ColTypeListContext } from "./SparkSqlParser"; -import { ColTypeContext } from "./SparkSqlParser"; -import { ComplexColTypeListContext } from "./SparkSqlParser"; -import { ComplexColTypeContext } from "./SparkSqlParser"; -import { WhenClauseContext } from "./SparkSqlParser"; -import { WindowClauseContext } from "./SparkSqlParser"; -import { NamedWindowContext } from "./SparkSqlParser"; -import { WindowSpecContext } from "./SparkSqlParser"; -import { WindowFrameContext } from "./SparkSqlParser"; -import { FrameBoundContext } from "./SparkSqlParser"; -import { QualifiedNameListContext } from "./SparkSqlParser"; -import { FunctionNameContext } from "./SparkSqlParser"; -import { QualifiedNameContext } from "./SparkSqlParser"; -import { ErrorCapturingIdentifierContext } from "./SparkSqlParser"; -import { ErrorCapturingIdentifierExtraContext } from "./SparkSqlParser"; -import { IdentifierContext } from "./SparkSqlParser"; -import { StrictIdentifierContext } from "./SparkSqlParser"; -import { QuotedIdentifierContext } from "./SparkSqlParser"; -import { NumberContext } from "./SparkSqlParser"; -import { AlterColumnActionContext } from "./SparkSqlParser"; -import { AnsiNonReservedContext } from "./SparkSqlParser"; -import { StrictNonReservedContext } from "./SparkSqlParser"; -import { NonReservedContext } from "./SparkSqlParser"; - - -/** - * This interface defines a complete generic visitor for a parse tree produced - * by `SparkSqlParser`. - * - * @param The return type of the visit operation. Use `void` for - * operations with no return type. - */ -export interface SparkSqlVisitor extends ParseTreeVisitor { - /** - * Visit a parse tree produced by the `tableName` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTableName?: (ctx: TableNameContext) => Result; - - /** - * Visit a parse tree produced by the `aliasedQuery` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAliasedQuery?: (ctx: AliasedQueryContext) => Result; - - /** - * Visit a parse tree produced by the `aliasedRelation` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAliasedRelation?: (ctx: AliasedRelationContext) => Result; - - /** - * Visit a parse tree produced by the `inlineTableDefault2` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInlineTableDefault2?: (ctx: InlineTableDefault2Context) => Result; - - /** - * Visit a parse tree produced by the `tableValuedFunction` - * labeled alternative in `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTableValuedFunction?: (ctx: TableValuedFunctionContext) => Result; - - /** - * Visit a parse tree produced by the `exponentLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExponentLiteral?: (ctx: ExponentLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `decimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDecimalLiteral?: (ctx: DecimalLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `legacyDecimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLegacyDecimalLiteral?: (ctx: LegacyDecimalLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `integerLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIntegerLiteral?: (ctx: IntegerLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `bigIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBigIntLiteral?: (ctx: BigIntLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `smallIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSmallIntLiteral?: (ctx: SmallIntLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `tinyIntLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTinyIntLiteral?: (ctx: TinyIntLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `doubleLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDoubleLiteral?: (ctx: DoubleLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `floatLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFloatLiteral?: (ctx: FloatLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `bigDecimalLiteral` - * labeled alternative in `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBigDecimalLiteral?: (ctx: BigDecimalLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `queryTermDefault` - * labeled alternative in `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQueryTermDefault?: (ctx: QueryTermDefaultContext) => Result; - - /** - * Visit a parse tree produced by the `setOperation` - * labeled alternative in `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetOperation?: (ctx: SetOperationContext) => Result; - - /** - * Visit a parse tree produced by the `insertOverwriteTable` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInsertOverwriteTable?: (ctx: InsertOverwriteTableContext) => Result; - - /** - * Visit a parse tree produced by the `insertIntoTable` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInsertIntoTable?: (ctx: InsertIntoTableContext) => Result; - - /** - * Visit a parse tree produced by the `insertOverwriteHiveDir` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInsertOverwriteHiveDir?: (ctx: InsertOverwriteHiveDirContext) => Result; - - /** - * Visit a parse tree produced by the `insertOverwriteDir` - * labeled alternative in `SparkSqlParser.insertInto`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInsertOverwriteDir?: (ctx: InsertOverwriteDirContext) => Result; - - /** - * Visit a parse tree produced by the `valueExpressionDefault` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitValueExpressionDefault?: (ctx: ValueExpressionDefaultContext) => Result; - - /** - * Visit a parse tree produced by the `arithmeticUnary` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitArithmeticUnary?: (ctx: ArithmeticUnaryContext) => Result; - - /** - * Visit a parse tree produced by the `arithmeticBinary` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitArithmeticBinary?: (ctx: ArithmeticBinaryContext) => Result; - - /** - * Visit a parse tree produced by the `comparison` - * labeled alternative in `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitComparison?: (ctx: ComparisonContext) => Result; - - /** - * Visit a parse tree produced by the `queryPrimaryDefault` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQueryPrimaryDefault?: (ctx: QueryPrimaryDefaultContext) => Result; - - /** - * Visit a parse tree produced by the `fromStmt` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFromStmt?: (ctx: FromStmtContext) => Result; - - /** - * Visit a parse tree produced by the `table` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTable?: (ctx: TableContext) => Result; - - /** - * Visit a parse tree produced by the `inlineTableDefault1` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInlineTableDefault1?: (ctx: InlineTableDefault1Context) => Result; - - /** - * Visit a parse tree produced by the `subquery` - * labeled alternative in `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSubquery?: (ctx: SubqueryContext) => Result; - - /** - * Visit a parse tree produced by the `singleInsertQuery` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSingleInsertQuery?: (ctx: SingleInsertQueryContext) => Result; - - /** - * Visit a parse tree produced by the `multiInsertQuery` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMultiInsertQuery?: (ctx: MultiInsertQueryContext) => Result; - - /** - * Visit a parse tree produced by the `deleteFromTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDeleteFromTable?: (ctx: DeleteFromTableContext) => Result; - - /** - * Visit a parse tree produced by the `updateTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUpdateTable?: (ctx: UpdateTableContext) => Result; - - /** - * Visit a parse tree produced by the `mergeIntoTable` - * labeled alternative in `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMergeIntoTable?: (ctx: MergeIntoTableContext) => Result; - - /** - * Visit a parse tree produced by the `currentDatetime` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCurrentDatetime?: (ctx: CurrentDatetimeContext) => Result; - - /** - * Visit a parse tree produced by the `searchedCase` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSearchedCase?: (ctx: SearchedCaseContext) => Result; - - /** - * Visit a parse tree produced by the `simpleCase` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSimpleCase?: (ctx: SimpleCaseContext) => Result; - - /** - * Visit a parse tree produced by the `cast` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCast?: (ctx: CastContext) => Result; - - /** - * Visit a parse tree produced by the `struct` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStruct?: (ctx: StructContext) => Result; - - /** - * Visit a parse tree produced by the `first` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFirst?: (ctx: FirstContext) => Result; - - /** - * Visit a parse tree produced by the `last` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLast?: (ctx: LastContext) => Result; - - /** - * Visit a parse tree produced by the `position` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPosition?: (ctx: PositionContext) => Result; - - /** - * Visit a parse tree produced by the `constantDefault` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitConstantDefault?: (ctx: ConstantDefaultContext) => Result; - - /** - * Visit a parse tree produced by the `star` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStar?: (ctx: StarContext) => Result; - - /** - * Visit a parse tree produced by the `rowConstructor` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRowConstructor?: (ctx: RowConstructorContext) => Result; - - /** - * Visit a parse tree produced by the `subqueryExpression` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSubqueryExpression?: (ctx: SubqueryExpressionContext) => Result; - - /** - * Visit a parse tree produced by the `functionCall` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionCall?: (ctx: FunctionCallContext) => Result; - - /** - * Visit a parse tree produced by the `lambda` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLambda?: (ctx: LambdaContext) => Result; - - /** - * Visit a parse tree produced by the `subscript` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSubscript?: (ctx: SubscriptContext) => Result; - - /** - * Visit a parse tree produced by the `columnReference` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitColumnReference?: (ctx: ColumnReferenceContext) => Result; - - /** - * Visit a parse tree produced by the `dereference` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDereference?: (ctx: DereferenceContext) => Result; - - /** - * Visit a parse tree produced by the `parenthesizedExpression` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParenthesizedExpression?: (ctx: ParenthesizedExpressionContext) => Result; - - /** - * Visit a parse tree produced by the `extract` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExtract?: (ctx: ExtractContext) => Result; - - /** - * Visit a parse tree produced by the `substring` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSubstring?: (ctx: SubstringContext) => Result; - - /** - * Visit a parse tree produced by the `trim` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTrim?: (ctx: TrimContext) => Result; - - /** - * Visit a parse tree produced by the `overlay` - * labeled alternative in `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitOverlay?: (ctx: OverlayContext) => Result; - - /** - * Visit a parse tree produced by the `unquotedIdentifier` - * labeled alternative in `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnquotedIdentifier?: (ctx: UnquotedIdentifierContext) => Result; - - /** - * Visit a parse tree produced by the `quotedIdentifierAlternative` - * labeled alternative in `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQuotedIdentifierAlternative?: (ctx: QuotedIdentifierAlternativeContext) => Result; - - /** - * Visit a parse tree produced by the `tableFileFormat` - * labeled alternative in `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTableFileFormat?: (ctx: TableFileFormatContext) => Result; - - /** - * Visit a parse tree produced by the `genericFileFormat` - * labeled alternative in `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - * @return the visitor result - */ - visitGenericFileFormat?: (ctx: GenericFileFormatContext) => Result; - - /** - * Visit a parse tree produced by the `sampleByPercentile` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSampleByPercentile?: (ctx: SampleByPercentileContext) => Result; - - /** - * Visit a parse tree produced by the `sampleByRows` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSampleByRows?: (ctx: SampleByRowsContext) => Result; - - /** - * Visit a parse tree produced by the `sampleByBucket` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSampleByBucket?: (ctx: SampleByBucketContext) => Result; - - /** - * Visit a parse tree produced by the `sampleByBytes` - * labeled alternative in `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSampleByBytes?: (ctx: SampleByBytesContext) => Result; - - /** - * Visit a parse tree produced by the `nullLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNullLiteral?: (ctx: NullLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `intervalLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIntervalLiteral?: (ctx: IntervalLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `typeConstructor` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTypeConstructor?: (ctx: TypeConstructorContext) => Result; - - /** - * Visit a parse tree produced by the `numericLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNumericLiteral?: (ctx: NumericLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `booleanLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBooleanLiteral?: (ctx: BooleanLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `stringLiteral` - * labeled alternative in `SparkSqlParser.constant`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStringLiteral?: (ctx: StringLiteralContext) => Result; - - /** - * Visit a parse tree produced by the `rowFormatSerde` - * labeled alternative in `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRowFormatSerde?: (ctx: RowFormatSerdeContext) => Result; - - /** - * Visit a parse tree produced by the `rowFormatDelimited` - * labeled alternative in `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRowFormatDelimited?: (ctx: RowFormatDelimitedContext) => Result; - - /** - * Visit a parse tree produced by the `complexDataType` - * labeled alternative in `SparkSqlParser.dataType`. - * @param ctx the parse tree - * @return the visitor result - */ - visitComplexDataType?: (ctx: ComplexDataTypeContext) => Result; - - /** - * Visit a parse tree produced by the `primitiveDataType` - * labeled alternative in `SparkSqlParser.dataType`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPrimitiveDataType?: (ctx: PrimitiveDataTypeContext) => Result; - - /** - * Visit a parse tree produced by the `transformQuerySpecification` - * labeled alternative in `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTransformQuerySpecification?: (ctx: TransformQuerySpecificationContext) => Result; - - /** - * Visit a parse tree produced by the `regularQuerySpecification` - * labeled alternative in `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRegularQuerySpecification?: (ctx: RegularQuerySpecificationContext) => Result; - - /** - * Visit a parse tree produced by the `errorIdent` - * labeled alternative in `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - * @return the visitor result - */ - visitErrorIdent?: (ctx: ErrorIdentContext) => Result; - - /** - * Visit a parse tree produced by the `realIdent` - * labeled alternative in `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRealIdent?: (ctx: RealIdentContext) => Result; - - /** - * Visit a parse tree produced by the `windowRef` - * labeled alternative in `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitWindowRef?: (ctx: WindowRefContext) => Result; - - /** - * Visit a parse tree produced by the `windowDef` - * labeled alternative in `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitWindowDef?: (ctx: WindowDefContext) => Result; - - /** - * Visit a parse tree produced by the `identityTransform` - * labeled alternative in `SparkSqlParser.transform`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentityTransform?: (ctx: IdentityTransformContext) => Result; - - /** - * Visit a parse tree produced by the `applyTransform` - * labeled alternative in `SparkSqlParser.transform`. - * @param ctx the parse tree - * @return the visitor result - */ - visitApplyTransform?: (ctx: ApplyTransformContext) => Result; - - /** - * Visit a parse tree produced by the `statementDefault` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStatementDefault?: (ctx: StatementDefaultContext) => Result; - - /** - * Visit a parse tree produced by the `dmlStatement` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDmlStatement?: (ctx: DmlStatementContext) => Result; - - /** - * Visit a parse tree produced by the `use` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUse?: (ctx: UseContext) => Result; - - /** - * Visit a parse tree produced by the `createNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateNamespace?: (ctx: CreateNamespaceContext) => Result; - - /** - * Visit a parse tree produced by the `setNamespaceProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetNamespaceProperties?: (ctx: SetNamespacePropertiesContext) => Result; - - /** - * Visit a parse tree produced by the `setNamespaceLocation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetNamespaceLocation?: (ctx: SetNamespaceLocationContext) => Result; - - /** - * Visit a parse tree produced by the `dropNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDropNamespace?: (ctx: DropNamespaceContext) => Result; - - /** - * Visit a parse tree produced by the `showNamespaces` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowNamespaces?: (ctx: ShowNamespacesContext) => Result; - - /** - * Visit a parse tree produced by the `createTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateTable?: (ctx: CreateTableContext) => Result; - - /** - * Visit a parse tree produced by the `createHiveTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateHiveTable?: (ctx: CreateHiveTableContext) => Result; - - /** - * Visit a parse tree produced by the `createTableLike` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateTableLike?: (ctx: CreateTableLikeContext) => Result; - - /** - * Visit a parse tree produced by the `replaceTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitReplaceTable?: (ctx: ReplaceTableContext) => Result; - - /** - * Visit a parse tree produced by the `analyze` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAnalyze?: (ctx: AnalyzeContext) => Result; - - /** - * Visit a parse tree produced by the `addTableColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAddTableColumns?: (ctx: AddTableColumnsContext) => Result; - - /** - * Visit a parse tree produced by the `renameTableColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRenameTableColumn?: (ctx: RenameTableColumnContext) => Result; - - /** - * Visit a parse tree produced by the `dropTableColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDropTableColumns?: (ctx: DropTableColumnsContext) => Result; - - /** - * Visit a parse tree produced by the `renameTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRenameTable?: (ctx: RenameTableContext) => Result; - - /** - * Visit a parse tree produced by the `setTableProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetTableProperties?: (ctx: SetTablePropertiesContext) => Result; - - /** - * Visit a parse tree produced by the `unsetTableProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnsetTableProperties?: (ctx: UnsetTablePropertiesContext) => Result; - - /** - * Visit a parse tree produced by the `alterTableAlterColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAlterTableAlterColumn?: (ctx: AlterTableAlterColumnContext) => Result; - - /** - * Visit a parse tree produced by the `hiveChangeColumn` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitHiveChangeColumn?: (ctx: HiveChangeColumnContext) => Result; - - /** - * Visit a parse tree produced by the `hiveReplaceColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitHiveReplaceColumns?: (ctx: HiveReplaceColumnsContext) => Result; - - /** - * Visit a parse tree produced by the `setTableSerDe` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetTableSerDe?: (ctx: SetTableSerDeContext) => Result; - - /** - * Visit a parse tree produced by the `addTablePartition` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAddTablePartition?: (ctx: AddTablePartitionContext) => Result; - - /** - * Visit a parse tree produced by the `renameTablePartition` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRenameTablePartition?: (ctx: RenameTablePartitionContext) => Result; - - /** - * Visit a parse tree produced by the `dropTablePartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDropTablePartitions?: (ctx: DropTablePartitionsContext) => Result; - - /** - * Visit a parse tree produced by the `setTableLocation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetTableLocation?: (ctx: SetTableLocationContext) => Result; - - /** - * Visit a parse tree produced by the `recoverPartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRecoverPartitions?: (ctx: RecoverPartitionsContext) => Result; - - /** - * Visit a parse tree produced by the `dropTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDropTable?: (ctx: DropTableContext) => Result; - - /** - * Visit a parse tree produced by the `dropView` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDropView?: (ctx: DropViewContext) => Result; - - /** - * Visit a parse tree produced by the `createView` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateView?: (ctx: CreateViewContext) => Result; - - /** - * Visit a parse tree produced by the `createTempViewUsing` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateTempViewUsing?: (ctx: CreateTempViewUsingContext) => Result; - - /** - * Visit a parse tree produced by the `alterViewQuery` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAlterViewQuery?: (ctx: AlterViewQueryContext) => Result; - - /** - * Visit a parse tree produced by the `createFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateFunction?: (ctx: CreateFunctionContext) => Result; - - /** - * Visit a parse tree produced by the `dropFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDropFunction?: (ctx: DropFunctionContext) => Result; - - /** - * Visit a parse tree produced by the `explain` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExplain?: (ctx: ExplainContext) => Result; - - /** - * Visit a parse tree produced by the `showTables` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowTables?: (ctx: ShowTablesContext) => Result; - - /** - * Visit a parse tree produced by the `showTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowTable?: (ctx: ShowTableContext) => Result; - - /** - * Visit a parse tree produced by the `showTblProperties` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowTblProperties?: (ctx: ShowTblPropertiesContext) => Result; - - /** - * Visit a parse tree produced by the `showColumns` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowColumns?: (ctx: ShowColumnsContext) => Result; - - /** - * Visit a parse tree produced by the `showViews` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowViews?: (ctx: ShowViewsContext) => Result; - - /** - * Visit a parse tree produced by the `showPartitions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowPartitions?: (ctx: ShowPartitionsContext) => Result; - - /** - * Visit a parse tree produced by the `showFunctions` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowFunctions?: (ctx: ShowFunctionsContext) => Result; - - /** - * Visit a parse tree produced by the `showCreateTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowCreateTable?: (ctx: ShowCreateTableContext) => Result; - - /** - * Visit a parse tree produced by the `showCurrentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitShowCurrentNamespace?: (ctx: ShowCurrentNamespaceContext) => Result; - - /** - * Visit a parse tree produced by the `describeFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDescribeFunction?: (ctx: DescribeFunctionContext) => Result; - - /** - * Visit a parse tree produced by the `describeNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDescribeNamespace?: (ctx: DescribeNamespaceContext) => Result; - - /** - * Visit a parse tree produced by the `describeRelation` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDescribeRelation?: (ctx: DescribeRelationContext) => Result; - - /** - * Visit a parse tree produced by the `describeQuery` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDescribeQuery?: (ctx: DescribeQueryContext) => Result; - - /** - * Visit a parse tree produced by the `commentNamespace` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCommentNamespace?: (ctx: CommentNamespaceContext) => Result; - - /** - * Visit a parse tree produced by the `commentTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCommentTable?: (ctx: CommentTableContext) => Result; - - /** - * Visit a parse tree produced by the `refreshTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRefreshTable?: (ctx: RefreshTableContext) => Result; - - /** - * Visit a parse tree produced by the `refreshFunction` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRefreshFunction?: (ctx: RefreshFunctionContext) => Result; - - /** - * Visit a parse tree produced by the `refreshResource` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRefreshResource?: (ctx: RefreshResourceContext) => Result; - - /** - * Visit a parse tree produced by the `cacheTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCacheTable?: (ctx: CacheTableContext) => Result; - - /** - * Visit a parse tree produced by the `uncacheTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUncacheTable?: (ctx: UncacheTableContext) => Result; - - /** - * Visit a parse tree produced by the `clearCache` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitClearCache?: (ctx: ClearCacheContext) => Result; - - /** - * Visit a parse tree produced by the `loadData` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLoadData?: (ctx: LoadDataContext) => Result; - - /** - * Visit a parse tree produced by the `truncateTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTruncateTable?: (ctx: TruncateTableContext) => Result; - - /** - * Visit a parse tree produced by the `repairTable` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRepairTable?: (ctx: RepairTableContext) => Result; - - /** - * Visit a parse tree produced by the `manageResource` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitManageResource?: (ctx: ManageResourceContext) => Result; - - /** - * Visit a parse tree produced by the `failNativeCommand` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFailNativeCommand?: (ctx: FailNativeCommandContext) => Result; - - /** - * Visit a parse tree produced by the `setTimeZone` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetTimeZone?: (ctx: SetTimeZoneContext) => Result; - - /** - * Visit a parse tree produced by the `setQuotedConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetQuotedConfiguration?: (ctx: SetQuotedConfigurationContext) => Result; - - /** - * Visit a parse tree produced by the `setConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetConfiguration?: (ctx: SetConfigurationContext) => Result; - - /** - * Visit a parse tree produced by the `resetQuotedConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitResetQuotedConfiguration?: (ctx: ResetQuotedConfigurationContext) => Result; - - /** - * Visit a parse tree produced by the `resetConfiguration` - * labeled alternative in `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitResetConfiguration?: (ctx: ResetConfigurationContext) => Result; - - /** - * Visit a parse tree produced by the `logicalNot` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLogicalNot?: (ctx: LogicalNotContext) => Result; - - /** - * Visit a parse tree produced by the `exists` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExists?: (ctx: ExistsContext) => Result; - - /** - * Visit a parse tree produced by the `predicated` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPredicated?: (ctx: PredicatedContext) => Result; - - /** - * Visit a parse tree produced by the `logicalBinary` - * labeled alternative in `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLogicalBinary?: (ctx: LogicalBinaryContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.program`. - * @param ctx the parse tree - * @return the visitor result - */ - visitProgram?: (ctx: ProgramContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.singleStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSingleStatement?: (ctx: SingleStatementContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.emptyStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitEmptyStatement?: (ctx: EmptyStatementContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.singleExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSingleExpression?: (ctx: SingleExpressionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.singleTableIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSingleTableIdentifier?: (ctx: SingleTableIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.singleMultipartIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSingleMultipartIdentifier?: (ctx: SingleMultipartIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.singleDataType`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSingleDataType?: (ctx: SingleDataTypeContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.singleTableSchema`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSingleTableSchema?: (ctx: SingleTableSchemaContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStatement?: (ctx: StatementContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.configKey`. - * @param ctx the parse tree - * @return the visitor result - */ - visitConfigKey?: (ctx: ConfigKeyContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.unsupportedHiveNativeCommands`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnsupportedHiveNativeCommands?: (ctx: UnsupportedHiveNativeCommandsContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.createTableHeader`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateTableHeader?: (ctx: CreateTableHeaderContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.replaceTableHeader`. - * @param ctx the parse tree - * @return the visitor result - */ - visitReplaceTableHeader?: (ctx: ReplaceTableHeaderContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.bucketSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBucketSpec?: (ctx: BucketSpecContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.skewSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSkewSpec?: (ctx: SkewSpecContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.locationSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLocationSpec?: (ctx: LocationSpecContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.commentSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCommentSpec?: (ctx: CommentSpecContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.query`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQuery?: (ctx: QueryContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.insertInto`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInsertInto?: (ctx: InsertIntoContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.partitionSpecLocation`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPartitionSpecLocation?: (ctx: PartitionSpecLocationContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.partitionSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPartitionSpec?: (ctx: PartitionSpecContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.partitionVal`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPartitionVal?: (ctx: PartitionValContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.namespace`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNamespace?: (ctx: NamespaceContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.describeFuncName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDescribeFuncName?: (ctx: DescribeFuncNameContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.describeColName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDescribeColName?: (ctx: DescribeColNameContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.ctes`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCtes?: (ctx: CtesContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.namedQuery`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNamedQuery?: (ctx: NamedQueryContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.tableProvider`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTableProvider?: (ctx: TableProviderContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.createTableClauses`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateTableClauses?: (ctx: CreateTableClausesContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.tablePropertyList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTablePropertyList?: (ctx: TablePropertyListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.tableProperty`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTableProperty?: (ctx: TablePropertyContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.tablePropertyKey`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTablePropertyKey?: (ctx: TablePropertyKeyContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.tablePropertyValue`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTablePropertyValue?: (ctx: TablePropertyValueContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.constantList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitConstantList?: (ctx: ConstantListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.nestedConstantList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNestedConstantList?: (ctx: NestedConstantListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.createFileFormat`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCreateFileFormat?: (ctx: CreateFileFormatContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.fileFormat`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFileFormat?: (ctx: FileFormatContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.storageHandler`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStorageHandler?: (ctx: StorageHandlerContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.resource`. - * @param ctx the parse tree - * @return the visitor result - */ - visitResource?: (ctx: ResourceContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.dmlStatementNoWith`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDmlStatementNoWith?: (ctx: DmlStatementNoWithContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.queryOrganization`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQueryOrganization?: (ctx: QueryOrganizationContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.multiInsertQueryBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMultiInsertQueryBody?: (ctx: MultiInsertQueryBodyContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.queryTerm`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQueryTerm?: (ctx: QueryTermContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.queryPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQueryPrimary?: (ctx: QueryPrimaryContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.sortItem`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSortItem?: (ctx: SortItemContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.fromStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFromStatement?: (ctx: FromStatementContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.fromStatementBody`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFromStatementBody?: (ctx: FromStatementBodyContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.querySpecification`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQuerySpecification?: (ctx: QuerySpecificationContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.transformClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTransformClause?: (ctx: TransformClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.selectClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSelectClause?: (ctx: SelectClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.setClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetClause?: (ctx: SetClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.matchedClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMatchedClause?: (ctx: MatchedClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.notMatchedClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNotMatchedClause?: (ctx: NotMatchedClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.matchedAction`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMatchedAction?: (ctx: MatchedActionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.notMatchedAction`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNotMatchedAction?: (ctx: NotMatchedActionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.assignmentList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAssignmentList?: (ctx: AssignmentListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.assignment`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAssignment?: (ctx: AssignmentContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.whereClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitWhereClause?: (ctx: WhereClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.havingClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitHavingClause?: (ctx: HavingClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.hint`. - * @param ctx the parse tree - * @return the visitor result - */ - visitHint?: (ctx: HintContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.hintStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitHintStatement?: (ctx: HintStatementContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.fromClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFromClause?: (ctx: FromClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.aggregationClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAggregationClause?: (ctx: AggregationClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.groupingSet`. - * @param ctx the parse tree - * @return the visitor result - */ - visitGroupingSet?: (ctx: GroupingSetContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.pivotClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPivotClause?: (ctx: PivotClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.pivotColumn`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPivotColumn?: (ctx: PivotColumnContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.pivotValue`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPivotValue?: (ctx: PivotValueContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.lateralView`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLateralView?: (ctx: LateralViewContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.setQuantifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSetQuantifier?: (ctx: SetQuantifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.relation`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRelation?: (ctx: RelationContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.joinRelation`. - * @param ctx the parse tree - * @return the visitor result - */ - visitJoinRelation?: (ctx: JoinRelationContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.joinType`. - * @param ctx the parse tree - * @return the visitor result - */ - visitJoinType?: (ctx: JoinTypeContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.joinCriteria`. - * @param ctx the parse tree - * @return the visitor result - */ - visitJoinCriteria?: (ctx: JoinCriteriaContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.sample`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSample?: (ctx: SampleContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.sampleMethod`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSampleMethod?: (ctx: SampleMethodContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.identifierList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentifierList?: (ctx: IdentifierListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.identifierSeq`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentifierSeq?: (ctx: IdentifierSeqContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.orderedIdentifierList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitOrderedIdentifierList?: (ctx: OrderedIdentifierListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.orderedIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitOrderedIdentifier?: (ctx: OrderedIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.identifierCommentList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentifierCommentList?: (ctx: IdentifierCommentListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.identifierComment`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentifierComment?: (ctx: IdentifierCommentContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.relationPrimary`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRelationPrimary?: (ctx: RelationPrimaryContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.inlineTable`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInlineTable?: (ctx: InlineTableContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.functionTable`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionTable?: (ctx: FunctionTableContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.tableAlias`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTableAlias?: (ctx: TableAliasContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.rowFormat`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRowFormat?: (ctx: RowFormatContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.multipartIdentifierList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMultipartIdentifierList?: (ctx: MultipartIdentifierListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.multipartIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMultipartIdentifier?: (ctx: MultipartIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.tableIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTableIdentifier?: (ctx: TableIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.namedExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNamedExpression?: (ctx: NamedExpressionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.namedExpressionSeq`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNamedExpressionSeq?: (ctx: NamedExpressionSeqContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.transformList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTransformList?: (ctx: TransformListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.transform`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTransform?: (ctx: TransformContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.transformArgument`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTransformArgument?: (ctx: TransformArgumentContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExpression?: (ctx: ExpressionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.booleanExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBooleanExpression?: (ctx: BooleanExpressionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.predicate`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPredicate?: (ctx: PredicateContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.valueExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitValueExpression?: (ctx: ValueExpressionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.primaryExpression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPrimaryExpression?: (ctx: PrimaryExpressionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.constant`. - * @param ctx the parse tree - * @return the visitor result - */ - visitConstant?: (ctx: ConstantContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.comparisonOperator`. - * @param ctx the parse tree - * @return the visitor result - */ - visitComparisonOperator?: (ctx: ComparisonOperatorContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.arithmeticOperator`. - * @param ctx the parse tree - * @return the visitor result - */ - visitArithmeticOperator?: (ctx: ArithmeticOperatorContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.predicateOperator`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPredicateOperator?: (ctx: PredicateOperatorContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.booleanValue`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBooleanValue?: (ctx: BooleanValueContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.interval`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInterval?: (ctx: IntervalContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.errorCapturingMultiUnitsInterval`. - * @param ctx the parse tree - * @return the visitor result - */ - visitErrorCapturingMultiUnitsInterval?: (ctx: ErrorCapturingMultiUnitsIntervalContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.multiUnitsInterval`. - * @param ctx the parse tree - * @return the visitor result - */ - visitMultiUnitsInterval?: (ctx: MultiUnitsIntervalContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.errorCapturingUnitToUnitInterval`. - * @param ctx the parse tree - * @return the visitor result - */ - visitErrorCapturingUnitToUnitInterval?: (ctx: ErrorCapturingUnitToUnitIntervalContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.unitToUnitInterval`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnitToUnitInterval?: (ctx: UnitToUnitIntervalContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.intervalValue`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIntervalValue?: (ctx: IntervalValueContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.colPosition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitColPosition?: (ctx: ColPositionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.dataType`. - * @param ctx the parse tree - * @return the visitor result - */ - visitDataType?: (ctx: DataTypeContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPositionList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQualifiedColTypeWithPositionList?: (ctx: QualifiedColTypeWithPositionListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.qualifiedColTypeWithPosition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQualifiedColTypeWithPosition?: (ctx: QualifiedColTypeWithPositionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.colTypeList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitColTypeList?: (ctx: ColTypeListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.colType`. - * @param ctx the parse tree - * @return the visitor result - */ - visitColType?: (ctx: ColTypeContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.complexColTypeList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitComplexColTypeList?: (ctx: ComplexColTypeListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.complexColType`. - * @param ctx the parse tree - * @return the visitor result - */ - visitComplexColType?: (ctx: ComplexColTypeContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.whenClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitWhenClause?: (ctx: WhenClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.windowClause`. - * @param ctx the parse tree - * @return the visitor result - */ - visitWindowClause?: (ctx: WindowClauseContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.namedWindow`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNamedWindow?: (ctx: NamedWindowContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.windowSpec`. - * @param ctx the parse tree - * @return the visitor result - */ - visitWindowSpec?: (ctx: WindowSpecContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.windowFrame`. - * @param ctx the parse tree - * @return the visitor result - */ - visitWindowFrame?: (ctx: WindowFrameContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.frameBound`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFrameBound?: (ctx: FrameBoundContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.qualifiedNameList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQualifiedNameList?: (ctx: QualifiedNameListContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.functionName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionName?: (ctx: FunctionNameContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.qualifiedName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQualifiedName?: (ctx: QualifiedNameContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.errorCapturingIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitErrorCapturingIdentifier?: (ctx: ErrorCapturingIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.errorCapturingIdentifierExtra`. - * @param ctx the parse tree - * @return the visitor result - */ - visitErrorCapturingIdentifierExtra?: (ctx: ErrorCapturingIdentifierExtraContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.identifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentifier?: (ctx: IdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.strictIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStrictIdentifier?: (ctx: StrictIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.quotedIdentifier`. - * @param ctx the parse tree - * @return the visitor result - */ - visitQuotedIdentifier?: (ctx: QuotedIdentifierContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.number`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNumber?: (ctx: NumberContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.alterColumnAction`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAlterColumnAction?: (ctx: AlterColumnActionContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.ansiNonReserved`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAnsiNonReserved?: (ctx: AnsiNonReservedContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.strictNonReserved`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStrictNonReserved?: (ctx: StrictNonReservedContext) => Result; - - /** - * Visit a parse tree produced by `SparkSqlParser.nonReserved`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNonReserved?: (ctx: NonReservedContext) => Result; -} - diff --git a/test/parser/spark/listener.test.ts b/test/parser/spark/listener.test.ts index 6b820497..3cc04195 100644 --- a/test/parser/spark/listener.test.ts +++ b/test/parser/spark/listener.test.ts @@ -1,4 +1,4 @@ -import { SparkSqlListener } from '../../../src/lib/spark/SparkSqlListener'; +import { SparkSqlParserListener } from '../../../src/lib/spark/SparkSqlParserListener'; import SparkSQL from '../../../src/parser/spark'; describe('Spark SQL Listener Tests', () => { @@ -8,10 +8,10 @@ describe('Spark SQL Listener Tests', () => { const parserTree = parser.parse(sql); - test('Listener enterTableName', () => { + test('Listener exitRelationPrimary', () => { let result = ''; - class MyListener implements SparkSqlListener { - enterTableName = (ctx): void => { + class MyListener implements SparkSqlParserListener { + exitRelationPrimary = (ctx): void => { result = ctx.text.toLowerCase(); } } diff --git a/test/parser/spark/syntax.test.ts b/test/parser/spark/syntax.test.ts deleted file mode 100644 index 64c7c8f7..00000000 --- a/test/parser/spark/syntax.test.ts +++ /dev/null @@ -1,324 +0,0 @@ -import SparkSQL from '../../../src/parser/spark'; - -const error = console.log.bind(console, '***** error\n'); - -const validateTest = (sqls) => { - const parser = new SparkSQL(); - sqls.forEach((sql, i) => { - const result = parser.validate(sql); - if (result.length !== 0) { - error(i, sql); - error(result); - } - expect(result.find(i => i.message)).toBeUndefined(); - }); -}; - -describe('Spark SQL Syntax Tests', () => { - test('ALTER Statement', () => { - const sqls = [ - `ALTER DATABASE inventory SET DBPROPERTIES ('Edited-by' = 'John', 'Edit-date' = '01/01/2001');`, - `ALTER TABLE Student RENAME TO StudentInfo;`, - `ALTER VIEW tempdb1.v1 RENAME TO tempdb1.v2;`, - ]; - validateTest(sqls); - }); - - test('CREATE Statement', () => { - const sqls = [ - `CREATE DATABASE IF NOT EXISTS customer_db;`, - `CREATE FUNCTION simple_udf AS 'SimpleUdf' - USING JAR '/tmp/SimpleUdf.jar';`, - `CREATE OR REPLACE FUNCTION simple_udf AS 'SimpleUdfR' - USING JAR '/tmp/SimpleUdfR.jar';`, - `CREATE TABLE student (id INT, name STRING, age INT) USING CSV;`, - `CREATE TABLE student (id INT, name STRING, age INT) - USING CSV - PARTITIONED BY (age) - CLUSTERED BY (Id) INTO 4 buckets;`, - `CREATE OR REPLACE VIEW experienced_employee - (ID COMMENT 'Unique identification number', Name) - COMMENT 'View for experienced employees' - AS SELECT id, name FROM all_employee - WHERE working_years > 5;`, - `CREATE GLOBAL TEMPORARY VIEW IF NOT EXISTS subscribed_movies - AS SELECT mo.member_id, mb.full_name, mo.movie_title - FROM movies AS mo INNER JOIN members AS mb - ON mo.member_id = mb.id;`, - ]; - validateTest(sqls); - }); - - test('DROP Statement', () => { - const sqls = [ - `DROP DATABASE inventory_db CASCADE;`, - `DROP DATABASE IF EXISTS inventory_db CASCADE;`, - `DROP FUNCTION test_avg;`, - `DROP TEMPORARY FUNCTION IF EXISTS test_avg;`, - `DROP TABLE userdb.employeetable;`, - `DROP TABLE IF EXISTS employeetable;`, - `DROP VIEW userdb.employeeView;`, - `DROP VIEW IF EXISTS employeeView;`, - ]; - validateTest(sqls); - }); - - test('TRUNCATE Statement', () => { - const sqls = [ - `TRUNCATE TABLE Student partition(age=10);`, - ]; - validateTest(sqls); - }); - - test('REPAIR TABLE Statement', () => { - const sqls = [ - `MSCK REPAIR TABLE t1;`, - ]; - validateTest(sqls); - }); - - test('USE Database Statement', () => { - const sqls = [ - `USE userdb;`, - ]; - validateTest(sqls); - }); - - test('INSERT Statement', () => { - const sqls = [ - `INSERT INTO students VALUES - ('Amy Smith', '123 Park Ave, San Jose', 111111);`, - `INSERT INTO students TABLE visiting_students;`, - `INSERT OVERWRITE students VALUES - ('Ashua Hill', '456 Erica Ct, Cupertino', 111111), - ('Brian Reed', '723 Kern Ave, Palo Alto', 222222);`, - `INSERT OVERWRITE students TABLE visiting_students;`, - `INSERT OVERWRITE students - FROM applicants SELECT name, address, id applicants WHERE qualified = true;`, - `INSERT OVERWRITE DIRECTORY '/tmp/destination' - USING parquet - OPTIONS (col1 1, col2 2, col3 'test') - SELECT * FROM test_table;`, - `INSERT OVERWRITE DIRECTORY - USING parquet - OPTIONS ('path' '/tmp/destination', col1 1, col2 2, col3 'test') - SELECT * FROM test_table;`, - `INSERT OVERWRITE LOCAL DIRECTORY '/tmp/destination' - STORED AS orc - SELECT * FROM test_table;`, - `INSERT OVERWRITE LOCAL DIRECTORY '/tmp/destination' - ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' - SELECT * FROM test_table;`, - ]; - validateTest(sqls); - }); - - test('LOAD Statement', () => { - const sqls = [ - `LOAD DATA LOCAL INPATH '/user/hive/warehouse/students' OVERWRITE INTO TABLE test_load;`, - `LOAD DATA LOCAL INPATH '/user/hive/warehouse/test_partition/c2=2/c3=3' - OVERWRITE INTO TABLE test_load_partition PARTITION (c2=2, c3=3);`, - ]; - validateTest(sqls); - }); - - test('SELECT WHERE, GROUP BY, HAVING, ORDER BY Statement', () => { - const sqls = [ - `SELECT * FROM person WHERE id > 200 ORDER BY id;`, - `SELECT * FROM person AS parent - WHERE EXISTS ( - SELECT 1 FROM person AS child - WHERE parent.id = child.id AND child.age IS NULL - );`, - `SELECT id, sum(quantity) FROM dealer GROUP BY id ORDER BY id;`, - `SELECT city, car_model, sum(quantity) AS sum FROM dealer - GROUP BY city, car_model WITH CUBE - ORDER BY city, car_model;`, - `SELECT city, sum(quantity) AS sum FROM dealer GROUP BY city HAVING city = 'Fremont';`, - `SELECT sum(quantity) AS sum FROM dealer HAVING sum(quantity) > 10;`, - `SELECT name, age FROM person ORDER BY age;`, - `SELECT * FROM person ORDER BY name ASC, age DESC;`, - ]; - validateTest(sqls); - }); - - test('SELECT SORT BY, CLUSTER BY, DISTRIBUTE BY, LIMIT Statement', () => { - const sqls = [ - `SELECT /*+ REPARTITION(zip_code) */ age, name, zip_code FROM person SORT BY age DESC NULLS FIRST;`, - `SELECT /*+ REPARTITION(zip_code) */ name, age, zip_code FROM person - SORT BY name ASC, age DESC;`, - `SELECT age, name FROM person CLUSTER BY age;`, - `SELECT age, name FROM person DISTRIBUTE BY age;`, - `SELECT name, age FROM person ORDER BY name LIMIT length('SPARK');`, - `SELECT name, age FROM person ORDER BY name LIMIT length('SPARK');`, - ]; - validateTest(sqls); - }); - - test('SELECT Common Table Expression Statement', () => { - const sqls = [ - `SELECT * FROM t WHERE x = 1 AND y = 2;`, - `SELECT max(c) FROM ( - WITH t(c) AS (SELECT 1) - SELECT * FROM t -);`, - `CREATE VIEW v AS - WITH t(a, b, c, d) AS (SELECT 1, 2, 3, 4) - SELECT * FROM t;`, - `SET spark.sql.legacy.ctePrecedencePolicy = CORRECTED; -WITH - t AS (SELECT 1), - t2 AS ( - WITH t AS (SELECT 2) - SELECT * FROM t - ) -SELECT * FROM t2;`, - ]; - validateTest(sqls); - }); - - test('SELECT HINTS, INLINE TABLE, JOIN, LIKE Predicate, Set Operators, Sampling Queries Statement', () => { - const sqls = [ - `SELECT /*+ REPARTITION_BY_RANGE(3, c) */ * FROM t;`, - `SELECT /*+ BROADCAST(t1), MERGE(t1, t2) */ * FROM t1 INNER JOIN t2 ON t1.key = t2.key;`, - `SELECT * FROM VALUES ("one", array(0, 1)), ("two", array(2, 3)) AS data(a, b);`, - `SELECT * FROM employee ANTI JOIN department ON employee.deptno = department.deptno;`, - `SELECT * FROM person WHERE name LIKE '%\\_%';`, - `SELECT * FROM person WHERE name LIKE '%$_%' ESCAPE '$';`, - `SELECT c FROM number1 EXCEPT ALL (SELECT c FROM number2);`, - `(SELECT c FROM number1) INTERSECT ALL (SELECT c FROM number2);`, - `SELECT c FROM number1 UNION ALL (SELECT c FROM number2);`, - `SELECT * FROM test TABLESAMPLE (5 ROWS);`, - `SELECT * FROM test TABLESAMPLE (BUCKET 4 OUT OF 10);`, - ]; - validateTest(sqls); - }); - - test('SELECT Table-valued Functions, Window Functions, CASE, LATERAL VIEW, PIVOT Statement', () => { - const sqls = [ - `SELECT * FROM range(6 + cos(3));`, - `SELECT inline(array(struct(1, 'a'), struct(2, 'b')));`, - `SELECT * FROM test LATERAL VIEW explode (ARRAY(3,4)) AS c2;`, - `SELECT name, dept, RANK() OVER (PARTITION BY dept ORDER BY salary) AS rank FROM employees;`, - `SELECT name, dept, salary, MIN(salary) OVER (PARTITION BY dept ORDER BY salary) AS min - FROM employees;`, - `SELECT id, CASE id WHEN 100 then 'bigger' WHEN id > 300 THEN '300' ELSE 'small' END FROM person;`, - `SELECT * FROM person - WHERE - CASE 1 = 1 - WHEN 100 THEN 'big' - WHEN 200 THEN 'bigger' - WHEN 300 THEN 'biggest' - ELSE 'small' - END = 'small';`, - `SELECT * FROM person - LATERAL VIEW EXPLODE(ARRAY(30, 60)) tabelName AS c_age - LATERAL VIEW EXPLODE(ARRAY(40, 80)) AS d_age;`, - `SELECT * FROM person - LATERAL VIEW OUTER EXPLODE(ARRAY()) tabelName AS c_age;`, - `SELECT * FROM person - PIVOT ( - SUM(age) AS a, AVG(class) AS c - FOR name IN ('John' AS john, 'Mike' AS mike) - );`, - ]; - validateTest(sqls); - }); - - test('EXPLAIN Statement', () => { - const sqls = [ - `EXPLAIN select k, sum(v) from values (1, 2), (1, 3) t(k, v) group by k;`, - `EXPLAIN EXTENDED select k, sum(v) from values (1, 2), (1, 3) t(k, v) group by k;`, - ]; - validateTest(sqls); - }); - - test('ANALYZE Statement', () => { - const sqls = [ - `ANALYZE TABLE students COMPUTE STATISTICS NOSCAN;`, - `ANALYZE TABLE students COMPUTE STATISTICS FOR COLUMNS name;`, - ]; - validateTest(sqls); - }); - - test('CACHE TABLE, UNCACHE TABLE, CLEAR CACHE, REFRESH TABLE, REFRESH Statement', () => { - const sqls = [ - `CACHE TABLE testCache OPTIONS ('storageLevel' 'DISK_ONLY') SELECT * FROM testData;`, - `UNCACHE TABLE t1;`, - `CLEAR CACHE;`, - `REFRESH TABLE tbl1;`, - `REFRESH "hdfs://path/to/table";`, - ]; - validateTest(sqls); - }); - - test('DESCRIBE DATABASE, TABLE, FUNCTION, QUERY Statement', () => { - const sqls = [ - `DESCRIBE DATABASE employees;`, - `DESCRIBE DATABASE EXTENDED employees;`, - `DESCRIBE TABLE customer;`, - `DESCRIBE TABLE EXTENDED customer PARTITION (state = 'AR');`, - `DESC FUNCTION abs;`, - `DESC FUNCTION max;`, - `DESC FUNCTION EXTENDED explode;`, - `DESCRIBE QUERY SELECT age, sum(age) FROM person GROUP BY age;`, - `DESCRIBE QUERY WITH all_names_cte - AS (SELECT name from person) SELECT * FROM all_names_cte;`, - `DESC QUERY VALUES(100, 'John', 10000.20D) AS employee(id, name, salary);`, - ]; - validateTest(sqls); - }); - - test('SHOW COLUMNS, CREATE TABLE, DATABASES, FUNCTIONS, PARTITIONS, TABLE EXTENDED, TABLES, TBLPROPERTIES, VIEWS Statement', () => { - const sqls = [ - `SHOW COLUMNS IN customer;`, - `SHOW CREATE TABLE test;`, - `SHOW DATABASES LIKE 'pay*';`, - `SHOW SCHEMAS;`, - `SHOW FUNCTIONS trim;`, - `SHOW SYSTEM FUNCTIONS salesdb.max;`, - `SHOW FUNCTIONS LIKE 't[a-z][a-z][a-z]';`, - `SHOW PARTITIONS customer;`, - `SHOW PARTITIONS customer PARTITION (city = 'San Jose');`, - `SHOW TABLE EXTENDED LIKE 'employee';`, - `SHOW TABLES;`, - `SHOW TABLES FROM userdb;`, - `SHOW TABLES LIKE 'sam*|suj';`, - `SHOW TBLPROPERTIES customer ('created.date');`, - `SHOW VIEWS;`, - `SHOW VIEWS LIKE 'sam|suj|temp*';`, - ]; - validateTest(sqls); - }); - - test('SET, RESET Statement', () => { - const sqls = [ - `SET spark.sql.variable.substitute=false;`, - `RESET`, - ]; - validateTest(sqls); - }); - - test('ADD, LIST Statement', () => { - const sqls = [ - `ADD FILE /tmp/test;`, - `ADD FILE "/path/to/some/directory";`, - `ADD JAR /tmp/test.jar;`, - `ADD JAR '/some/other.jar';`, - `LIST FILE;`, - `LIST FILE /tmp/test /some/random/file /another/random/file;`, - `LIST JAR;`, - `LIST JAR /tmp/test.jar /some/random.jar /another/random.jar;`, - ]; - validateTest(sqls); - }); - - test('Customizing variables with the ${} symbol', () => { - const sqls = [ - `select * from \${tb};`, - `select a as \${b_} from tb_test;`, - 'select a as ${bb} from ${tt}', - ]; - validateTest(sqls); - }); -}); diff --git a/test/parser/spark/visitor.test.ts b/test/parser/spark/visitor.test.ts index f98be615..3d391abf 100644 --- a/test/parser/spark/visitor.test.ts +++ b/test/parser/spark/visitor.test.ts @@ -1,5 +1,5 @@ import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor'; -import { SparkSqlVisitor } from '../../../src/lib/spark/SparkSqlVisitor'; +import { SparkSqlParserVisitor } from '../../../src/lib/spark/SparkSqlParserVisitor'; import SparkSQL from '../../../src/parser/spark'; describe('Spark SQL Visitor Tests', () => { @@ -11,13 +11,13 @@ describe('Spark SQL Visitor Tests', () => { console.log('Parse error:', error); }); - test('Visitor visitTableName', () => { + test('Visitor visitRelationPrimary', () => { let result = ''; - class MyVisitor extends AbstractParseTreeVisitor implements SparkSqlVisitor { + class MyVisitor extends AbstractParseTreeVisitor implements SparkSqlParserVisitor { protected defaultResult() { return result; } - visitTableName = (ctx): void => { + visitRelationPrimary = (ctx): void => { result = ctx.text.toLowerCase(); } }